aejandro.alvarez5 3 年前
父节点
当前提交
c4ed08863a
共有 100 个文件被更改,包括 0 次插入62145 次删除
  1. 二进制
      .DS_Store
  2. 二进制
      platforms/.DS_Store
  3. 0
    21
      platforms/android/.gitignore
  4. 0
    22
      platforms/android/CordovaLib/AndroidManifest.xml
  5. 0
    150
      platforms/android/CordovaLib/build.gradle
  6. 0
    205
      platforms/android/CordovaLib/cordova.gradle
  7. 0
    11
      platforms/android/CordovaLib/project.properties
  8. 0
    22
      platforms/android/CordovaLib/repositories.gradle
  9. 0
    69
      platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java
  10. 0
    73
      platforms/android/CordovaLib/src/org/apache/cordova/BuildHelper.java
  11. 0
    142
      platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java
  12. 0
    65
      platforms/android/CordovaLib/src/org/apache/cordova/CallbackMap.java
  13. 0
    71
      platforms/android/CordovaLib/src/org/apache/cordova/Config.java
  14. 0
    145
      platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java
  15. 0
    528
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java
  16. 0
    113
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java
  17. 0
    186
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java
  18. 0
    105
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java
  19. 0
    152
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java
  20. 0
    51
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java
  21. 0
    97
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java
  22. 0
    249
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java
  23. 0
    422
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java
  24. 0
    101
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaPreferences.java
  25. 0
    479
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaResourceApi.java
  26. 0
    142
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java
  27. 0
    85
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewEngine.java
  28. 0
    668
      platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewImpl.java
  29. 0
    410
      platforms/android/CordovaLib/src/org/apache/cordova/CoreAndroid.java
  30. 0
    31
      platforms/android/CordovaLib/src/org/apache/cordova/ExposedJsApi.java
  31. 0
    66
      platforms/android/CordovaLib/src/org/apache/cordova/ICordovaClientCertRequest.java
  32. 0
    33
      platforms/android/CordovaLib/src/org/apache/cordova/ICordovaCookieManager.java
  33. 0
    38
      platforms/android/CordovaLib/src/org/apache/cordova/ICordovaHttpAuthHandler.java
  34. 0
    244
      platforms/android/CordovaLib/src/org/apache/cordova/LOG.java
  35. 0
    552
      platforms/android/CordovaLib/src/org/apache/cordova/NativeToJsMessageQueue.java
  36. 0
    87
      platforms/android/CordovaLib/src/org/apache/cordova/PermissionHelper.java
  37. 0
    70
      platforms/android/CordovaLib/src/org/apache/cordova/PluginEntry.java
  38. 0
    580
      platforms/android/CordovaLib/src/org/apache/cordova/PluginManager.java
  39. 0
    198
      platforms/android/CordovaLib/src/org/apache/cordova/PluginResult.java
  40. 0
    76
      platforms/android/CordovaLib/src/org/apache/cordova/ResumeCallback.java
  41. 0
    170
      platforms/android/CordovaLib/src/org/apache/cordova/Whitelist.java
  42. 0
    62
      platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemCookieManager.java
  43. 0
    53
      platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemExposedJsApi.java
  44. 0
    270
      platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebChromeClient.java
  45. 0
    88
      platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebView.java
  46. 0
    369
      platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java
  47. 0
    328
      platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewEngine.java
  48. 0
    30
      platforms/android/android.json
  49. 0
    414
      platforms/android/app/build.gradle
  50. 0
    23
      platforms/android/app/repositories.gradle
  51. 0
    13
      platforms/android/app/src/main/AndroidManifest.xml
  52. 二进制
      platforms/android/app/src/main/assets/www/.DS_Store
  53. 0
    3
      platforms/android/app/src/main/assets/www/api.py
  54. 0
    6
      platforms/android/app/src/main/assets/www/conectar.php
  55. 0
    36
      platforms/android/app/src/main/assets/www/cordova-js-src/android/nativeapiprovider.js
  56. 0
    35
      platforms/android/app/src/main/assets/www/cordova-js-src/android/promptbasednativeapi.js
  57. 0
    287
      platforms/android/app/src/main/assets/www/cordova-js-src/exec.js
  58. 0
    122
      platforms/android/app/src/main/assets/www/cordova-js-src/platform.js
  59. 0
    108
      platforms/android/app/src/main/assets/www/cordova-js-src/plugin/android/app.js
  60. 0
    1904
      platforms/android/app/src/main/assets/www/cordova.js
  61. 0
    6
      platforms/android/app/src/main/assets/www/cordova_plugins.js
  62. 0
    3281
      platforms/android/app/src/main/assets/www/css/animate.css
  63. 0
    7317
      platforms/android/app/src/main/assets/www/css/bootstrap.css
  64. 0
    7
      platforms/android/app/src/main/assets/www/css/bootstrap.css.map
  65. 0
    2437
      platforms/android/app/src/main/assets/www/css/icomoon.css
  66. 0
    368
      platforms/android/app/src/main/assets/www/css/magnific-popup.css
  67. 0
    758
      platforms/android/app/src/main/assets/www/css/simple-line-icons.css
  68. 0
    942
      platforms/android/app/src/main/assets/www/css/style.css
  69. 0
    7
      platforms/android/app/src/main/assets/www/css/style.css.map
  70. 二进制
      platforms/android/app/src/main/assets/www/fonts/.DS_Store
  71. 二进制
      platforms/android/app/src/main/assets/www/fonts/bootstrap/glyphicons-halflings-regular.eot
  72. 0
    288
      platforms/android/app/src/main/assets/www/fonts/bootstrap/glyphicons-halflings-regular.svg
  73. 二进制
      platforms/android/app/src/main/assets/www/fonts/bootstrap/glyphicons-halflings-regular.ttf
  74. 二进制
      platforms/android/app/src/main/assets/www/fonts/bootstrap/glyphicons-halflings-regular.woff
  75. 二进制
      platforms/android/app/src/main/assets/www/fonts/bootstrap/glyphicons-halflings-regular.woff2
  76. 二进制
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon.eot
  77. 0
    725
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon.svg
  78. 二进制
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon.ttf
  79. 二进制
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon.woff
  80. 0
    7
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/Read Me.txt
  81. 0
    153
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/demo-files/demo.css
  82. 0
    30
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/demo-files/demo.js
  83. 0
    12906
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/demo.html
  84. 二进制
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/fonts/icomoon.eot
  85. 0
    725
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/fonts/icomoon.svg
  86. 二进制
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/fonts/icomoon.ttf
  87. 二进制
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/fonts/icomoon.woff
  88. 0
    18459
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/selection.json
  89. 0
    2438
      platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/style.css
  90. 二进制
      platforms/android/app/src/main/assets/www/fonts/simple-line-icons/Simple-Line-Icons.eot
  91. 0
    211
      platforms/android/app/src/main/assets/www/fonts/simple-line-icons/Simple-Line-Icons.svg
  92. 二进制
      platforms/android/app/src/main/assets/www/fonts/simple-line-icons/Simple-Line-Icons.ttf
  93. 二进制
      platforms/android/app/src/main/assets/www/fonts/simple-line-icons/Simple-Line-Icons.woff
  94. 二进制
      platforms/android/app/src/main/assets/www/fonts/simple-line-icons/Simple-Line-Icons.woff2
  95. 二进制
      platforms/android/app/src/main/assets/www/images/full_image_1.jpg
  96. 二进制
      platforms/android/app/src/main/assets/www/images/full_image_2.jpg
  97. 二进制
      platforms/android/app/src/main/assets/www/images/project-1.jpg
  98. 二进制
      platforms/android/app/src/main/assets/www/images/project-2.jpg
  99. 二进制
      platforms/android/app/src/main/assets/www/images/project-3.jpg
  100. 0
    0
      platforms/android/app/src/main/assets/www/images/project-4.jpg

二进制
.DS_Store 查看文件


二进制
platforms/.DS_Store 查看文件


+ 0
- 21
platforms/android/.gitignore 查看文件

@@ -1,21 +0,0 @@
1
-# Non-project-specific build files:
2
-build.xml
3
-local.properties
4
-/gradlew
5
-/gradlew.bat
6
-/gradle
7
-# Ant builds
8
-ant-build
9
-ant-gen
10
-# Eclipse builds
11
-gen
12
-out
13
-# Gradle build artifacts
14
-.gradle
15
-.gradletasknamecache
16
-/build
17
-/CordovaLib/build
18
-/app/build
19
-gradle-app.setting
20
-# Android Studio
21
-.idea

+ 0
- 22
platforms/android/CordovaLib/AndroidManifest.xml 查看文件

@@ -1,22 +0,0 @@
1
-<?xml version="1.0" encoding="utf-8"?>
2
-<!--
3
-       Licensed to the Apache Software Foundation (ASF) under one
4
-       or more contributor license agreements.  See the NOTICE file
5
-       distributed with this work for additional information
6
-       regarding copyright ownership.  The ASF licenses this file
7
-       to you under the Apache License, Version 2.0 (the
8
-       "License"); you may not use this file except in compliance
9
-       with the License.  You may obtain a copy of the License at
10
-
11
-         http://www.apache.org/licenses/LICENSE-2.0
12
-
13
-       Unless required by applicable law or agreed to in writing,
14
-       software distributed under the License is distributed on an
15
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
-       KIND, either express or implied.  See the License for the
17
-       specific language governing permissions and limitations
18
-       under the License.
19
--->
20
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
21
-      package="org.apache.cordova" android:versionName="1.0" android:versionCode="1">
22
-</manifest>

+ 0
- 150
platforms/android/CordovaLib/build.gradle 查看文件

@@ -1,150 +0,0 @@
1
-/* Licensed to the Apache Software Foundation (ASF) under one
2
-   or more contributor license agreements.  See the NOTICE file
3
-   distributed with this work for additional information
4
-   regarding copyright ownership.  The ASF licenses this file
5
-   to you under the Apache License, Version 2.0 (the
6
-   "License"); you may not use this file except in compliance
7
-   with the License.  You may obtain a copy of the License at
8
-
9
-     http://www.apache.org/licenses/LICENSE-2.0
10
-
11
-   Unless required by applicable law or agreed to in writing,
12
-   software distributed under the License is distributed on an
13
-   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
-   KIND, either express or implied.  See the License for the
15
-   specific language governing permissions and limitations
16
-   under the License.
17
-*/
18
-
19
-ext {
20
-    apply from: 'cordova.gradle'
21
-    cdvCompileSdkVersion = privateHelpers.getProjectTarget()
22
-    cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools()
23
-    if (project.hasProperty('cdvMinSdkVersion') && cdvMinSdkVersion.isInteger()) {
24
-        cdvMinSdkVersion = cdvMinSdkVersion as int
25
-        println '[Cordova] cdvMinSdkVersion is overridden, try it at your own risk.'
26
-    } else {
27
-        cdvMinSdkVersion = 22; // current Cordova's default
28
-    }
29
-}
30
-
31
-buildscript {
32
-    apply from: 'repositories.gradle'
33
-    repositories repos
34
-
35
-    dependencies {
36
-        // The gradle plugin and the maven plugin have to be updated after each version of Android
37
-        // studio comes out
38
-        classpath 'com.android.tools.build:gradle:4.0.0'
39
-        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
40
-        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
41
-    }
42
-}
43
-
44
-allprojects {
45
-    apply from: 'repositories.gradle'
46
-    repositories repos
47
-}
48
-
49
-apply plugin: 'com.android.library'
50
-apply plugin: 'com.github.dcendents.android-maven'
51
-apply plugin: 'com.jfrog.bintray'
52
-
53
-group = 'org.apache.cordova'
54
-version = '9.1.0'
55
-
56
-android {
57
-    compileSdkVersion cdvCompileSdkVersion
58
-    buildToolsVersion cdvBuildToolsVersion
59
-
60
-    compileOptions {
61
-        sourceCompatibility JavaVersion.VERSION_1_8
62
-        targetCompatibility JavaVersion.VERSION_1_8
63
-    }
64
-
65
-    // For the Android Cordova Lib, we allow changing the minSdkVersion, but it is at the users own risk
66
-    defaultConfig {
67
-        minSdkVersion cdvMinSdkVersion
68
-    }
69
-
70
-    sourceSets {
71
-        main {
72
-            manifest.srcFile 'AndroidManifest.xml'
73
-            java.srcDirs = ['src']
74
-            resources.srcDirs = ['src']
75
-            aidl.srcDirs = ['src']
76
-            renderscript.srcDirs = ['src']
77
-            res.srcDirs = ['res']
78
-            assets.srcDirs = ['assets']
79
-        }
80
-    }
81
-
82
-    packagingOptions {
83
-        exclude 'META-INF/LICENSE'
84
-        exclude 'META-INF/LICENSE.txt'
85
-        exclude 'META-INF/DEPENDENCIES'
86
-        exclude 'META-INF/NOTICE'
87
-    }
88
-}
89
-
90
-install {
91
-    repositories.mavenInstaller {
92
-        pom {
93
-            project {
94
-                packaging 'aar'
95
-                name 'Cordova'
96
-                url 'https://cordova.apache.org'
97
-                licenses {
98
-                    license {
99
-                        name 'The Apache Software License, Version 2.0'
100
-                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
101
-                    }
102
-                }
103
-                developers {
104
-                    developer {
105
-                        id 'stevengill'
106
-                        name 'Steve Gill'
107
-                    }
108
-                }
109
-                scm {
110
-                    connection 'scm:git:https://github.com/apache/cordova-android.git'
111
-                    developerConnection 'scm:git:git@github.com:apache/cordova-android.git'
112
-                    url 'https://github.com/apache/cordova-android'
113
-
114
-                }
115
-            }
116
-        }
117
-    }
118
-}
119
-
120
-task sourcesJar(type: Jar) {
121
-    from android.sourceSets.main.java.srcDirs
122
-    classifier = 'sources'
123
-}
124
-
125
-artifacts {
126
-    archives sourcesJar
127
-}
128
-
129
-bintray {
130
-    user = System.getenv('BINTRAY_USER')
131
-    key = System.getenv('BINTRAY_KEY')
132
-    configurations = ['archives']
133
-    pkg {
134
-        repo = 'maven'
135
-        name = 'cordova-android'
136
-        userOrg = 'cordova'
137
-        licenses = ['Apache-2.0']
138
-        vcsUrl = 'https://github.com/apache/cordova-android'
139
-        websiteUrl = 'https://cordova.apache.org'
140
-        issueTrackerUrl = 'https://github.com/apache/cordova-android/issues'
141
-        publicDownloadNumbers = true
142
-        licenses = ['Apache-2.0']
143
-        labels = ['android', 'cordova', 'phonegap']
144
-        version {
145
-            name = '9.1.0'
146
-            released = new Date()
147
-            vcsTag = '9.1.0'
148
-        }
149
-    }
150
-}

+ 0
- 205
platforms/android/CordovaLib/cordova.gradle 查看文件

@@ -1,205 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-import java.util.regex.Pattern
21
-import groovy.swing.SwingBuilder
22
-import com.g00fy2.versioncompare.Version
23
-
24
-String doEnsureValueExists(filePath, props, key) {
25
-    if (props.get(key) == null) {
26
-        throw new GradleException(filePath + ': Missing key required "' + key + '"')
27
-    }
28
-    return props.get(key)
29
-}
30
-
31
-String doGetProjectTarget() {
32
-    def props = new Properties()
33
-    def propertiesFile = 'project.properties';
34
-    if(!(file(propertiesFile).exists())) {
35
-      propertiesFile = '../project.properties';
36
-    }
37
-    file(propertiesFile).withReader { reader ->
38
-        props.load(reader)
39
-    }
40
-    return doEnsureValueExists('project.properties', props, 'target')
41
-}
42
-
43
-Boolean isVersionValid(version) {
44
-    return !(new Version(version)).isEqual('0.0.0')
45
-}
46
-
47
-String doFindLatestInstalledBuildTools(String minBuildToolsVersionString) {
48
-    def buildToolsDirContents
49
-    try {
50
-        def buildToolsDir = new File(getAndroidSdkDir(), "build-tools")
51
-        buildToolsDirContents = buildToolsDir.list()
52
-    } catch (e) {
53
-        println "An exception occurred while trying to find the Android build tools."
54
-        throw e
55
-    }
56
-
57
-    def highestBuildToolsVersion = buildToolsDirContents
58
-        .collect { new Version(it) }
59
-        // Invalid inputs will be handled as 0.0.0
60
-        .findAll { it.isHigherThan('0.0.0') }
61
-        .max()
62
-
63
-    if (highestBuildToolsVersion == null) {
64
-        throw new RuntimeException("""
65
-            No installed build tools found. Install the Android build tools
66
-            version ${minBuildToolsVersionString} or higher.
67
-        """.replaceAll(/\s+/, ' ').trim())
68
-    }
69
-
70
-    if (highestBuildToolsVersion.isLowerThan(minBuildToolsVersionString)) {
71
-        throw new RuntimeException("""
72
-            No usable Android build tools found. Highest installed version is
73
-            ${highestBuildToolsVersion.getOriginalString()}; minimum version
74
-            required is ${minBuildToolsVersionString}.
75
-        """.replaceAll(/\s+/, ' ').trim())
76
-    }
77
-
78
-    highestBuildToolsVersion.getOriginalString()
79
-}
80
-
81
-String getAndroidSdkDir() {
82
-    def rootDir = project.rootDir
83
-    def androidSdkDir = null
84
-    String envVar = System.getenv("ANDROID_SDK_ROOT")
85
-    if (envVar == null) {
86
-        envVar = System.getenv("ANDROID_HOME")
87
-    }
88
-
89
-    def localProperties = new File(rootDir, 'local.properties')
90
-    String systemProperty = System.getProperty("android.home")
91
-    if (envVar != null) {
92
-        androidSdkDir = envVar
93
-    } else if (localProperties.exists()) {
94
-        Properties properties = new Properties()
95
-        localProperties.withInputStream { instr ->
96
-            properties.load(instr)
97
-        }
98
-        def sdkDirProp = properties.getProperty('sdk.dir')
99
-        if (sdkDirProp != null) {
100
-            androidSdkDir = sdkDirProp
101
-        } else {
102
-            sdkDirProp = properties.getProperty('android.dir')
103
-            if (sdkDirProp != null) {
104
-                androidSdkDir = (new File(rootDir, sdkDirProp)).getAbsolutePath()
105
-            }
106
-        }
107
-    }
108
-    if (androidSdkDir == null && systemProperty != null) {
109
-        androidSdkDir = systemProperty
110
-    }
111
-    if (androidSdkDir == null) {
112
-        throw new RuntimeException(
113
-            "Unable to determine Android SDK directory.")
114
-    }
115
-    androidSdkDir
116
-}
117
-
118
-def doExtractIntFromManifest(name) {
119
-    def manifestFile = file(android.sourceSets.main.manifest.srcFile)
120
-    def pattern = Pattern.compile(name + "=\"(\\d+)\"")
121
-    def matcher = pattern.matcher(manifestFile.getText())
122
-    matcher.find()
123
-    return new BigInteger(matcher.group(1))
124
-}
125
-
126
-def doExtractStringFromManifest(name) {
127
-    def manifestFile = file(android.sourceSets.main.manifest.srcFile)
128
-    def pattern = Pattern.compile(name + "=\"(\\S+)\"")
129
-    def matcher = pattern.matcher(manifestFile.getText())
130
-    matcher.find()
131
-    return matcher.group(1)
132
-}
133
-
134
-def doPromptForPassword(msg) {
135
-    if (System.console() == null) {
136
-        def ret = null
137
-        new SwingBuilder().edt {
138
-            dialog(modal: true, title: 'Enter password', alwaysOnTop: true, resizable: false, locationRelativeTo: null, pack: true, show: true) {
139
-                vbox {
140
-                    label(text: msg)
141
-                    def input = passwordField()
142
-                    button(defaultButton: true, text: 'OK', actionPerformed: {
143
-                        ret = input.password;
144
-                        dispose();
145
-                    })
146
-                }
147
-            }
148
-        }
149
-        if (!ret) {
150
-            throw new GradleException('User canceled build')
151
-        }
152
-        return new String(ret)
153
-    } else {
154
-        return System.console().readPassword('\n' + msg);
155
-    }
156
-}
157
-
158
-def doGetConfigXml() {
159
-    def xml = file("src/main/res/xml/config.xml").getText()
160
-    // Disable namespace awareness since Cordova doesn't use them properly
161
-    return new XmlParser(false, false).parseText(xml)
162
-}
163
-
164
-def doGetConfigPreference(name, defaultValue) {
165
-    name = name.toLowerCase()
166
-    def root = doGetConfigXml()
167
-
168
-    def ret = defaultValue
169
-    root.preference.each { it ->
170
-        def attrName = it.attribute("name")
171
-        if (attrName && attrName.toLowerCase() == name) {
172
-            ret = it.attribute("value")
173
-        }
174
-    }
175
-    return ret
176
-}
177
-
178
-// Properties exported here are visible to all plugins.
179
-ext {
180
-    // These helpers are shared, but are not guaranteed to be stable / unchanged.
181
-    privateHelpers = {}
182
-    privateHelpers.getProjectTarget = { doGetProjectTarget() }
183
-    privateHelpers.findLatestInstalledBuildTools = { doFindLatestInstalledBuildTools('19.1.0') }
184
-    privateHelpers.extractIntFromManifest = { name -> doExtractIntFromManifest(name) }
185
-    privateHelpers.extractStringFromManifest = { name -> doExtractStringFromManifest(name) }
186
-    privateHelpers.promptForPassword = { msg -> doPromptForPassword(msg) }
187
-    privateHelpers.ensureValueExists = { filePath, props, key -> doEnsureValueExists(filePath, props, key) }
188
-
189
-    // These helpers can be used by plugins / projects and will not change.
190
-    cdvHelpers = {}
191
-    // Returns a XmlParser for the config.xml. Added in 4.1.0.
192
-    cdvHelpers.getConfigXml = { doGetConfigXml() }
193
-    // Returns the value for the desired <preference>. Added in 4.1.0.
194
-    cdvHelpers.getConfigPreference = { name, defaultValue -> doGetConfigPreference(name, defaultValue) }
195
-}
196
-
197
-buildscript {
198
-    repositories {
199
-        jcenter()
200
-    }
201
-
202
-    dependencies {
203
-        classpath 'com.g00fy2:versioncompare:1.3.4@jar'
204
-    }
205
-}

+ 0
- 11
platforms/android/CordovaLib/project.properties 查看文件

@@ -1,11 +0,0 @@
1
-# This file was originally created by the Android Tools, but is now
2
-# used by cordova-android to manage the project configuration.
3
-
4
-# Indicates whether an apk should be generated for each density.
5
-split.density=false
6
-
7
-# Project target.
8
-target=android-29
9
-apk-configurations=
10
-renderscript.opt.level=O0
11
-android.library=true

+ 0
- 22
platforms/android/CordovaLib/repositories.gradle 查看文件

@@ -1,22 +0,0 @@
1
-/* Licensed to the Apache Software Foundation (ASF) under one
2
-   or more contributor license agreements.  See the NOTICE file
3
-   distributed with this work for additional information
4
-   regarding copyright ownership.  The ASF licenses this file
5
-   to you under the Apache License, Version 2.0 (the
6
-   "License"); you may not use this file except in compliance
7
-   with the License.  You may obtain a copy of the License at
8
-
9
-     http://www.apache.org/licenses/LICENSE-2.0
10
-
11
-   Unless required by applicable law or agreed to in writing,
12
-   software distributed under the License is distributed on an
13
-   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
-   KIND, either express or implied.  See the License for the
15
-   specific language governing permissions and limitations
16
-   under the License.
17
-*/
18
-
19
-ext.repos = {
20
-    google()
21
-    jcenter()
22
-}

+ 0
- 69
platforms/android/CordovaLib/src/org/apache/cordova/AuthenticationToken.java 查看文件

@@ -1,69 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-/**
22
- * The Class AuthenticationToken defines the userName and password to be used for authenticating a web resource
23
- */
24
-public class AuthenticationToken {
25
-    private String userName;
26
-    private String password;
27
-
28
-    /**
29
-     * Gets the user name.
30
-     *
31
-     * @return the user name
32
-     */
33
-    public String getUserName() {
34
-        return userName;
35
-    }
36
-
37
-    /**
38
-     * Sets the user name.
39
-     *
40
-     * @param userName
41
-     *            the new user name
42
-     */
43
-    public void setUserName(String userName) {
44
-        this.userName = userName;
45
-    }
46
-
47
-    /**
48
-     * Gets the password.
49
-     *
50
-     * @return the password
51
-     */
52
-    public String getPassword() {
53
-        return password;
54
-    }
55
-
56
-    /**
57
-     * Sets the password.
58
-     *
59
-     * @param password
60
-     *            the new password
61
-     */
62
-    public void setPassword(String password) {
63
-        this.password = password;
64
-    }
65
-
66
-
67
-
68
-
69
-}

+ 0
- 73
platforms/android/CordovaLib/src/org/apache/cordova/BuildHelper.java 查看文件

@@ -1,73 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-package org.apache.cordova;
21
-
22
-/*
23
- * This is a utility class that allows us to get the BuildConfig variable, which is required
24
- * for the use of different providers.  This is not guaranteed to work, and it's better for this
25
- * to be set in the build step in config.xml
26
- *
27
- */
28
-
29
-import android.app.Activity;
30
-import android.content.Context;
31
-
32
-import java.lang.reflect.Field;
33
-
34
-
35
-public class BuildHelper {
36
-
37
-
38
-    private static String TAG="BuildHelper";
39
-
40
-    /*
41
-     * This needs to be implemented if you wish to use the Camera Plugin or other plugins
42
-     * that read the Build Configuration.
43
-     *
44
-     * Thanks to Phil@Medtronic and Graham Borland for finding the answer and posting it to
45
-     * StackOverflow.  This is annoying as hell!  However, this method does not work with
46
-     * ProGuard, and you should use the config.xml to define the application_id
47
-     *
48
-     */
49
-
50
-    public static Object getBuildConfigValue(Context ctx, String key)
51
-    {
52
-        try
53
-        {
54
-            Class<?> clazz = Class.forName(ctx.getClass().getPackage().getName() + ".BuildConfig");
55
-            Field field = clazz.getField(key);
56
-            return field.get(null);
57
-        } catch (ClassNotFoundException e) {
58
-            LOG.d(TAG, "Unable to get the BuildConfig, is this built with ANT?");
59
-            e.printStackTrace();
60
-        } catch (NoSuchFieldException e) {
61
-            LOG.d(TAG, key + " is not a valid field. Check your build.gradle");
62
-        } catch (IllegalAccessException e) {
63
-            LOG.d(TAG, "Illegal Access Exception: Let's print a stack trace.");
64
-            e.printStackTrace();
65
-        } catch (NullPointerException e) {
66
-            LOG.d(TAG, "Null Pointer Exception: Let's print a stack trace.");
67
-            e.printStackTrace();
68
-        }
69
-
70
-        return null;
71
-    }
72
-
73
-}

+ 0
- 142
platforms/android/CordovaLib/src/org/apache/cordova/CallbackContext.java 查看文件

@@ -1,142 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import org.json.JSONArray;
22
-
23
-import org.apache.cordova.CordovaWebView;
24
-import org.apache.cordova.PluginResult;
25
-import org.json.JSONObject;
26
-
27
-public class CallbackContext {
28
-    private static final String LOG_TAG = "CordovaPlugin";
29
-
30
-    private String callbackId;
31
-    private CordovaWebView webView;
32
-    protected boolean finished;
33
-    private int changingThreads;
34
-
35
-    public CallbackContext(String callbackId, CordovaWebView webView) {
36
-        this.callbackId = callbackId;
37
-        this.webView = webView;
38
-    }
39
-
40
-    public boolean isFinished() {
41
-        return finished;
42
-    }
43
-
44
-    public boolean isChangingThreads() {
45
-        return changingThreads > 0;
46
-    }
47
-
48
-    public String getCallbackId() {
49
-        return callbackId;
50
-    }
51
-
52
-    public void sendPluginResult(PluginResult pluginResult) {
53
-        synchronized (this) {
54
-            if (finished) {
55
-                LOG.w(LOG_TAG, "Attempted to send a second callback for ID: " + callbackId + "\nResult was: " + pluginResult.getMessage());
56
-                return;
57
-            } else {
58
-                finished = !pluginResult.getKeepCallback();
59
-            }
60
-        }
61
-        webView.sendPluginResult(pluginResult, callbackId);
62
-    }
63
-
64
-    /**
65
-     * Helper for success callbacks that just returns the Status.OK by default
66
-     *
67
-     * @param message           The message to add to the success result.
68
-     */
69
-    public void success(JSONObject message) {
70
-        sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
71
-    }
72
-
73
-    /**
74
-     * Helper for success callbacks that just returns the Status.OK by default
75
-     *
76
-     * @param message           The message to add to the success result.
77
-     */
78
-    public void success(String message) {
79
-        sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
80
-    }
81
-
82
-    /**
83
-     * Helper for success callbacks that just returns the Status.OK by default
84
-     *
85
-     * @param message           The message to add to the success result.
86
-     */
87
-    public void success(JSONArray message) {
88
-        sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
89
-    }
90
-
91
-    /**
92
-     * Helper for success callbacks that just returns the Status.OK by default
93
-     *
94
-     * @param message           The message to add to the success result.
95
-     */
96
-    public void success(byte[] message) {
97
-        sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
98
-    }
99
-
100
-    /**
101
-     * Helper for success callbacks that just returns the Status.OK by default
102
-     *
103
-     * @param message           The message to add to the success result.
104
-     */
105
-    public void success(int message) {
106
-        sendPluginResult(new PluginResult(PluginResult.Status.OK, message));
107
-    }
108
-
109
-    /**
110
-     * Helper for success callbacks that just returns the Status.OK by default
111
-     */
112
-    public void success() {
113
-        sendPluginResult(new PluginResult(PluginResult.Status.OK));
114
-    }
115
-
116
-    /**
117
-     * Helper for error callbacks that just returns the Status.ERROR by default
118
-     *
119
-     * @param message           The message to add to the error result.
120
-     */
121
-    public void error(JSONObject message) {
122
-        sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message));
123
-    }
124
-
125
-    /**
126
-     * Helper for error callbacks that just returns the Status.ERROR by default
127
-     *
128
-     * @param message           The message to add to the error result.
129
-     */
130
-    public void error(String message) {
131
-        sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message));
132
-    }
133
-
134
-    /**
135
-     * Helper for error callbacks that just returns the Status.ERROR by default
136
-     *
137
-     * @param message           The message to add to the error result.
138
-     */
139
-    public void error(int message) {
140
-        sendPluginResult(new PluginResult(PluginResult.Status.ERROR, message));
141
-    }
142
-}

+ 0
- 65
platforms/android/CordovaLib/src/org/apache/cordova/CallbackMap.java 查看文件

@@ -1,65 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import android.util.Pair;
22
-import android.util.SparseArray;
23
-
24
-/**
25
- * Provides a collection that maps unique request codes to CordovaPlugins and Integers.
26
- * Used to ensure that when plugins make requests for runtime permissions, those requests do not
27
- * collide with requests from other plugins that use the same request code value.
28
- */
29
-public class CallbackMap {
30
-    private int currentCallbackId = 0;
31
-    private SparseArray<Pair<CordovaPlugin, Integer>> callbacks;
32
-
33
-    public CallbackMap() {
34
-        this.callbacks = new SparseArray<Pair<CordovaPlugin, Integer>>();
35
-    }
36
-
37
-    /**
38
-     * Stores a CordovaPlugin and request code and returns a new unique request code to use
39
-     * in a permission request.
40
-     *
41
-     * @param receiver      The plugin that is making the request
42
-     * @param requestCode   The original request code used by the plugin
43
-     * @return              A unique request code that can be used to retrieve this callback
44
-     *                      with getAndRemoveCallback()
45
-     */
46
-    public synchronized int registerCallback(CordovaPlugin receiver, int requestCode) {
47
-        int mappedId = this.currentCallbackId++;
48
-        callbacks.put(mappedId, new Pair<CordovaPlugin, Integer>(receiver, requestCode));
49
-        return mappedId;
50
-    }
51
-
52
-    /**
53
-     * Retrieves and removes a callback stored in the map using the mapped request code
54
-     * obtained from registerCallback()
55
-     *
56
-     * @param mappedId      The request code obtained from registerCallback()
57
-     * @return              The CordovaPlugin and orignal request code that correspond to the
58
-     *                      given mappedCode
59
-     */
60
-    public synchronized Pair<CordovaPlugin, Integer> getAndRemoveCallback(int mappedId) {
61
-        Pair<CordovaPlugin, Integer> callback = callbacks.get(mappedId);
62
-        callbacks.remove(mappedId);
63
-        return callback;
64
-    }
65
-}

+ 0
- 71
platforms/android/CordovaLib/src/org/apache/cordova/Config.java 查看文件

@@ -1,71 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-package org.apache.cordova;
21
-
22
-import java.util.List;
23
-
24
-import android.app.Activity;
25
-
26
-@Deprecated // Use Whitelist, CordovaPrefences, etc. directly.
27
-public class Config {
28
-    private static final String TAG = "Config";
29
-
30
-    static ConfigXmlParser parser;
31
-
32
-    private Config() {
33
-    }
34
-
35
-    public static void init(Activity action) {
36
-        parser = new ConfigXmlParser();
37
-        parser.parse(action);
38
-        //TODO: Add feature to bring this back.  Some preferences should be overridden by intents, but not all
39
-        parser.getPreferences().setPreferencesBundle(action.getIntent().getExtras());
40
-    }
41
-
42
-    // Intended to be used for testing only; creates an empty configuration.
43
-    public static void init() {
44
-        if (parser == null) {
45
-            parser = new ConfigXmlParser();
46
-        }
47
-    }
48
-
49
-    public static String getStartUrl() {
50
-        if (parser == null) {
51
-            return "file:///android_asset/www/index.html";
52
-        }
53
-        return parser.getLaunchUrl();
54
-    }
55
-
56
-    public static String getErrorUrl() {
57
-        return parser.getPreferences().getString("errorurl", null);
58
-    }
59
-
60
-    public static List<PluginEntry> getPluginEntries() {
61
-        return parser.getPluginEntries();
62
-    }
63
-
64
-    public static CordovaPreferences getPreferences() {
65
-        return parser.getPreferences();
66
-    }
67
-
68
-    public static boolean isInitialized() {
69
-        return parser != null;
70
-    }
71
-}

+ 0
- 145
platforms/android/CordovaLib/src/org/apache/cordova/ConfigXmlParser.java 查看文件

@@ -1,145 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-package org.apache.cordova;
21
-
22
-import java.io.IOException;
23
-import java.util.ArrayList;
24
-import java.util.Locale;
25
-import java.util.regex.Matcher;
26
-import java.util.regex.Pattern;
27
-
28
-import org.xmlpull.v1.XmlPullParser;
29
-import org.xmlpull.v1.XmlPullParserException;
30
-
31
-import android.content.Context;
32
-
33
-public class ConfigXmlParser {
34
-    private static String TAG = "ConfigXmlParser";
35
-
36
-    private String launchUrl = "file:///android_asset/www/index.html";
37
-    private CordovaPreferences prefs = new CordovaPreferences();
38
-    private ArrayList<PluginEntry> pluginEntries = new ArrayList<PluginEntry>(20);
39
-
40
-    public CordovaPreferences getPreferences() {
41
-        return prefs;
42
-    }
43
-
44
-    public ArrayList<PluginEntry> getPluginEntries() {
45
-        return pluginEntries;
46
-    }
47
-
48
-    public String getLaunchUrl() {
49
-        return launchUrl;
50
-    }
51
-
52
-    public void parse(Context action) {
53
-        // First checking the class namespace for config.xml
54
-        int id = action.getResources().getIdentifier("config", "xml", action.getClass().getPackage().getName());
55
-        if (id == 0) {
56
-            // If we couldn't find config.xml there, we'll look in the namespace from AndroidManifest.xml
57
-            id = action.getResources().getIdentifier("config", "xml", action.getPackageName());
58
-            if (id == 0) {
59
-                LOG.e(TAG, "res/xml/config.xml is missing!");
60
-                return;
61
-            }
62
-        }
63
-        parse(action.getResources().getXml(id));
64
-    }
65
-
66
-    boolean insideFeature = false;
67
-    String service = "", pluginClass = "", paramType = "";
68
-    boolean onload = false;
69
-
70
-    public void parse(XmlPullParser xml) {
71
-        int eventType = -1;
72
-
73
-        while (eventType != XmlPullParser.END_DOCUMENT) {
74
-            if (eventType == XmlPullParser.START_TAG) {
75
-                handleStartTag(xml);
76
-            }
77
-            else if (eventType == XmlPullParser.END_TAG)
78
-            {
79
-                handleEndTag(xml);
80
-            }
81
-            try {
82
-                eventType = xml.next();
83
-            } catch (XmlPullParserException e) {
84
-                e.printStackTrace();
85
-            } catch (IOException e) {
86
-                e.printStackTrace();
87
-            }
88
-        }
89
-    }
90
-
91
-    public void handleStartTag(XmlPullParser xml) {
92
-        String strNode = xml.getName();
93
-        if (strNode.equals("feature")) {
94
-            //Check for supported feature sets  aka. plugins (Accelerometer, Geolocation, etc)
95
-            //Set the bit for reading params
96
-            insideFeature = true;
97
-            service = xml.getAttributeValue(null, "name");
98
-        }
99
-        else if (insideFeature && strNode.equals("param")) {
100
-            paramType = xml.getAttributeValue(null, "name");
101
-            if (paramType.equals("service")) // check if it is using the older service param
102
-                service = xml.getAttributeValue(null, "value");
103
-            else if (paramType.equals("package") || paramType.equals("android-package"))
104
-                pluginClass = xml.getAttributeValue(null,"value");
105
-            else if (paramType.equals("onload"))
106
-                onload = "true".equals(xml.getAttributeValue(null, "value"));
107
-        }
108
-        else if (strNode.equals("preference")) {
109
-            String name = xml.getAttributeValue(null, "name").toLowerCase(Locale.ENGLISH);
110
-            String value = xml.getAttributeValue(null, "value");
111
-            prefs.set(name, value);
112
-        }
113
-        else if (strNode.equals("content")) {
114
-            String src = xml.getAttributeValue(null, "src");
115
-            if (src != null) {
116
-                setStartUrl(src);
117
-            }
118
-        }
119
-    }
120
-
121
-    public void handleEndTag(XmlPullParser xml) {
122
-        String strNode = xml.getName();
123
-        if (strNode.equals("feature")) {
124
-            pluginEntries.add(new PluginEntry(service, pluginClass, onload));
125
-
126
-            service = "";
127
-            pluginClass = "";
128
-            insideFeature = false;
129
-            onload = false;
130
-        }
131
-    }
132
-
133
-    private void setStartUrl(String src) {
134
-        Pattern schemeRegex = Pattern.compile("^[a-z-]+://");
135
-        Matcher matcher = schemeRegex.matcher(src);
136
-        if (matcher.find()) {
137
-            launchUrl = src;
138
-        } else {
139
-            if (src.charAt(0) == '/') {
140
-                src = src.substring(1);
141
-            }
142
-            launchUrl = "file:///android_asset/www/" + src;
143
-        }
144
-    }
145
-}

+ 0
- 528
platforms/android/CordovaLib/src/org/apache/cordova/CordovaActivity.java 查看文件

@@ -1,528 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import java.util.ArrayList;
22
-import java.util.Locale;
23
-
24
-import org.json.JSONException;
25
-import org.json.JSONObject;
26
-
27
-import android.app.Activity;
28
-import android.app.AlertDialog;
29
-import android.annotation.SuppressLint;
30
-import android.content.DialogInterface;
31
-import android.content.Intent;
32
-import android.content.res.Configuration;
33
-import android.graphics.Color;
34
-import android.media.AudioManager;
35
-import android.os.Build;
36
-import android.os.Bundle;
37
-import android.view.Menu;
38
-import android.view.MenuItem;
39
-import android.view.View;
40
-import android.view.ViewGroup;
41
-import android.view.Window;
42
-import android.view.WindowManager;
43
-import android.webkit.WebViewClient;
44
-import android.widget.FrameLayout;
45
-
46
-/**
47
- * This class is the main Android activity that represents the Cordova
48
- * application. It should be extended by the user to load the specific
49
- * html file that contains the application.
50
- *
51
- * As an example:
52
- *
53
- * <pre>
54
- *     package org.apache.cordova.examples;
55
- *
56
- *     import android.os.Bundle;
57
- *     import org.apache.cordova.*;
58
- *
59
- *     public class Example extends CordovaActivity {
60
- *       &#64;Override
61
- *       public void onCreate(Bundle savedInstanceState) {
62
- *         super.onCreate(savedInstanceState);
63
- *         super.init();
64
- *         // Load your application
65
- *         loadUrl(launchUrl);
66
- *       }
67
- *     }
68
- * </pre>
69
- *
70
- * Cordova xml configuration: Cordova uses a configuration file at
71
- * res/xml/config.xml to specify its settings. See "The config.xml File"
72
- * guide in cordova-docs at http://cordova.apache.org/docs for the documentation
73
- * for the configuration. The use of the set*Property() methods is
74
- * deprecated in favor of the config.xml file.
75
- *
76
- */
77
-public class CordovaActivity extends Activity {
78
-    public static String TAG = "CordovaActivity";
79
-
80
-    // The webview for our app
81
-    protected CordovaWebView appView;
82
-
83
-    private static int ACTIVITY_STARTING = 0;
84
-    private static int ACTIVITY_RUNNING = 1;
85
-    private static int ACTIVITY_EXITING = 2;
86
-
87
-    // Keep app running when pause is received. (default = true)
88
-    // If true, then the JavaScript and native code continue to run in the background
89
-    // when another application (activity) is started.
90
-    protected boolean keepRunning = true;
91
-
92
-    // Flag to keep immersive mode if set to fullscreen
93
-    protected boolean immersiveMode;
94
-
95
-    // Read from config.xml:
96
-    protected CordovaPreferences preferences;
97
-    protected String launchUrl;
98
-    protected ArrayList<PluginEntry> pluginEntries;
99
-    protected CordovaInterfaceImpl cordovaInterface;
100
-
101
-    /**
102
-     * Called when the activity is first created.
103
-     */
104
-    @Override
105
-    public void onCreate(Bundle savedInstanceState) {
106
-        // need to activate preferences before super.onCreate to avoid "requestFeature() must be called before adding content" exception
107
-        loadConfig();
108
-
109
-        String logLevel = preferences.getString("loglevel", "ERROR");
110
-        LOG.setLogLevel(logLevel);
111
-
112
-        LOG.i(TAG, "Apache Cordova native platform version " + CordovaWebView.CORDOVA_VERSION + " is starting");
113
-        LOG.d(TAG, "CordovaActivity.onCreate()");
114
-
115
-        if (!preferences.getBoolean("ShowTitle", false)) {
116
-            getWindow().requestFeature(Window.FEATURE_NO_TITLE);
117
-        }
118
-
119
-        if (preferences.getBoolean("SetFullscreen", false)) {
120
-            LOG.d(TAG, "The SetFullscreen configuration is deprecated in favor of Fullscreen, and will be removed in a future version.");
121
-            preferences.set("Fullscreen", true);
122
-        }
123
-        if (preferences.getBoolean("Fullscreen", false)) {
124
-            // NOTE: use the FullscreenNotImmersive configuration key to set the activity in a REAL full screen
125
-            // (as was the case in previous cordova versions)
126
-            if (!preferences.getBoolean("FullscreenNotImmersive", false)) {
127
-                immersiveMode = true;
128
-                // The splashscreen plugin needs the flags set before we're focused to prevent
129
-                // the nav and title bars from flashing in.
130
-                setImmersiveUiVisibility();
131
-            } else {
132
-                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
133
-                        WindowManager.LayoutParams.FLAG_FULLSCREEN);
134
-            }
135
-        } else {
136
-            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
137
-                    WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
138
-        }
139
-
140
-        super.onCreate(savedInstanceState);
141
-
142
-        cordovaInterface = makeCordovaInterface();
143
-        if (savedInstanceState != null) {
144
-            cordovaInterface.restoreInstanceState(savedInstanceState);
145
-        }
146
-    }
147
-
148
-    protected void init() {
149
-        appView = makeWebView();
150
-        createViews();
151
-        if (!appView.isInitialized()) {
152
-            appView.init(cordovaInterface, pluginEntries, preferences);
153
-        }
154
-        cordovaInterface.onCordovaInit(appView.getPluginManager());
155
-
156
-        // Wire the hardware volume controls to control media if desired.
157
-        String volumePref = preferences.getString("DefaultVolumeStream", "");
158
-        if ("media".equals(volumePref.toLowerCase(Locale.ENGLISH))) {
159
-            setVolumeControlStream(AudioManager.STREAM_MUSIC);
160
-        }
161
-    }
162
-
163
-    @SuppressWarnings("deprecation")
164
-    protected void loadConfig() {
165
-        ConfigXmlParser parser = new ConfigXmlParser();
166
-        parser.parse(this);
167
-        preferences = parser.getPreferences();
168
-        preferences.setPreferencesBundle(getIntent().getExtras());
169
-        launchUrl = parser.getLaunchUrl();
170
-        pluginEntries = parser.getPluginEntries();
171
-        Config.parser = parser;
172
-    }
173
-
174
-    //Suppressing warnings in AndroidStudio
175
-    @SuppressWarnings({"deprecation", "ResourceType"})
176
-    protected void createViews() {
177
-        //Why are we setting a constant as the ID? This should be investigated
178
-        appView.getView().setId(100);
179
-        appView.getView().setLayoutParams(new FrameLayout.LayoutParams(
180
-                ViewGroup.LayoutParams.MATCH_PARENT,
181
-                ViewGroup.LayoutParams.MATCH_PARENT));
182
-
183
-        setContentView(appView.getView());
184
-
185
-        if (preferences.contains("BackgroundColor")) {
186
-            try {
187
-                int backgroundColor = preferences.getInteger("BackgroundColor", Color.BLACK);
188
-                // Background of activity:
189
-                appView.getView().setBackgroundColor(backgroundColor);
190
-            }
191
-            catch (NumberFormatException e){
192
-                e.printStackTrace();
193
-            }
194
-        }
195
-
196
-        appView.getView().requestFocusFromTouch();
197
-    }
198
-
199
-    /**
200
-     * Construct the default web view object.
201
-     * <p/>
202
-     * Override this to customize the webview that is used.
203
-     */
204
-    protected CordovaWebView makeWebView() {
205
-        return new CordovaWebViewImpl(makeWebViewEngine());
206
-    }
207
-
208
-    protected CordovaWebViewEngine makeWebViewEngine() {
209
-        return CordovaWebViewImpl.createEngine(this, preferences);
210
-    }
211
-
212
-    protected CordovaInterfaceImpl makeCordovaInterface() {
213
-        return new CordovaInterfaceImpl(this) {
214
-            @Override
215
-            public Object onMessage(String id, Object data) {
216
-                // Plumb this to CordovaActivity.onMessage for backwards compatibility
217
-                return CordovaActivity.this.onMessage(id, data);
218
-            }
219
-        };
220
-    }
221
-
222
-    /**
223
-     * Load the url into the webview.
224
-     */
225
-    public void loadUrl(String url) {
226
-        if (appView == null) {
227
-            init();
228
-        }
229
-
230
-        // If keepRunning
231
-        this.keepRunning = preferences.getBoolean("KeepRunning", true);
232
-
233
-        appView.loadUrlIntoView(url, true);
234
-    }
235
-
236
-    /**
237
-     * Called when the system is about to start resuming a previous activity.
238
-     */
239
-    @Override
240
-    protected void onPause() {
241
-        super.onPause();
242
-        LOG.d(TAG, "Paused the activity.");
243
-
244
-        if (this.appView != null) {
245
-            // CB-9382 If there is an activity that started for result and main activity is waiting for callback
246
-            // result, we shoudn't stop WebView Javascript timers, as activity for result might be using them
247
-            boolean keepRunning = this.keepRunning || this.cordovaInterface.activityResultCallback != null;
248
-            this.appView.handlePause(keepRunning);
249
-        }
250
-    }
251
-
252
-    /**
253
-     * Called when the activity receives a new intent
254
-     */
255
-    @Override
256
-    protected void onNewIntent(Intent intent) {
257
-        super.onNewIntent(intent);
258
-        //Forward to plugins
259
-        if (this.appView != null)
260
-            this.appView.onNewIntent(intent);
261
-    }
262
-
263
-    /**
264
-     * Called when the activity will start interacting with the user.
265
-     */
266
-    @Override
267
-    protected void onResume() {
268
-        super.onResume();
269
-        LOG.d(TAG, "Resumed the activity.");
270
-
271
-        if (this.appView == null) {
272
-            return;
273
-        }
274
-        if (! this.getWindow().getDecorView().hasFocus()) {
275
-            // Force window to have focus, so application always
276
-            // receive user input. Workaround for some devices (Samsung Galaxy Note 3 at least)
277
-            this.getWindow().getDecorView().requestFocus();
278
-        }
279
-
280
-        this.appView.handleResume(this.keepRunning);
281
-    }
282
-
283
-    /**
284
-     * Called when the activity is no longer visible to the user.
285
-     */
286
-    @Override
287
-    protected void onStop() {
288
-        super.onStop();
289
-        LOG.d(TAG, "Stopped the activity.");
290
-
291
-        if (this.appView == null) {
292
-            return;
293
-        }
294
-        this.appView.handleStop();
295
-    }
296
-
297
-    /**
298
-     * Called when the activity is becoming visible to the user.
299
-     */
300
-    @Override
301
-    protected void onStart() {
302
-        super.onStart();
303
-        LOG.d(TAG, "Started the activity.");
304
-
305
-        if (this.appView == null) {
306
-            return;
307
-        }
308
-        this.appView.handleStart();
309
-    }
310
-
311
-    /**
312
-     * The final call you receive before your activity is destroyed.
313
-     */
314
-    @Override
315
-    public void onDestroy() {
316
-        LOG.d(TAG, "CordovaActivity.onDestroy()");
317
-        super.onDestroy();
318
-
319
-        if (this.appView != null) {
320
-            appView.handleDestroy();
321
-        }
322
-    }
323
-
324
-    /**
325
-     * Called when view focus is changed
326
-     */
327
-    @Override
328
-    public void onWindowFocusChanged(boolean hasFocus) {
329
-        super.onWindowFocusChanged(hasFocus);
330
-        if (hasFocus && immersiveMode) {
331
-            setImmersiveUiVisibility();
332
-        }
333
-    }
334
-
335
-    @SuppressLint("InlinedApi")
336
-    protected void setImmersiveUiVisibility() {
337
-        final int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
338
-                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
339
-                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
340
-                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
341
-                | View.SYSTEM_UI_FLAG_FULLSCREEN
342
-                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
343
-
344
-        getWindow().getDecorView().setSystemUiVisibility(uiOptions);
345
-    }
346
-
347
-    @SuppressLint("NewApi")
348
-    @Override
349
-    public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
350
-        // Capture requestCode here so that it is captured in the setActivityResultCallback() case.
351
-        cordovaInterface.setActivityResultRequestCode(requestCode);
352
-        super.startActivityForResult(intent, requestCode, options);
353
-    }
354
-
355
-    /**
356
-     * Called when an activity you launched exits, giving you the requestCode you started it with,
357
-     * the resultCode it returned, and any additional data from it.
358
-     *
359
-     * @param requestCode The request code originally supplied to startActivityForResult(),
360
-     *                    allowing you to identify who this result came from.
361
-     * @param resultCode  The integer result code returned by the child activity through its setResult().
362
-     * @param intent      An Intent, which can return result data to the caller (various data can be attached to Intent "extras").
363
-     */
364
-    @Override
365
-    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
366
-        LOG.d(TAG, "Incoming Result. Request code = " + requestCode);
367
-        super.onActivityResult(requestCode, resultCode, intent);
368
-        cordovaInterface.onActivityResult(requestCode, resultCode, intent);
369
-    }
370
-
371
-    /**
372
-     * Report an error to the host application. These errors are unrecoverable (i.e. the main resource is unavailable).
373
-     * The errorCode parameter corresponds to one of the ERROR_* constants.
374
-     *
375
-     * @param errorCode   The error code corresponding to an ERROR_* value.
376
-     * @param description A String describing the error.
377
-     * @param failingUrl  The url that failed to load.
378
-     */
379
-    public void onReceivedError(final int errorCode, final String description, final String failingUrl) {
380
-        final CordovaActivity me = this;
381
-
382
-        // If errorUrl specified, then load it
383
-        final String errorUrl = preferences.getString("errorUrl", null);
384
-        if ((errorUrl != null) && (!failingUrl.equals(errorUrl)) && (appView != null)) {
385
-            // Load URL on UI thread
386
-            me.runOnUiThread(new Runnable() {
387
-                public void run() {
388
-                    me.appView.showWebPage(errorUrl, false, true, null);
389
-                }
390
-            });
391
-        }
392
-        // If not, then display error dialog
393
-        else {
394
-            final boolean exit = !(errorCode == WebViewClient.ERROR_HOST_LOOKUP);
395
-            me.runOnUiThread(new Runnable() {
396
-                public void run() {
397
-                    if (exit) {
398
-                        me.appView.getView().setVisibility(View.GONE);
399
-                        me.displayError("Application Error", description + " (" + failingUrl + ")", "OK", exit);
400
-                    }
401
-                }
402
-            });
403
-        }
404
-    }
405
-
406
-    /**
407
-     * Display an error dialog and optionally exit application.
408
-     */
409
-    public void displayError(final String title, final String message, final String button, final boolean exit) {
410
-        final CordovaActivity me = this;
411
-        me.runOnUiThread(new Runnable() {
412
-            public void run() {
413
-                try {
414
-                    AlertDialog.Builder dlg = new AlertDialog.Builder(me);
415
-                    dlg.setMessage(message);
416
-                    dlg.setTitle(title);
417
-                    dlg.setCancelable(false);
418
-                    dlg.setPositiveButton(button,
419
-                            new AlertDialog.OnClickListener() {
420
-                                public void onClick(DialogInterface dialog, int which) {
421
-                                    dialog.dismiss();
422
-                                    if (exit) {
423
-                                        finish();
424
-                                    }
425
-                                }
426
-                            });
427
-                    dlg.create();
428
-                    dlg.show();
429
-                } catch (Exception e) {
430
-                    finish();
431
-                }
432
-            }
433
-        });
434
-    }
435
-
436
-    /*
437
-     * Hook in Cordova for menu plugins
438
-     */
439
-    @Override
440
-    public boolean onCreateOptionsMenu(Menu menu) {
441
-        if (appView != null) {
442
-            appView.getPluginManager().postMessage("onCreateOptionsMenu", menu);
443
-        }
444
-        return super.onCreateOptionsMenu(menu);
445
-    }
446
-
447
-    @Override
448
-    public boolean onPrepareOptionsMenu(Menu menu) {
449
-        if (appView != null) {
450
-            appView.getPluginManager().postMessage("onPrepareOptionsMenu", menu);
451
-        }
452
-        return true;
453
-    }
454
-
455
-    @Override
456
-    public boolean onOptionsItemSelected(MenuItem item) {
457
-        if (appView != null) {
458
-            appView.getPluginManager().postMessage("onOptionsItemSelected", item);
459
-        }
460
-        return true;
461
-    }
462
-
463
-    /**
464
-     * Called when a message is sent to plugin.
465
-     *
466
-     * @param id   The message id
467
-     * @param data The message data
468
-     * @return Object or null
469
-     */
470
-    public Object onMessage(String id, Object data) {
471
-        if ("onReceivedError".equals(id)) {
472
-            JSONObject d = (JSONObject) data;
473
-            try {
474
-                this.onReceivedError(d.getInt("errorCode"), d.getString("description"), d.getString("url"));
475
-            } catch (JSONException e) {
476
-                e.printStackTrace();
477
-            }
478
-        } else if ("exit".equals(id)) {
479
-            finish();
480
-        }
481
-        return null;
482
-    }
483
-
484
-    protected void onSaveInstanceState(Bundle outState) {
485
-        cordovaInterface.onSaveInstanceState(outState);
486
-        super.onSaveInstanceState(outState);
487
-    }
488
-
489
-    /**
490
-     * Called by the system when the device configuration changes while your activity is running.
491
-     *
492
-     * @param newConfig The new device configuration
493
-     */
494
-    @Override
495
-    public void onConfigurationChanged(Configuration newConfig) {
496
-        super.onConfigurationChanged(newConfig);
497
-        if (this.appView == null) {
498
-            return;
499
-        }
500
-        PluginManager pm = this.appView.getPluginManager();
501
-        if (pm != null) {
502
-            pm.onConfigurationChanged(newConfig);
503
-        }
504
-    }
505
-
506
-    /**
507
-     * Called by the system when the user grants permissions
508
-     *
509
-     * @param requestCode
510
-     * @param permissions
511
-     * @param grantResults
512
-     */
513
-    @Override
514
-    public void onRequestPermissionsResult(int requestCode, String permissions[],
515
-                                           int[] grantResults) {
516
-        try
517
-        {
518
-            cordovaInterface.onRequestPermissionResult(requestCode, permissions, grantResults);
519
-        }
520
-        catch (JSONException e)
521
-        {
522
-            LOG.d(TAG, "JSONException: Parameters fed into the method are not valid");
523
-            e.printStackTrace();
524
-        }
525
-
526
-    }
527
-
528
-}

+ 0
- 113
platforms/android/CordovaLib/src/org/apache/cordova/CordovaArgs.java 查看文件

@@ -1,113 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import org.json.JSONArray;
22
-import org.json.JSONException;
23
-import org.json.JSONObject;
24
-
25
-import android.util.Base64;
26
-
27
-public class CordovaArgs {
28
-    private JSONArray baseArgs;
29
-
30
-    public CordovaArgs(JSONArray args) {
31
-        this.baseArgs = args;
32
-    }
33
-
34
-
35
-    // Pass through the basics to the base args.
36
-    public Object get(int index) throws JSONException {
37
-        return baseArgs.get(index);
38
-    }
39
-
40
-    public boolean getBoolean(int index) throws JSONException {
41
-        return baseArgs.getBoolean(index);
42
-    }
43
-
44
-    public double getDouble(int index) throws JSONException {
45
-        return baseArgs.getDouble(index);
46
-    }
47
-
48
-    public int getInt(int index) throws JSONException {
49
-        return baseArgs.getInt(index);
50
-    }
51
-
52
-    public JSONArray getJSONArray(int index) throws JSONException {
53
-        return baseArgs.getJSONArray(index);
54
-    }
55
-
56
-    public JSONObject getJSONObject(int index) throws JSONException {
57
-        return baseArgs.getJSONObject(index);
58
-    }
59
-
60
-    public long getLong(int index) throws JSONException {
61
-        return baseArgs.getLong(index);
62
-    }
63
-
64
-    public String getString(int index) throws JSONException {
65
-        return baseArgs.getString(index);
66
-    }
67
-
68
-
69
-    public Object opt(int index) {
70
-        return baseArgs.opt(index);
71
-    }
72
-
73
-    public boolean optBoolean(int index) {
74
-        return baseArgs.optBoolean(index);
75
-    }
76
-
77
-    public double optDouble(int index) {
78
-        return baseArgs.optDouble(index);
79
-    }
80
-
81
-    public int optInt(int index) {
82
-        return baseArgs.optInt(index);
83
-    }
84
-
85
-    public JSONArray optJSONArray(int index) {
86
-        return baseArgs.optJSONArray(index);
87
-    }
88
-
89
-    public JSONObject optJSONObject(int index) {
90
-        return baseArgs.optJSONObject(index);
91
-    }
92
-
93
-    public long optLong(int index) {
94
-        return baseArgs.optLong(index);
95
-    }
96
-
97
-    public String optString(int index) {
98
-        return baseArgs.optString(index);
99
-    }
100
-
101
-    public boolean isNull(int index) {
102
-        return baseArgs.isNull(index);
103
-    }
104
-
105
-
106
-    // The interesting custom helpers.
107
-    public byte[] getArrayBuffer(int index) throws JSONException {
108
-        String encoded = baseArgs.getString(index);
109
-        return Base64.decode(encoded, Base64.DEFAULT);
110
-    }
111
-}
112
-
113
-

+ 0
- 186
platforms/android/CordovaLib/src/org/apache/cordova/CordovaBridge.java 查看文件

@@ -1,186 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import android.annotation.SuppressLint;
22
-
23
-import java.security.SecureRandom;
24
-
25
-import org.json.JSONArray;
26
-import org.json.JSONException;
27
-
28
-/**
29
- * Contains APIs that the JS can call. All functions in here should also have
30
- * an equivalent entry in CordovaChromeClient.java, and be added to
31
- * cordova-js/lib/android/plugin/android/promptbasednativeapi.js
32
- */
33
-public class CordovaBridge {
34
-    private static final String LOG_TAG = "CordovaBridge";
35
-    private PluginManager pluginManager;
36
-    private NativeToJsMessageQueue jsMessageQueue;
37
-    private volatile int expectedBridgeSecret = -1; // written by UI thread, read by JS thread.
38
-
39
-    public CordovaBridge(PluginManager pluginManager, NativeToJsMessageQueue jsMessageQueue) {
40
-        this.pluginManager = pluginManager;
41
-        this.jsMessageQueue = jsMessageQueue;
42
-    }
43
-
44
-    public String jsExec(int bridgeSecret, String service, String action, String callbackId, String arguments) throws JSONException, IllegalAccessException {
45
-        if (!verifySecret("exec()", bridgeSecret)) {
46
-            return null;
47
-        }
48
-        // If the arguments weren't received, send a message back to JS.  It will switch bridge modes and try again.  See CB-2666.
49
-        // We send a message meant specifically for this case.  It starts with "@" so no other message can be encoded into the same string.
50
-        if (arguments == null) {
51
-            return "@Null arguments.";
52
-        }
53
-
54
-        jsMessageQueue.setPaused(true);
55
-        try {
56
-            // Tell the resourceApi what thread the JS is running on.
57
-            CordovaResourceApi.jsThread = Thread.currentThread();
58
-
59
-            pluginManager.exec(service, action, callbackId, arguments);
60
-            String ret = null;
61
-            if (!NativeToJsMessageQueue.DISABLE_EXEC_CHAINING) {
62
-                ret = jsMessageQueue.popAndEncode(false);
63
-            }
64
-            return ret;
65
-        } catch (Throwable e) {
66
-            e.printStackTrace();
67
-            return "";
68
-        } finally {
69
-            jsMessageQueue.setPaused(false);
70
-        }
71
-    }
72
-
73
-    public void jsSetNativeToJsBridgeMode(int bridgeSecret, int value) throws IllegalAccessException {
74
-        if (!verifySecret("setNativeToJsBridgeMode()", bridgeSecret)) {
75
-            return;
76
-        }
77
-        jsMessageQueue.setBridgeMode(value);
78
-    }
79
-
80
-    public String jsRetrieveJsMessages(int bridgeSecret, boolean fromOnlineEvent) throws IllegalAccessException {
81
-        if (!verifySecret("retrieveJsMessages()", bridgeSecret)) {
82
-            return null;
83
-        }
84
-        return jsMessageQueue.popAndEncode(fromOnlineEvent);
85
-    }
86
-
87
-    private boolean verifySecret(String action, int bridgeSecret) throws IllegalAccessException {
88
-        if (!jsMessageQueue.isBridgeEnabled()) {
89
-            if (bridgeSecret == -1) {
90
-                LOG.d(LOG_TAG, action + " call made before bridge was enabled.");
91
-            } else {
92
-                LOG.d(LOG_TAG, "Ignoring " + action + " from previous page load.");
93
-            }
94
-            return false;
95
-        }
96
-        // Bridge secret wrong and bridge not due to it being from the previous page.
97
-        if (expectedBridgeSecret < 0 || bridgeSecret != expectedBridgeSecret) {
98
-            LOG.e(LOG_TAG, "Bridge access attempt with wrong secret token, possibly from malicious code. Disabling exec() bridge!");
99
-            clearBridgeSecret();
100
-            throw new IllegalAccessException();
101
-        }
102
-        return true;
103
-    }
104
-
105
-    /** Called on page transitions */
106
-    void clearBridgeSecret() {
107
-        expectedBridgeSecret = -1;
108
-    }
109
-
110
-    public boolean isSecretEstablished() {
111
-        return expectedBridgeSecret != -1;
112
-    }
113
-
114
-    /** Called by cordova.js to initialize the bridge. */
115
-    //On old Androids SecureRandom isn't really secure, this is the least of your problems if
116
-    //you're running Android 4.3 and below in 2017
117
-    int generateBridgeSecret() {
118
-        SecureRandom randGen = new SecureRandom();
119
-        expectedBridgeSecret = randGen.nextInt(Integer.MAX_VALUE);
120
-        return expectedBridgeSecret;
121
-    }
122
-
123
-    public void reset() {
124
-        jsMessageQueue.reset();
125
-        clearBridgeSecret();
126
-    }
127
-
128
-    public String promptOnJsPrompt(String origin, String message, String defaultValue) {
129
-        if (defaultValue != null && defaultValue.startsWith("gap:")) {
130
-            JSONArray array;
131
-            try {
132
-                array = new JSONArray(defaultValue.substring(4));
133
-                int bridgeSecret = array.getInt(0);
134
-                String service = array.getString(1);
135
-                String action = array.getString(2);
136
-                String callbackId = array.getString(3);
137
-                String r = jsExec(bridgeSecret, service, action, callbackId, message);
138
-                return r == null ? "" : r;
139
-            } catch (JSONException e) {
140
-                e.printStackTrace();
141
-            } catch (IllegalAccessException e) {
142
-                e.printStackTrace();
143
-            }
144
-            return "";
145
-        }
146
-        // Sets the native->JS bridge mode.
147
-        else if (defaultValue != null && defaultValue.startsWith("gap_bridge_mode:")) {
148
-            try {
149
-                int bridgeSecret = Integer.parseInt(defaultValue.substring(16));
150
-                jsSetNativeToJsBridgeMode(bridgeSecret, Integer.parseInt(message));
151
-            } catch (NumberFormatException e){
152
-                e.printStackTrace();
153
-            } catch (IllegalAccessException e) {
154
-                e.printStackTrace();
155
-            }
156
-            return "";
157
-        }
158
-        // Polling for JavaScript messages
159
-        else if (defaultValue != null && defaultValue.startsWith("gap_poll:")) {
160
-            int bridgeSecret = Integer.parseInt(defaultValue.substring(9));
161
-            try {
162
-                String r = jsRetrieveJsMessages(bridgeSecret, "1".equals(message));
163
-                return r == null ? "" : r;
164
-            } catch (IllegalAccessException e) {
165
-                e.printStackTrace();
166
-            }
167
-            return "";
168
-        }
169
-        else if (defaultValue != null && defaultValue.startsWith("gap_init:")) {
170
-            // Protect against random iframes being able to talk through the bridge.
171
-            // Trust only pages which the app would have been allowed to navigate to anyway.
172
-            if (pluginManager.shouldAllowBridgeAccess(origin)) {
173
-                // Enable the bridge
174
-                int bridgeMode = Integer.parseInt(defaultValue.substring(9));
175
-                jsMessageQueue.setBridgeMode(bridgeMode);
176
-                // Tell JS the bridge secret.
177
-                int secret = generateBridgeSecret();
178
-                return ""+secret;
179
-            } else {
180
-                LOG.e(LOG_TAG, "gap_init called from restricted origin: " + origin);
181
-            }
182
-            return "";
183
-        }
184
-        return null;
185
-    }
186
-}

+ 0
- 105
platforms/android/CordovaLib/src/org/apache/cordova/CordovaClientCertRequest.java 查看文件

@@ -1,105 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import java.security.Principal;
22
-import java.security.PrivateKey;
23
-import java.security.cert.X509Certificate;
24
-
25
-import android.annotation.SuppressLint;
26
-import android.webkit.ClientCertRequest;
27
-
28
-/**
29
- * Implementation of the ICordovaClientCertRequest for Android WebView.
30
- *
31
- */
32
-public class CordovaClientCertRequest implements ICordovaClientCertRequest {
33
-
34
-    private final ClientCertRequest request;
35
-
36
-    public CordovaClientCertRequest(ClientCertRequest request) {
37
-        this.request = request;
38
-    }
39
-
40
-    /**
41
-     * Cancel this request
42
-     */
43
-    @SuppressLint("NewApi")
44
-    public void cancel()
45
-    {
46
-        request.cancel();
47
-    }
48
-
49
-    /*
50
-     * Returns the host name of the server requesting the certificate.
51
-     */
52
-    @SuppressLint("NewApi")
53
-    public String getHost()
54
-    {
55
-        return request.getHost();
56
-    }
57
-
58
-    /*
59
-     * Returns the acceptable types of asymmetric keys (can be null).
60
-     */
61
-    @SuppressLint("NewApi")
62
-    public String[] getKeyTypes()
63
-    {
64
-        return request.getKeyTypes();
65
-    }
66
-
67
-    /*
68
-     * Returns the port number of the server requesting the certificate.
69
-     */
70
-    @SuppressLint("NewApi")
71
-    public int getPort()
72
-    {
73
-        return request.getPort();
74
-    }
75
-
76
-    /*
77
-     * Returns the acceptable certificate issuers for the certificate matching the private key (can be null).
78
-     */
79
-    @SuppressLint("NewApi")
80
-    public Principal[] getPrincipals()
81
-    {
82
-        return request.getPrincipals();
83
-    }
84
-
85
-    /*
86
-     * Ignore the request for now. Do not remember user's choice.
87
-     */
88
-    @SuppressLint("NewApi")
89
-    public void ignore()
90
-    {
91
-        request.ignore();
92
-    }
93
-
94
-    /*
95
-     * Proceed with the specified private key and client certificate chain. Remember the user's positive choice and use it for future requests.
96
-     *
97
-     * @param privateKey The privateKey
98
-     * @param chain The certificate chain
99
-     */
100
-    @SuppressLint("NewApi")
101
-    public void proceed(PrivateKey privateKey, X509Certificate[] chain)
102
-    {
103
-        request.proceed(privateKey, chain);
104
-    }
105
-}

+ 0
- 152
platforms/android/CordovaLib/src/org/apache/cordova/CordovaDialogsHelper.java 查看文件

@@ -1,152 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import android.app.AlertDialog;
22
-import android.content.Context;
23
-import android.content.DialogInterface;
24
-import android.view.KeyEvent;
25
-import android.widget.EditText;
26
-
27
-/**
28
- * Helper class for WebViews to implement prompt(), alert(), confirm() dialogs.
29
- */
30
-public class CordovaDialogsHelper {
31
-    private final Context context;
32
-    private AlertDialog lastHandledDialog;
33
-
34
-    public CordovaDialogsHelper(Context context) {
35
-        this.context = context;
36
-    }
37
-
38
-    public void showAlert(String message, final Result result) {
39
-        AlertDialog.Builder dlg = new AlertDialog.Builder(context);
40
-        dlg.setMessage(message);
41
-        dlg.setTitle("Alert");
42
-        //Don't let alerts break the back button
43
-        dlg.setCancelable(true);
44
-        dlg.setPositiveButton(android.R.string.ok,
45
-                new AlertDialog.OnClickListener() {
46
-                    public void onClick(DialogInterface dialog, int which) {
47
-                        result.gotResult(true, null);
48
-                    }
49
-                });
50
-        dlg.setOnCancelListener(
51
-                new DialogInterface.OnCancelListener() {
52
-                    public void onCancel(DialogInterface dialog) {
53
-                        result.gotResult(false, null);
54
-                    }
55
-                });
56
-        dlg.setOnKeyListener(new DialogInterface.OnKeyListener() {
57
-            //DO NOTHING
58
-            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
59
-                if (keyCode == KeyEvent.KEYCODE_BACK)
60
-                {
61
-                    result.gotResult(true, null);
62
-                    return false;
63
-                }
64
-                else
65
-                    return true;
66
-            }
67
-        });
68
-        lastHandledDialog = dlg.show();
69
-    }
70
-
71
-    public void showConfirm(String message, final Result result) {
72
-        AlertDialog.Builder dlg = new AlertDialog.Builder(context);
73
-        dlg.setMessage(message);
74
-        dlg.setTitle("Confirm");
75
-        dlg.setCancelable(true);
76
-        dlg.setPositiveButton(android.R.string.ok,
77
-                new DialogInterface.OnClickListener() {
78
-                    public void onClick(DialogInterface dialog, int which) {
79
-                        result.gotResult(true, null);
80
-                    }
81
-                });
82
-        dlg.setNegativeButton(android.R.string.cancel,
83
-                new DialogInterface.OnClickListener() {
84
-                    public void onClick(DialogInterface dialog, int which) {
85
-                        result.gotResult(false, null);
86
-                    }
87
-                });
88
-        dlg.setOnCancelListener(
89
-                new DialogInterface.OnCancelListener() {
90
-                    public void onCancel(DialogInterface dialog) {
91
-                        result.gotResult(false, null);
92
-                    }
93
-                });
94
-        dlg.setOnKeyListener(new DialogInterface.OnKeyListener() {
95
-            //DO NOTHING
96
-            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
97
-                if (keyCode == KeyEvent.KEYCODE_BACK)
98
-                {
99
-                    result.gotResult(false, null);
100
-                    return false;
101
-                }
102
-                else
103
-                    return true;
104
-            }
105
-        });
106
-        lastHandledDialog = dlg.show();
107
-    }
108
-
109
-    /**
110
-     * Tell the client to display a prompt dialog to the user.
111
-     * If the client returns true, WebView will assume that the client will
112
-     * handle the prompt dialog and call the appropriate JsPromptResult method.
113
-     *
114
-     * Since we are hacking prompts for our own purposes, we should not be using them for
115
-     * this purpose, perhaps we should hack console.log to do this instead!
116
-     */
117
-    public void showPrompt(String message, String defaultValue, final Result result) {
118
-        // Returning false would also show a dialog, but the default one shows the origin (ugly).
119
-        AlertDialog.Builder dlg = new AlertDialog.Builder(context);
120
-        dlg.setMessage(message);
121
-        final EditText input = new EditText(context);
122
-        if (defaultValue != null) {
123
-            input.setText(defaultValue);
124
-        }
125
-        dlg.setView(input);
126
-        dlg.setCancelable(false);
127
-        dlg.setPositiveButton(android.R.string.ok,
128
-                new DialogInterface.OnClickListener() {
129
-                    public void onClick(DialogInterface dialog, int which) {
130
-                        String userText = input.getText().toString();
131
-                        result.gotResult(true, userText);
132
-                    }
133
-                });
134
-        dlg.setNegativeButton(android.R.string.cancel,
135
-                new DialogInterface.OnClickListener() {
136
-                    public void onClick(DialogInterface dialog, int which) {
137
-                        result.gotResult(false, null);
138
-                    }
139
-                });
140
-        lastHandledDialog = dlg.show();
141
-    }
142
-
143
-    public void destroyLastDialog(){
144
-        if (lastHandledDialog != null){
145
-            lastHandledDialog.cancel();
146
-        }
147
-    }
148
-
149
-    public interface Result {
150
-        public void gotResult(boolean success, String value);
151
-    }
152
-}

+ 0
- 51
platforms/android/CordovaLib/src/org/apache/cordova/CordovaHttpAuthHandler.java 查看文件

@@ -1,51 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import android.webkit.HttpAuthHandler;
22
-
23
-/**
24
- * Specifies interface for HTTP auth handler object which is used to handle auth requests and
25
- * specifying user credentials.
26
- */
27
-public class CordovaHttpAuthHandler implements ICordovaHttpAuthHandler {
28
-
29
-    private final HttpAuthHandler handler;
30
-
31
-    public CordovaHttpAuthHandler(HttpAuthHandler handler) {
32
-        this.handler = handler;
33
-    }
34
-
35
-    /**
36
-     * Instructs the WebView to cancel the authentication request.
37
-     */
38
-    public void cancel () {
39
-        this.handler.cancel();
40
-    }
41
-
42
-    /**
43
-     * Instructs the WebView to proceed with the authentication with the given credentials.
44
-     *
45
-     * @param username
46
-     * @param password
47
-     */
48
-    public void proceed (String username, String password) {
49
-        this.handler.proceed(username, password);
50
-    }
51
-}

+ 0
- 97
platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterface.java 查看文件

@@ -1,97 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import android.app.Activity;
22
-import android.content.Context;
23
-import android.content.Intent;
24
-
25
-import org.apache.cordova.CordovaPlugin;
26
-
27
-import java.util.concurrent.ExecutorService;
28
-
29
-/**
30
- * The Activity interface that is implemented by CordovaActivity.
31
- * It is used to isolate plugin development, and remove dependency on entire Cordova library.
32
- */
33
-public interface CordovaInterface {
34
-
35
-    /**
36
-     * Launch an activity for which you would like a result when it finished. When this activity exits,
37
-     * your onActivityResult() method will be called.
38
-     *
39
-     * @param command     The command object
40
-     * @param intent      The intent to start
41
-     * @param requestCode   The request code that is passed to callback to identify the activity
42
-     */
43
-    abstract public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode);
44
-
45
-    /**
46
-     * Set the plugin to be called when a sub-activity exits.
47
-     *
48
-     * @param plugin      The plugin on which onActivityResult is to be called
49
-     */
50
-    abstract public void setActivityResultCallback(CordovaPlugin plugin);
51
-
52
-    /**
53
-     * Get the Android activity.
54
-     *
55
-     * If a custom engine lives outside of the Activity's lifecycle the return value may be null.
56
-     *
57
-     * @return the Activity
58
-     */
59
-    public abstract Activity getActivity();
60
-
61
-    /**
62
-     * Get the Android context.
63
-     *
64
-     * @return the Context
65
-     */
66
-    public Context getContext();
67
-
68
-    /**
69
-     * Called when a message is sent to plugin.
70
-     *
71
-     * @param id            The message id
72
-     * @param data          The message data
73
-     * @return              Object or null
74
-     */
75
-    public Object onMessage(String id, Object data);
76
-
77
-    /**
78
-     * Returns a shared thread pool that can be used for background tasks.
79
-     */
80
-    public ExecutorService getThreadPool();
81
-
82
-    /**
83
-     * Sends a permission request to the activity for one permission.
84
-     */
85
-    public void requestPermission(CordovaPlugin plugin, int requestCode, String permission);
86
-
87
-    /**
88
-     * Sends a permission request to the activity for a group of permissions
89
-     */
90
-    public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions);
91
-
92
-    /**
93
-     * Check for a permission.  Returns true if the permission is granted, false otherwise.
94
-     */
95
-    public boolean hasPermission(String permission);
96
-
97
-}

+ 0
- 249
platforms/android/CordovaLib/src/org/apache/cordova/CordovaInterfaceImpl.java 查看文件

@@ -1,249 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-package org.apache.cordova;
21
-
22
-import android.annotation.SuppressLint;
23
-import android.app.Activity;
24
-import android.content.Context;
25
-import android.content.Intent;
26
-import android.content.pm.PackageManager;
27
-import android.os.Build;
28
-import android.os.Bundle;
29
-import android.util.Pair;
30
-
31
-import org.json.JSONException;
32
-import org.json.JSONObject;
33
-
34
-import java.util.concurrent.ExecutorService;
35
-import java.util.concurrent.Executors;
36
-
37
-/**
38
- * Default implementation of CordovaInterface.
39
- */
40
-public class CordovaInterfaceImpl implements CordovaInterface {
41
-    private static final String TAG = "CordovaInterfaceImpl";
42
-    protected Activity activity;
43
-    protected ExecutorService threadPool;
44
-    protected PluginManager pluginManager;
45
-
46
-    protected ActivityResultHolder savedResult;
47
-    protected CallbackMap permissionResultCallbacks;
48
-    protected CordovaPlugin activityResultCallback;
49
-    protected String initCallbackService;
50
-    protected int activityResultRequestCode;
51
-    protected boolean activityWasDestroyed = false;
52
-    protected Bundle savedPluginState;
53
-
54
-    public CordovaInterfaceImpl(Activity activity) {
55
-        this(activity, Executors.newCachedThreadPool());
56
-    }
57
-
58
-    public CordovaInterfaceImpl(Activity activity, ExecutorService threadPool) {
59
-        this.activity = activity;
60
-        this.threadPool = threadPool;
61
-        this.permissionResultCallbacks = new CallbackMap();
62
-    }
63
-
64
-    @Override
65
-    public void startActivityForResult(CordovaPlugin command, Intent intent, int requestCode) {
66
-        setActivityResultCallback(command);
67
-        try {
68
-            activity.startActivityForResult(intent, requestCode);
69
-        } catch (RuntimeException e) { // E.g.: ActivityNotFoundException
70
-            activityResultCallback = null;
71
-            throw e;
72
-        }
73
-    }
74
-
75
-    @Override
76
-    public void setActivityResultCallback(CordovaPlugin plugin) {
77
-        // Cancel any previously pending activity.
78
-        if (activityResultCallback != null) {
79
-            activityResultCallback.onActivityResult(activityResultRequestCode, Activity.RESULT_CANCELED, null);
80
-        }
81
-        activityResultCallback = plugin;
82
-    }
83
-
84
-    @Override
85
-    public Activity getActivity() {
86
-        return activity;
87
-    }
88
-
89
-    @Override
90
-    public Context getContext() {
91
-        return activity;
92
-    }
93
-
94
-    @Override
95
-    public Object onMessage(String id, Object data) {
96
-        if ("exit".equals(id)) {
97
-            activity.finish();
98
-        }
99
-        return null;
100
-    }
101
-
102
-    @Override
103
-    public ExecutorService getThreadPool() {
104
-        return threadPool;
105
-    }
106
-
107
-    /**
108
-     * Dispatches any pending onActivityResult callbacks and sends the resume event if the
109
-     * Activity was destroyed by the OS.
110
-     */
111
-    public void onCordovaInit(PluginManager pluginManager) {
112
-        this.pluginManager = pluginManager;
113
-        if (savedResult != null) {
114
-            onActivityResult(savedResult.requestCode, savedResult.resultCode, savedResult.intent);
115
-        } else if(activityWasDestroyed) {
116
-            // If there was no Activity result, we still need to send out the resume event if the
117
-            // Activity was destroyed by the OS
118
-            activityWasDestroyed = false;
119
-            if(pluginManager != null)
120
-            {
121
-                CoreAndroid appPlugin = (CoreAndroid) pluginManager.getPlugin(CoreAndroid.PLUGIN_NAME);
122
-                if(appPlugin != null) {
123
-                    JSONObject obj = new JSONObject();
124
-                    try {
125
-                        obj.put("action", "resume");
126
-                    } catch (JSONException e) {
127
-                        LOG.e(TAG, "Failed to create event message", e);
128
-                    }
129
-                    appPlugin.sendResumeEvent(new PluginResult(PluginResult.Status.OK, obj));
130
-                }
131
-            }
132
-
133
-        }
134
-    }
135
-
136
-    /**
137
-     * Routes the result to the awaiting plugin. Returns false if no plugin was waiting.
138
-     */
139
-    public boolean onActivityResult(int requestCode, int resultCode, Intent intent) {
140
-        CordovaPlugin callback = activityResultCallback;
141
-        if(callback == null && initCallbackService != null) {
142
-            // The application was restarted, but had defined an initial callback
143
-            // before being shut down.
144
-            savedResult = new ActivityResultHolder(requestCode, resultCode, intent);
145
-            if (pluginManager != null) {
146
-                callback = pluginManager.getPlugin(initCallbackService);
147
-                if(callback != null) {
148
-                    callback.onRestoreStateForActivityResult(savedPluginState.getBundle(callback.getServiceName()),
149
-                            new ResumeCallback(callback.getServiceName(), pluginManager));
150
-                }
151
-            }
152
-        }
153
-        activityResultCallback = null;
154
-
155
-        if (callback != null) {
156
-            LOG.d(TAG, "Sending activity result to plugin");
157
-            initCallbackService = null;
158
-            savedResult = null;
159
-            callback.onActivityResult(requestCode, resultCode, intent);
160
-            return true;
161
-        }
162
-        LOG.w(TAG, "Got an activity result, but no plugin was registered to receive it" + (savedResult != null ? " yet!" : "."));
163
-        return false;
164
-    }
165
-
166
-    /**
167
-     * Call this from your startActivityForResult() overload. This is required to catch the case
168
-     * where plugins use Activity.startActivityForResult() + CordovaInterface.setActivityResultCallback()
169
-     * rather than CordovaInterface.startActivityForResult().
170
-     */
171
-    public void setActivityResultRequestCode(int requestCode) {
172
-        activityResultRequestCode = requestCode;
173
-    }
174
-
175
-    /**
176
-     * Saves parameters for startActivityForResult().
177
-     */
178
-    public void onSaveInstanceState(Bundle outState) {
179
-        if (activityResultCallback != null) {
180
-            String serviceName = activityResultCallback.getServiceName();
181
-            outState.putString("callbackService", serviceName);
182
-        }
183
-        if(pluginManager != null){
184
-            outState.putBundle("plugin", pluginManager.onSaveInstanceState());
185
-        }
186
-
187
-    }
188
-
189
-    /**
190
-     * Call this from onCreate() so that any saved startActivityForResult parameters will be restored.
191
-     */
192
-    public void restoreInstanceState(Bundle savedInstanceState) {
193
-        initCallbackService = savedInstanceState.getString("callbackService");
194
-        savedPluginState = savedInstanceState.getBundle("plugin");
195
-        activityWasDestroyed = true;
196
-    }
197
-
198
-    private static class ActivityResultHolder {
199
-        private int requestCode;
200
-        private int resultCode;
201
-        private Intent intent;
202
-
203
-        public ActivityResultHolder(int requestCode, int resultCode, Intent intent) {
204
-            this.requestCode = requestCode;
205
-            this.resultCode = resultCode;
206
-            this.intent = intent;
207
-        }
208
-    }
209
-
210
-    /**
211
-     * Called by the system when the user grants permissions
212
-     *
213
-     * @param requestCode
214
-     * @param permissions
215
-     * @param grantResults
216
-     */
217
-    public void onRequestPermissionResult(int requestCode, String[] permissions,
218
-                                          int[] grantResults) throws JSONException {
219
-        Pair<CordovaPlugin, Integer> callback = permissionResultCallbacks.getAndRemoveCallback(requestCode);
220
-        if(callback != null) {
221
-            callback.first.onRequestPermissionResult(callback.second, permissions, grantResults);
222
-        }
223
-    }
224
-
225
-    public void requestPermission(CordovaPlugin plugin, int requestCode, String permission) {
226
-        String[] permissions = new String [1];
227
-        permissions[0] = permission;
228
-        requestPermissions(plugin, requestCode, permissions);
229
-    }
230
-
231
-        @SuppressLint("NewApi")
232
-    public void requestPermissions(CordovaPlugin plugin, int requestCode, String [] permissions) {
233
-        int mappedRequestCode = permissionResultCallbacks.registerCallback(plugin, requestCode);
234
-        getActivity().requestPermissions(permissions, mappedRequestCode);
235
-    }
236
-
237
-    public boolean hasPermission(String permission)
238
-    {
239
-        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
240
-        {
241
-            int result = activity.checkSelfPermission(permission);
242
-            return PackageManager.PERMISSION_GRANTED == result;
243
-        }
244
-        else
245
-        {
246
-            return true;
247
-        }
248
-    }
249
-}

+ 0
- 422
platforms/android/CordovaLib/src/org/apache/cordova/CordovaPlugin.java 查看文件

@@ -1,422 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import org.apache.cordova.CordovaArgs;
22
-import org.apache.cordova.CordovaWebView;
23
-import org.apache.cordova.CordovaInterface;
24
-import org.apache.cordova.CallbackContext;
25
-import org.json.JSONArray;
26
-import org.json.JSONException;
27
-
28
-import android.content.Intent;
29
-import android.content.pm.PackageManager;
30
-import android.content.res.Configuration;
31
-import android.net.Uri;
32
-import android.os.Build;
33
-import android.os.Bundle;
34
-
35
-import java.io.FileNotFoundException;
36
-import java.io.IOException;
37
-
38
-/**
39
- * Plugins must extend this class and override one of the execute methods.
40
- */
41
-public class CordovaPlugin {
42
-    public CordovaWebView webView;
43
-    public CordovaInterface cordova;
44
-    protected CordovaPreferences preferences;
45
-    private String serviceName;
46
-
47
-    /**
48
-     * Call this after constructing to initialize the plugin.
49
-     * Final because we want to be able to change args without breaking plugins.
50
-     */
51
-    public final void privateInitialize(String serviceName, CordovaInterface cordova, CordovaWebView webView, CordovaPreferences preferences) {
52
-        assert this.cordova == null;
53
-        this.serviceName = serviceName;
54
-        this.cordova = cordova;
55
-        this.webView = webView;
56
-        this.preferences = preferences;
57
-        initialize(cordova, webView);
58
-        pluginInitialize();
59
-    }
60
-
61
-    /**
62
-     * Called after plugin construction and fields have been initialized.
63
-     * Prefer to use pluginInitialize instead since there is no value in
64
-     * having parameters on the initialize() function.
65
-     */
66
-    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
67
-    }
68
-
69
-    /**
70
-     * Called after plugin construction and fields have been initialized.
71
-     */
72
-    protected void pluginInitialize() {
73
-    }
74
-
75
-    /**
76
-     * Returns the plugin's service name (what you'd use when calling pluginManger.getPlugin())
77
-     */
78
-    public String getServiceName() {
79
-        return serviceName;
80
-    }
81
-
82
-    /**
83
-     * Executes the request.
84
-     *
85
-     * This method is called from the WebView thread. To do a non-trivial amount of work, use:
86
-     *     cordova.getThreadPool().execute(runnable);
87
-     *
88
-     * To run on the UI thread, use:
89
-     *     cordova.getActivity().runOnUiThread(runnable);
90
-     *
91
-     * @param action          The action to execute.
92
-     * @param rawArgs         The exec() arguments in JSON form.
93
-     * @param callbackContext The callback context used when calling back into JavaScript.
94
-     * @return                Whether the action was valid.
95
-     */
96
-    public boolean execute(String action, String rawArgs, CallbackContext callbackContext) throws JSONException {
97
-        JSONArray args = new JSONArray(rawArgs);
98
-        return execute(action, args, callbackContext);
99
-    }
100
-
101
-    /**
102
-     * Executes the request.
103
-     *
104
-     * This method is called from the WebView thread. To do a non-trivial amount of work, use:
105
-     *     cordova.getThreadPool().execute(runnable);
106
-     *
107
-     * To run on the UI thread, use:
108
-     *     cordova.getActivity().runOnUiThread(runnable);
109
-     *
110
-     * @param action          The action to execute.
111
-     * @param args            The exec() arguments.
112
-     * @param callbackContext The callback context used when calling back into JavaScript.
113
-     * @return                Whether the action was valid.
114
-     */
115
-    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
116
-        CordovaArgs cordovaArgs = new CordovaArgs(args);
117
-        return execute(action, cordovaArgs, callbackContext);
118
-    }
119
-
120
-    /**
121
-     * Executes the request.
122
-     *
123
-     * This method is called from the WebView thread. To do a non-trivial amount of work, use:
124
-     *     cordova.getThreadPool().execute(runnable);
125
-     *
126
-     * To run on the UI thread, use:
127
-     *     cordova.getActivity().runOnUiThread(runnable);
128
-     *
129
-     * @param action          The action to execute.
130
-     * @param args            The exec() arguments, wrapped with some Cordova helpers.
131
-     * @param callbackContext The callback context used when calling back into JavaScript.
132
-     * @return                Whether the action was valid.
133
-     */
134
-    public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
135
-        return false;
136
-    }
137
-
138
-    /**
139
-     * Called when the system is about to start resuming a previous activity.
140
-     *
141
-     * @param multitasking		Flag indicating if multitasking is turned on for app
142
-     */
143
-    public void onPause(boolean multitasking) {
144
-    }
145
-
146
-    /**
147
-     * Called when the activity will start interacting with the user.
148
-     *
149
-     * @param multitasking		Flag indicating if multitasking is turned on for app
150
-     */
151
-    public void onResume(boolean multitasking) {
152
-    }
153
-
154
-    /**
155
-     * Called when the activity is becoming visible to the user.
156
-     */
157
-    public void onStart() {
158
-    }
159
-
160
-    /**
161
-     * Called when the activity is no longer visible to the user.
162
-     */
163
-    public void onStop() {
164
-    }
165
-
166
-    /**
167
-     * Called when the activity receives a new intent.
168
-     */
169
-    public void onNewIntent(Intent intent) {
170
-    }
171
-
172
-    /**
173
-     * The final call you receive before your activity is destroyed.
174
-     */
175
-    public void onDestroy() {
176
-    }
177
-
178
-    /**
179
-     * Called when the Activity is being destroyed (e.g. if a plugin calls out to an external
180
-     * Activity and the OS kills the CordovaActivity in the background). The plugin should save its
181
-     * state in this method only if it is awaiting the result of an external Activity and needs
182
-     * to preserve some information so as to handle that result; onRestoreStateForActivityResult()
183
-     * will only be called if the plugin is the recipient of an Activity result
184
-     *
185
-     * @return  Bundle containing the state of the plugin or null if state does not need to be saved
186
-     */
187
-    public Bundle onSaveInstanceState() {
188
-        return null;
189
-    }
190
-
191
-    /**
192
-     * Called when a plugin is the recipient of an Activity result after the CordovaActivity has
193
-     * been destroyed. The Bundle will be the same as the one the plugin returned in
194
-     * onSaveInstanceState()
195
-     *
196
-     * @param state             Bundle containing the state of the plugin
197
-     * @param callbackContext   Replacement Context to return the plugin result to
198
-     */
199
-    public void onRestoreStateForActivityResult(Bundle state, CallbackContext callbackContext) {}
200
-
201
-    /**
202
-     * Called when a message is sent to plugin.
203
-     *
204
-     * @param id            The message id
205
-     * @param data          The message data
206
-     * @return              Object to stop propagation or null
207
-     */
208
-    public Object onMessage(String id, Object data) {
209
-        return null;
210
-    }
211
-
212
-    /**
213
-     * Called when an activity you launched exits, giving you the requestCode you started it with,
214
-     * the resultCode it returned, and any additional data from it.
215
-     *
216
-     * @param requestCode   The request code originally supplied to startActivityForResult(),
217
-     *                      allowing you to identify who this result came from.
218
-     * @param resultCode    The integer result code returned by the child activity through its setResult().
219
-     * @param intent        An Intent, which can return result data to the caller (various data can be
220
-     *                      attached to Intent "extras").
221
-     */
222
-    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
223
-    }
224
-
225
-    /**
226
-     * Hook for blocking the loading of external resources.
227
-     *
228
-     * This will be called when the WebView's shouldInterceptRequest wants to
229
-     * know whether to open a connection to an external resource. Return false
230
-     * to block the request: if any plugin returns false, Cordova will block
231
-     * the request. If all plugins return null, the default policy will be
232
-     * enforced. If at least one plugin returns true, and no plugins return
233
-     * false, then the request will proceed.
234
-     *
235
-     * Note that this only affects resource requests which are routed through
236
-     * WebViewClient.shouldInterceptRequest, such as XMLHttpRequest requests and
237
-     * img tag loads. WebSockets and media requests (such as <video> and <audio>
238
-     * tags) are not affected by this method. Use CSP headers to control access
239
-     * to such resources.
240
-     */
241
-    public Boolean shouldAllowRequest(String url) {
242
-        return null;
243
-    }
244
-
245
-    /**
246
-     * Hook for blocking navigation by the Cordova WebView. This applies both to top-level and
247
-     * iframe navigations.
248
-     *
249
-     * This will be called when the WebView's needs to know whether to navigate
250
-     * to a new page. Return false to block the navigation: if any plugin
251
-     * returns false, Cordova will block the navigation. If all plugins return
252
-     * null, the default policy will be enforced. It at least one plugin returns
253
-     * true, and no plugins return false, then the navigation will proceed.
254
-     */
255
-    public Boolean shouldAllowNavigation(String url) {
256
-        return null;
257
-    }
258
-
259
-    /**
260
-     * Hook for allowing page to call exec(). By default, this returns the result of
261
-     * shouldAllowNavigation(). It's generally unsafe to allow untrusted content to be loaded
262
-     * into a CordovaWebView, even within an iframe, so it's best not to touch this.
263
-     */
264
-    public Boolean shouldAllowBridgeAccess(String url) {
265
-        return shouldAllowNavigation(url);
266
-    }
267
-
268
-    /**
269
-     * Hook for blocking the launching of Intents by the Cordova application.
270
-     *
271
-     * This will be called when the WebView will not navigate to a page, but
272
-     * could launch an intent to handle the URL. Return false to block this: if
273
-     * any plugin returns false, Cordova will block the navigation. If all
274
-     * plugins return null, the default policy will be enforced. If at least one
275
-     * plugin returns true, and no plugins return false, then the URL will be
276
-     * opened.
277
-     */
278
-    public Boolean shouldOpenExternalUrl(String url) {
279
-        return null;
280
-    }
281
-
282
-    /**
283
-     * Allows plugins to handle a link being clicked. Return true here to cancel the navigation.
284
-     *
285
-     * @param url           The URL that is trying to be loaded in the Cordova webview.
286
-     * @return              Return true to prevent the URL from loading. Default is false.
287
-     */
288
-    public boolean onOverrideUrlLoading(String url) {
289
-        return false;
290
-    }
291
-
292
-    /**
293
-     * Hook for redirecting requests. Applies to WebView requests as well as requests made by plugins.
294
-     * To handle the request directly, return a URI in the form:
295
-     *
296
-     *    cdvplugin://pluginId/...
297
-     *
298
-     * And implement handleOpenForRead().
299
-     * To make this easier, use the toPluginUri() and fromPluginUri() helpers:
300
-     *
301
-     *     public Uri remapUri(Uri uri) { return toPluginUri(uri); }
302
-     *
303
-     *     public CordovaResourceApi.OpenForReadResult handleOpenForRead(Uri uri) throws IOException {
304
-     *         Uri origUri = fromPluginUri(uri);
305
-     *         ...
306
-     *     }
307
-     */
308
-    public Uri remapUri(Uri uri) {
309
-        return null;
310
-    }
311
-
312
-    /**
313
-     * Called to handle CordovaResourceApi.openForRead() calls for a cdvplugin://pluginId/ URL.
314
-     * Should never return null.
315
-     * Added in cordova-android@4.0.0
316
-     */
317
-    public CordovaResourceApi.OpenForReadResult handleOpenForRead(Uri uri) throws IOException {
318
-        throw new FileNotFoundException("Plugin can't handle uri: " + uri);
319
-    }
320
-
321
-    /**
322
-     * Refer to remapUri()
323
-     * Added in cordova-android@4.0.0
324
-     */
325
-    protected Uri toPluginUri(Uri origUri) {
326
-        return new Uri.Builder()
327
-            .scheme(CordovaResourceApi.PLUGIN_URI_SCHEME)
328
-            .authority(serviceName)
329
-            .appendQueryParameter("origUri", origUri.toString())
330
-            .build();
331
-    }
332
-
333
-    /**
334
-     * Refer to remapUri()
335
-     * Added in cordova-android@4.0.0
336
-     */
337
-    protected Uri fromPluginUri(Uri pluginUri) {
338
-        return Uri.parse(pluginUri.getQueryParameter("origUri"));
339
-    }
340
-
341
-    /**
342
-     * Called when the WebView does a top-level navigation or refreshes.
343
-     *
344
-     * Plugins should stop any long-running processes and clean up internal state.
345
-     *
346
-     * Does nothing by default.
347
-     */
348
-    public void onReset() {
349
-    }
350
-
351
-    /**
352
-     * Called when the system received an HTTP authentication request. Plugin can use
353
-     * the supplied HttpAuthHandler to process this auth challenge.
354
-     *
355
-     * @param view              The WebView that is initiating the callback
356
-     * @param handler           The HttpAuthHandler used to set the WebView's response
357
-     * @param host              The host requiring authentication
358
-     * @param realm             The realm for which authentication is required
359
-     *
360
-     * @return                  Returns True if plugin will resolve this auth challenge, otherwise False
361
-     *
362
-     */
363
-    public boolean onReceivedHttpAuthRequest(CordovaWebView view, ICordovaHttpAuthHandler handler, String host, String realm) {
364
-        return false;
365
-    }
366
-
367
-    /**
368
-     * Called when he system received an SSL client certificate request.  Plugin can use
369
-     * the supplied ClientCertRequest to process this certificate challenge.
370
-     *
371
-     * @param view              The WebView that is initiating the callback
372
-     * @param request           The client certificate request
373
-     *
374
-     * @return                  Returns True if plugin will resolve this auth challenge, otherwise False
375
-     *
376
-     */
377
-    public boolean onReceivedClientCertRequest(CordovaWebView view, ICordovaClientCertRequest request) {
378
-        return false;
379
-    }
380
-
381
-    /**
382
-     * Called by the system when the device configuration changes while your activity is running.
383
-     *
384
-     * @param newConfig		The new device configuration
385
-     */
386
-    public void onConfigurationChanged(Configuration newConfig) {
387
-    }
388
-
389
-    /**
390
-     * Called by the Plugin Manager when we need to actually request permissions
391
-     *
392
-     * @param requestCode   Passed to the activity to track the request
393
-     *
394
-     * @return              Returns the permission that was stored in the plugin
395
-     */
396
-
397
-    public void requestPermissions(int requestCode) {
398
-    }
399
-
400
-    /*
401
-     * Called by the WebView implementation to check for geolocation permissions, can be used
402
-     * by other Java methods in the event that a plugin is using this as a dependency.
403
-     *
404
-     * @return          Returns true if the plugin has all the permissions it needs to operate.
405
-     */
406
-
407
-    public boolean hasPermisssion() {
408
-        return true;
409
-    }
410
-
411
-    /**
412
-     * Called by the system when the user grants permissions
413
-     *
414
-     * @param requestCode
415
-     * @param permissions
416
-     * @param grantResults
417
-     */
418
-    public void onRequestPermissionResult(int requestCode, String[] permissions,
419
-                                          int[] grantResults) throws JSONException {
420
-
421
-    }
422
-}

+ 0
- 101
platforms/android/CordovaLib/src/org/apache/cordova/CordovaPreferences.java 查看文件

@@ -1,101 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-package org.apache.cordova;
21
-
22
-import java.util.HashMap;
23
-import java.util.Locale;
24
-import java.util.Map;
25
-
26
-import org.apache.cordova.LOG;
27
-
28
-import android.app.Activity;
29
-import android.os.Bundle;
30
-
31
-public class CordovaPreferences {
32
-    private HashMap<String, String> prefs = new HashMap<String, String>(20);
33
-    private Bundle preferencesBundleExtras;
34
-
35
-    public void setPreferencesBundle(Bundle extras) {
36
-        preferencesBundleExtras = extras;
37
-    }
38
-
39
-    public void set(String name, String value) {
40
-        prefs.put(name.toLowerCase(Locale.ENGLISH), value);
41
-    }
42
-
43
-    public void set(String name, boolean value) {
44
-        set(name, "" + value);
45
-    }
46
-
47
-    public void set(String name, int value) {
48
-        set(name, "" + value);
49
-    }
50
-
51
-    public void set(String name, double value) {
52
-        set(name, "" + value);
53
-    }
54
-
55
-    public Map<String, String> getAll() {
56
-        return prefs;
57
-    }
58
-
59
-    public boolean getBoolean(String name, boolean defaultValue) {
60
-        name = name.toLowerCase(Locale.ENGLISH);
61
-        String value = prefs.get(name);
62
-        if (value != null) {
63
-            return Boolean.parseBoolean(value);
64
-        }
65
-        return defaultValue;
66
-    }
67
-
68
-    // Added in 4.0.0
69
-    public boolean contains(String name) {
70
-        return getString(name, null) != null;
71
-    }
72
-
73
-    public int getInteger(String name, int defaultValue) {
74
-        name = name.toLowerCase(Locale.ENGLISH);
75
-        String value = prefs.get(name);
76
-        if (value != null) {
77
-            // Use Integer.decode() can't handle it if the highest bit is set.
78
-            return (int)(long)Long.decode(value);
79
-        }
80
-        return defaultValue;
81
-    }
82
-
83
-    public double getDouble(String name, double defaultValue) {
84
-        name = name.toLowerCase(Locale.ENGLISH);
85
-        String value = prefs.get(name);
86
-        if (value != null) {
87
-            return Double.valueOf(value);
88
-        }
89
-        return defaultValue;
90
-    }
91
-
92
-    public String getString(String name, String defaultValue) {
93
-        name = name.toLowerCase(Locale.ENGLISH);
94
-        String value = prefs.get(name);
95
-        if (value != null) {
96
-            return value;
97
-        }
98
-        return defaultValue;
99
-    }
100
-
101
-}

+ 0
- 479
platforms/android/CordovaLib/src/org/apache/cordova/CordovaResourceApi.java 查看文件

@@ -1,479 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
- */
19
-package org.apache.cordova;
20
-
21
-import android.content.ContentResolver;
22
-import android.content.Context;
23
-import android.content.res.AssetFileDescriptor;
24
-import android.content.res.AssetManager;
25
-import android.database.Cursor;
26
-import android.net.Uri;
27
-import android.os.Looper;
28
-import android.util.Base64;
29
-import android.webkit.MimeTypeMap;
30
-
31
-import java.io.ByteArrayInputStream;
32
-import java.io.File;
33
-import java.io.FileInputStream;
34
-import java.io.FileNotFoundException;
35
-import java.io.FileOutputStream;
36
-import java.io.IOException;
37
-import java.io.InputStream;
38
-import java.io.OutputStream;
39
-import java.io.UnsupportedEncodingException;
40
-import java.net.HttpURLConnection;
41
-import java.net.URL;
42
-import java.nio.channels.FileChannel;
43
-import java.util.Locale;
44
-import java.util.zip.GZIPInputStream;
45
-
46
-/**
47
- * What this class provides:
48
- * 1. Helpers for reading & writing to URLs.
49
- *   - E.g. handles assets, resources, content providers, files, data URIs, http[s]
50
- *   - E.g. Can be used to query for mime-type & content length.
51
- *
52
- * 2. To allow plugins to redirect URLs (via remapUrl).
53
- *   - All plugins should call remapUrl() on URLs they receive from JS *before*
54
- *     passing the URL onto other utility functions in this class.
55
- *   - For an example usage of this, refer to the org.apache.cordova.file plugin.
56
- *
57
- * Future Work:
58
- *   - Consider using a Cursor to query content URLs for their size (like the file plugin does).
59
- *   - Allow plugins to remapUri to "cdv-plugin://plugin-name/foo", which CordovaResourceApi
60
- *     would then delegate to pluginManager.getPlugin(plugin-name).openForRead(url)
61
- *     - Currently, plugins *can* do this by remapping to a data: URL, but it's inefficient
62
- *       for large payloads.
63
- */
64
-public class CordovaResourceApi {
65
-    @SuppressWarnings("unused")
66
-    private static final String LOG_TAG = "CordovaResourceApi";
67
-
68
-    public static final int URI_TYPE_FILE = 0;
69
-    public static final int URI_TYPE_ASSET = 1;
70
-    public static final int URI_TYPE_CONTENT = 2;
71
-    public static final int URI_TYPE_RESOURCE = 3;
72
-    public static final int URI_TYPE_DATA = 4;
73
-    public static final int URI_TYPE_HTTP = 5;
74
-    public static final int URI_TYPE_HTTPS = 6;
75
-    public static final int URI_TYPE_PLUGIN = 7;
76
-    public static final int URI_TYPE_UNKNOWN = -1;
77
-
78
-    public static final String PLUGIN_URI_SCHEME = "cdvplugin";
79
-
80
-    private static final String[] LOCAL_FILE_PROJECTION = { "_data" };
81
-
82
-    public static Thread jsThread;
83
-
84
-    private final AssetManager assetManager;
85
-    private final ContentResolver contentResolver;
86
-    private final PluginManager pluginManager;
87
-    private boolean threadCheckingEnabled = true;
88
-
89
-
90
-    public CordovaResourceApi(Context context, PluginManager pluginManager) {
91
-        this.contentResolver = context.getContentResolver();
92
-        this.assetManager = context.getAssets();
93
-        this.pluginManager = pluginManager;
94
-    }
95
-
96
-    public void setThreadCheckingEnabled(boolean value) {
97
-        threadCheckingEnabled = value;
98
-    }
99
-
100
-    public boolean isThreadCheckingEnabled() {
101
-        return threadCheckingEnabled;
102
-    }
103
-
104
-
105
-    public static int getUriType(Uri uri) {
106
-        assertNonRelative(uri);
107
-        String scheme = uri.getScheme();
108
-        if (ContentResolver.SCHEME_CONTENT.equalsIgnoreCase(scheme)) {
109
-            return URI_TYPE_CONTENT;
110
-        }
111
-        if (ContentResolver.SCHEME_ANDROID_RESOURCE.equalsIgnoreCase(scheme)) {
112
-            return URI_TYPE_RESOURCE;
113
-        }
114
-        if (ContentResolver.SCHEME_FILE.equalsIgnoreCase(scheme)) {
115
-            if (uri.getPath().startsWith("/android_asset/")) {
116
-                return URI_TYPE_ASSET;
117
-            }
118
-            return URI_TYPE_FILE;
119
-        }
120
-        if ("data".equalsIgnoreCase(scheme)) {
121
-            return URI_TYPE_DATA;
122
-        }
123
-        if ("http".equalsIgnoreCase(scheme)) {
124
-            return URI_TYPE_HTTP;
125
-        }
126
-        if ("https".equalsIgnoreCase(scheme)) {
127
-            return URI_TYPE_HTTPS;
128
-        }
129
-        if (PLUGIN_URI_SCHEME.equalsIgnoreCase(scheme)) {
130
-            return URI_TYPE_PLUGIN;
131
-        }
132
-        return URI_TYPE_UNKNOWN;
133
-    }
134
-
135
-    public Uri remapUri(Uri uri) {
136
-        assertNonRelative(uri);
137
-        Uri pluginUri = pluginManager.remapUri(uri);
138
-        return pluginUri != null ? pluginUri : uri;
139
-    }
140
-
141
-    public String remapPath(String path) {
142
-        return remapUri(Uri.fromFile(new File(path))).getPath();
143
-    }
144
-
145
-    /**
146
-     * Returns a File that points to the resource, or null if the resource
147
-     * is not on the local filesystem.
148
-     */
149
-    public File mapUriToFile(Uri uri) {
150
-        assertBackgroundThread();
151
-        switch (getUriType(uri)) {
152
-            case URI_TYPE_FILE:
153
-                return new File(uri.getPath());
154
-            case URI_TYPE_CONTENT: {
155
-                Cursor cursor = contentResolver.query(uri, LOCAL_FILE_PROJECTION, null, null, null);
156
-                if (cursor != null) {
157
-                    try {
158
-                        int columnIndex = cursor.getColumnIndex(LOCAL_FILE_PROJECTION[0]);
159
-                        if (columnIndex != -1 && cursor.getCount() > 0) {
160
-                            cursor.moveToFirst();
161
-                            String realPath = cursor.getString(columnIndex);
162
-                            if (realPath != null) {
163
-                                return new File(realPath);
164
-                            }
165
-                        }
166
-                    } finally {
167
-                        cursor.close();
168
-                    }
169
-                }
170
-            }
171
-        }
172
-        return null;
173
-    }
174
-
175
-    public String getMimeType(Uri uri) {
176
-        switch (getUriType(uri)) {
177
-            case URI_TYPE_FILE:
178
-            case URI_TYPE_ASSET:
179
-                return getMimeTypeFromPath(uri.getPath());
180
-            case URI_TYPE_CONTENT:
181
-            case URI_TYPE_RESOURCE:
182
-                return contentResolver.getType(uri);
183
-            case URI_TYPE_DATA: {
184
-                return getDataUriMimeType(uri);
185
-            }
186
-            case URI_TYPE_HTTP:
187
-            case URI_TYPE_HTTPS: {
188
-                try {
189
-                    HttpURLConnection conn = (HttpURLConnection)new URL(uri.toString()).openConnection();
190
-                    conn.setDoInput(false);
191
-                    conn.setRequestMethod("HEAD");
192
-                    String mimeType = conn.getHeaderField("Content-Type");
193
-                    if (mimeType != null) {
194
-                        mimeType = mimeType.split(";")[0];
195
-                    }
196
-                    return mimeType;
197
-                } catch (IOException e) {
198
-                }
199
-            }
200
-        }
201
-
202
-        return null;
203
-    }
204
-
205
-
206
-    //This already exists
207
-    private String getMimeTypeFromPath(String path) {
208
-        String extension = path;
209
-        int lastDot = extension.lastIndexOf('.');
210
-        if (lastDot != -1) {
211
-            extension = extension.substring(lastDot + 1);
212
-        }
213
-        // Convert the URI string to lower case to ensure compatibility with MimeTypeMap (see CB-2185).
214
-        extension = extension.toLowerCase(Locale.getDefault());
215
-        if (extension.equals("3ga")) {
216
-            return "audio/3gpp";
217
-        } else if (extension.equals("js")) {
218
-            // Missing from the map :(.
219
-            return "text/javascript";
220
-        }
221
-        return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
222
-    }
223
-
224
-    /**
225
-     * Opens a stream to the given URI, also providing the MIME type & length.
226
-     * @return Never returns null.
227
-     * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be
228
-     *     resolved before being passed into this function.
229
-     * @throws Throws an IOException if the URI cannot be opened.
230
-     * @throws Throws an IllegalStateException if called on a foreground thread.
231
-     */
232
-    public OpenForReadResult openForRead(Uri uri) throws IOException {
233
-        return openForRead(uri, false);
234
-    }
235
-
236
-    /**
237
-     * Opens a stream to the given URI, also providing the MIME type & length.
238
-     * @return Never returns null.
239
-     * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be
240
-     *     resolved before being passed into this function.
241
-     * @throws Throws an IOException if the URI cannot be opened.
242
-     * @throws Throws an IllegalStateException if called on a foreground thread and skipThreadCheck is false.
243
-     */
244
-    public OpenForReadResult openForRead(Uri uri, boolean skipThreadCheck) throws IOException {
245
-        if (!skipThreadCheck) {
246
-            assertBackgroundThread();
247
-        }
248
-        switch (getUriType(uri)) {
249
-            case URI_TYPE_FILE: {
250
-                FileInputStream inputStream = new FileInputStream(uri.getPath());
251
-                String mimeType = getMimeTypeFromPath(uri.getPath());
252
-                long length = inputStream.getChannel().size();
253
-                return new OpenForReadResult(uri, inputStream, mimeType, length, null);
254
-            }
255
-            case URI_TYPE_ASSET: {
256
-                String assetPath = uri.getPath().substring(15);
257
-                AssetFileDescriptor assetFd = null;
258
-                InputStream inputStream;
259
-                long length = -1;
260
-                try {
261
-                    assetFd = assetManager.openFd(assetPath);
262
-                    inputStream = assetFd.createInputStream();
263
-                    length = assetFd.getLength();
264
-                } catch (FileNotFoundException e) {
265
-                    // Will occur if the file is compressed.
266
-                    inputStream = assetManager.open(assetPath);
267
-                    length = inputStream.available();
268
-                }
269
-                String mimeType = getMimeTypeFromPath(assetPath);
270
-                return new OpenForReadResult(uri, inputStream, mimeType, length, assetFd);
271
-            }
272
-            case URI_TYPE_CONTENT:
273
-            case URI_TYPE_RESOURCE: {
274
-                String mimeType = contentResolver.getType(uri);
275
-                AssetFileDescriptor assetFd = contentResolver.openAssetFileDescriptor(uri, "r");
276
-                InputStream inputStream = assetFd.createInputStream();
277
-                long length = assetFd.getLength();
278
-                return new OpenForReadResult(uri, inputStream, mimeType, length, assetFd);
279
-            }
280
-            case URI_TYPE_DATA: {
281
-                OpenForReadResult ret = readDataUri(uri);
282
-                if (ret == null) {
283
-                    break;
284
-                }
285
-                return ret;
286
-            }
287
-            case URI_TYPE_HTTP:
288
-            case URI_TYPE_HTTPS: {
289
-                HttpURLConnection conn = (HttpURLConnection)new URL(uri.toString()).openConnection();
290
-                conn.setRequestProperty("Accept-Encoding", "gzip");
291
-                conn.setDoInput(true);
292
-                String mimeType = conn.getHeaderField("Content-Type");
293
-                if (mimeType != null) {
294
-                    mimeType = mimeType.split(";")[0];
295
-                }
296
-                int length = conn.getContentLength();
297
-                InputStream inputStream;
298
-                if ("gzip".equals(conn.getContentEncoding())) {
299
-                    inputStream = new GZIPInputStream(conn.getInputStream());
300
-                } else {
301
-                    inputStream = conn.getInputStream();
302
-                }
303
-                return new OpenForReadResult(uri, inputStream, mimeType, length, null);
304
-            }
305
-            case URI_TYPE_PLUGIN: {
306
-                String pluginId = uri.getHost();
307
-                CordovaPlugin plugin = pluginManager.getPlugin(pluginId);
308
-                if (plugin == null) {
309
-                    throw new FileNotFoundException("Invalid plugin ID in URI: " + uri);
310
-                }
311
-                return plugin.handleOpenForRead(uri);
312
-            }
313
-        }
314
-        throw new FileNotFoundException("URI not supported by CordovaResourceApi: " + uri);
315
-    }
316
-
317
-    public OutputStream openOutputStream(Uri uri) throws IOException {
318
-        return openOutputStream(uri, false);
319
-    }
320
-
321
-    /**
322
-     * Opens a stream to the given URI.
323
-     * @return Never returns null.
324
-     * @throws Throws an InvalidArgumentException for relative URIs. Relative URIs should be
325
-     *     resolved before being passed into this function.
326
-     * @throws Throws an IOException if the URI cannot be opened.
327
-     */
328
-    public OutputStream openOutputStream(Uri uri, boolean append) throws IOException {
329
-        assertBackgroundThread();
330
-        switch (getUriType(uri)) {
331
-            case URI_TYPE_FILE: {
332
-                File localFile = new File(uri.getPath());
333
-                File parent = localFile.getParentFile();
334
-                if (parent != null) {
335
-                    parent.mkdirs();
336
-                }
337
-                return new FileOutputStream(localFile, append);
338
-            }
339
-            case URI_TYPE_CONTENT:
340
-            case URI_TYPE_RESOURCE: {
341
-                AssetFileDescriptor assetFd = contentResolver.openAssetFileDescriptor(uri, append ? "wa" : "w");
342
-                return assetFd.createOutputStream();
343
-            }
344
-        }
345
-        throw new FileNotFoundException("URI not supported by CordovaResourceApi: " + uri);
346
-    }
347
-
348
-    public HttpURLConnection createHttpConnection(Uri uri) throws IOException {
349
-        assertBackgroundThread();
350
-        return (HttpURLConnection)new URL(uri.toString()).openConnection();
351
-    }
352
-
353
-    // Copies the input to the output in the most efficient manner possible.
354
-    // Closes both streams.
355
-    public void copyResource(OpenForReadResult input, OutputStream outputStream) throws IOException {
356
-        assertBackgroundThread();
357
-        try {
358
-            InputStream inputStream = input.inputStream;
359
-            if (inputStream instanceof FileInputStream && outputStream instanceof FileOutputStream) {
360
-                FileChannel inChannel = ((FileInputStream)input.inputStream).getChannel();
361
-                FileChannel outChannel = ((FileOutputStream)outputStream).getChannel();
362
-                long offset = 0;
363
-                long length = input.length;
364
-                if (input.assetFd != null) {
365
-                    offset = input.assetFd.getStartOffset();
366
-                }
367
-                // transferFrom()'s 2nd arg is a relative position. Need to set the absolute
368
-                // position first.
369
-                inChannel.position(offset);
370
-                outChannel.transferFrom(inChannel, 0, length);
371
-            } else {
372
-                final int BUFFER_SIZE = 8192;
373
-                byte[] buffer = new byte[BUFFER_SIZE];
374
-
375
-                for (;;) {
376
-                    int bytesRead = inputStream.read(buffer, 0, BUFFER_SIZE);
377
-
378
-                    if (bytesRead <= 0) {
379
-                        break;
380
-                    }
381
-                    outputStream.write(buffer, 0, bytesRead);
382
-                }
383
-            }
384
-        } finally {
385
-            input.inputStream.close();
386
-            if (outputStream != null) {
387
-                outputStream.close();
388
-            }
389
-        }
390
-    }
391
-
392
-    public void copyResource(Uri sourceUri, OutputStream outputStream) throws IOException {
393
-        copyResource(openForRead(sourceUri), outputStream);
394
-    }
395
-
396
-    // Added in 3.5.0.
397
-    public void copyResource(Uri sourceUri, Uri dstUri) throws IOException {
398
-        copyResource(openForRead(sourceUri), openOutputStream(dstUri));
399
-    }
400
-
401
-    private void assertBackgroundThread() {
402
-        if (threadCheckingEnabled) {
403
-            Thread curThread = Thread.currentThread();
404
-            if (curThread == Looper.getMainLooper().getThread()) {
405
-                throw new IllegalStateException("Do not perform IO operations on the UI thread. Use CordovaInterface.getThreadPool() instead.");
406
-            }
407
-            if (curThread == jsThread) {
408
-                throw new IllegalStateException("Tried to perform an IO operation on the WebCore thread. Use CordovaInterface.getThreadPool() instead.");
409
-            }
410
-        }
411
-    }
412
-
413
-    private String getDataUriMimeType(Uri uri) {
414
-        String uriAsString = uri.getSchemeSpecificPart();
415
-        int commaPos = uriAsString.indexOf(',');
416
-        if (commaPos == -1) {
417
-            return null;
418
-        }
419
-        String[] mimeParts = uriAsString.substring(0, commaPos).split(";");
420
-        if (mimeParts.length > 0) {
421
-            return mimeParts[0];
422
-        }
423
-        return null;
424
-    }
425
-
426
-    private OpenForReadResult readDataUri(Uri uri) {
427
-        String uriAsString = uri.getSchemeSpecificPart();
428
-        int commaPos = uriAsString.indexOf(',');
429
-        if (commaPos == -1) {
430
-            return null;
431
-        }
432
-        String[] mimeParts = uriAsString.substring(0, commaPos).split(";");
433
-        String contentType = null;
434
-        boolean base64 = false;
435
-        if (mimeParts.length > 0) {
436
-            contentType = mimeParts[0];
437
-        }
438
-        for (int i = 1; i < mimeParts.length; ++i) {
439
-            if ("base64".equalsIgnoreCase(mimeParts[i])) {
440
-                base64 = true;
441
-            }
442
-        }
443
-        String dataPartAsString = uriAsString.substring(commaPos + 1);
444
-        byte[] data;
445
-        if (base64) {
446
-            data = Base64.decode(dataPartAsString, Base64.DEFAULT);
447
-        } else {
448
-            try {
449
-                data = dataPartAsString.getBytes("UTF-8");
450
-            } catch (UnsupportedEncodingException e) {
451
-                data = dataPartAsString.getBytes();
452
-            }
453
-        }
454
-        InputStream inputStream = new ByteArrayInputStream(data);
455
-        return new OpenForReadResult(uri, inputStream, contentType, data.length, null);
456
-    }
457
-
458
-    private static void assertNonRelative(Uri uri) {
459
-        if (!uri.isAbsolute()) {
460
-            throw new IllegalArgumentException("Relative URIs are not supported.");
461
-        }
462
-    }
463
-
464
-    public static final class OpenForReadResult {
465
-        public final Uri uri;
466
-        public final InputStream inputStream;
467
-        public final String mimeType;
468
-        public final long length;
469
-        public final AssetFileDescriptor assetFd;
470
-
471
-        public OpenForReadResult(Uri uri, InputStream inputStream, String mimeType, long length, AssetFileDescriptor assetFd) {
472
-            this.uri = uri;
473
-            this.inputStream = inputStream;
474
-            this.mimeType = mimeType;
475
-            this.length = length;
476
-            this.assetFd = assetFd;
477
-        }
478
-    }
479
-}

+ 0
- 142
platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebView.java 查看文件

@@ -1,142 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-         http://www.apache.org/licenses/LICENSE-2.0
10
-       Unless required by applicable law or agreed to in writing,
11
-       software distributed under the License is distributed on an
12
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
13
-       KIND, either express or implied.  See the License for the
14
-       specific language governing permissions and limitations
15
-       under the License.
16
-*/
17
-package org.apache.cordova;
18
-
19
-import java.util.List;
20
-import java.util.Map;
21
-
22
-import android.content.Context;
23
-import android.content.Intent;
24
-import android.view.View;
25
-import android.webkit.WebChromeClient.CustomViewCallback;
26
-
27
-/**
28
- * Main interface for interacting with a Cordova webview - implemented by CordovaWebViewImpl.
29
- * This is an interface so that it can be easily mocked in tests.
30
- * Methods may be added to this interface without a major version bump, as plugins & embedders
31
- * are not expected to implement it.
32
- */
33
-public interface CordovaWebView {
34
-    public static final String CORDOVA_VERSION = "9.1.0";
35
-
36
-    void init(CordovaInterface cordova, List<PluginEntry> pluginEntries, CordovaPreferences preferences);
37
-
38
-    boolean isInitialized();
39
-
40
-    View getView();
41
-
42
-    void loadUrlIntoView(String url, boolean recreatePlugins);
43
-
44
-    void stopLoading();
45
-
46
-    boolean canGoBack();
47
-
48
-    void clearCache();
49
-
50
-    /** Use parameter-less overload */
51
-    @Deprecated
52
-    void clearCache(boolean b);
53
-
54
-    void clearHistory();
55
-
56
-    boolean backHistory();
57
-
58
-    void handlePause(boolean keepRunning);
59
-
60
-    void onNewIntent(Intent intent);
61
-
62
-    void handleResume(boolean keepRunning);
63
-
64
-    void handleStart();
65
-
66
-    void handleStop();
67
-
68
-    void handleDestroy();
69
-
70
-    /**
71
-     * Send JavaScript statement back to JavaScript.
72
-     *
73
-     * Deprecated (https://issues.apache.org/jira/browse/CB-6851)
74
-     * Instead of executing snippets of JS, you should use the exec bridge
75
-     * to create a Java->JS communication channel.
76
-     * To do this:
77
-     * 1. Within plugin.xml (to have your JS run before deviceready):
78
-     *    <js-module><runs/></js-module>
79
-     * 2. Within your .js (call exec on start-up):
80
-     *    require('cordova/channel').onCordovaReady.subscribe(function() {
81
-     *      require('cordova/exec')(win, null, 'Plugin', 'method', []);
82
-     *      function win(message) {
83
-     *        ... process message from java here ...
84
-     *      }
85
-     *    });
86
-     * 3. Within your .java:
87
-     *    PluginResult dataResult = new PluginResult(PluginResult.Status.OK, CODE);
88
-     *    dataResult.setKeepCallback(true);
89
-     *    savedCallbackContext.sendPluginResult(dataResult);
90
-     */
91
-    @Deprecated
92
-    void sendJavascript(String statememt);
93
-
94
-    /**
95
-     * Load the specified URL in the Cordova webview or a new browser instance.
96
-     *
97
-     * NOTE: If openExternal is false, only whitelisted URLs can be loaded.
98
-     *
99
-     * @param url           The url to load.
100
-     * @param openExternal  Load url in browser instead of Cordova webview.
101
-     * @param clearHistory  Clear the history stack, so new page becomes top of history
102
-     * @param params        Parameters for new app
103
-     */
104
-    void showWebPage(String url, boolean openExternal, boolean clearHistory, Map<String, Object> params);
105
-
106
-    /**
107
-     * Deprecated in 4.0.0. Use your own View-toggling logic.
108
-     */
109
-    @Deprecated
110
-    boolean isCustomViewShowing();
111
-
112
-    /**
113
-     * Deprecated in 4.0.0. Use your own View-toggling logic.
114
-     */
115
-    @Deprecated
116
-    void showCustomView(View view, CustomViewCallback callback);
117
-
118
-    /**
119
-     * Deprecated in 4.0.0. Use your own View-toggling logic.
120
-     */
121
-    @Deprecated
122
-    void hideCustomView();
123
-
124
-    CordovaResourceApi getResourceApi();
125
-
126
-    void setButtonPlumbedToJs(int keyCode, boolean override);
127
-    boolean isButtonPlumbedToJs(int keyCode);
128
-
129
-    void sendPluginResult(PluginResult cr, String callbackId);
130
-
131
-    PluginManager getPluginManager();
132
-    CordovaWebViewEngine getEngine();
133
-    CordovaPreferences getPreferences();
134
-    ICordovaCookieManager getCookieManager();
135
-
136
-    String getUrl();
137
-
138
-    // TODO: Work on deleting these by removing refs from plugins.
139
-    Context getContext();
140
-    void loadUrl(String url);
141
-    Object postMessage(String id, Object data);
142
-}

+ 0
- 85
platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewEngine.java 查看文件

@@ -1,85 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import android.view.KeyEvent;
22
-import android.view.View;
23
-import android.webkit.ValueCallback;
24
-
25
-/**
26
- * Interface for all Cordova engines.
27
- * No methods will be added to this class (in order to be compatible with existing engines).
28
- * Instead, we will create a new interface: e.g. CordovaWebViewEngineV2
29
- */
30
-public interface CordovaWebViewEngine {
31
-    void init(CordovaWebView parentWebView, CordovaInterface cordova, Client client,
32
-              CordovaResourceApi resourceApi, PluginManager pluginManager,
33
-              NativeToJsMessageQueue nativeToJsMessageQueue);
34
-
35
-    CordovaWebView getCordovaWebView();
36
-    ICordovaCookieManager getCookieManager();
37
-    View getView();
38
-
39
-    void loadUrl(String url, boolean clearNavigationStack);
40
-
41
-    void stopLoading();
42
-
43
-    /** Return the currently loaded URL */
44
-    String getUrl();
45
-
46
-    void clearCache();
47
-
48
-    /** After calling clearHistory(), canGoBack() should be false. */
49
-    void clearHistory();
50
-
51
-    boolean canGoBack();
52
-
53
-    /** Returns whether a navigation occurred */
54
-    boolean goBack();
55
-
56
-    /** Pauses / resumes the WebView's event loop. */
57
-    void setPaused(boolean value);
58
-
59
-    /** Clean up all resources associated with the WebView. */
60
-    void destroy();
61
-
62
-    /** Add the evaulate Javascript method **/
63
-    void evaluateJavascript(String js, ValueCallback<String> callback);
64
-
65
-    /**
66
-     * Used to retrieve the associated CordovaWebView given a View without knowing the type of Engine.
67
-     * E.g. ((CordovaWebView.EngineView)activity.findViewById(android.R.id.webView)).getCordovaWebView();
68
-     */
69
-    public interface EngineView {
70
-        CordovaWebView getCordovaWebView();
71
-    }
72
-
73
-    /**
74
-     * Contains methods that an engine uses to communicate with the parent CordovaWebView.
75
-     * Methods may be added in future cordova versions, but never removed.
76
-     */
77
-    public interface Client {
78
-        Boolean onDispatchKeyEvent(KeyEvent event);
79
-        void clearLoadTimeoutTimer();
80
-        void onPageStarted(String newUrl);
81
-        void onReceivedError(int errorCode, String description, String failingUrl);
82
-        void onPageFinishedLoading(String url);
83
-        boolean onNavigationAttempt(String url);
84
-    }
85
-}

+ 0
- 668
platforms/android/CordovaLib/src/org/apache/cordova/CordovaWebViewImpl.java 查看文件

@@ -1,668 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import android.annotation.SuppressLint;
22
-import android.content.ActivityNotFoundException;
23
-import android.content.Context;
24
-import android.content.Intent;
25
-import android.net.Uri;
26
-import android.view.Gravity;
27
-import android.view.KeyEvent;
28
-import android.view.View;
29
-import android.view.ViewGroup;
30
-import android.webkit.WebChromeClient;
31
-import android.widget.FrameLayout;
32
-
33
-import org.apache.cordova.engine.SystemWebViewEngine;
34
-import org.json.JSONException;
35
-import org.json.JSONObject;
36
-
37
-import java.lang.reflect.Constructor;
38
-import java.net.URISyntaxException;
39
-import java.util.ArrayList;
40
-import java.util.HashSet;
41
-import java.util.List;
42
-import java.util.Map;
43
-import java.util.Set;
44
-
45
-/**
46
- * Main class for interacting with a Cordova webview. Manages plugins, events, and a CordovaWebViewEngine.
47
- * Class uses two-phase initialization. You must call init() before calling any other methods.
48
- */
49
-public class CordovaWebViewImpl implements CordovaWebView {
50
-
51
-    public static final String TAG = "CordovaWebViewImpl";
52
-
53
-    private PluginManager pluginManager;
54
-
55
-    protected final CordovaWebViewEngine engine;
56
-    private CordovaInterface cordova;
57
-
58
-    // Flag to track that a loadUrl timeout occurred
59
-    private int loadUrlTimeout = 0;
60
-
61
-    private CordovaResourceApi resourceApi;
62
-    private CordovaPreferences preferences;
63
-    private CoreAndroid appPlugin;
64
-    private NativeToJsMessageQueue nativeToJsMessageQueue;
65
-    private EngineClient engineClient = new EngineClient();
66
-    private boolean hasPausedEver;
67
-
68
-    // The URL passed to loadUrl(), not necessarily the URL of the current page.
69
-    String loadedUrl;
70
-
71
-    /** custom view created by the browser (a video player for example) */
72
-    private View mCustomView;
73
-    private WebChromeClient.CustomViewCallback mCustomViewCallback;
74
-
75
-    private Set<Integer> boundKeyCodes = new HashSet<Integer>();
76
-
77
-    public static CordovaWebViewEngine createEngine(Context context, CordovaPreferences preferences) {
78
-        String className = preferences.getString("webview", SystemWebViewEngine.class.getCanonicalName());
79
-        try {
80
-            Class<?> webViewClass = Class.forName(className);
81
-            Constructor<?> constructor = webViewClass.getConstructor(Context.class, CordovaPreferences.class);
82
-            return (CordovaWebViewEngine) constructor.newInstance(context, preferences);
83
-        } catch (Exception e) {
84
-            throw new RuntimeException("Failed to create webview. ", e);
85
-        }
86
-    }
87
-
88
-    public CordovaWebViewImpl(CordovaWebViewEngine cordovaWebViewEngine) {
89
-        this.engine = cordovaWebViewEngine;
90
-    }
91
-
92
-    // Convenience method for when creating programmatically (not from Config.xml).
93
-    public void init(CordovaInterface cordova) {
94
-        init(cordova, new ArrayList<PluginEntry>(), new CordovaPreferences());
95
-    }
96
-
97
-    @SuppressLint("Assert")
98
-    @Override
99
-    public void init(CordovaInterface cordova, List<PluginEntry> pluginEntries, CordovaPreferences preferences) {
100
-        if (this.cordova != null) {
101
-            throw new IllegalStateException();
102
-        }
103
-        this.cordova = cordova;
104
-        this.preferences = preferences;
105
-        pluginManager = new PluginManager(this, this.cordova, pluginEntries);
106
-        resourceApi = new CordovaResourceApi(engine.getView().getContext(), pluginManager);
107
-        nativeToJsMessageQueue = new NativeToJsMessageQueue();
108
-        nativeToJsMessageQueue.addBridgeMode(new NativeToJsMessageQueue.NoOpBridgeMode());
109
-        nativeToJsMessageQueue.addBridgeMode(new NativeToJsMessageQueue.LoadUrlBridgeMode(engine, cordova));
110
-
111
-        if (preferences.getBoolean("DisallowOverscroll", false)) {
112
-            engine.getView().setOverScrollMode(View.OVER_SCROLL_NEVER);
113
-        }
114
-        engine.init(this, cordova, engineClient, resourceApi, pluginManager, nativeToJsMessageQueue);
115
-        // This isn't enforced by the compiler, so assert here.
116
-        assert engine.getView() instanceof CordovaWebViewEngine.EngineView;
117
-
118
-        pluginManager.addService(CoreAndroid.PLUGIN_NAME, "org.apache.cordova.CoreAndroid");
119
-        pluginManager.init();
120
-
121
-    }
122
-
123
-    @Override
124
-    public boolean isInitialized() {
125
-        return cordova != null;
126
-    }
127
-
128
-    @Override
129
-    public void loadUrlIntoView(final String url, boolean recreatePlugins) {
130
-        LOG.d(TAG, ">>> loadUrl(" + url + ")");
131
-        if (url.equals("about:blank") || url.startsWith("javascript:")) {
132
-            engine.loadUrl(url, false);
133
-            return;
134
-        }
135
-
136
-        recreatePlugins = recreatePlugins || (loadedUrl == null);
137
-
138
-        if (recreatePlugins) {
139
-            // Don't re-initialize on first load.
140
-            if (loadedUrl != null) {
141
-                appPlugin = null;
142
-                pluginManager.init();
143
-            }
144
-            loadedUrl = url;
145
-        }
146
-
147
-        // Create a timeout timer for loadUrl
148
-        final int currentLoadUrlTimeout = loadUrlTimeout;
149
-        final int loadUrlTimeoutValue = preferences.getInteger("LoadUrlTimeoutValue", 20000);
150
-
151
-        // Timeout error method
152
-        final Runnable loadError = new Runnable() {
153
-            public void run() {
154
-                stopLoading();
155
-                LOG.e(TAG, "CordovaWebView: TIMEOUT ERROR!");
156
-
157
-                // Handle other errors by passing them to the webview in JS
158
-                JSONObject data = new JSONObject();
159
-                try {
160
-                    data.put("errorCode", -6);
161
-                    data.put("description", "The connection to the server was unsuccessful.");
162
-                    data.put("url", url);
163
-                } catch (JSONException e) {
164
-                    // Will never happen.
165
-                }
166
-                pluginManager.postMessage("onReceivedError", data);
167
-            }
168
-        };
169
-
170
-        // Timeout timer method
171
-        final Runnable timeoutCheck = new Runnable() {
172
-            public void run() {
173
-                try {
174
-                    synchronized (this) {
175
-                        wait(loadUrlTimeoutValue);
176
-                    }
177
-                } catch (InterruptedException e) {
178
-                    e.printStackTrace();
179
-                }
180
-
181
-                // If timeout, then stop loading and handle error (if activity still exists)
182
-                if (loadUrlTimeout == currentLoadUrlTimeout && cordova.getActivity() != null) {
183
-                    cordova.getActivity().runOnUiThread(loadError);
184
-                } else if (cordova.getActivity() == null) {
185
-                    LOG.d(TAG, "Cordova activity does not exist.");
186
-                }
187
-            }
188
-        };
189
-
190
-        if (cordova.getActivity() != null) {
191
-            final boolean _recreatePlugins = recreatePlugins;
192
-            cordova.getActivity().runOnUiThread(new Runnable() {
193
-                public void run() {
194
-                    if (loadUrlTimeoutValue > 0) {
195
-                        cordova.getThreadPool().execute(timeoutCheck);
196
-                    }
197
-                    engine.loadUrl(url, _recreatePlugins);
198
-                }
199
-            });
200
-        } else {
201
-            LOG.d(TAG, "Cordova activity does not exist.");
202
-        }
203
-    }
204
-
205
-
206
-    @Override
207
-    public void loadUrl(String url) {
208
-        loadUrlIntoView(url, true);
209
-    }
210
-
211
-    @Override
212
-    public void showWebPage(String url, boolean openExternal, boolean clearHistory, Map<String, Object> params) {
213
-        LOG.d(TAG, "showWebPage(%s, %b, %b, HashMap)", url, openExternal, clearHistory);
214
-
215
-        // If clearing history
216
-        if (clearHistory) {
217
-            engine.clearHistory();
218
-        }
219
-
220
-        // If loading into our webview
221
-        if (!openExternal) {
222
-            // Make sure url is in whitelist
223
-            if (pluginManager.shouldAllowNavigation(url)) {
224
-                // TODO: What about params?
225
-                // Load new URL
226
-                loadUrlIntoView(url, true);
227
-                return;
228
-            } else {
229
-                LOG.w(TAG, "showWebPage: Refusing to load URL into webview since it is not in the <allow-navigation> whitelist. URL=" + url);
230
-                return;
231
-            }
232
-        }
233
-        if (!pluginManager.shouldOpenExternalUrl(url)) {
234
-            LOG.w(TAG, "showWebPage: Refusing to send intent for URL since it is not in the <allow-intent> whitelist. URL=" + url);
235
-            return;
236
-        }
237
-
238
-        Intent intent = null;
239
-        try {
240
-            if (url.startsWith("intent://")) {
241
-                intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
242
-            } else {
243
-                intent = new Intent(Intent.ACTION_VIEW);
244
-                // To send an intent without CATEGORY_BROWSER, a custom plugin should be used.
245
-                intent.addCategory(Intent.CATEGORY_BROWSABLE);
246
-                Uri uri = Uri.parse(url);
247
-                // Omitting the MIME type for file: URLs causes "No Activity found to handle Intent".
248
-                // Adding the MIME type to http: URLs causes them to not be handled by the downloader.
249
-                if ("file".equals(uri.getScheme())) {
250
-                    intent.setDataAndType(uri, resourceApi.getMimeType(uri));
251
-                } else {
252
-                    intent.setData(uri);
253
-                }
254
-            }
255
-            if (cordova.getActivity() != null) {
256
-                cordova.getActivity().startActivity(intent);
257
-            } else {
258
-                LOG.d(TAG, "Cordova activity does not exist.");
259
-            }
260
-        } catch (URISyntaxException e) {
261
-            LOG.e(TAG, "Error parsing url " + url, e);
262
-        } catch (ActivityNotFoundException e) {
263
-            if (url.startsWith("intent://") && intent != null && intent.getStringExtra("browser_fallback_url") != null) {
264
-                showWebPage(intent.getStringExtra("browser_fallback_url"), openExternal, clearHistory, params);
265
-            } else {
266
-                LOG.e(TAG, "Error loading url " + url, e);
267
-            }
268
-        }
269
-    }
270
-
271
-    private static class WrapperView extends FrameLayout {
272
-
273
-        private final CordovaWebViewEngine engine;
274
-
275
-        public WrapperView(Context context, CordovaWebViewEngine engine) {
276
-            super(context);
277
-            this.engine = engine;
278
-        }
279
-
280
-        @Override
281
-        public boolean dispatchKeyEvent(KeyEvent event) {
282
-            boolean ret = engine.getView().dispatchKeyEvent(event);
283
-            if (!ret) {
284
-                // If the engine didn't handle the event, handle it normally.
285
-                ret = super.dispatchKeyEvent(event);
286
-            }
287
-            return ret;
288
-        }
289
-    }
290
-
291
-    @Override
292
-    @Deprecated
293
-    public void showCustomView(View view, WebChromeClient.CustomViewCallback callback) {
294
-        // This code is adapted from the original Android Browser code, licensed under the Apache License, Version 2.0
295
-        LOG.d(TAG, "showing Custom View");
296
-        // if a view already exists then immediately terminate the new one
297
-        if (mCustomView != null) {
298
-            callback.onCustomViewHidden();
299
-            return;
300
-        }
301
-
302
-        WrapperView wrapperView = new WrapperView(getContext(), engine);
303
-        wrapperView.addView(view);
304
-
305
-        // Store the view and its callback for later (to kill it properly)
306
-        mCustomView = wrapperView;
307
-        mCustomViewCallback = callback;
308
-
309
-        // Add the custom view to its container.
310
-        ViewGroup parent = (ViewGroup) engine.getView().getParent();
311
-        parent.addView(wrapperView, new FrameLayout.LayoutParams(
312
-                ViewGroup.LayoutParams.MATCH_PARENT,
313
-                ViewGroup.LayoutParams.MATCH_PARENT,
314
-                Gravity.CENTER));
315
-
316
-        // Hide the content view.
317
-        engine.getView().setVisibility(View.GONE);
318
-
319
-        // Finally show the custom view container.
320
-        parent.setVisibility(View.VISIBLE);
321
-        parent.bringToFront();
322
-    }
323
-
324
-    @Override
325
-    @Deprecated
326
-    public void hideCustomView() {
327
-        // This code is adapted from the original Android Browser code, licensed under the Apache License, Version 2.0
328
-        if (mCustomView == null) return;
329
-        LOG.d(TAG, "Hiding Custom View");
330
-
331
-        // Hide the custom view.
332
-        mCustomView.setVisibility(View.GONE);
333
-
334
-        // Remove the custom view from its container.
335
-        ViewGroup parent = (ViewGroup) engine.getView().getParent();
336
-        parent.removeView(mCustomView);
337
-        mCustomView = null;
338
-        mCustomViewCallback.onCustomViewHidden();
339
-
340
-        // Show the content view.
341
-        engine.getView().setVisibility(View.VISIBLE);
342
-    }
343
-
344
-    @Override
345
-    @Deprecated
346
-    public boolean isCustomViewShowing() {
347
-        return mCustomView != null;
348
-    }
349
-
350
-    @Override
351
-    @Deprecated
352
-    public void sendJavascript(String statement) {
353
-        nativeToJsMessageQueue.addJavaScript(statement);
354
-    }
355
-
356
-    @Override
357
-    public void sendPluginResult(PluginResult cr, String callbackId) {
358
-        nativeToJsMessageQueue.addPluginResult(cr, callbackId);
359
-    }
360
-
361
-    @Override
362
-    public PluginManager getPluginManager() {
363
-        return pluginManager;
364
-    }
365
-    @Override
366
-    public CordovaPreferences getPreferences() {
367
-        return preferences;
368
-    }
369
-    @Override
370
-    public ICordovaCookieManager getCookieManager() {
371
-        return engine.getCookieManager();
372
-    }
373
-    @Override
374
-    public CordovaResourceApi getResourceApi() {
375
-        return resourceApi;
376
-    }
377
-    @Override
378
-    public CordovaWebViewEngine getEngine() {
379
-        return engine;
380
-    }
381
-    @Override
382
-    public View getView() {
383
-        return engine.getView();
384
-    }
385
-    @Override
386
-    public Context getContext() {
387
-        return engine.getView().getContext();
388
-    }
389
-
390
-    private void sendJavascriptEvent(String event) {
391
-        if (appPlugin == null) {
392
-            appPlugin = (CoreAndroid)pluginManager.getPlugin(CoreAndroid.PLUGIN_NAME);
393
-        }
394
-
395
-        if (appPlugin == null) {
396
-            LOG.w(TAG, "Unable to fire event without existing plugin");
397
-            return;
398
-        }
399
-        appPlugin.fireJavascriptEvent(event);
400
-    }
401
-
402
-    @Override
403
-    public void setButtonPlumbedToJs(int keyCode, boolean override) {
404
-        switch (keyCode) {
405
-            case KeyEvent.KEYCODE_VOLUME_DOWN:
406
-            case KeyEvent.KEYCODE_VOLUME_UP:
407
-            case KeyEvent.KEYCODE_BACK:
408
-            case KeyEvent.KEYCODE_MENU:
409
-                // TODO: Why are search and menu buttons handled separately?
410
-                if (override) {
411
-                    boundKeyCodes.add(keyCode);
412
-                } else {
413
-                    boundKeyCodes.remove(keyCode);
414
-                }
415
-                return;
416
-            default:
417
-                throw new IllegalArgumentException("Unsupported keycode: " + keyCode);
418
-        }
419
-    }
420
-
421
-    @Override
422
-    public boolean isButtonPlumbedToJs(int keyCode) {
423
-        return boundKeyCodes.contains(keyCode);
424
-    }
425
-
426
-    @Override
427
-    public Object postMessage(String id, Object data) {
428
-        return pluginManager.postMessage(id, data);
429
-    }
430
-
431
-    // Engine method proxies:
432
-    @Override
433
-    public String getUrl() {
434
-        return engine.getUrl();
435
-    }
436
-
437
-    @Override
438
-    public void stopLoading() {
439
-        // Clear timeout flag
440
-        loadUrlTimeout++;
441
-    }
442
-
443
-    @Override
444
-    public boolean canGoBack() {
445
-        return engine.canGoBack();
446
-    }
447
-
448
-    @Override
449
-    public void clearCache() {
450
-        engine.clearCache();
451
-    }
452
-
453
-    @Override
454
-    @Deprecated
455
-    public void clearCache(boolean b) {
456
-        engine.clearCache();
457
-    }
458
-
459
-    @Override
460
-    public void clearHistory() {
461
-        engine.clearHistory();
462
-    }
463
-
464
-    @Override
465
-    public boolean backHistory() {
466
-        return engine.goBack();
467
-    }
468
-
469
-    /////// LifeCycle methods ///////
470
-    @Override
471
-    public void onNewIntent(Intent intent) {
472
-        if (this.pluginManager != null) {
473
-            this.pluginManager.onNewIntent(intent);
474
-        }
475
-    }
476
-    @Override
477
-    public void handlePause(boolean keepRunning) {
478
-        if (!isInitialized()) {
479
-            return;
480
-        }
481
-        hasPausedEver = true;
482
-        pluginManager.onPause(keepRunning);
483
-        sendJavascriptEvent("pause");
484
-
485
-        // If app doesn't want to run in background
486
-        if (!keepRunning) {
487
-            // Pause JavaScript timers. This affects all webviews within the app!
488
-            engine.setPaused(true);
489
-        }
490
-    }
491
-    @Override
492
-    public void handleResume(boolean keepRunning) {
493
-        if (!isInitialized()) {
494
-            return;
495
-        }
496
-
497
-        // Resume JavaScript timers. This affects all webviews within the app!
498
-        engine.setPaused(false);
499
-        this.pluginManager.onResume(keepRunning);
500
-
501
-        // In order to match the behavior of the other platforms, we only send onResume after an
502
-        // onPause has occurred. The resume event might still be sent if the Activity was killed
503
-        // while waiting for the result of an external Activity once the result is obtained
504
-        if (hasPausedEver) {
505
-            sendJavascriptEvent("resume");
506
-        }
507
-    }
508
-    @Override
509
-    public void handleStart() {
510
-        if (!isInitialized()) {
511
-            return;
512
-        }
513
-        pluginManager.onStart();
514
-    }
515
-    @Override
516
-    public void handleStop() {
517
-        if (!isInitialized()) {
518
-            return;
519
-        }
520
-        pluginManager.onStop();
521
-    }
522
-    @Override
523
-    public void handleDestroy() {
524
-        if (!isInitialized()) {
525
-            return;
526
-        }
527
-        // Cancel pending timeout timer.
528
-        loadUrlTimeout++;
529
-
530
-        // Forward to plugins
531
-        this.pluginManager.onDestroy();
532
-
533
-        // TODO: about:blank is a bit special (and the default URL for new frames)
534
-        // We should use a blank data: url instead so it's more obvious
535
-        this.loadUrl("about:blank");
536
-
537
-        // TODO: Should not destroy webview until after about:blank is done loading.
538
-        engine.destroy();
539
-        hideCustomView();
540
-    }
541
-
542
-    protected class EngineClient implements CordovaWebViewEngine.Client {
543
-        @Override
544
-        public void clearLoadTimeoutTimer() {
545
-            loadUrlTimeout++;
546
-        }
547
-
548
-        @Override
549
-        public void onPageStarted(String newUrl) {
550
-            LOG.d(TAG, "onPageDidNavigate(" + newUrl + ")");
551
-            boundKeyCodes.clear();
552
-            pluginManager.onReset();
553
-            pluginManager.postMessage("onPageStarted", newUrl);
554
-        }
555
-
556
-        @Override
557
-        public void onReceivedError(int errorCode, String description, String failingUrl) {
558
-            clearLoadTimeoutTimer();
559
-            JSONObject data = new JSONObject();
560
-            try {
561
-                data.put("errorCode", errorCode);
562
-                data.put("description", description);
563
-                data.put("url", failingUrl);
564
-            } catch (JSONException e) {
565
-                e.printStackTrace();
566
-            }
567
-            pluginManager.postMessage("onReceivedError", data);
568
-        }
569
-
570
-        @Override
571
-        public void onPageFinishedLoading(String url) {
572
-            LOG.d(TAG, "onPageFinished(" + url + ")");
573
-
574
-            clearLoadTimeoutTimer();
575
-
576
-            // Broadcast message that page has loaded
577
-            pluginManager.postMessage("onPageFinished", url);
578
-
579
-            // Make app visible after 2 sec in case there was a JS error and Cordova JS never initialized correctly
580
-            if (engine.getView().getVisibility() != View.VISIBLE) {
581
-                Thread t = new Thread(new Runnable() {
582
-                    public void run() {
583
-                        try {
584
-                            Thread.sleep(2000);
585
-                            if (cordova.getActivity() != null) {
586
-                                cordova.getActivity().runOnUiThread(new Runnable() {
587
-                                    public void run() {
588
-                                        pluginManager.postMessage("spinner", "stop");
589
-                                    }
590
-                                });
591
-                            } else {
592
-                                LOG.d(TAG, "Cordova activity does not exist.");
593
-                            }
594
-                        } catch (InterruptedException e) {
595
-                        }
596
-                    }
597
-                });
598
-                t.start();
599
-            }
600
-
601
-            // Shutdown if blank loaded
602
-            if (url.equals("about:blank")) {
603
-                pluginManager.postMessage("exit", null);
604
-            }
605
-        }
606
-
607
-        @Override
608
-        public Boolean onDispatchKeyEvent(KeyEvent event) {
609
-            int keyCode = event.getKeyCode();
610
-            boolean isBackButton = keyCode == KeyEvent.KEYCODE_BACK;
611
-            if (event.getAction() == KeyEvent.ACTION_DOWN) {
612
-                if (isBackButton && mCustomView != null) {
613
-                    return true;
614
-                } else if (boundKeyCodes.contains(keyCode)) {
615
-                    return true;
616
-                } else if (isBackButton) {
617
-                    return engine.canGoBack();
618
-                }
619
-            } else if (event.getAction() == KeyEvent.ACTION_UP) {
620
-                if (isBackButton && mCustomView != null) {
621
-                    hideCustomView();
622
-                    return true;
623
-                } else if (boundKeyCodes.contains(keyCode)) {
624
-                    String eventName = null;
625
-                    switch (keyCode) {
626
-                        case KeyEvent.KEYCODE_VOLUME_DOWN:
627
-                            eventName = "volumedownbutton";
628
-                            break;
629
-                        case KeyEvent.KEYCODE_VOLUME_UP:
630
-                            eventName = "volumeupbutton";
631
-                            break;
632
-                        case KeyEvent.KEYCODE_SEARCH:
633
-                            eventName = "searchbutton";
634
-                            break;
635
-                        case KeyEvent.KEYCODE_MENU:
636
-                            eventName = "menubutton";
637
-                            break;
638
-                        case KeyEvent.KEYCODE_BACK:
639
-                            eventName = "backbutton";
640
-                            break;
641
-                    }
642
-                    if (eventName != null) {
643
-                        sendJavascriptEvent(eventName);
644
-                        return true;
645
-                    }
646
-                } else if (isBackButton) {
647
-                    return engine.goBack();
648
-                }
649
-            }
650
-            return null;
651
-        }
652
-
653
-        @Override
654
-        public boolean onNavigationAttempt(String url) {
655
-            // Give plugins the chance to handle the url
656
-            if (pluginManager.onOverrideUrlLoading(url)) {
657
-                return true;
658
-            } else if (pluginManager.shouldAllowNavigation(url)) {
659
-                return false;
660
-            } else if (pluginManager.shouldOpenExternalUrl(url)) {
661
-                showWebPage(url, true, false, null);
662
-                return true;
663
-            }
664
-            LOG.w(TAG, "Blocked (possibly sub-frame) navigation to non-allowed URL: " + url);
665
-            return true;
666
-        }
667
-    }
668
-}

+ 0
- 410
platforms/android/CordovaLib/src/org/apache/cordova/CoreAndroid.java 查看文件

@@ -1,410 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-package org.apache.cordova;
21
-
22
-import org.json.JSONArray;
23
-import org.json.JSONException;
24
-import org.json.JSONObject;
25
-
26
-import android.content.BroadcastReceiver;
27
-import android.content.Context;
28
-import android.content.Intent;
29
-import android.content.IntentFilter;
30
-import android.telephony.TelephonyManager;
31
-import android.view.KeyEvent;
32
-
33
-import java.lang.reflect.Field;
34
-import java.util.HashMap;
35
-
36
-/**
37
- * This class exposes methods in Cordova that can be called from JavaScript.
38
- */
39
-public class CoreAndroid extends CordovaPlugin {
40
-
41
-    public static final String PLUGIN_NAME = "CoreAndroid";
42
-    protected static final String TAG = "CordovaApp";
43
-    private BroadcastReceiver telephonyReceiver;
44
-    private CallbackContext messageChannel;
45
-    private PluginResult pendingResume;
46
-    private PluginResult pendingPause;
47
-    private final Object messageChannelLock = new Object();
48
-
49
-    /**
50
-     * Send an event to be fired on the Javascript side.
51
-     *
52
-     * @param action The name of the event to be fired
53
-     */
54
-    public void fireJavascriptEvent(String action) {
55
-        sendEventMessage(action);
56
-    }
57
-
58
-    /**
59
-     * Sets the context of the Command. This can then be used to do things like
60
-     * get file paths associated with the Activity.
61
-     */
62
-    @Override
63
-    public void pluginInitialize() {
64
-        this.initTelephonyReceiver();
65
-    }
66
-
67
-    /**
68
-     * Executes the request and returns PluginResult.
69
-     *
70
-     * @param action            The action to execute.
71
-     * @param args              JSONArry of arguments for the plugin.
72
-     * @param callbackContext   The callback context from which we were invoked.
73
-     * @return                  A PluginResult object with a status and message.
74
-     */
75
-    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
76
-        PluginResult.Status status = PluginResult.Status.OK;
77
-        String result = "";
78
-
79
-        try {
80
-            if (action.equals("clearCache")) {
81
-                this.clearCache();
82
-            }
83
-            else if (action.equals("show")) {
84
-                // This gets called from JavaScript onCordovaReady to show the webview.
85
-                // I recommend we change the name of the Message as spinner/stop is not
86
-                // indicative of what this actually does (shows the webview).
87
-                cordova.getActivity().runOnUiThread(new Runnable() {
88
-                    public void run() {
89
-                        webView.getPluginManager().postMessage("spinner", "stop");
90
-                    }
91
-                });
92
-            }
93
-            else if (action.equals("loadUrl")) {
94
-                this.loadUrl(args.getString(0), args.optJSONObject(1));
95
-            }
96
-            else if (action.equals("cancelLoadUrl")) {
97
-                //this.cancelLoadUrl();
98
-            }
99
-            else if (action.equals("clearHistory")) {
100
-                this.clearHistory();
101
-            }
102
-            else if (action.equals("backHistory")) {
103
-                this.backHistory();
104
-            }
105
-            else if (action.equals("overrideButton")) {
106
-                this.overrideButton(args.getString(0), args.getBoolean(1));
107
-            }
108
-            else if (action.equals("overrideBackbutton")) {
109
-                this.overrideBackbutton(args.getBoolean(0));
110
-            }
111
-            else if (action.equals("exitApp")) {
112
-                this.exitApp();
113
-            }
114
-			else if (action.equals("messageChannel")) {
115
-                synchronized(messageChannelLock) {
116
-                    messageChannel = callbackContext;
117
-                    if (pendingPause != null) {
118
-                        sendEventMessage(pendingPause);
119
-                        pendingPause = null;
120
-                    }
121
-                    if (pendingResume != null) {
122
-                        sendEventMessage(pendingResume);
123
-                        pendingResume = null;
124
-                    }
125
-                }
126
-                return true;
127
-            }
128
-
129
-            callbackContext.sendPluginResult(new PluginResult(status, result));
130
-            return true;
131
-        } catch (JSONException e) {
132
-            callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
133
-            return false;
134
-        }
135
-    }
136
-
137
-    //--------------------------------------------------------------------------
138
-    // LOCAL METHODS
139
-    //--------------------------------------------------------------------------
140
-
141
-    /**
142
-     * Clear the resource cache.
143
-     */
144
-    public void clearCache() {
145
-        cordova.getActivity().runOnUiThread(new Runnable() {
146
-            public void run() {
147
-                webView.clearCache();
148
-            }
149
-        });
150
-    }
151
-
152
-    /**
153
-     * Load the url into the webview.
154
-     *
155
-     * @param url
156
-     * @param props			Properties that can be passed in to the Cordova activity (i.e. loadingDialog, wait, ...)
157
-     * @throws JSONException
158
-     */
159
-    public void loadUrl(String url, JSONObject props) throws JSONException {
160
-        LOG.d("App", "App.loadUrl("+url+","+props+")");
161
-        int wait = 0;
162
-        boolean openExternal = false;
163
-        boolean clearHistory = false;
164
-
165
-        // If there are properties, then set them on the Activity
166
-        HashMap<String, Object> params = new HashMap<String, Object>();
167
-        if (props != null) {
168
-            JSONArray keys = props.names();
169
-            for (int i = 0; i < keys.length(); i++) {
170
-                String key = keys.getString(i);
171
-                if (key.equals("wait")) {
172
-                    wait = props.getInt(key);
173
-                }
174
-                else if (key.equalsIgnoreCase("openexternal")) {
175
-                    openExternal = props.getBoolean(key);
176
-                }
177
-                else if (key.equalsIgnoreCase("clearhistory")) {
178
-                    clearHistory = props.getBoolean(key);
179
-                }
180
-                else {
181
-                    Object value = props.get(key);
182
-                    if (value == null) {
183
-
184
-                    }
185
-                    else if (value.getClass().equals(String.class)) {
186
-                        params.put(key, (String)value);
187
-                    }
188
-                    else if (value.getClass().equals(Boolean.class)) {
189
-                        params.put(key, (Boolean)value);
190
-                    }
191
-                    else if (value.getClass().equals(Integer.class)) {
192
-                        params.put(key, (Integer)value);
193
-                    }
194
-                }
195
-            }
196
-        }
197
-
198
-        // If wait property, then delay loading
199
-
200
-        if (wait > 0) {
201
-            try {
202
-                synchronized(this) {
203
-                    this.wait(wait);
204
-                }
205
-            } catch (InterruptedException e) {
206
-                e.printStackTrace();
207
-            }
208
-        }
209
-        this.webView.showWebPage(url, openExternal, clearHistory, params);
210
-    }
211
-
212
-    /**
213
-     * Clear page history for the app.
214
-     */
215
-    public void clearHistory() {
216
-        cordova.getActivity().runOnUiThread(new Runnable() {
217
-            public void run() {
218
-                webView.clearHistory();
219
-            }
220
-        });
221
-    }
222
-
223
-    /**
224
-     * Go to previous page displayed.
225
-     * This is the same as pressing the backbutton on Android device.
226
-     */
227
-    public void backHistory() {
228
-        cordova.getActivity().runOnUiThread(new Runnable() {
229
-            public void run() {
230
-                webView.backHistory();
231
-            }
232
-        });
233
-    }
234
-
235
-    /**
236
-     * Override the default behavior of the Android back button.
237
-     * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired.
238
-     *
239
-     * @param override		T=override, F=cancel override
240
-     */
241
-    public void overrideBackbutton(boolean override) {
242
-        LOG.i("App", "WARNING: Back Button Default Behavior will be overridden.  The backbutton event will be fired!");
243
-        webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_BACK, override);
244
-    }
245
-
246
-    /**
247
-     * Override the default behavior of the Android volume buttons.
248
-     * If overridden, when the volume button is pressed, the "volume[up|down]button" JavaScript event will be fired.
249
-     *
250
-     * @param button        volumeup, volumedown
251
-     * @param override      T=override, F=cancel override
252
-     */
253
-    public void overrideButton(String button, boolean override) {
254
-        LOG.i("App", "WARNING: Volume Button Default Behavior will be overridden.  The volume event will be fired!");
255
-        if (button.equals("volumeup")) {
256
-            webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_UP, override);
257
-        }
258
-        else if (button.equals("volumedown")) {
259
-            webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_DOWN, override);
260
-        }
261
-        else if (button.equals("menubutton")) {
262
-            webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_MENU, override);
263
-        }
264
-    }
265
-
266
-    /**
267
-     * Return whether the Android back button is overridden by the user.
268
-     *
269
-     * @return boolean
270
-     */
271
-    public boolean isBackbuttonOverridden() {
272
-        return webView.isButtonPlumbedToJs(KeyEvent.KEYCODE_BACK);
273
-    }
274
-
275
-    /**
276
-     * Exit the Android application.
277
-     */
278
-    public void exitApp() {
279
-        this.webView.getPluginManager().postMessage("exit", null);
280
-    }
281
-
282
-
283
-    /**
284
-     * Listen for telephony events: RINGING, OFFHOOK and IDLE
285
-     * Send these events to all plugins using
286
-     *      CordovaActivity.onMessage("telephone", "ringing" | "offhook" | "idle")
287
-     */
288
-    private void initTelephonyReceiver() {
289
-        IntentFilter intentFilter = new IntentFilter();
290
-        intentFilter.addAction(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
291
-        //final CordovaInterface mycordova = this.cordova;
292
-        this.telephonyReceiver = new BroadcastReceiver() {
293
-
294
-            @Override
295
-            public void onReceive(Context context, Intent intent) {
296
-
297
-                // If state has changed
298
-                if ((intent != null) && intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) {
299
-                    if (intent.hasExtra(TelephonyManager.EXTRA_STATE)) {
300
-                        String extraData = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
301
-                        if (extraData.equals(TelephonyManager.EXTRA_STATE_RINGING)) {
302
-                            LOG.i(TAG, "Telephone RINGING");
303
-                            webView.getPluginManager().postMessage("telephone", "ringing");
304
-                        }
305
-                        else if (extraData.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
306
-                            LOG.i(TAG, "Telephone OFFHOOK");
307
-                            webView.getPluginManager().postMessage("telephone", "offhook");
308
-                        }
309
-                        else if (extraData.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
310
-                            LOG.i(TAG, "Telephone IDLE");
311
-                            webView.getPluginManager().postMessage("telephone", "idle");
312
-                        }
313
-                    }
314
-                }
315
-            }
316
-        };
317
-
318
-        // Register the receiver
319
-        webView.getContext().registerReceiver(this.telephonyReceiver, intentFilter);
320
-    }
321
-
322
-    private void sendEventMessage(String action) {
323
-        JSONObject obj = new JSONObject();
324
-        try {
325
-            obj.put("action", action);
326
-        } catch (JSONException e) {
327
-            LOG.e(TAG, "Failed to create event message", e);
328
-        }
329
-        PluginResult result = new PluginResult(PluginResult.Status.OK, obj);
330
-
331
-        if (messageChannel == null) {
332
-            LOG.i(TAG, "Request to send event before messageChannel initialised: " + action);
333
-            if ("pause".equals(action)) {
334
-                pendingPause = result;
335
-            } else if ("resume".equals(action)) {
336
-                // When starting normally onPause then onResume is called
337
-                pendingPause = null;
338
-            }
339
-        } else {
340
-            sendEventMessage(result);
341
-        }
342
-    }
343
-
344
-    private void sendEventMessage(PluginResult payload) {
345
-        payload.setKeepCallback(true);
346
-        if (messageChannel != null) {
347
-            messageChannel.sendPluginResult(payload);
348
-        }
349
-    }
350
-
351
-    /*
352
-     * Unregister the receiver
353
-     *
354
-     */
355
-    public void onDestroy()
356
-    {
357
-        webView.getContext().unregisterReceiver(this.telephonyReceiver);
358
-    }
359
-
360
-    /**
361
-     * Used to send the resume event in the case that the Activity is destroyed by the OS
362
-     *
363
-     * @param resumeEvent PluginResult containing the payload for the resume event to be fired
364
-     */
365
-    public void sendResumeEvent(PluginResult resumeEvent) {
366
-        // This operation must be synchronized because plugin results that trigger resume
367
-        // events can be processed asynchronously
368
-        synchronized(messageChannelLock) {
369
-            if (messageChannel != null) {
370
-                sendEventMessage(resumeEvent);
371
-            } else {
372
-                // Might get called before the page loads, so we need to store it until the
373
-                // messageChannel gets created
374
-                this.pendingResume = resumeEvent;
375
-            }
376
-        }
377
-    }
378
-
379
-      /*
380
-     * This needs to be implemented if you wish to use the Camera Plugin or other plugins
381
-     * that read the Build Configuration.
382
-     *
383
-     * Thanks to Phil@Medtronic and Graham Borland for finding the answer and posting it to
384
-     * StackOverflow.  This is annoying as hell!
385
-     *
386
-     */
387
-
388
-    public static Object getBuildConfigValue(Context ctx, String key)
389
-    {
390
-        try
391
-        {
392
-            Class<?> clazz = Class.forName(ctx.getClass().getPackage().getName() + ".BuildConfig");
393
-            Field field = clazz.getField(key);
394
-            return field.get(null);
395
-        } catch (ClassNotFoundException e) {
396
-            LOG.d(TAG, "Unable to get the BuildConfig, is this built with ANT?");
397
-            e.printStackTrace();
398
-        } catch (NoSuchFieldException e) {
399
-            LOG.d(TAG, key + " is not a valid field. Check your build.gradle");
400
-        } catch (IllegalAccessException e) {
401
-            LOG.d(TAG, "Illegal Access Exception: Let's print a stack trace.");
402
-            e.printStackTrace();
403
-        } catch (NullPointerException e) {
404
-            LOG.d(TAG, "Null Pointer Exception: Let's print a stack trace.");
405
-            e.printStackTrace();
406
-        }
407
-
408
-        return null;
409
-    }
410
-}

+ 0
- 31
platforms/android/CordovaLib/src/org/apache/cordova/ExposedJsApi.java 查看文件

@@ -1,31 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-package org.apache.cordova;
21
-
22
-import org.json.JSONException;
23
-
24
-/*
25
- * Any exposed Javascript API MUST implement these three things!
26
- */
27
-public interface ExposedJsApi {
28
-    public String exec(int bridgeSecret, String service, String action, String callbackId, String arguments) throws JSONException, IllegalAccessException;
29
-    public void setNativeToJsBridgeMode(int bridgeSecret, int value) throws IllegalAccessException;
30
-    public String retrieveJsMessages(int bridgeSecret, boolean fromOnlineEvent) throws IllegalAccessException;
31
-}

+ 0
- 66
platforms/android/CordovaLib/src/org/apache/cordova/ICordovaClientCertRequest.java 查看文件

@@ -1,66 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import java.security.Principal;
22
-import java.security.PrivateKey;
23
-import java.security.cert.X509Certificate;
24
-
25
-/**
26
- * Specifies interface for handling certificate requests.
27
- */
28
-public interface ICordovaClientCertRequest {
29
-    /**
30
-     * Cancel this request
31
-     */
32
-    public void cancel();
33
-
34
-    /*
35
-     * Returns the host name of the server requesting the certificate.
36
-     */
37
-    public String getHost();
38
-
39
-    /*
40
-     * Returns the acceptable types of asymmetric keys (can be null).
41
-     */
42
-    public String[] getKeyTypes();
43
-
44
-    /*
45
-     * Returns the port number of the server requesting the certificate.
46
-     */
47
-    public int getPort();
48
-
49
-    /*
50
-     * Returns the acceptable certificate issuers for the certificate matching the private key (can be null).
51
-     */
52
-    public Principal[] getPrincipals();
53
-
54
-    /*
55
-     * Ignore the request for now. Do not remember user's choice.
56
-     */
57
-    public void ignore();
58
-
59
-    /*
60
-     * Proceed with the specified private key and client certificate chain. Remember the user's positive choice and use it for future requests.
61
-     *
62
-     * @param privateKey The privateKey
63
-     * @param chain The certificate chain
64
-     */
65
-    public void proceed(PrivateKey privateKey, X509Certificate[] chain);
66
-}

+ 0
- 33
platforms/android/CordovaLib/src/org/apache/cordova/ICordovaCookieManager.java 查看文件

@@ -1,33 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-package org.apache.cordova;
21
-
22
-public interface ICordovaCookieManager {
23
-
24
-    public void setCookiesEnabled(boolean accept);
25
-
26
-    public void setCookie(final String url, final String value);
27
-
28
-    public String getCookie(final String url);
29
-
30
-    public void clearCookies();
31
-
32
-    public void flush();
33
-};

+ 0
- 38
platforms/android/CordovaLib/src/org/apache/cordova/ICordovaHttpAuthHandler.java 查看文件

@@ -1,38 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-/**
22
- * Specifies interface for HTTP auth handler object which is used to handle auth requests and
23
- * specifying user credentials.
24
- */
25
- public interface ICordovaHttpAuthHandler {
26
-    /**
27
-     * Instructs the WebView to cancel the authentication request.
28
-     */
29
-    public void cancel ();
30
-
31
-    /**
32
-     * Instructs the WebView to proceed with the authentication with the given credentials.
33
-     *
34
-     * @param username The user name
35
-     * @param password The password
36
-     */
37
-    public void proceed (String username, String password);
38
-}

+ 0
- 244
platforms/android/CordovaLib/src/org/apache/cordova/LOG.java 查看文件

@@ -1,244 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import android.util.Log;
22
-
23
-/**
24
- * Log to Android logging system.
25
- *
26
- * Log message can be a string or a printf formatted string with arguments.
27
- * See http://developer.android.com/reference/java/util/Formatter.html
28
- */
29
-public class LOG {
30
-
31
-    public static final int VERBOSE = Log.VERBOSE;
32
-    public static final int DEBUG = Log.DEBUG;
33
-    public static final int INFO = Log.INFO;
34
-    public static final int WARN = Log.WARN;
35
-    public static final int ERROR = Log.ERROR;
36
-
37
-    // Current log level
38
-    public static int LOGLEVEL = Log.ERROR;
39
-
40
-    /**
41
-     * Set the current log level.
42
-     *
43
-     * @param logLevel
44
-     */
45
-    public static void setLogLevel(int logLevel) {
46
-        LOGLEVEL = logLevel;
47
-        Log.i("CordovaLog", "Changing log level to " + logLevel);
48
-    }
49
-
50
-    /**
51
-     * Set the current log level.
52
-     *
53
-     * @param logLevel
54
-     */
55
-    public static void setLogLevel(String logLevel) {
56
-        if ("VERBOSE".equals(logLevel)) LOGLEVEL = VERBOSE;
57
-        else if ("DEBUG".equals(logLevel)) LOGLEVEL = DEBUG;
58
-        else if ("INFO".equals(logLevel)) LOGLEVEL = INFO;
59
-        else if ("WARN".equals(logLevel)) LOGLEVEL = WARN;
60
-        else if ("ERROR".equals(logLevel)) LOGLEVEL = ERROR;
61
-        Log.i("CordovaLog", "Changing log level to " + logLevel + "(" + LOGLEVEL + ")");
62
-    }
63
-
64
-    /**
65
-     * Determine if log level will be logged
66
-     *
67
-     * @param logLevel
68
-     * @return true if the parameter passed in is greater than or equal to the current log level
69
-     */
70
-    public static boolean isLoggable(int logLevel) {
71
-        return (logLevel >= LOGLEVEL);
72
-    }
73
-
74
-    /**
75
-     * Verbose log message.
76
-     *
77
-     * @param tag
78
-     * @param s
79
-     */
80
-    public static void v(String tag, String s) {
81
-        if (LOG.VERBOSE >= LOGLEVEL) Log.v(tag, s);
82
-    }
83
-
84
-    /**
85
-     * Debug log message.
86
-     *
87
-     * @param tag
88
-     * @param s
89
-     */
90
-    public static void d(String tag, String s) {
91
-        if (LOG.DEBUG >= LOGLEVEL) Log.d(tag, s);
92
-    }
93
-
94
-    /**
95
-     * Info log message.
96
-     *
97
-     * @param tag
98
-     * @param s
99
-     */
100
-    public static void i(String tag, String s) {
101
-        if (LOG.INFO >= LOGLEVEL) Log.i(tag, s);
102
-    }
103
-
104
-    /**
105
-     * Warning log message.
106
-     *
107
-     * @param tag
108
-     * @param s
109
-     */
110
-    public static void w(String tag, String s) {
111
-        if (LOG.WARN >= LOGLEVEL) Log.w(tag, s);
112
-    }
113
-
114
-    /**
115
-     * Error log message.
116
-     *
117
-     * @param tag
118
-     * @param s
119
-     */
120
-    public static void e(String tag, String s) {
121
-        if (LOG.ERROR >= LOGLEVEL) Log.e(tag, s);
122
-    }
123
-
124
-    /**
125
-     * Verbose log message.
126
-     *
127
-     * @param tag
128
-     * @param s
129
-     * @param e
130
-     */
131
-    public static void v(String tag, String s, Throwable e) {
132
-        if (LOG.VERBOSE >= LOGLEVEL) Log.v(tag, s, e);
133
-    }
134
-
135
-    /**
136
-     * Debug log message.
137
-     *
138
-     * @param tag
139
-     * @param s
140
-     * @param e
141
-     */
142
-    public static void d(String tag, String s, Throwable e) {
143
-        if (LOG.DEBUG >= LOGLEVEL) Log.d(tag, s, e);
144
-    }
145
-
146
-    /**
147
-     * Info log message.
148
-     *
149
-     * @param tag
150
-     * @param s
151
-     * @param e
152
-     */
153
-    public static void i(String tag, String s, Throwable e) {
154
-        if (LOG.INFO >= LOGLEVEL) Log.i(tag, s, e);
155
-    }
156
-
157
-    /**
158
-     * Warning log message.
159
-     *
160
-     * @param tag
161
-     * @param e
162
-     */
163
-    public static void w(String tag, Throwable e) {
164
-        if (LOG.WARN >= LOGLEVEL) Log.w(tag, e);
165
-    }
166
-
167
-    /**
168
-     * Warning log message.
169
-     *
170
-     * @param tag
171
-     * @param s
172
-     * @param e
173
-     */
174
-    public static void w(String tag, String s, Throwable e) {
175
-        if (LOG.WARN >= LOGLEVEL) Log.w(tag, s, e);
176
-    }
177
-
178
-    /**
179
-     * Error log message.
180
-     *
181
-     * @param tag
182
-     * @param s
183
-     * @param e
184
-     */
185
-    public static void e(String tag, String s, Throwable e) {
186
-        if (LOG.ERROR >= LOGLEVEL) Log.e(tag, s, e);
187
-    }
188
-
189
-    /**
190
-     * Verbose log message with printf formatting.
191
-     *
192
-     * @param tag
193
-     * @param s
194
-     * @param args
195
-     */
196
-    public static void v(String tag, String s, Object... args) {
197
-        if (LOG.VERBOSE >= LOGLEVEL) Log.v(tag, String.format(s, args));
198
-    }
199
-
200
-    /**
201
-     * Debug log message with printf formatting.
202
-     *
203
-     * @param tag
204
-     * @param s
205
-     * @param args
206
-     */
207
-    public static void d(String tag, String s, Object... args) {
208
-        if (LOG.DEBUG >= LOGLEVEL) Log.d(tag, String.format(s, args));
209
-    }
210
-
211
-    /**
212
-     * Info log message with printf formatting.
213
-     *
214
-     * @param tag
215
-     * @param s
216
-     * @param args
217
-     */
218
-    public static void i(String tag, String s, Object... args) {
219
-        if (LOG.INFO >= LOGLEVEL) Log.i(tag, String.format(s, args));
220
-    }
221
-
222
-    /**
223
-     * Warning log message with printf formatting.
224
-     *
225
-     * @param tag
226
-     * @param s
227
-     * @param args
228
-     */
229
-    public static void w(String tag, String s, Object... args) {
230
-        if (LOG.WARN >= LOGLEVEL) Log.w(tag, String.format(s, args));
231
-    }
232
-
233
-    /**
234
-     * Error log message with printf formatting.
235
-     *
236
-     * @param tag
237
-     * @param s
238
-     * @param args
239
-     */
240
-    public static void e(String tag, String s, Object... args) {
241
-        if (LOG.ERROR >= LOGLEVEL) Log.e(tag, String.format(s, args));
242
-    }
243
-
244
-}

+ 0
- 552
platforms/android/CordovaLib/src/org/apache/cordova/NativeToJsMessageQueue.java 查看文件

@@ -1,552 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import java.util.ArrayList;
22
-import java.util.LinkedList;
23
-
24
-/**
25
- * Holds the list of messages to be sent to the WebView.
26
- */
27
-public class NativeToJsMessageQueue {
28
-    private static final String LOG_TAG = "JsMessageQueue";
29
-
30
-    // Set this to true to force plugin results to be encoding as
31
-    // JS instead of the custom format (useful for benchmarking).
32
-    // Doesn't work for multipart messages.
33
-    private static final boolean FORCE_ENCODE_USING_EVAL = false;
34
-
35
-    // Disable sending back native->JS messages during an exec() when the active
36
-    // exec() is asynchronous. Set this to true when running bridge benchmarks.
37
-    static final boolean DISABLE_EXEC_CHAINING = false;
38
-
39
-    // A hopefully reasonable upper limit of how much combined payload data
40
-    // to send to the JavaScript in one shot.
41
-    // This currently only chops up on message boundaries.
42
-    // It may be useful to split and reassemble response messages someday.
43
-    private static int COMBINED_RESPONSE_CUTOFF = 16 * 1024 * 1024;
44
-
45
-    /**
46
-     * When true, the active listener is not fired upon enqueue. When set to false,
47
-     * the active listener will be fired if the queue is non-empty.
48
-     */
49
-    private boolean paused;
50
-
51
-    /**
52
-     * The list of JavaScript statements to be sent to JavaScript.
53
-     */
54
-    private final LinkedList<JsMessage> queue = new LinkedList<JsMessage>();
55
-
56
-    /**
57
-     * The array of listeners that can be used to send messages to JS.
58
-     */
59
-    private ArrayList<BridgeMode> bridgeModes = new ArrayList<BridgeMode>();
60
-
61
-    /**
62
-     * When null, the bridge is disabled. This occurs during page transitions.
63
-     * When disabled, all callbacks are dropped since they are assumed to be
64
-     * relevant to the previous page.
65
-     */
66
-    private BridgeMode activeBridgeMode;
67
-
68
-    public void addBridgeMode(BridgeMode bridgeMode) {
69
-        bridgeModes.add(bridgeMode);
70
-    }
71
-
72
-    public boolean isBridgeEnabled() {
73
-        return activeBridgeMode != null;
74
-    }
75
-
76
-    public boolean isEmpty() {
77
-        return queue.isEmpty();
78
-    }
79
-
80
-    /**
81
-     * Changes the bridge mode.
82
-     */
83
-    public void setBridgeMode(int value) {
84
-        if (value < -1 || value >= bridgeModes.size()) {
85
-            LOG.d(LOG_TAG, "Invalid NativeToJsBridgeMode: " + value);
86
-        } else {
87
-            BridgeMode newMode = value < 0 ? null : bridgeModes.get(value);
88
-            if (newMode != activeBridgeMode) {
89
-                LOG.d(LOG_TAG, "Set native->JS mode to " + (newMode == null ? "null" : newMode.getClass().getSimpleName()));
90
-                synchronized (this) {
91
-                    activeBridgeMode = newMode;
92
-                    if (newMode != null) {
93
-                        newMode.reset();
94
-                        if (!paused && !queue.isEmpty()) {
95
-                            newMode.onNativeToJsMessageAvailable(this);
96
-                        }
97
-                    }
98
-                }
99
-            }
100
-        }
101
-    }
102
-
103
-    /**
104
-     * Clears all messages and resets to the default bridge mode.
105
-     */
106
-    public void reset() {
107
-        synchronized (this) {
108
-            queue.clear();
109
-            setBridgeMode(-1);
110
-        }
111
-    }
112
-
113
-    private int calculatePackedMessageLength(JsMessage message) {
114
-        int messageLen = message.calculateEncodedLength();
115
-        String messageLenStr = String.valueOf(messageLen);
116
-        return messageLenStr.length() + messageLen + 1;
117
-    }
118
-
119
-    private void packMessage(JsMessage message, StringBuilder sb) {
120
-        int len = message.calculateEncodedLength();
121
-        sb.append(len)
122
-          .append(' ');
123
-        message.encodeAsMessage(sb);
124
-    }
125
-
126
-    /**
127
-     * Combines and returns queued messages combined into a single string.
128
-     *
129
-     * Combines as many messages as possible, without exceeding
130
-     * COMBINED_RESPONSE_CUTOFF in case of multiple response messages.
131
-     *
132
-     * Returns null if the queue is empty.
133
-     */
134
-    public String popAndEncode(boolean fromOnlineEvent) {
135
-        synchronized (this) {
136
-            if (activeBridgeMode == null) {
137
-                return null;
138
-            }
139
-            activeBridgeMode.notifyOfFlush(this, fromOnlineEvent);
140
-            if (queue.isEmpty()) {
141
-                return null;
142
-            }
143
-            int totalPayloadLen = 0;
144
-            int numMessagesToSend = 0;
145
-            for (JsMessage message : queue) {
146
-                int messageSize = calculatePackedMessageLength(message);
147
-                if (numMessagesToSend > 0 &&
148
-                    COMBINED_RESPONSE_CUTOFF > 0 &&
149
-                    totalPayloadLen + messageSize > COMBINED_RESPONSE_CUTOFF
150
-                   ) {
151
-                    break;
152
-                }
153
-                totalPayloadLen += messageSize;
154
-                numMessagesToSend += 1;
155
-            }
156
-
157
-            StringBuilder sb = new StringBuilder(totalPayloadLen);
158
-            for (int i = 0; i < numMessagesToSend; ++i) {
159
-                JsMessage message = queue.removeFirst();
160
-                packMessage(message, sb);
161
-            }
162
-
163
-            if (!queue.isEmpty()) {
164
-                // Attach a char to indicate that there are more messages pending.
165
-                sb.append('*');
166
-            }
167
-            String ret = sb.toString();
168
-            return ret;
169
-        }
170
-    }
171
-
172
-    /**
173
-     * Same as popAndEncode(), except encodes in a form that can be executed as JS.
174
-     */
175
-    public String popAndEncodeAsJs() {
176
-        synchronized (this) {
177
-            int length = queue.size();
178
-            if (length == 0) {
179
-                return null;
180
-            }
181
-            int totalPayloadLen = 0;
182
-            int numMessagesToSend = 0;
183
-            for (JsMessage message : queue) {
184
-                int messageSize = message.calculateEncodedLength() + 50; // overestimate.
185
-                if (numMessagesToSend > 0 &&
186
-                    COMBINED_RESPONSE_CUTOFF > 0 &&
187
-                    totalPayloadLen + messageSize > COMBINED_RESPONSE_CUTOFF
188
-                   ) {
189
-                    break;
190
-                }
191
-                totalPayloadLen += messageSize;
192
-                numMessagesToSend += 1;
193
-            }
194
-            boolean willSendAllMessages = numMessagesToSend == queue.size();
195
-            StringBuilder sb = new StringBuilder(totalPayloadLen + (willSendAllMessages ? 0 : 100));
196
-            // Wrap each statement in a try/finally so that if one throws it does
197
-            // not affect the next.
198
-            for (int i = 0; i < numMessagesToSend; ++i) {
199
-                JsMessage message = queue.removeFirst();
200
-                if (willSendAllMessages && (i + 1 == numMessagesToSend)) {
201
-                    message.encodeAsJsMessage(sb);
202
-                } else {
203
-                    sb.append("try{");
204
-                    message.encodeAsJsMessage(sb);
205
-                    sb.append("}finally{");
206
-                }
207
-            }
208
-            if (!willSendAllMessages) {
209
-                sb.append("window.setTimeout(function(){cordova.require('cordova/plugin/android/polling').pollOnce();},0);");
210
-            }
211
-            for (int i = willSendAllMessages ? 1 : 0; i < numMessagesToSend; ++i) {
212
-                sb.append('}');
213
-            }
214
-            String ret = sb.toString();
215
-            return ret;
216
-        }
217
-    }
218
-
219
-    /**
220
-     * Add a JavaScript statement to the list.
221
-     */
222
-    public void addJavaScript(String statement) {
223
-        enqueueMessage(new JsMessage(statement));
224
-    }
225
-
226
-    /**
227
-     * Add a JavaScript statement to the list.
228
-     */
229
-    public void addPluginResult(PluginResult result, String callbackId) {
230
-        if (callbackId == null) {
231
-            LOG.e(LOG_TAG, "Got plugin result with no callbackId", new Throwable());
232
-            return;
233
-        }
234
-        // Don't send anything if there is no result and there is no need to
235
-        // clear the callbacks.
236
-        boolean noResult = result.getStatus() == PluginResult.Status.NO_RESULT.ordinal();
237
-        boolean keepCallback = result.getKeepCallback();
238
-        if (noResult && keepCallback) {
239
-            return;
240
-        }
241
-        JsMessage message = new JsMessage(result, callbackId);
242
-        if (FORCE_ENCODE_USING_EVAL) {
243
-            StringBuilder sb = new StringBuilder(message.calculateEncodedLength() + 50);
244
-            message.encodeAsJsMessage(sb);
245
-            message = new JsMessage(sb.toString());
246
-        }
247
-
248
-        enqueueMessage(message);
249
-    }
250
-
251
-    private void enqueueMessage(JsMessage message) {
252
-        synchronized (this) {
253
-            if (activeBridgeMode == null) {
254
-                LOG.d(LOG_TAG, "Dropping Native->JS message due to disabled bridge");
255
-                return;
256
-            }
257
-            queue.add(message);
258
-            if (!paused) {
259
-                activeBridgeMode.onNativeToJsMessageAvailable(this);
260
-            }
261
-        }
262
-    }
263
-
264
-    public void setPaused(boolean value) {
265
-        if (paused && value) {
266
-            // This should never happen. If a use-case for it comes up, we should
267
-            // change pause to be a counter.
268
-            LOG.e(LOG_TAG, "nested call to setPaused detected.", new Throwable());
269
-        }
270
-        paused = value;
271
-        if (!value) {
272
-            synchronized (this) {
273
-                if (!queue.isEmpty() && activeBridgeMode != null) {
274
-                    activeBridgeMode.onNativeToJsMessageAvailable(this);
275
-                }
276
-            }
277
-        }
278
-    }
279
-
280
-    public static abstract class BridgeMode {
281
-        public abstract void onNativeToJsMessageAvailable(NativeToJsMessageQueue queue);
282
-        public void notifyOfFlush(NativeToJsMessageQueue queue, boolean fromOnlineEvent) {}
283
-        public void reset() {}
284
-    }
285
-
286
-    /** Uses JS polls for messages on a timer.. */
287
-    public static class NoOpBridgeMode extends BridgeMode {
288
-        @Override public void onNativeToJsMessageAvailable(NativeToJsMessageQueue queue) {
289
-        }
290
-    }
291
-
292
-    /** Uses webView.loadUrl("javascript:") to execute messages. */
293
-    public static class LoadUrlBridgeMode extends BridgeMode {
294
-        private final CordovaWebViewEngine engine;
295
-        private final CordovaInterface cordova;
296
-
297
-        public LoadUrlBridgeMode(CordovaWebViewEngine engine, CordovaInterface cordova) {
298
-            this.engine = engine;
299
-            this.cordova = cordova;
300
-        }
301
-
302
-        @Override
303
-        public void onNativeToJsMessageAvailable(final NativeToJsMessageQueue queue) {
304
-            cordova.getActivity().runOnUiThread(new Runnable() {
305
-                public void run() {
306
-                    String js = queue.popAndEncodeAsJs();
307
-                    if (js != null) {
308
-                        engine.loadUrl("javascript:" + js, false);
309
-                    }
310
-                }
311
-            });
312
-        }
313
-    }
314
-
315
-    /** Uses online/offline events to tell the JS when to poll for messages. */
316
-    public static class OnlineEventsBridgeMode extends BridgeMode {
317
-        private final OnlineEventsBridgeModeDelegate delegate;
318
-        private boolean online;
319
-        private boolean ignoreNextFlush;
320
-
321
-        public interface OnlineEventsBridgeModeDelegate {
322
-            void setNetworkAvailable(boolean value);
323
-            void runOnUiThread(Runnable r);
324
-        }
325
-
326
-        public OnlineEventsBridgeMode(OnlineEventsBridgeModeDelegate delegate) {
327
-            this.delegate = delegate;
328
-        }
329
-
330
-        @Override
331
-        public void reset() {
332
-            delegate.runOnUiThread(new Runnable() {
333
-                public void run() {
334
-                    online = false;
335
-                    // If the following call triggers a notifyOfFlush, then ignore it.
336
-                    ignoreNextFlush = true;
337
-                    delegate.setNetworkAvailable(true);
338
-                }
339
-            });
340
-        }
341
-
342
-        @Override
343
-        public void onNativeToJsMessageAvailable(final NativeToJsMessageQueue queue) {
344
-            delegate.runOnUiThread(new Runnable() {
345
-                public void run() {
346
-                    if (!queue.isEmpty()) {
347
-                        ignoreNextFlush = false;
348
-                        delegate.setNetworkAvailable(online);
349
-                    }
350
-                }
351
-            });
352
-        }
353
-        // Track when online/offline events are fired so that we don't fire excess events.
354
-        @Override
355
-        public void notifyOfFlush(final NativeToJsMessageQueue queue, boolean fromOnlineEvent) {
356
-            if (fromOnlineEvent && !ignoreNextFlush) {
357
-                online = !online;
358
-            }
359
-        }
360
-    }
361
-
362
-    /** Uses webView.evaluateJavascript to execute messages. */
363
-    public static class EvalBridgeMode extends BridgeMode {
364
-        private final CordovaWebViewEngine engine;
365
-        private final CordovaInterface cordova;
366
-
367
-        public EvalBridgeMode(CordovaWebViewEngine engine, CordovaInterface cordova) {
368
-            this.engine = engine;
369
-            this.cordova = cordova;
370
-        }
371
-
372
-        @Override
373
-        public void onNativeToJsMessageAvailable(final NativeToJsMessageQueue queue) {
374
-            cordova.getActivity().runOnUiThread(new Runnable() {
375
-                public void run() {
376
-                    String js = queue.popAndEncodeAsJs();
377
-                    if (js != null) {
378
-                        engine.evaluateJavascript(js, null);
379
-                    }
380
-                }
381
-            });
382
-        }
383
-    }
384
-
385
-
386
-
387
-    private static class JsMessage {
388
-        final String jsPayloadOrCallbackId;
389
-        final PluginResult pluginResult;
390
-        JsMessage(String js) {
391
-            if (js == null) {
392
-                throw new NullPointerException();
393
-            }
394
-            jsPayloadOrCallbackId = js;
395
-            pluginResult = null;
396
-        }
397
-        JsMessage(PluginResult pluginResult, String callbackId) {
398
-            if (callbackId == null || pluginResult == null) {
399
-                throw new NullPointerException();
400
-            }
401
-            jsPayloadOrCallbackId = callbackId;
402
-            this.pluginResult = pluginResult;
403
-        }
404
-
405
-        static int calculateEncodedLengthHelper(PluginResult pluginResult) {
406
-            switch (pluginResult.getMessageType()) {
407
-                case PluginResult.MESSAGE_TYPE_BOOLEAN: // f or t
408
-                case PluginResult.MESSAGE_TYPE_NULL: // N
409
-                    return 1;
410
-                case PluginResult.MESSAGE_TYPE_NUMBER: // n
411
-                    return 1 + pluginResult.getMessage().length();
412
-                case PluginResult.MESSAGE_TYPE_STRING: // s
413
-                    return 1 + pluginResult.getStrMessage().length();
414
-                case PluginResult.MESSAGE_TYPE_BINARYSTRING:
415
-                    return 1 + pluginResult.getMessage().length();
416
-                case PluginResult.MESSAGE_TYPE_ARRAYBUFFER:
417
-                    return 1 + pluginResult.getMessage().length();
418
-                case PluginResult.MESSAGE_TYPE_MULTIPART:
419
-                    int ret = 1;
420
-                    for (int i = 0; i < pluginResult.getMultipartMessagesSize(); i++) {
421
-                        int length = calculateEncodedLengthHelper(pluginResult.getMultipartMessage(i));
422
-                        int argLength = String.valueOf(length).length();
423
-                        ret += argLength + 1 + length;
424
-                    }
425
-                    return ret;
426
-                case PluginResult.MESSAGE_TYPE_JSON:
427
-                default:
428
-                    return pluginResult.getMessage().length();
429
-            }
430
-        }
431
-
432
-        int calculateEncodedLength() {
433
-            if (pluginResult == null) {
434
-                return jsPayloadOrCallbackId.length() + 1;
435
-            }
436
-            int statusLen = String.valueOf(pluginResult.getStatus()).length();
437
-            int ret = 2 + statusLen + 1 + jsPayloadOrCallbackId.length() + 1;
438
-            return ret + calculateEncodedLengthHelper(pluginResult);
439
-            }
440
-
441
-        static void encodeAsMessageHelper(StringBuilder sb, PluginResult pluginResult) {
442
-            switch (pluginResult.getMessageType()) {
443
-                case PluginResult.MESSAGE_TYPE_BOOLEAN:
444
-                    sb.append(pluginResult.getMessage().charAt(0)); // t or f.
445
-                    break;
446
-                case PluginResult.MESSAGE_TYPE_NULL: // N
447
-                    sb.append('N');
448
-                    break;
449
-                case PluginResult.MESSAGE_TYPE_NUMBER: // n
450
-                    sb.append('n')
451
-                      .append(pluginResult.getMessage());
452
-                    break;
453
-                case PluginResult.MESSAGE_TYPE_STRING: // s
454
-                    sb.append('s');
455
-                    sb.append(pluginResult.getStrMessage());
456
-                    break;
457
-                case PluginResult.MESSAGE_TYPE_BINARYSTRING: // S
458
-                    sb.append('S');
459
-                    sb.append(pluginResult.getMessage());
460
-                    break;
461
-                case PluginResult.MESSAGE_TYPE_ARRAYBUFFER: // A
462
-                    sb.append('A');
463
-                    sb.append(pluginResult.getMessage());
464
-                    break;
465
-                case PluginResult.MESSAGE_TYPE_MULTIPART:
466
-                    sb.append('M');
467
-                    for (int i = 0; i < pluginResult.getMultipartMessagesSize(); i++) {
468
-                        PluginResult multipartMessage = pluginResult.getMultipartMessage(i);
469
-                        sb.append(String.valueOf(calculateEncodedLengthHelper(multipartMessage)));
470
-                        sb.append(' ');
471
-                        encodeAsMessageHelper(sb, multipartMessage);
472
-                    }
473
-                    break;
474
-                case PluginResult.MESSAGE_TYPE_JSON:
475
-                default:
476
-                    sb.append(pluginResult.getMessage()); // [ or {
477
-            }
478
-        }
479
-
480
-        void encodeAsMessage(StringBuilder sb) {
481
-            if (pluginResult == null) {
482
-                sb.append('J')
483
-                  .append(jsPayloadOrCallbackId);
484
-                return;
485
-            }
486
-            int status = pluginResult.getStatus();
487
-            boolean noResult = status == PluginResult.Status.NO_RESULT.ordinal();
488
-            boolean resultOk = status == PluginResult.Status.OK.ordinal();
489
-            boolean keepCallback = pluginResult.getKeepCallback();
490
-
491
-            sb.append((noResult || resultOk) ? 'S' : 'F')
492
-              .append(keepCallback ? '1' : '0')
493
-              .append(status)
494
-              .append(' ')
495
-              .append(jsPayloadOrCallbackId)
496
-              .append(' ');
497
-
498
-            encodeAsMessageHelper(sb, pluginResult);
499
-        }
500
-
501
-        void buildJsMessage(StringBuilder sb) {
502
-            switch (pluginResult.getMessageType()) {
503
-                case PluginResult.MESSAGE_TYPE_MULTIPART:
504
-                    int size = pluginResult.getMultipartMessagesSize();
505
-                    for (int i=0; i<size; i++) {
506
-                        PluginResult subresult = pluginResult.getMultipartMessage(i);
507
-                        JsMessage submessage = new JsMessage(subresult, jsPayloadOrCallbackId);
508
-                        submessage.buildJsMessage(sb);
509
-                        if (i < (size-1)) {
510
-                            sb.append(",");
511
-                        }
512
-                    }
513
-                    break;
514
-                case PluginResult.MESSAGE_TYPE_BINARYSTRING:
515
-                    sb.append("atob('")
516
-                            .append(pluginResult.getMessage())
517
-                            .append("')");
518
-                    break;
519
-                case PluginResult.MESSAGE_TYPE_ARRAYBUFFER:
520
-                    sb.append("cordova.require('cordova/base64').toArrayBuffer('")
521
-                            .append(pluginResult.getMessage())
522
-                            .append("')");
523
-                    break;
524
-                case PluginResult.MESSAGE_TYPE_NULL:
525
-                    sb.append("null");
526
-                    break;
527
-                default:
528
-                    sb.append(pluginResult.getMessage());
529
-            }
530
-        }
531
-
532
-        void encodeAsJsMessage(StringBuilder sb) {
533
-            if (pluginResult == null) {
534
-                sb.append(jsPayloadOrCallbackId);
535
-            } else {
536
-                int status = pluginResult.getStatus();
537
-                boolean success = (status == PluginResult.Status.OK.ordinal()) || (status == PluginResult.Status.NO_RESULT.ordinal());
538
-                sb.append("cordova.callbackFromNative('")
539
-                        .append(jsPayloadOrCallbackId)
540
-                        .append("',")
541
-                        .append(success)
542
-                        .append(",")
543
-                        .append(status)
544
-                        .append(",[");
545
-                buildJsMessage(sb);
546
-                sb.append("],")
547
-                        .append(pluginResult.getKeepCallback())
548
-                        .append(");");
549
-            }
550
-        }
551
-    }
552
-}

+ 0
- 87
platforms/android/CordovaLib/src/org/apache/cordova/PermissionHelper.java 查看文件

@@ -1,87 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import java.util.Arrays;
22
-
23
-import org.json.JSONException;
24
-
25
-import android.content.pm.PackageManager;
26
-
27
-/**
28
- * This class provides reflective methods for permission requesting and checking so that plugins
29
- * written for cordova-android 5.0.0+ can still compile with earlier cordova-android versions.
30
- */
31
-public class PermissionHelper {
32
-    private static final String LOG_TAG = "CordovaPermissionHelper";
33
-
34
-    /**
35
-     * Requests a "dangerous" permission for the application at runtime. This is a helper method
36
-     * alternative to cordovaInterface.requestPermission() that does not require the project to be
37
-     * built with cordova-android 5.0.0+
38
-     *
39
-     * @param plugin        The plugin the permission is being requested for
40
-     * @param requestCode   A requestCode to be passed to the plugin's onRequestPermissionResult()
41
-     *                      along with the result of the permission request
42
-     * @param permission    The permission to be requested
43
-     */
44
-    public static void requestPermission(CordovaPlugin plugin, int requestCode, String permission) {
45
-        PermissionHelper.requestPermissions(plugin, requestCode, new String[] {permission});
46
-    }
47
-
48
-    /**
49
-     * Requests "dangerous" permissions for the application at runtime. This is a helper method
50
-     * alternative to cordovaInterface.requestPermissions() that does not require the project to be
51
-     * built with cordova-android 5.0.0+
52
-     *
53
-     * @param plugin        The plugin the permissions are being requested for
54
-     * @param requestCode   A requestCode to be passed to the plugin's onRequestPermissionResult()
55
-     *                      along with the result of the permissions request
56
-     * @param permissions   The permissions to be requested
57
-     */
58
-    public static void requestPermissions(CordovaPlugin plugin, int requestCode, String[] permissions) {
59
-        plugin.cordova.requestPermissions(plugin, requestCode, permissions);
60
-    }
61
-
62
-    /**
63
-     * Checks at runtime to see if the application has been granted a permission. This is a helper
64
-     * method alternative to cordovaInterface.hasPermission() that does not require the project to
65
-     * be built with cordova-android 5.0.0+
66
-     *
67
-     * @param plugin        The plugin the permission is being checked against
68
-     * @param permission    The permission to be checked
69
-     *
70
-     * @return              True if the permission has already been granted and false otherwise
71
-     */
72
-    public static boolean hasPermission(CordovaPlugin plugin, String permission) {
73
-        return plugin.cordova.hasPermission(permission);
74
-    }
75
-
76
-    private static void deliverPermissionResult(CordovaPlugin plugin, int requestCode, String[] permissions) {
77
-        // Generate the request results
78
-        int[] requestResults = new int[permissions.length];
79
-        Arrays.fill(requestResults, PackageManager.PERMISSION_GRANTED);
80
-
81
-        try {
82
-            plugin.onRequestPermissionResult(requestCode, permissions, requestResults);
83
-        } catch (JSONException e) {
84
-            LOG.e(LOG_TAG, "JSONException when delivering permissions results", e);
85
-        }
86
-    }
87
-}

+ 0
- 70
platforms/android/CordovaLib/src/org/apache/cordova/PluginEntry.java 查看文件

@@ -1,70 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
- */
19
-package org.apache.cordova;
20
-
21
-import org.apache.cordova.CordovaPlugin;
22
-
23
-/**
24
- * This class represents a service entry object.
25
- */
26
-public final class PluginEntry {
27
-
28
-    /**
29
-     * The name of the service that this plugin implements
30
-     */
31
-    public final String service;
32
-
33
-    /**
34
-     * The plugin class name that implements the service.
35
-     */
36
-    public final String pluginClass;
37
-
38
-    /**
39
-     * The pre-instantiated plugin to use for this entry.
40
-     */
41
-    public final CordovaPlugin plugin;
42
-
43
-    /**
44
-     * Flag that indicates the plugin object should be created when PluginManager is initialized.
45
-     */
46
-    public final boolean onload;
47
-
48
-    /**
49
-     * Constructs with a CordovaPlugin already instantiated.
50
-     */
51
-    public PluginEntry(String service, CordovaPlugin plugin) {
52
-        this(service, plugin.getClass().getName(), true, plugin);
53
-    }
54
-
55
-    /**
56
-     * @param service               The name of the service
57
-     * @param pluginClass           The plugin class name
58
-     * @param onload                Create plugin object when HTML page is loaded
59
-     */
60
-    public PluginEntry(String service, String pluginClass, boolean onload) {
61
-        this(service, pluginClass, onload, null);
62
-    }
63
-
64
-    private PluginEntry(String service, String pluginClass, boolean onload, CordovaPlugin plugin) {
65
-        this.service = service;
66
-        this.pluginClass = pluginClass;
67
-        this.onload = onload;
68
-        this.plugin = plugin;
69
-    }
70
-}

+ 0
- 580
platforms/android/CordovaLib/src/org/apache/cordova/PluginManager.java 查看文件

@@ -1,580 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
- */
19
-package org.apache.cordova;
20
-
21
-import java.util.Collection;
22
-import java.util.Collections;
23
-import java.util.LinkedHashMap;
24
-import java.util.Map;
25
-
26
-import org.json.JSONException;
27
-
28
-import android.content.Intent;
29
-import android.content.res.Configuration;
30
-import android.net.Uri;
31
-import android.os.Bundle;
32
-import android.os.Debug;
33
-import android.os.Build;
34
-
35
-/**
36
- * PluginManager is exposed to JavaScript in the Cordova WebView.
37
- *
38
- * Calling native plugin code can be done by calling PluginManager.exec(...)
39
- * from JavaScript.
40
- */
41
-public class PluginManager {
42
-    private static String TAG = "PluginManager";
43
-    private static final int SLOW_EXEC_WARNING_THRESHOLD = Debug.isDebuggerConnected() ? 60 : 16;
44
-
45
-    // List of service entries
46
-    private final Map<String, CordovaPlugin> pluginMap = Collections.synchronizedMap(new LinkedHashMap<String, CordovaPlugin>());
47
-    private final Map<String, PluginEntry> entryMap = Collections.synchronizedMap(new LinkedHashMap<String, PluginEntry>());
48
-
49
-    private final CordovaInterface ctx;
50
-    private final CordovaWebView app;
51
-    private boolean isInitialized;
52
-
53
-    private CordovaPlugin permissionRequester;
54
-
55
-    public PluginManager(CordovaWebView cordovaWebView, CordovaInterface cordova, Collection<PluginEntry> pluginEntries) {
56
-        this.ctx = cordova;
57
-        this.app = cordovaWebView;
58
-        setPluginEntries(pluginEntries);
59
-    }
60
-
61
-    public Collection<PluginEntry> getPluginEntries() {
62
-        return entryMap.values();
63
-    }
64
-
65
-    public void setPluginEntries(Collection<PluginEntry> pluginEntries) {
66
-        if (isInitialized) {
67
-            this.onPause(false);
68
-            this.onDestroy();
69
-            pluginMap.clear();
70
-            entryMap.clear();
71
-        }
72
-        for (PluginEntry entry : pluginEntries) {
73
-            addService(entry);
74
-        }
75
-        if (isInitialized) {
76
-            startupPlugins();
77
-        }
78
-    }
79
-
80
-    /**
81
-     * Init when loading a new HTML page into webview.
82
-     */
83
-    public void init() {
84
-        LOG.d(TAG, "init()");
85
-        isInitialized = true;
86
-        this.onPause(false);
87
-        this.onDestroy();
88
-        pluginMap.clear();
89
-        this.startupPlugins();
90
-    }
91
-
92
-    /**
93
-     * Create plugins objects that have onload set.
94
-     */
95
-    private void startupPlugins() {
96
-        synchronized (entryMap) {
97
-            for (PluginEntry entry : entryMap.values()) {
98
-                // Add a null entry to for each non-startup plugin to avoid ConcurrentModificationException
99
-                // When iterating plugins.
100
-                if (entry.onload) {
101
-                    getPlugin(entry.service);
102
-                }
103
-                else {
104
-                    LOG.d(TAG, "startupPlugins: put - " + entry.service);
105
-                    pluginMap.put(entry.service, null);
106
-                }
107
-            }
108
-        }
109
-    }
110
-
111
-    /**
112
-     * Receives a request for execution and fulfills it by finding the appropriate
113
-     * Java class and calling it's execute method.
114
-     *
115
-     * PluginManager.exec can be used either synchronously or async. In either case, a JSON encoded
116
-     * string is returned that will indicate if any errors have occurred when trying to find
117
-     * or execute the class denoted by the clazz argument.
118
-     *
119
-     * @param service       String containing the service to run
120
-     * @param action        String containing the action that the class is supposed to perform. This is
121
-     *                      passed to the plugin execute method and it is up to the plugin developer
122
-     *                      how to deal with it.
123
-     * @param callbackId    String containing the id of the callback that is execute in JavaScript if
124
-     *                      this is an async plugin call.
125
-     * @param rawArgs       An Array literal string containing any arguments needed in the
126
-     *                      plugin execute method.
127
-     */
128
-    public void exec(final String service, final String action, final String callbackId, final String rawArgs) {
129
-        CordovaPlugin plugin = getPlugin(service);
130
-        if (plugin == null) {
131
-            LOG.d(TAG, "exec() call to unknown plugin: " + service);
132
-            PluginResult cr = new PluginResult(PluginResult.Status.CLASS_NOT_FOUND_EXCEPTION);
133
-            app.sendPluginResult(cr, callbackId);
134
-            return;
135
-        }
136
-        CallbackContext callbackContext = new CallbackContext(callbackId, app);
137
-        try {
138
-            long pluginStartTime = System.currentTimeMillis();
139
-            boolean wasValidAction = plugin.execute(action, rawArgs, callbackContext);
140
-            long duration = System.currentTimeMillis() - pluginStartTime;
141
-
142
-            if (duration > SLOW_EXEC_WARNING_THRESHOLD) {
143
-                LOG.w(TAG, "THREAD WARNING: exec() call to " + service + "." + action + " blocked the main thread for " + duration + "ms. Plugin should use CordovaInterface.getThreadPool().");
144
-            }
145
-            if (!wasValidAction) {
146
-                PluginResult cr = new PluginResult(PluginResult.Status.INVALID_ACTION);
147
-                callbackContext.sendPluginResult(cr);
148
-            }
149
-        } catch (JSONException e) {
150
-            PluginResult cr = new PluginResult(PluginResult.Status.JSON_EXCEPTION);
151
-            callbackContext.sendPluginResult(cr);
152
-        } catch (Exception e) {
153
-            LOG.e(TAG, "Uncaught exception from plugin", e);
154
-            callbackContext.error(e.getMessage());
155
-        }
156
-    }
157
-
158
-    /**
159
-     * Get the plugin object that implements the service.
160
-     * If the plugin object does not already exist, then create it.
161
-     * If the service doesn't exist, then return null.
162
-     *
163
-     * @param service       The name of the service.
164
-     * @return              CordovaPlugin or null
165
-     */
166
-    public CordovaPlugin getPlugin(String service) {
167
-        CordovaPlugin ret = pluginMap.get(service);
168
-        if (ret == null) {
169
-            PluginEntry pe = entryMap.get(service);
170
-            if (pe == null) {
171
-                return null;
172
-            }
173
-            if (pe.plugin != null) {
174
-                ret = pe.plugin;
175
-            } else {
176
-                ret = instantiatePlugin(pe.pluginClass);
177
-            }
178
-            ret.privateInitialize(service, ctx, app, app.getPreferences());
179
-            LOG.d(TAG, "getPlugin - put: " + service);
180
-            pluginMap.put(service, ret);
181
-        }
182
-        return ret;
183
-    }
184
-
185
-    /**
186
-     * Add a plugin class that implements a service to the service entry table.
187
-     * This does not create the plugin object instance.
188
-     *
189
-     * @param service           The service name
190
-     * @param className         The plugin class name
191
-     */
192
-    public void addService(String service, String className) {
193
-        PluginEntry entry = new PluginEntry(service, className, false);
194
-        this.addService(entry);
195
-    }
196
-
197
-    /**
198
-     * Add a plugin class that implements a service to the service entry table.
199
-     * This does not create the plugin object instance.
200
-     *
201
-     * @param entry             The plugin entry
202
-     */
203
-    public void addService(PluginEntry entry) {
204
-        this.entryMap.put(entry.service, entry);
205
-        if (entry.plugin != null) {
206
-            entry.plugin.privateInitialize(entry.service, ctx, app, app.getPreferences());
207
-            LOG.d(TAG, "addService: put - " + entry.service);
208
-            pluginMap.put(entry.service, entry.plugin);
209
-        }
210
-    }
211
-
212
-    /**
213
-     * Called when the system is about to start resuming a previous activity.
214
-     *
215
-     * @param multitasking      Flag indicating if multitasking is turned on for app
216
-     */
217
-    public void onPause(boolean multitasking) {
218
-        synchronized (this.pluginMap) {
219
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
220
-                if (plugin != null) {
221
-                    plugin.onPause(multitasking);
222
-                }
223
-            }
224
-        }
225
-    }
226
-
227
-    /**
228
-     * Called when the system received an HTTP authentication request. Plugins can use
229
-     * the supplied HttpAuthHandler to process this auth challenge.
230
-     *
231
-     * @param view              The WebView that is initiating the callback
232
-     * @param handler           The HttpAuthHandler used to set the WebView's response
233
-     * @param host              The host requiring authentication
234
-     * @param realm             The realm for which authentication is required
235
-     *
236
-     * @return                  Returns True if there is a plugin which will resolve this auth challenge, otherwise False
237
-     *
238
-     */
239
-    public boolean onReceivedHttpAuthRequest(CordovaWebView view, ICordovaHttpAuthHandler handler, String host, String realm) {
240
-        synchronized (this.pluginMap) {
241
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
242
-                if (plugin != null && plugin.onReceivedHttpAuthRequest(app, handler, host, realm)) {
243
-                    return true;
244
-                }
245
-            }
246
-        }
247
-        return false;
248
-    }
249
-
250
-    /**
251
-     * Called when he system received an SSL client certificate request.  Plugin can use
252
-     * the supplied ClientCertRequest to process this certificate challenge.
253
-     *
254
-     * @param view              The WebView that is initiating the callback
255
-     * @param request           The client certificate request
256
-     *
257
-     * @return                  Returns True if plugin will resolve this auth challenge, otherwise False
258
-     *
259
-     */
260
-    public boolean onReceivedClientCertRequest(CordovaWebView view, ICordovaClientCertRequest request) {
261
-        synchronized (this.pluginMap) {
262
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
263
-                if (plugin != null && plugin.onReceivedClientCertRequest(app, request)) {
264
-                    return true;
265
-                }
266
-            }
267
-        }
268
-        return false;
269
-    }
270
-
271
-    /**
272
-     * Called when the activity will start interacting with the user.
273
-     *
274
-     * @param multitasking      Flag indicating if multitasking is turned on for app
275
-     */
276
-    public void onResume(boolean multitasking) {
277
-        synchronized (this.pluginMap) {
278
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
279
-                if (plugin != null) {
280
-                    plugin.onResume(multitasking);
281
-                }
282
-            }
283
-        }
284
-    }
285
-
286
-    /**
287
-     * Called when the activity is becoming visible to the user.
288
-     */
289
-    public void onStart() {
290
-        synchronized (this.pluginMap) {
291
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
292
-                if (plugin != null) {
293
-                    plugin.onStart();
294
-                }
295
-            }
296
-        }
297
-    }
298
-
299
-    /**
300
-     * Called when the activity is no longer visible to the user.
301
-     */
302
-    public void onStop() {
303
-        synchronized (this.pluginMap) {
304
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
305
-                if (plugin != null) {
306
-                    plugin.onStop();
307
-                }
308
-            }
309
-        }
310
-    }
311
-
312
-    /**
313
-     * The final call you receive before your activity is destroyed.
314
-     */
315
-    public void onDestroy() {
316
-        synchronized (this.pluginMap) {
317
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
318
-                if (plugin != null) {
319
-                    plugin.onDestroy();
320
-                }
321
-            }
322
-        }
323
-    }
324
-
325
-    /**
326
-     * Send a message to all plugins.
327
-     *
328
-     * @param id                The message id
329
-     * @param data              The message data
330
-     * @return                  Object to stop propagation or null
331
-     */
332
-    public Object postMessage(String id, Object data) {
333
-        LOG.d(TAG, "postMessage: " + id);
334
-        synchronized (this.pluginMap) {
335
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
336
-                this.pluginMap.forEach((s, plugin) -> {
337
-                    if (plugin != null) {
338
-                        plugin.onMessage(id, data);
339
-                    }
340
-                });
341
-            } else {
342
-                for (CordovaPlugin plugin : this.pluginMap.values()) {
343
-                    if (plugin != null) {
344
-                        Object obj = plugin.onMessage(id, data);
345
-                        if (obj != null) {
346
-                            return obj;
347
-                        }
348
-                    }
349
-                }
350
-            }
351
-        }
352
-        return ctx.onMessage(id, data);
353
-    }
354
-
355
-    /**
356
-     * Called when the activity receives a new intent.
357
-     */
358
-    public void onNewIntent(Intent intent) {
359
-        synchronized (this.pluginMap) {
360
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
361
-                if (plugin != null) {
362
-                    plugin.onNewIntent(intent);
363
-                }
364
-            }
365
-        }
366
-    }
367
-
368
-    /**
369
-     * Called when the webview is going to request an external resource.
370
-     *
371
-     * This delegates to the installed plugins, and returns true/false for the
372
-     * first plugin to provide a non-null result.  If no plugins respond, then
373
-     * the default policy is applied.
374
-     *
375
-     * @param url       The URL that is being requested.
376
-     * @return          Returns true to allow the resource to load,
377
-     *                  false to block the resource.
378
-     */
379
-    public boolean shouldAllowRequest(String url) {
380
-        synchronized (this.entryMap) {
381
-            for (PluginEntry entry : this.entryMap.values()) {
382
-                CordovaPlugin plugin = pluginMap.get(entry.service);
383
-                if (plugin != null) {
384
-                    Boolean result = plugin.shouldAllowRequest(url);
385
-                    if (result != null) {
386
-                        return result;
387
-                    }
388
-                }
389
-            }
390
-        }
391
-
392
-        // Default policy:
393
-        if (url.startsWith("blob:") || url.startsWith("data:") || url.startsWith("about:blank")) {
394
-            return true;
395
-        }
396
-        // TalkBack requires this, so allow it by default.
397
-        if (url.startsWith("https://ssl.gstatic.com/accessibility/javascript/android/")) {
398
-            return true;
399
-        }
400
-        if (url.startsWith("file://")) {
401
-            //This directory on WebKit/Blink based webviews contains SQLite databases!
402
-            //DON'T CHANGE THIS UNLESS YOU KNOW WHAT YOU'RE DOING!
403
-            return !url.contains("/app_webview/");
404
-        }
405
-        return false;
406
-    }
407
-
408
-    /**
409
-     * Called when the webview is going to change the URL of the loaded content.
410
-     *
411
-     * This delegates to the installed plugins, and returns true/false for the
412
-     * first plugin to provide a non-null result.  If no plugins respond, then
413
-     * the default policy is applied.
414
-     *
415
-     * @param url       The URL that is being requested.
416
-     * @return          Returns true to allow the navigation,
417
-     *                  false to block the navigation.
418
-     */
419
-    public boolean shouldAllowNavigation(String url) {
420
-        synchronized (this.entryMap) {
421
-            for (PluginEntry entry : this.entryMap.values()) {
422
-                CordovaPlugin plugin = pluginMap.get(entry.service);
423
-                if (plugin != null) {
424
-                    Boolean result = plugin.shouldAllowNavigation(url);
425
-                    if (result != null) {
426
-                        return result;
427
-                    }
428
-                }
429
-            }
430
-        }
431
-
432
-        // Default policy:
433
-        return url.startsWith("file://") || url.startsWith("about:blank");
434
-    }
435
-
436
-
437
-    /**
438
-     * Called when the webview is requesting the exec() bridge be enabled.
439
-     */
440
-    public boolean shouldAllowBridgeAccess(String url) {
441
-        synchronized (this.entryMap) {
442
-            for (PluginEntry entry : this.entryMap.values()) {
443
-                CordovaPlugin plugin = pluginMap.get(entry.service);
444
-                if (plugin != null) {
445
-                    Boolean result = plugin.shouldAllowBridgeAccess(url);
446
-                    if (result != null) {
447
-                        return result;
448
-                    }
449
-                }
450
-            }
451
-        }
452
-
453
-        // Default policy:
454
-        return url.startsWith("file://");
455
-    }
456
-
457
-    /**
458
-     * Called when the webview is going not going to navigate, but may launch
459
-     * an Intent for an URL.
460
-     *
461
-     * This delegates to the installed plugins, and returns true/false for the
462
-     * first plugin to provide a non-null result.  If no plugins respond, then
463
-     * the default policy is applied.
464
-     *
465
-     * @param url       The URL that is being requested.
466
-     * @return          Returns true to allow the URL to launch an intent,
467
-     *                  false to block the intent.
468
-     */
469
-    public Boolean shouldOpenExternalUrl(String url) {
470
-        synchronized (this.entryMap) {
471
-            for (PluginEntry entry : this.entryMap.values()) {
472
-                CordovaPlugin plugin = pluginMap.get(entry.service);
473
-                if (plugin != null) {
474
-                    Boolean result = plugin.shouldOpenExternalUrl(url);
475
-                    if (result != null) {
476
-                        return result;
477
-                    }
478
-                }
479
-            }
480
-        }
481
-        // Default policy:
482
-        // External URLs are not allowed
483
-        return false;
484
-    }
485
-
486
-    /**
487
-     * Called when the URL of the webview changes.
488
-     *
489
-     * @param url               The URL that is being changed to.
490
-     * @return                  Return false to allow the URL to load, return true to prevent the URL from loading.
491
-     */
492
-    public boolean onOverrideUrlLoading(String url) {
493
-        synchronized (this.entryMap) {
494
-            for (PluginEntry entry : this.entryMap.values()) {
495
-                CordovaPlugin plugin = pluginMap.get(entry.service);
496
-                if (plugin != null && plugin.onOverrideUrlLoading(url)) {
497
-                    return true;
498
-                }
499
-            }
500
-            return false;
501
-        }
502
-    }
503
-
504
-    /**
505
-     * Called when the app navigates or refreshes.
506
-     */
507
-    public void onReset() {
508
-        synchronized (this.pluginMap) {
509
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
510
-                if (plugin != null) {
511
-                    plugin.onReset();
512
-                }
513
-            }
514
-        }
515
-    }
516
-
517
-    Uri remapUri(Uri uri) {
518
-        synchronized (this.pluginMap) {
519
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
520
-                if (plugin != null) {
521
-                    Uri ret = plugin.remapUri(uri);
522
-                    if (ret != null) {
523
-                        return ret;
524
-                    }
525
-                }
526
-            }
527
-        }
528
-        return null;
529
-    }
530
-
531
-    /**
532
-     * Create a plugin based on class name.
533
-     */
534
-    private CordovaPlugin instantiatePlugin(String className) {
535
-        CordovaPlugin ret = null;
536
-        try {
537
-            Class<?> c = null;
538
-            if ((className != null) && !("".equals(className))) {
539
-                c = Class.forName(className);
540
-            }
541
-            if (c != null & CordovaPlugin.class.isAssignableFrom(c)) {
542
-                ret = (CordovaPlugin) c.newInstance();
543
-            }
544
-        } catch (Exception e) {
545
-            e.printStackTrace();
546
-            System.out.println("Error adding plugin " + className + ".");
547
-        }
548
-        return ret;
549
-    }
550
-
551
-    /**
552
-     * Called by the system when the device configuration changes while your activity is running.
553
-     *
554
-     * @param newConfig		The new device configuration
555
-     */
556
-    public void onConfigurationChanged(Configuration newConfig) {
557
-        synchronized (this.pluginMap) {
558
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
559
-                if (plugin != null) {
560
-                    plugin.onConfigurationChanged(newConfig);
561
-                }
562
-            }
563
-        }
564
-    }
565
-
566
-    public Bundle onSaveInstanceState() {
567
-        Bundle state = new Bundle();
568
-        synchronized (this.pluginMap) {
569
-            for (CordovaPlugin plugin : this.pluginMap.values()) {
570
-                if (plugin != null) {
571
-                    Bundle pluginState = plugin.onSaveInstanceState();
572
-                    if (pluginState != null) {
573
-                        state.putBundle(plugin.getServiceName(), pluginState);
574
-                    }
575
-                }
576
-            }
577
-        }
578
-        return state;
579
-    }
580
-}

+ 0
- 198
platforms/android/CordovaLib/src/org/apache/cordova/PluginResult.java 查看文件

@@ -1,198 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import java.util.List;
22
-
23
-import org.json.JSONArray;
24
-import org.json.JSONObject;
25
-
26
-import android.util.Base64;
27
-
28
-public class PluginResult {
29
-    private final int status;
30
-    private final int messageType;
31
-    private boolean keepCallback = false;
32
-    private String strMessage;
33
-    private String encodedMessage;
34
-    private List<PluginResult> multipartMessages;
35
-
36
-    public PluginResult(Status status) {
37
-        this(status, PluginResult.StatusMessages[status.ordinal()]);
38
-    }
39
-
40
-    public PluginResult(Status status, String message) {
41
-        this.status = status.ordinal();
42
-        this.messageType = message == null ? MESSAGE_TYPE_NULL : MESSAGE_TYPE_STRING;
43
-        this.strMessage = message;
44
-    }
45
-
46
-    public PluginResult(Status status, JSONArray message) {
47
-        this.status = status.ordinal();
48
-        this.messageType = MESSAGE_TYPE_JSON;
49
-        encodedMessage = message.toString();
50
-    }
51
-
52
-    public PluginResult(Status status, JSONObject message) {
53
-        this.status = status.ordinal();
54
-        this.messageType = MESSAGE_TYPE_JSON;
55
-        encodedMessage = message.toString();
56
-    }
57
-
58
-    public PluginResult(Status status, int i) {
59
-        this.status = status.ordinal();
60
-        this.messageType = MESSAGE_TYPE_NUMBER;
61
-        this.encodedMessage = ""+i;
62
-    }
63
-
64
-    public PluginResult(Status status, float f) {
65
-        this.status = status.ordinal();
66
-        this.messageType = MESSAGE_TYPE_NUMBER;
67
-        this.encodedMessage = ""+f;
68
-    }
69
-
70
-    public PluginResult(Status status, boolean b) {
71
-        this.status = status.ordinal();
72
-        this.messageType = MESSAGE_TYPE_BOOLEAN;
73
-        this.encodedMessage = Boolean.toString(b);
74
-    }
75
-
76
-    public PluginResult(Status status, byte[] data) {
77
-        this(status, data, false);
78
-    }
79
-
80
-    public PluginResult(Status status, byte[] data, boolean binaryString) {
81
-        this.status = status.ordinal();
82
-        this.messageType = binaryString ? MESSAGE_TYPE_BINARYSTRING : MESSAGE_TYPE_ARRAYBUFFER;
83
-        this.encodedMessage = Base64.encodeToString(data, Base64.NO_WRAP);
84
-    }
85
-
86
-    // The keepCallback and status of multipartMessages are ignored.
87
-    public PluginResult(Status status, List<PluginResult> multipartMessages) {
88
-        this.status = status.ordinal();
89
-        this.messageType = MESSAGE_TYPE_MULTIPART;
90
-        this.multipartMessages = multipartMessages;
91
-    }
92
-
93
-    public void setKeepCallback(boolean b) {
94
-        this.keepCallback = b;
95
-    }
96
-
97
-    public int getStatus() {
98
-        return status;
99
-    }
100
-
101
-    public int getMessageType() {
102
-        return messageType;
103
-    }
104
-
105
-    public String getMessage() {
106
-        if (encodedMessage == null) {
107
-            encodedMessage = JSONObject.quote(strMessage);
108
-        }
109
-        return encodedMessage;
110
-    }
111
-
112
-    public int getMultipartMessagesSize() {
113
-        return multipartMessages.size();
114
-    }
115
-
116
-    public PluginResult getMultipartMessage(int index) {
117
-        return multipartMessages.get(index);
118
-    }
119
-
120
-    /**
121
-     * If messageType == MESSAGE_TYPE_STRING, then returns the message string.
122
-     * Otherwise, returns null.
123
-     */
124
-    public String getStrMessage() {
125
-        return strMessage;
126
-    }
127
-
128
-    public boolean getKeepCallback() {
129
-        return this.keepCallback;
130
-    }
131
-
132
-    @Deprecated // Use sendPluginResult instead of sendJavascript.
133
-    public String getJSONString() {
134
-        return "{\"status\":" + this.status + ",\"message\":" + this.getMessage() + ",\"keepCallback\":" + this.keepCallback + "}";
135
-    }
136
-
137
-    @Deprecated // Use sendPluginResult instead of sendJavascript.
138
-    public String toCallbackString(String callbackId) {
139
-        // If no result to be sent and keeping callback, then no need to sent back to JavaScript
140
-        if ((status == PluginResult.Status.NO_RESULT.ordinal()) && keepCallback) {
141
-        	return null;
142
-        }
143
-
144
-        // Check the success (OK, NO_RESULT & !KEEP_CALLBACK)
145
-        if ((status == PluginResult.Status.OK.ordinal()) || (status == PluginResult.Status.NO_RESULT.ordinal())) {
146
-            return toSuccessCallbackString(callbackId);
147
-        }
148
-
149
-        return toErrorCallbackString(callbackId);
150
-    }
151
-
152
-    @Deprecated // Use sendPluginResult instead of sendJavascript.
153
-    public String toSuccessCallbackString(String callbackId) {
154
-        return "cordova.callbackSuccess('"+callbackId+"',"+this.getJSONString()+");";
155
-    }
156
-
157
-    @Deprecated // Use sendPluginResult instead of sendJavascript.
158
-    public String toErrorCallbackString(String callbackId) {
159
-        return "cordova.callbackError('"+callbackId+"', " + this.getJSONString()+ ");";
160
-    }
161
-
162
-    public static final int MESSAGE_TYPE_STRING = 1;
163
-    public static final int MESSAGE_TYPE_JSON = 2;
164
-    public static final int MESSAGE_TYPE_NUMBER = 3;
165
-    public static final int MESSAGE_TYPE_BOOLEAN = 4;
166
-    public static final int MESSAGE_TYPE_NULL = 5;
167
-    public static final int MESSAGE_TYPE_ARRAYBUFFER = 6;
168
-    // Use BINARYSTRING when your string may contain null characters.
169
-    // This is required to work around a bug in the platform :(.
170
-    public static final int MESSAGE_TYPE_BINARYSTRING = 7;
171
-    public static final int MESSAGE_TYPE_MULTIPART = 8;
172
-
173
-    public static String[] StatusMessages = new String[] {
174
-        "No result",
175
-        "OK",
176
-        "Class not found",
177
-        "Illegal access",
178
-        "Instantiation error",
179
-        "Malformed url",
180
-        "IO error",
181
-        "Invalid action",
182
-        "JSON error",
183
-        "Error"
184
-    };
185
-
186
-    public enum Status {
187
-        NO_RESULT,
188
-        OK,
189
-        CLASS_NOT_FOUND_EXCEPTION,
190
-        ILLEGAL_ACCESS_EXCEPTION,
191
-        INSTANTIATION_EXCEPTION,
192
-        MALFORMED_URL_EXCEPTION,
193
-        IO_EXCEPTION,
194
-        INVALID_ACTION,
195
-        JSON_EXCEPTION,
196
-        ERROR
197
-    }
198
-}

+ 0
- 76
platforms/android/CordovaLib/src/org/apache/cordova/ResumeCallback.java 查看文件

@@ -1,76 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-
22
-import org.json.JSONException;
23
-import org.json.JSONObject;
24
-
25
-import java.util.ArrayList;
26
-import java.util.List;
27
-
28
-public class ResumeCallback extends CallbackContext {
29
-    private final String TAG = "CordovaResumeCallback";
30
-    private String serviceName;
31
-    private PluginManager pluginManager;
32
-
33
-    public ResumeCallback(String serviceName, PluginManager pluginManager) {
34
-        super("resumecallback", null);
35
-        this.serviceName = serviceName;
36
-        this.pluginManager = pluginManager;
37
-    }
38
-
39
-    @Override
40
-    public void sendPluginResult(PluginResult pluginResult) {
41
-        synchronized (this) {
42
-            if (finished) {
43
-                LOG.w(TAG, serviceName + " attempted to send a second callback to ResumeCallback\nResult was: " + pluginResult.getMessage());
44
-                return;
45
-            } else {
46
-                finished = true;
47
-            }
48
-        }
49
-
50
-        JSONObject event = new JSONObject();
51
-        JSONObject pluginResultObject = new JSONObject();
52
-
53
-        try {
54
-            pluginResultObject.put("pluginServiceName", this.serviceName);
55
-            pluginResultObject.put("pluginStatus", PluginResult.StatusMessages[pluginResult.getStatus()]);
56
-
57
-            event.put("action", "resume");
58
-            event.put("pendingResult", pluginResultObject);
59
-        } catch (JSONException e) {
60
-            LOG.e(TAG, "Unable to create resume object for Activity Result");
61
-        }
62
-
63
-        PluginResult eventResult = new PluginResult(PluginResult.Status.OK, event);
64
-
65
-        // We send a list of results to the js so that we don't have to decode
66
-        // the PluginResult passed to this CallbackContext into JSON twice.
67
-        // The results are combined into an event payload before the event is
68
-        // fired on the js side of things (see platform.js)
69
-        List<PluginResult> result = new ArrayList<PluginResult>();
70
-        result.add(eventResult);
71
-        result.add(pluginResult);
72
-
73
-        CoreAndroid appPlugin = (CoreAndroid) pluginManager.getPlugin(CoreAndroid.PLUGIN_NAME);
74
-        appPlugin.sendResumeEvent(new PluginResult(PluginResult.Status.OK, result));
75
-    }
76
-}

+ 0
- 170
platforms/android/CordovaLib/src/org/apache/cordova/Whitelist.java 查看文件

@@ -1,170 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova;
20
-
21
-import java.net.MalformedURLException;
22
-import java.util.ArrayList;
23
-import java.util.Iterator;
24
-import java.util.regex.Matcher;
25
-import java.util.regex.Pattern;
26
-
27
-import org.apache.cordova.LOG;
28
-
29
-import android.net.Uri;
30
-
31
-public class Whitelist {
32
-    private static class URLPattern {
33
-        public Pattern scheme;
34
-        public Pattern host;
35
-        public Integer port;
36
-        public Pattern path;
37
-
38
-        private String regexFromPattern(String pattern, boolean allowWildcards) {
39
-            final String toReplace = "\\.[]{}()^$?+|";
40
-            StringBuilder regex = new StringBuilder();
41
-            for (int i=0; i < pattern.length(); i++) {
42
-                char c = pattern.charAt(i);
43
-                if (c == '*' && allowWildcards) {
44
-                    regex.append(".");
45
-                } else if (toReplace.indexOf(c) > -1) {
46
-                    regex.append('\\');
47
-                }
48
-                regex.append(c);
49
-            }
50
-            return regex.toString();
51
-        }
52
-
53
-        public URLPattern(String scheme, String host, String port, String path) throws MalformedURLException {
54
-            try {
55
-                if (scheme == null || "*".equals(scheme)) {
56
-                    this.scheme = null;
57
-                } else {
58
-                    this.scheme = Pattern.compile(regexFromPattern(scheme, false), Pattern.CASE_INSENSITIVE);
59
-                }
60
-                if ("*".equals(host)) {
61
-                    this.host = null;
62
-                } else if (host.startsWith("*.")) {
63
-                    this.host = Pattern.compile("([a-z0-9.-]*\\.)?" + regexFromPattern(host.substring(2), false), Pattern.CASE_INSENSITIVE);
64
-                } else {
65
-                    this.host = Pattern.compile(regexFromPattern(host, false), Pattern.CASE_INSENSITIVE);
66
-                }
67
-                if (port == null || "*".equals(port)) {
68
-                    this.port = null;
69
-                } else {
70
-                    this.port = Integer.parseInt(port,10);
71
-                }
72
-                if (path == null || "/*".equals(path)) {
73
-                    this.path = null;
74
-                } else {
75
-                    this.path = Pattern.compile(regexFromPattern(path, true));
76
-                }
77
-            } catch (NumberFormatException e) {
78
-                throw new MalformedURLException("Port must be a number");
79
-            }
80
-        }
81
-
82
-        public boolean matches(Uri uri) {
83
-            try {
84
-                return ((scheme == null || scheme.matcher(uri.getScheme()).matches()) &&
85
-                        (host == null || host.matcher(uri.getHost()).matches()) &&
86
-                        (port == null || port.equals(uri.getPort())) &&
87
-                        (path == null || path.matcher(uri.getPath()).matches()));
88
-            } catch (Exception e) {
89
-                LOG.d(TAG, e.toString());
90
-                return false;
91
-            }
92
-        }
93
-    }
94
-
95
-    private ArrayList<URLPattern> whiteList;
96
-
97
-    public static final String TAG = "Whitelist";
98
-
99
-    public Whitelist() {
100
-        this.whiteList = new ArrayList<URLPattern>();
101
-    }
102
-
103
-    /* Match patterns (from http://developer.chrome.com/extensions/match_patterns.html)
104
-     *
105
-     * <url-pattern> := <scheme>://<host><path>
106
-     * <scheme> := '*' | 'http' | 'https' | 'file' | 'ftp' | 'chrome-extension'
107
-     * <host> := '*' | '*.' <any char except '/' and '*'>+
108
-     * <path> := '/' <any chars>
109
-     *
110
-     * We extend this to explicitly allow a port attached to the host, and we allow
111
-     * the scheme to be omitted for backwards compatibility. (Also host is not required
112
-     * to begin with a "*" or "*.".)
113
-     */
114
-    public void addWhiteListEntry(String origin, boolean subdomains) {
115
-        if (whiteList != null) {
116
-            try {
117
-                // Unlimited access to network resources
118
-                if (origin.compareTo("*") == 0) {
119
-                    LOG.d(TAG, "Unlimited access to network resources");
120
-                    whiteList = null;
121
-                }
122
-                else { // specific access
123
-                    Pattern parts = Pattern.compile("^((\\*|[A-Za-z-]+):(//)?)?(\\*|((\\*\\.)?[^*/:]+))?(:(\\d+))?(/.*)?");
124
-                    Matcher m = parts.matcher(origin);
125
-                    if (m.matches()) {
126
-                        String scheme = m.group(2);
127
-                        String host = m.group(4);
128
-                        // Special case for two urls which are allowed to have empty hosts
129
-                        if (("file".equals(scheme) || "content".equals(scheme)) && host == null) host = "*";
130
-                        String port = m.group(8);
131
-                        String path = m.group(9);
132
-                        if (scheme == null) {
133
-                            // XXX making it stupid friendly for people who forget to include protocol/SSL
134
-                            whiteList.add(new URLPattern("http", host, port, path));
135
-                            whiteList.add(new URLPattern("https", host, port, path));
136
-                        } else {
137
-                            whiteList.add(new URLPattern(scheme, host, port, path));
138
-                        }
139
-                    }
140
-                }
141
-            } catch (Exception e) {
142
-                LOG.d(TAG, "Failed to add origin %s", origin);
143
-            }
144
-        }
145
-    }
146
-
147
-
148
-    /**
149
-     * Determine if URL is in approved list of URLs to load.
150
-     *
151
-     * @param uri
152
-     * @return true if wide open or whitelisted
153
-     */
154
-    public boolean isUrlWhiteListed(String uri) {
155
-        // If there is no whitelist, then it's wide open
156
-        if (whiteList == null) return true;
157
-
158
-        Uri parsedUri = Uri.parse(uri);
159
-        // Look for match in white list
160
-        Iterator<URLPattern> pit = whiteList.iterator();
161
-        while (pit.hasNext()) {
162
-            URLPattern p = pit.next();
163
-            if (p.matches(parsedUri)) {
164
-                return true;
165
-            }
166
-        }
167
-        return false;
168
-    }
169
-
170
-}

+ 0
- 62
platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemCookieManager.java 查看文件

@@ -1,62 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-package org.apache.cordova.engine;
21
-
22
-import android.annotation.TargetApi;
23
-import android.os.Build;
24
-import android.webkit.CookieManager;
25
-import android.webkit.WebView;
26
-
27
-import org.apache.cordova.ICordovaCookieManager;
28
-
29
-class SystemCookieManager implements ICordovaCookieManager {
30
-
31
-    protected final WebView webView;
32
-    private final CookieManager cookieManager;
33
-
34
-    public SystemCookieManager(WebView webview) {
35
-        webView = webview;
36
-        cookieManager = CookieManager.getInstance();
37
-
38
-        cookieManager.setAcceptFileSchemeCookies(true);
39
-        cookieManager.setAcceptThirdPartyCookies(webView, true);
40
-    }
41
-
42
-    public void setCookiesEnabled(boolean accept) {
43
-        cookieManager.setAcceptCookie(accept);
44
-    }
45
-
46
-    public void setCookie(final String url, final String value) {
47
-        cookieManager.setCookie(url, value);
48
-    }
49
-
50
-    public String getCookie(final String url) {
51
-        return cookieManager.getCookie(url);
52
-    }
53
-
54
-    @SuppressWarnings("deprecation")
55
-    public void clearCookies() {
56
-        cookieManager.removeAllCookies(null);
57
-    }
58
-
59
-    public void flush() {
60
-        cookieManager.flush();
61
-    }
62
-};

+ 0
- 53
platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemExposedJsApi.java 查看文件

@@ -1,53 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova.engine;
20
-
21
-import android.webkit.JavascriptInterface;
22
-
23
-import org.apache.cordova.CordovaBridge;
24
-import org.apache.cordova.ExposedJsApi;
25
-import org.json.JSONException;
26
-
27
-/**
28
- * Contains APIs that the JS can call. All functions in here should also have
29
- * an equivalent entry in CordovaChromeClient.java, and be added to
30
- * cordova-js/lib/android/plugin/android/promptbasednativeapi.js
31
- */
32
-class SystemExposedJsApi implements ExposedJsApi {
33
-    private final CordovaBridge bridge;
34
-
35
-    SystemExposedJsApi(CordovaBridge bridge) {
36
-        this.bridge = bridge;
37
-    }
38
-
39
-    @JavascriptInterface
40
-    public String exec(int bridgeSecret, String service, String action, String callbackId, String arguments) throws JSONException, IllegalAccessException {
41
-        return bridge.jsExec(bridgeSecret, service, action, callbackId, arguments);
42
-    }
43
-
44
-    @JavascriptInterface
45
-    public void setNativeToJsBridgeMode(int bridgeSecret, int value) throws IllegalAccessException {
46
-        bridge.jsSetNativeToJsBridgeMode(bridgeSecret, value);
47
-    }
48
-
49
-    @JavascriptInterface
50
-    public String retrieveJsMessages(int bridgeSecret, boolean fromOnlineEvent) throws IllegalAccessException {
51
-        return bridge.jsRetrieveJsMessages(bridgeSecret, fromOnlineEvent);
52
-    }
53
-}

+ 0
- 270
platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebChromeClient.java 查看文件

@@ -1,270 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova.engine;
20
-
21
-import java.util.Arrays;
22
-import android.annotation.TargetApi;
23
-import android.app.Activity;
24
-import android.content.Context;
25
-import android.content.ActivityNotFoundException;
26
-import android.content.Intent;
27
-import android.net.Uri;
28
-import android.os.Build;
29
-import android.view.Gravity;
30
-import android.view.View;
31
-import android.view.ViewGroup.LayoutParams;
32
-import android.webkit.ConsoleMessage;
33
-import android.webkit.GeolocationPermissions.Callback;
34
-import android.webkit.JsPromptResult;
35
-import android.webkit.JsResult;
36
-import android.webkit.ValueCallback;
37
-import android.webkit.WebChromeClient;
38
-import android.webkit.WebStorage;
39
-import android.webkit.WebView;
40
-import android.webkit.PermissionRequest;
41
-import android.widget.LinearLayout;
42
-import android.widget.ProgressBar;
43
-import android.widget.RelativeLayout;
44
-
45
-import org.apache.cordova.CordovaDialogsHelper;
46
-import org.apache.cordova.CordovaPlugin;
47
-import org.apache.cordova.LOG;
48
-
49
-/**
50
- * This class is the WebChromeClient that implements callbacks for our web view.
51
- * The kind of callbacks that happen here are on the chrome outside the document,
52
- * such as onCreateWindow(), onConsoleMessage(), onProgressChanged(), etc. Related
53
- * to but different than CordovaWebViewClient.
54
- */
55
-public class SystemWebChromeClient extends WebChromeClient {
56
-
57
-    private static final int FILECHOOSER_RESULTCODE = 5173;
58
-    private static final String LOG_TAG = "SystemWebChromeClient";
59
-    private long MAX_QUOTA = 100 * 1024 * 1024;
60
-    protected final SystemWebViewEngine parentEngine;
61
-
62
-    // the video progress view
63
-    private View mVideoProgressView;
64
-
65
-    private CordovaDialogsHelper dialogsHelper;
66
-    private Context appContext;
67
-
68
-    private WebChromeClient.CustomViewCallback mCustomViewCallback;
69
-    private View mCustomView;
70
-
71
-    public SystemWebChromeClient(SystemWebViewEngine parentEngine) {
72
-        this.parentEngine = parentEngine;
73
-        appContext = parentEngine.webView.getContext();
74
-        dialogsHelper = new CordovaDialogsHelper(appContext);
75
-    }
76
-
77
-    /**
78
-     * Tell the client to display a javascript alert dialog.
79
-     */
80
-    @Override
81
-    public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
82
-        dialogsHelper.showAlert(message, new CordovaDialogsHelper.Result() {
83
-            @Override public void gotResult(boolean success, String value) {
84
-                if (success) {
85
-                    result.confirm();
86
-                } else {
87
-                    result.cancel();
88
-                }
89
-            }
90
-        });
91
-        return true;
92
-    }
93
-
94
-    /**
95
-     * Tell the client to display a confirm dialog to the user.
96
-     */
97
-    @Override
98
-    public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
99
-        dialogsHelper.showConfirm(message, new CordovaDialogsHelper.Result() {
100
-            @Override
101
-            public void gotResult(boolean success, String value) {
102
-                if (success) {
103
-                    result.confirm();
104
-                } else {
105
-                    result.cancel();
106
-                }
107
-            }
108
-        });
109
-        return true;
110
-    }
111
-
112
-    /**
113
-     * Tell the client to display a prompt dialog to the user.
114
-     * If the client returns true, WebView will assume that the client will
115
-     * handle the prompt dialog and call the appropriate JsPromptResult method.
116
-     *
117
-     * Since we are hacking prompts for our own purposes, we should not be using them for
118
-     * this purpose, perhaps we should hack console.log to do this instead!
119
-     */
120
-    @Override
121
-    public boolean onJsPrompt(WebView view, String origin, String message, String defaultValue, final JsPromptResult result) {
122
-        // Unlike the @JavascriptInterface bridge, this method is always called on the UI thread.
123
-        String handledRet = parentEngine.bridge.promptOnJsPrompt(origin, message, defaultValue);
124
-        if (handledRet != null) {
125
-            result.confirm(handledRet);
126
-        } else {
127
-            dialogsHelper.showPrompt(message, defaultValue, new CordovaDialogsHelper.Result() {
128
-                @Override
129
-                public void gotResult(boolean success, String value) {
130
-                    if (success) {
131
-                        result.confirm(value);
132
-                    } else {
133
-                        result.cancel();
134
-                    }
135
-                }
136
-            });
137
-        }
138
-        return true;
139
-    }
140
-
141
-    /**
142
-     * Handle database quota exceeded notification.
143
-     */
144
-    @Override
145
-    @SuppressWarnings("deprecation")
146
-    public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize,
147
-            long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater)
148
-    {
149
-        LOG.d(LOG_TAG, "onExceededDatabaseQuota estimatedSize: %d  currentQuota: %d  totalUsedQuota: %d", estimatedSize, currentQuota, totalUsedQuota);
150
-        quotaUpdater.updateQuota(MAX_QUOTA);
151
-    }
152
-
153
-    @Override
154
-    /**
155
-     * Instructs the client to show a prompt to ask the user to set the Geolocation permission state for the specified origin.
156
-     *
157
-     * This also checks for the Geolocation Plugin and requests permission from the application  to use Geolocation.
158
-     *
159
-     * @param origin
160
-     * @param callback
161
-     */
162
-    public void onGeolocationPermissionsShowPrompt(String origin, Callback callback) {
163
-        super.onGeolocationPermissionsShowPrompt(origin, callback);
164
-        callback.invoke(origin, true, false);
165
-        //Get the plugin, it should be loaded
166
-        CordovaPlugin geolocation = parentEngine.pluginManager.getPlugin("Geolocation");
167
-        if(geolocation != null && !geolocation.hasPermisssion())
168
-        {
169
-            geolocation.requestPermissions(0);
170
-        }
171
-    }
172
-
173
-    // API level 7 is required for this, see if we could lower this using something else
174
-    @Override
175
-    @SuppressWarnings("deprecation")
176
-    public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
177
-        parentEngine.getCordovaWebView().showCustomView(view, callback);
178
-    }
179
-
180
-    @Override
181
-    @SuppressWarnings("deprecation")
182
-    public void onHideCustomView() {
183
-        parentEngine.getCordovaWebView().hideCustomView();
184
-    }
185
-
186
-    @Override
187
-    /**
188
-     * Ask the host application for a custom progress view to show while
189
-     * a <video> is loading.
190
-     * @return View The progress view.
191
-     */
192
-    public View getVideoLoadingProgressView() {
193
-        if (mVideoProgressView == null) {
194
-            // Create a new Loading view programmatically.
195
-
196
-            // create the linear layout
197
-            LinearLayout layout = new LinearLayout(parentEngine.getView().getContext());
198
-            layout.setOrientation(LinearLayout.VERTICAL);
199
-            RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
200
-            layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
201
-            layout.setLayoutParams(layoutParams);
202
-            // the proress bar
203
-            ProgressBar bar = new ProgressBar(parentEngine.getView().getContext());
204
-            LinearLayout.LayoutParams barLayoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
205
-            barLayoutParams.gravity = Gravity.CENTER;
206
-            bar.setLayoutParams(barLayoutParams);
207
-            layout.addView(bar);
208
-
209
-            mVideoProgressView = layout;
210
-        }
211
-        return mVideoProgressView;
212
-    }
213
-
214
-    @Override
215
-    public boolean onShowFileChooser(WebView webView, final ValueCallback<Uri[]> filePathsCallback, final WebChromeClient.FileChooserParams fileChooserParams) {
216
-        // Check if multiple-select is specified
217
-        Boolean selectMultiple = false;
218
-        if (fileChooserParams.getMode() == WebChromeClient.FileChooserParams.MODE_OPEN_MULTIPLE) {
219
-            selectMultiple = true;
220
-        }
221
-        Intent intent = fileChooserParams.createIntent();
222
-        intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, selectMultiple);
223
-        
224
-        // Uses Intent.EXTRA_MIME_TYPES to pass multiple mime types.
225
-        String[] acceptTypes = fileChooserParams.getAcceptTypes();
226
-        if (acceptTypes.length > 1) {
227
-            intent.setType("*/*"); // Accept all, filter mime types by Intent.EXTRA_MIME_TYPES.
228
-            intent.putExtra(Intent.EXTRA_MIME_TYPES, acceptTypes);
229
-        }
230
-        try {
231
-            parentEngine.cordova.startActivityForResult(new CordovaPlugin() {
232
-                @Override
233
-                public void onActivityResult(int requestCode, int resultCode, Intent intent) {
234
-                    Uri[] result = null;
235
-                    if (resultCode ==  Activity.RESULT_OK && intent != null) {
236
-                        if (intent.getClipData() != null) {
237
-                            // handle multiple-selected files
238
-                            final int numSelectedFiles = intent.getClipData().getItemCount();
239
-                            result = new Uri[numSelectedFiles];
240
-                            for (int i = 0; i < numSelectedFiles; i++) {
241
-                                result[i] = intent.getClipData().getItemAt(i).getUri();
242
-                                LOG.d(LOG_TAG, "Receive file chooser URL: " + result[i]);
243
-                            }
244
-                        }
245
-                        else if (intent.getData() != null) {
246
-                            // handle single-selected file
247
-                            result = WebChromeClient.FileChooserParams.parseResult(resultCode, intent);
248
-                            LOG.d(LOG_TAG, "Receive file chooser URL: " + result);
249
-                        }
250
-                    }
251
-                    filePathsCallback.onReceiveValue(result);
252
-                }
253
-            }, intent, FILECHOOSER_RESULTCODE);
254
-        } catch (ActivityNotFoundException e) {
255
-            LOG.w("No activity found to handle file chooser intent.", e);
256
-            filePathsCallback.onReceiveValue(null);
257
-        }
258
-        return true;
259
-    }
260
-
261
-    @Override
262
-    public void onPermissionRequest(final PermissionRequest request) {
263
-        LOG.d(LOG_TAG, "onPermissionRequest: " + Arrays.toString(request.getResources()));
264
-        request.grant(request.getResources());
265
-    }
266
-
267
-    public void destroyLastDialog(){
268
-        dialogsHelper.destroyLastDialog();
269
-    }
270
-}

+ 0
- 88
platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebView.java 查看文件

@@ -1,88 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-package org.apache.cordova.engine;
21
-
22
-import android.content.Context;
23
-import android.util.AttributeSet;
24
-import android.view.KeyEvent;
25
-import android.webkit.WebChromeClient;
26
-import android.webkit.WebView;
27
-import android.webkit.WebViewClient;
28
-
29
-import org.apache.cordova.CordovaInterface;
30
-import org.apache.cordova.CordovaWebView;
31
-import org.apache.cordova.CordovaWebViewEngine;
32
-
33
-/**
34
- * Custom WebView subclass that enables us to capture events needed for Cordova.
35
- */
36
-public class SystemWebView extends WebView implements CordovaWebViewEngine.EngineView {
37
-    private SystemWebViewClient viewClient;
38
-    SystemWebChromeClient chromeClient;
39
-    private SystemWebViewEngine parentEngine;
40
-    private CordovaInterface cordova;
41
-
42
-    public SystemWebView(Context context) {
43
-        this(context, null);
44
-    }
45
-
46
-    public SystemWebView(Context context, AttributeSet attrs) {
47
-        super(context, attrs);
48
-    }
49
-
50
-    // Package visibility to enforce that only SystemWebViewEngine should call this method.
51
-    void init(SystemWebViewEngine parentEngine, CordovaInterface cordova) {
52
-        this.cordova = cordova;
53
-        this.parentEngine = parentEngine;
54
-        if (this.viewClient == null) {
55
-            setWebViewClient(new SystemWebViewClient(parentEngine));
56
-        }
57
-
58
-        if (this.chromeClient == null) {
59
-            setWebChromeClient(new SystemWebChromeClient(parentEngine));
60
-        }
61
-    }
62
-
63
-    @Override
64
-    public CordovaWebView getCordovaWebView() {
65
-        return parentEngine != null ? parentEngine.getCordovaWebView() : null;
66
-    }
67
-
68
-    @Override
69
-    public void setWebViewClient(WebViewClient client) {
70
-        viewClient = (SystemWebViewClient)client;
71
-        super.setWebViewClient(client);
72
-    }
73
-
74
-    @Override
75
-    public void setWebChromeClient(WebChromeClient client) {
76
-        chromeClient = (SystemWebChromeClient)client;
77
-        super.setWebChromeClient(client);
78
-    }
79
-
80
-    @Override
81
-    public boolean dispatchKeyEvent(KeyEvent event) {
82
-        Boolean ret = parentEngine.client.onDispatchKeyEvent(event);
83
-        if (ret != null) {
84
-            return ret.booleanValue();
85
-        }
86
-        return super.dispatchKeyEvent(event);
87
-    }
88
-}

+ 0
- 369
platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewClient.java 查看文件

@@ -1,369 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-package org.apache.cordova.engine;
20
-
21
-import android.annotation.TargetApi;
22
-import android.content.pm.ApplicationInfo;
23
-import android.content.pm.PackageManager;
24
-import android.content.pm.PackageManager.NameNotFoundException;
25
-import android.graphics.Bitmap;
26
-import android.net.Uri;
27
-import android.net.http.SslError;
28
-import android.os.Build;
29
-import android.webkit.ClientCertRequest;
30
-import android.webkit.HttpAuthHandler;
31
-import android.webkit.SslErrorHandler;
32
-import android.webkit.WebResourceResponse;
33
-import android.webkit.WebView;
34
-import android.webkit.WebViewClient;
35
-
36
-import org.apache.cordova.AuthenticationToken;
37
-import org.apache.cordova.CordovaClientCertRequest;
38
-import org.apache.cordova.CordovaHttpAuthHandler;
39
-import org.apache.cordova.CordovaResourceApi;
40
-import org.apache.cordova.LOG;
41
-import org.apache.cordova.PluginManager;
42
-
43
-import java.io.FileNotFoundException;
44
-import java.io.IOException;
45
-import java.util.Hashtable;
46
-
47
-
48
-/**
49
- * This class is the WebViewClient that implements callbacks for our web view.
50
- * The kind of callbacks that happen here are regarding the rendering of the
51
- * document instead of the chrome surrounding it, such as onPageStarted(),
52
- * shouldOverrideUrlLoading(), etc. Related to but different than
53
- * CordovaChromeClient.
54
- */
55
-public class SystemWebViewClient extends WebViewClient {
56
-
57
-    private static final String TAG = "SystemWebViewClient";
58
-    protected final SystemWebViewEngine parentEngine;
59
-    private boolean doClearHistory = false;
60
-    boolean isCurrentlyLoading;
61
-
62
-    /** The authorization tokens. */
63
-    private Hashtable<String, AuthenticationToken> authenticationTokens = new Hashtable<String, AuthenticationToken>();
64
-
65
-    public SystemWebViewClient(SystemWebViewEngine parentEngine) {
66
-        this.parentEngine = parentEngine;
67
-    }
68
-
69
-    /**
70
-     * Give the host application a chance to take over the control when a new url
71
-     * is about to be loaded in the current WebView.
72
-     *
73
-     * @param view          The WebView that is initiating the callback.
74
-     * @param url           The url to be loaded.
75
-     * @return              true to override, false for default behavior
76
-     */
77
-    @Override
78
-    @SuppressWarnings("deprecation")
79
-    public boolean shouldOverrideUrlLoading(WebView view, String url) {
80
-        return parentEngine.client.onNavigationAttempt(url);
81
-    }
82
-
83
-    /**
84
-     * On received http auth request.
85
-     * The method reacts on all registered authentication tokens. There is one and only one authentication token for any host + realm combination
86
-     */
87
-    @Override
88
-    public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
89
-
90
-        // Get the authentication token (if specified)
91
-        AuthenticationToken token = this.getAuthenticationToken(host, realm);
92
-        if (token != null) {
93
-            handler.proceed(token.getUserName(), token.getPassword());
94
-            return;
95
-        }
96
-
97
-        // Check if there is some plugin which can resolve this auth challenge
98
-        PluginManager pluginManager = this.parentEngine.pluginManager;
99
-        if (pluginManager != null && pluginManager.onReceivedHttpAuthRequest(null, new CordovaHttpAuthHandler(handler), host, realm)) {
100
-            parentEngine.client.clearLoadTimeoutTimer();
101
-            return;
102
-        }
103
-
104
-        // By default handle 401 like we'd normally do!
105
-        super.onReceivedHttpAuthRequest(view, handler, host, realm);
106
-    }
107
-
108
-    /**
109
-     * On received client cert request.
110
-     * The method forwards the request to any running plugins before using the default implementation.
111
-     *
112
-     * @param view
113
-     * @param request
114
-     */
115
-    @Override
116
-    public void onReceivedClientCertRequest (WebView view, ClientCertRequest request)
117
-    {
118
-
119
-        // Check if there is some plugin which can resolve this certificate request
120
-        PluginManager pluginManager = this.parentEngine.pluginManager;
121
-        if (pluginManager != null && pluginManager.onReceivedClientCertRequest(null, new CordovaClientCertRequest(request))) {
122
-            parentEngine.client.clearLoadTimeoutTimer();
123
-            return;
124
-        }
125
-
126
-        // By default pass to WebViewClient
127
-        super.onReceivedClientCertRequest(view, request);
128
-    }
129
-
130
-    /**
131
-     * Notify the host application that a page has started loading.
132
-     * This method is called once for each main frame load so a page with iframes or framesets will call onPageStarted
133
-     * one time for the main frame. This also means that onPageStarted will not be called when the contents of an
134
-     * embedded frame changes, i.e. clicking a link whose target is an iframe.
135
-     *
136
-     * @param view          The webview initiating the callback.
137
-     * @param url           The url of the page.
138
-     */
139
-    @Override
140
-    public void onPageStarted(WebView view, String url, Bitmap favicon) {
141
-        super.onPageStarted(view, url, favicon);
142
-        isCurrentlyLoading = true;
143
-        // Flush stale messages & reset plugins.
144
-        parentEngine.bridge.reset();
145
-        parentEngine.client.onPageStarted(url);
146
-    }
147
-
148
-    /**
149
-     * Notify the host application that a page has finished loading.
150
-     * This method is called only for main frame. When onPageFinished() is called, the rendering picture may not be updated yet.
151
-     *
152
-     *
153
-     * @param view          The webview initiating the callback.
154
-     * @param url           The url of the page.
155
-     */
156
-    @Override
157
-    public void onPageFinished(WebView view, String url) {
158
-        super.onPageFinished(view, url);
159
-        // Ignore excessive calls, if url is not about:blank (CB-8317).
160
-        if (!isCurrentlyLoading && !url.startsWith("about:")) {
161
-            return;
162
-        }
163
-        isCurrentlyLoading = false;
164
-
165
-        /**
166
-         * Because of a timing issue we need to clear this history in onPageFinished as well as
167
-         * onPageStarted. However we only want to do this if the doClearHistory boolean is set to
168
-         * true. You see when you load a url with a # in it which is common in jQuery applications
169
-         * onPageStared is not called. Clearing the history at that point would break jQuery apps.
170
-         */
171
-        if (this.doClearHistory) {
172
-            view.clearHistory();
173
-            this.doClearHistory = false;
174
-        }
175
-        parentEngine.client.onPageFinishedLoading(url);
176
-
177
-    }
178
-
179
-    /**
180
-     * Report an error to the host application. These errors are unrecoverable (i.e. the main resource is unavailable).
181
-     * The errorCode parameter corresponds to one of the ERROR_* constants.
182
-     *
183
-     * @param view          The WebView that is initiating the callback.
184
-     * @param errorCode     The error code corresponding to an ERROR_* value.
185
-     * @param description   A String describing the error.
186
-     * @param failingUrl    The url that failed to load.
187
-     */
188
-    @Override
189
-    @SuppressWarnings("deprecation")
190
-    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
191
-        // Ignore error due to stopLoading().
192
-        if (!isCurrentlyLoading) {
193
-            return;
194
-        }
195
-        LOG.d(TAG, "CordovaWebViewClient.onReceivedError: Error code=%s Description=%s URL=%s", errorCode, description, failingUrl);
196
-
197
-        // If this is a "Protocol Not Supported" error, then revert to the previous
198
-        // page. If there was no previous page, then punt. The application's config
199
-        // is likely incorrect (start page set to sms: or something like that)
200
-        if (errorCode == WebViewClient.ERROR_UNSUPPORTED_SCHEME) {
201
-            parentEngine.client.clearLoadTimeoutTimer();
202
-
203
-            if (view.canGoBack()) {
204
-                view.goBack();
205
-                return;
206
-            } else {
207
-                super.onReceivedError(view, errorCode, description, failingUrl);
208
-            }
209
-        }
210
-        parentEngine.client.onReceivedError(errorCode, description, failingUrl);
211
-    }
212
-
213
-    /**
214
-     * Notify the host application that an SSL error occurred while loading a resource.
215
-     * The host application must call either handler.cancel() or handler.proceed().
216
-     * Note that the decision may be retained for use in response to future SSL errors.
217
-     * The default behavior is to cancel the load.
218
-     *
219
-     * @param view          The WebView that is initiating the callback.
220
-     * @param handler       An SslErrorHandler object that will handle the user's response.
221
-     * @param error         The SSL error object.
222
-     */
223
-    @Override
224
-    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
225
-
226
-        final String packageName = parentEngine.cordova.getActivity().getPackageName();
227
-        final PackageManager pm = parentEngine.cordova.getActivity().getPackageManager();
228
-
229
-        ApplicationInfo appInfo;
230
-        try {
231
-            appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
232
-            if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
233
-                // debug = true
234
-                handler.proceed();
235
-                return;
236
-            } else {
237
-                // debug = false
238
-                super.onReceivedSslError(view, handler, error);
239
-            }
240
-        } catch (NameNotFoundException e) {
241
-            // When it doubt, lock it out!
242
-            super.onReceivedSslError(view, handler, error);
243
-        }
244
-    }
245
-
246
-
247
-    /**
248
-     * Sets the authentication token.
249
-     *
250
-     * @param authenticationToken
251
-     * @param host
252
-     * @param realm
253
-     */
254
-    public void setAuthenticationToken(AuthenticationToken authenticationToken, String host, String realm) {
255
-        if (host == null) {
256
-            host = "";
257
-        }
258
-        if (realm == null) {
259
-            realm = "";
260
-        }
261
-        this.authenticationTokens.put(host.concat(realm), authenticationToken);
262
-    }
263
-
264
-    /**
265
-     * Removes the authentication token.
266
-     *
267
-     * @param host
268
-     * @param realm
269
-     *
270
-     * @return the authentication token or null if did not exist
271
-     */
272
-    public AuthenticationToken removeAuthenticationToken(String host, String realm) {
273
-        return this.authenticationTokens.remove(host.concat(realm));
274
-    }
275
-
276
-    /**
277
-     * Gets the authentication token.
278
-     *
279
-     * In order it tries:
280
-     * 1- host + realm
281
-     * 2- host
282
-     * 3- realm
283
-     * 4- no host, no realm
284
-     *
285
-     * @param host
286
-     * @param realm
287
-     *
288
-     * @return the authentication token
289
-     */
290
-    public AuthenticationToken getAuthenticationToken(String host, String realm) {
291
-        AuthenticationToken token = null;
292
-        token = this.authenticationTokens.get(host.concat(realm));
293
-
294
-        if (token == null) {
295
-            // try with just the host
296
-            token = this.authenticationTokens.get(host);
297
-
298
-            // Try the realm
299
-            if (token == null) {
300
-                token = this.authenticationTokens.get(realm);
301
-            }
302
-
303
-            // if no host found, just query for default
304
-            if (token == null) {
305
-                token = this.authenticationTokens.get("");
306
-            }
307
-        }
308
-
309
-        return token;
310
-    }
311
-
312
-    /**
313
-     * Clear all authentication tokens.
314
-     */
315
-    public void clearAuthenticationTokens() {
316
-        this.authenticationTokens.clear();
317
-    }
318
-
319
-    @Override
320
-    @SuppressWarnings("deprecation")
321
-    public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
322
-        try {
323
-            // Check the against the whitelist and lock out access to the WebView directory
324
-            // Changing this will cause problems for your application
325
-            if (!parentEngine.pluginManager.shouldAllowRequest(url)) {
326
-                LOG.w(TAG, "URL blocked by whitelist: " + url);
327
-                // Results in a 404.
328
-                return new WebResourceResponse("text/plain", "UTF-8", null);
329
-            }
330
-
331
-            CordovaResourceApi resourceApi = parentEngine.resourceApi;
332
-            Uri origUri = Uri.parse(url);
333
-            // Allow plugins to intercept WebView requests.
334
-            Uri remappedUri = resourceApi.remapUri(origUri);
335
-
336
-            if (!origUri.equals(remappedUri) || needsSpecialsInAssetUrlFix(origUri) || needsContentUrlFix(origUri)) {
337
-                CordovaResourceApi.OpenForReadResult result = resourceApi.openForRead(remappedUri, true);
338
-                return new WebResourceResponse(result.mimeType, "UTF-8", result.inputStream);
339
-            }
340
-            // If we don't need to special-case the request, let the browser load it.
341
-            return null;
342
-        } catch (IOException e) {
343
-            if (!(e instanceof FileNotFoundException)) {
344
-                LOG.e(TAG, "Error occurred while loading a file (returning a 404).", e);
345
-            }
346
-            // Results in a 404.
347
-            return new WebResourceResponse("text/plain", "UTF-8", null);
348
-        }
349
-    }
350
-
351
-    private static boolean needsContentUrlFix(Uri uri) {
352
-        return "content".equals(uri.getScheme());
353
-    }
354
-
355
-    private static boolean needsSpecialsInAssetUrlFix(Uri uri) {
356
-        if (CordovaResourceApi.getUriType(uri) != CordovaResourceApi.URI_TYPE_ASSET) {
357
-            return false;
358
-        }
359
-        if (uri.getQuery() != null || uri.getFragment() != null) {
360
-            return true;
361
-        }
362
-
363
-        if (!uri.toString().contains("%")) {
364
-            return false;
365
-        }
366
-
367
-        return false;
368
-    }
369
-}

+ 0
- 328
platforms/android/CordovaLib/src/org/apache/cordova/engine/SystemWebViewEngine.java 查看文件

@@ -1,328 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-package org.apache.cordova.engine;
21
-
22
-import android.annotation.SuppressLint;
23
-import android.annotation.TargetApi;
24
-import android.content.BroadcastReceiver;
25
-import android.content.Context;
26
-import android.content.Intent;
27
-import android.content.IntentFilter;
28
-import android.content.pm.ApplicationInfo;
29
-import android.os.Build;
30
-import android.view.View;
31
-import android.webkit.ValueCallback;
32
-import android.webkit.WebSettings;
33
-import android.webkit.WebSettings.LayoutAlgorithm;
34
-import android.webkit.WebView;
35
-
36
-import org.apache.cordova.CordovaBridge;
37
-import org.apache.cordova.CordovaInterface;
38
-import org.apache.cordova.CordovaPreferences;
39
-import org.apache.cordova.CordovaResourceApi;
40
-import org.apache.cordova.CordovaWebView;
41
-import org.apache.cordova.CordovaWebViewEngine;
42
-import org.apache.cordova.ICordovaCookieManager;
43
-import org.apache.cordova.LOG;
44
-import org.apache.cordova.NativeToJsMessageQueue;
45
-import org.apache.cordova.PluginManager;
46
-
47
-import java.lang.reflect.InvocationTargetException;
48
-import java.lang.reflect.Method;
49
-
50
-
51
-/**
52
- * Glue class between CordovaWebView (main Cordova logic) and SystemWebView (the actual View).
53
- * We make the Engine separate from the actual View so that:
54
- *  A) We don't need to worry about WebView methods clashing with CordovaWebViewEngine methods
55
- *     (e.g.: goBack() is void for WebView, and boolean for CordovaWebViewEngine)
56
- *  B) Separating the actual View from the Engine makes API surfaces smaller.
57
- * Class uses two-phase initialization. However, CordovaWebView is responsible for calling .init().
58
- */
59
-public class SystemWebViewEngine implements CordovaWebViewEngine {
60
-    public static final String TAG = "SystemWebViewEngine";
61
-
62
-    protected final SystemWebView webView;
63
-    protected final SystemCookieManager cookieManager;
64
-    protected CordovaPreferences preferences;
65
-    protected CordovaBridge bridge;
66
-    protected CordovaWebViewEngine.Client client;
67
-    protected CordovaWebView parentWebView;
68
-    protected CordovaInterface cordova;
69
-    protected PluginManager pluginManager;
70
-    protected CordovaResourceApi resourceApi;
71
-    protected NativeToJsMessageQueue nativeToJsMessageQueue;
72
-    private BroadcastReceiver receiver;
73
-
74
-    /** Used when created via reflection. */
75
-    public SystemWebViewEngine(Context context, CordovaPreferences preferences) {
76
-        this(new SystemWebView(context), preferences);
77
-    }
78
-
79
-    public SystemWebViewEngine(SystemWebView webView) {
80
-        this(webView, null);
81
-    }
82
-
83
-    public SystemWebViewEngine(SystemWebView webView, CordovaPreferences preferences) {
84
-        this.preferences = preferences;
85
-        this.webView = webView;
86
-        cookieManager = new SystemCookieManager(webView);
87
-    }
88
-
89
-    @Override
90
-    public void init(CordovaWebView parentWebView, CordovaInterface cordova, CordovaWebViewEngine.Client client,
91
-              CordovaResourceApi resourceApi, PluginManager pluginManager,
92
-              NativeToJsMessageQueue nativeToJsMessageQueue) {
93
-        if (this.cordova != null) {
94
-            throw new IllegalStateException();
95
-        }
96
-        // Needed when prefs are not passed by the constructor
97
-        if (preferences == null) {
98
-            preferences = parentWebView.getPreferences();
99
-        }
100
-        this.parentWebView = parentWebView;
101
-        this.cordova = cordova;
102
-        this.client = client;
103
-        this.resourceApi = resourceApi;
104
-        this.pluginManager = pluginManager;
105
-        this.nativeToJsMessageQueue = nativeToJsMessageQueue;
106
-        webView.init(this, cordova);
107
-
108
-        initWebViewSettings();
109
-
110
-        nativeToJsMessageQueue.addBridgeMode(new NativeToJsMessageQueue.OnlineEventsBridgeMode(new NativeToJsMessageQueue.OnlineEventsBridgeMode.OnlineEventsBridgeModeDelegate() {
111
-            @Override
112
-            public void setNetworkAvailable(boolean value) {
113
-                //sometimes this can be called after calling webview.destroy() on destroy()
114
-                //thus resulting in a NullPointerException
115
-                if(webView!=null) {
116
-                   webView.setNetworkAvailable(value);
117
-                }
118
-            }
119
-            @Override
120
-            public void runOnUiThread(Runnable r) {
121
-                SystemWebViewEngine.this.cordova.getActivity().runOnUiThread(r);
122
-            }
123
-        }));
124
-        nativeToJsMessageQueue.addBridgeMode(new NativeToJsMessageQueue.EvalBridgeMode(this, cordova));
125
-        bridge = new CordovaBridge(pluginManager, nativeToJsMessageQueue);
126
-        exposeJsInterface(webView, bridge);
127
-    }
128
-
129
-    @Override
130
-    public CordovaWebView getCordovaWebView() {
131
-        return parentWebView;
132
-    }
133
-
134
-    @Override
135
-    public ICordovaCookieManager getCookieManager() {
136
-        return cookieManager;
137
-    }
138
-
139
-    @Override
140
-    public View getView() {
141
-        return webView;
142
-    }
143
-
144
-    @SuppressLint({"NewApi", "SetJavaScriptEnabled"})
145
-    @SuppressWarnings("deprecation")
146
-    private void initWebViewSettings() {
147
-        webView.setInitialScale(0);
148
-        webView.setVerticalScrollBarEnabled(false);
149
-        // Enable JavaScript
150
-        final WebSettings settings = webView.getSettings();
151
-        settings.setJavaScriptEnabled(true);
152
-        settings.setJavaScriptCanOpenWindowsAutomatically(true);
153
-        settings.setLayoutAlgorithm(LayoutAlgorithm.NORMAL);
154
-
155
-        /**
156
-         * https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccess(boolean)
157
-         * 
158
-         * SDK >= 30 has recently set this value to false by default.
159
-         * It is recommended to turn off this settings To prevent possible security issues targeting Build.VERSION_CODES.Q and earlier.
160
-         * For existing functionality, this setting is set to true. In a future release, this should be defaulted to false.
161
-         */
162
-        settings.setAllowFileAccess(true);
163
-
164
-        String manufacturer = android.os.Build.MANUFACTURER;
165
-        LOG.d(TAG, "CordovaWebView is running on device made by: " + manufacturer);
166
-
167
-        //We don't save any form data in the application
168
-        settings.setSaveFormData(false);
169
-        settings.setSavePassword(false);
170
-
171
-        // Jellybean rightfully tried to lock this down. Too bad they didn't give us a whitelist
172
-        // while we do this
173
-        settings.setAllowUniversalAccessFromFileURLs(true);
174
-        settings.setMediaPlaybackRequiresUserGesture(false);
175
-
176
-        // Enable database
177
-        // We keep this disabled because we use or shim to get around DOM_EXCEPTION_ERROR_16
178
-        String databasePath = webView.getContext().getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
179
-        settings.setDatabaseEnabled(true);
180
-        settings.setDatabasePath(databasePath);
181
-
182
-
183
-        //Determine whether we're in debug or release mode, and turn on Debugging!
184
-        ApplicationInfo appInfo = webView.getContext().getApplicationContext().getApplicationInfo();
185
-        if ((appInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0) {
186
-            enableRemoteDebugging();
187
-        }
188
-
189
-        settings.setGeolocationDatabasePath(databasePath);
190
-
191
-        // Enable DOM storage
192
-        settings.setDomStorageEnabled(true);
193
-
194
-        // Enable built-in geolocation
195
-        settings.setGeolocationEnabled(true);
196
-
197
-        // Enable AppCache
198
-        // Fix for CB-2282
199
-        settings.setAppCacheMaxSize(5 * 1048576);
200
-        settings.setAppCachePath(databasePath);
201
-        settings.setAppCacheEnabled(true);
202
-
203
-        // Fix for CB-1405
204
-        // Google issue 4641
205
-        String defaultUserAgent = settings.getUserAgentString();
206
-
207
-        // Fix for CB-3360
208
-        String overrideUserAgent = preferences.getString("OverrideUserAgent", null);
209
-        if (overrideUserAgent != null) {
210
-            settings.setUserAgentString(overrideUserAgent);
211
-        } else {
212
-            String appendUserAgent = preferences.getString("AppendUserAgent", null);
213
-            if (appendUserAgent != null) {
214
-                settings.setUserAgentString(defaultUserAgent + " " + appendUserAgent);
215
-            }
216
-        }
217
-        // End CB-3360
218
-
219
-        IntentFilter intentFilter = new IntentFilter();
220
-        intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
221
-        if (this.receiver == null) {
222
-            this.receiver = new BroadcastReceiver() {
223
-                @Override
224
-                public void onReceive(Context context, Intent intent) {
225
-                    settings.getUserAgentString();
226
-                }
227
-            };
228
-            webView.getContext().registerReceiver(this.receiver, intentFilter);
229
-        }
230
-        // end CB-1405
231
-    }
232
-
233
-    private void enableRemoteDebugging() {
234
-        try {
235
-            WebView.setWebContentsDebuggingEnabled(true);
236
-        } catch (IllegalArgumentException e) {
237
-            LOG.d(TAG, "You have one job! To turn on Remote Web Debugging! YOU HAVE FAILED! ");
238
-            e.printStackTrace();
239
-        }
240
-    }
241
-
242
-    // Yeah, we know. It'd be great if lint was just a little smarter.
243
-    @SuppressLint("AddJavascriptInterface")
244
-    private static void exposeJsInterface(WebView webView, CordovaBridge bridge) {
245
-        SystemExposedJsApi exposedJsApi = new SystemExposedJsApi(bridge);
246
-        webView.addJavascriptInterface(exposedJsApi, "_cordovaNative");
247
-    }
248
-
249
-
250
-    /**
251
-     * Load the url into the webview.
252
-     */
253
-    @Override
254
-    public void loadUrl(final String url, boolean clearNavigationStack) {
255
-        webView.loadUrl(url);
256
-    }
257
-
258
-    @Override
259
-    public String getUrl() {
260
-        return webView.getUrl();
261
-    }
262
-
263
-    @Override
264
-    public void stopLoading() {
265
-        webView.stopLoading();
266
-    }
267
-
268
-    @Override
269
-    public void clearCache() {
270
-        webView.clearCache(true);
271
-    }
272
-
273
-    @Override
274
-    public void clearHistory() {
275
-        webView.clearHistory();
276
-    }
277
-
278
-    @Override
279
-    public boolean canGoBack() {
280
-        return webView.canGoBack();
281
-    }
282
-
283
-    /**
284
-     * Go to previous page in history.  (We manage our own history)
285
-     *
286
-     * @return true if we went back, false if we are already at top
287
-     */
288
-    @Override
289
-    public boolean goBack() {
290
-        // Check webview first to see if there is a history
291
-        // This is needed to support curPage#diffLink, since they are added to parentEngine's history, but not our history url array (JQMobile behavior)
292
-        if (webView.canGoBack()) {
293
-            webView.goBack();
294
-            return true;
295
-        }
296
-        return false;
297
-    }
298
-
299
-    @Override
300
-    public void setPaused(boolean value) {
301
-        if (value) {
302
-            webView.onPause();
303
-            webView.pauseTimers();
304
-        } else {
305
-            webView.onResume();
306
-            webView.resumeTimers();
307
-        }
308
-    }
309
-
310
-    @Override
311
-    public void destroy() {
312
-        webView.chromeClient.destroyLastDialog();
313
-        webView.destroy();
314
-        // unregister the receiver
315
-        if (receiver != null) {
316
-            try {
317
-                webView.getContext().unregisterReceiver(receiver);
318
-            } catch (Exception e) {
319
-                LOG.e(TAG, "Error unregistering configuration receiver: " + e.getMessage(), e);
320
-            }
321
-        }
322
-    }
323
-
324
-    @Override
325
-    public void evaluateJavascript(String js, ValueCallback<String> callback) {
326
-        webView.evaluateJavascript(js, callback);
327
-    }
328
-}

+ 0
- 30
platforms/android/android.json 查看文件

@@ -1,30 +0,0 @@
1
-{
2
-  "prepare_queue": {
3
-    "installed": [],
4
-    "uninstalled": []
5
-  },
6
-  "config_munge": {
7
-    "files": {
8
-      "res/xml/config.xml": {
9
-        "parents": {
10
-          "/*": [
11
-            {
12
-              "xml": "<feature name=\"Whitelist\"><param name=\"android-package\" value=\"org.apache.cordova.whitelist.WhitelistPlugin\" /><param name=\"onload\" value=\"true\" /></feature>",
13
-              "count": 1
14
-            }
15
-          ]
16
-        }
17
-      }
18
-    }
19
-  },
20
-  "installed_plugins": {
21
-    "cordova-plugin-whitelist": {
22
-      "PACKAGE_NAME": "io.cordova.hellocordova"
23
-    }
24
-  },
25
-  "dependent_plugins": {},
26
-  "modules": [],
27
-  "plugin_metadata": {
28
-    "cordova-plugin-whitelist": "1.3.5"
29
-  }
30
-}

+ 0
- 414
platforms/android/app/build.gradle 查看文件

@@ -1,414 +0,0 @@
1
-/*
2
-       Licensed to the Apache Software Foundation (ASF) under one
3
-       or more contributor license agreements.  See the NOTICE file
4
-       distributed with this work for additional information
5
-       regarding copyright ownership.  The ASF licenses this file
6
-       to you under the Apache License, Version 2.0 (the
7
-       "License"); you may not use this file except in compliance
8
-       with the License.  You may obtain a copy of the License at
9
-
10
-         http://www.apache.org/licenses/LICENSE-2.0
11
-
12
-       Unless required by applicable law or agreed to in writing,
13
-       software distributed under the License is distributed on an
14
-       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
-       KIND, either express or implied.  See the License for the
16
-       specific language governing permissions and limitations
17
-       under the License.
18
-*/
19
-
20
-apply plugin: 'com.android.application'
21
-
22
-if (cdvHelpers.getConfigPreference('GradlePluginKotlinEnabled', 'false').toBoolean()) {
23
-    apply plugin: 'kotlin-android'
24
-    apply plugin: 'kotlin-android-extensions'
25
-}
26
-
27
-buildscript {
28
-    apply from: '../CordovaLib/cordova.gradle'
29
-
30
-    if(cdvHelpers.getConfigPreference('GradlePluginKotlinEnabled', 'false').toBoolean()) {
31
-        String defaultGradlePluginKotlinVersion = kotlin_version
32
-
33
-        /**
34
-         * Fetches the user's defined Kotlin Version from config.xml.
35
-         * If the version is not set or invalid, it will default to the ${defaultGradlePluginKotlinVersion}
36
-         */
37
-        String gradlePluginKotlinVersion = cdvHelpers.getConfigPreference('GradlePluginKotlinVersion', defaultGradlePluginKotlinVersion)
38
-        if(!cdvHelpers.isVersionValid(gradlePluginKotlinVersion)) {
39
-            println("The defined Kotlin version (${gradlePluginKotlinVersion}) does not appear to be a valid version. Falling back to version: ${defaultGradlePluginKotlinVersion}.")
40
-            gradlePluginKotlinVersion = defaultGradlePluginKotlinVersion
41
-        }
42
-
43
-        // Change the version to be used.
44
-        ext.kotlin_version = gradlePluginKotlinVersion
45
-    }
46
-
47
-    apply from: 'repositories.gradle'
48
-    repositories repos
49
-
50
-    dependencies {
51
-        apply from: '../CordovaLib/cordova.gradle'
52
-
53
-        classpath 'com.android.tools.build:gradle:4.0.0'
54
-
55
-        if (cdvHelpers.getConfigPreference('GradlePluginKotlinEnabled', 'false').toBoolean()) {
56
-            classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
57
-        }
58
-
59
-        if(cdvHelpers.getConfigPreference('GradlePluginGoogleServicesEnabled', 'false').toBoolean()) {
60
-            String defaultGradlePluginGoogleServicesVersion = '4.2.0'
61
-
62
-            /**
63
-             * Fetches the user's defined Google Services Plugin Version from config.xml.
64
-             * If the version is not set or invalid, it will default to the ${defaultGradlePluginGoogleServicesVersion}
65
-             */
66
-            String gradlePluginGoogleServicesVersion = cdvHelpers.getConfigPreference('GradlePluginGoogleServicesVersion', defaultGradlePluginGoogleServicesVersion)
67
-            if(!cdvHelpers.isVersionValid(gradlePluginGoogleServicesVersion)) {
68
-                println("The defined Google Services plugin version (${gradlePluginGoogleServicesVersion}) does not appear to be a valid version. Falling back to version: ${defaultGradlePluginGoogleServicesVersion}.")
69
-                gradlePluginGoogleServicesVersion = defaultGradlePluginGoogleServicesVersion
70
-            }
71
-
72
-            // Create the Google Services classpath and set it.
73
-            String gradlePluginGoogleServicesClassPath = "com.google.gms:google-services:${gradlePluginGoogleServicesVersion}"
74
-            println "Adding classpath: ${gradlePluginGoogleServicesClassPath}"
75
-            classpath gradlePluginGoogleServicesClassPath
76
-        }
77
-    }
78
-}
79
-
80
-// Allow plugins to declare Maven dependencies via build-extras.gradle.
81
-allprojects {
82
-    apply from: 'repositories.gradle'
83
-    repositories repos
84
-}
85
-
86
-task wrapper(type: Wrapper) {
87
-    gradleVersion = '6.5'
88
-}
89
-
90
-// Configuration properties. Set these via environment variables, build-extras.gradle, or gradle.properties.
91
-// Refer to: http://www.gradle.org/docs/current/userguide/tutorial_this_and_that.html
92
-ext {
93
-    apply from: '../CordovaLib/cordova.gradle'
94
-
95
-    // The value for android.compileSdkVersion.
96
-    if (!project.hasProperty('cdvCompileSdkVersion')) {
97
-        cdvCompileSdkVersion = null;
98
-    }
99
-    // The value for android.buildToolsVersion.
100
-    if (!project.hasProperty('cdvBuildToolsVersion')) {
101
-        cdvBuildToolsVersion = null;
102
-    }
103
-    // Sets the versionCode to the given value.
104
-    if (!project.hasProperty('cdvVersionCode')) {
105
-        cdvVersionCode = null
106
-    }
107
-    // Sets the minSdkVersion to the given value.
108
-    if (!project.hasProperty('cdvMinSdkVersion')) {
109
-        cdvMinSdkVersion = null
110
-    }
111
-    // Sets the maxSdkVersion to the given value.
112
-    if (!project.hasProperty('cdvMaxSdkVersion')) {
113
-        cdvMaxSdkVersion = null
114
-    }
115
-    // The value for android.targetSdkVersion.
116
-    if (!project.hasProperty('cdvTargetSdkVersion')) {
117
-        cdvTargetSdkVersion = null;
118
-    }
119
-    // Whether to build architecture-specific APKs.
120
-    if (!project.hasProperty('cdvBuildMultipleApks')) {
121
-        cdvBuildMultipleApks = null
122
-    }
123
-    // Whether to append a 0 "abi digit" to versionCode when only a single APK is build
124
-    if (!project.hasProperty('cdvVersionCodeForceAbiDigit')) {
125
-        cdvVersionCodeForceAbiDigit = null
126
-    }
127
-    // .properties files to use for release signing.
128
-    if (!project.hasProperty('cdvReleaseSigningPropertiesFile')) {
129
-        cdvReleaseSigningPropertiesFile = null
130
-    }
131
-    // .properties files to use for debug signing.
132
-    if (!project.hasProperty('cdvDebugSigningPropertiesFile')) {
133
-        cdvDebugSigningPropertiesFile = null
134
-    }
135
-    // Set by build.js script.
136
-    if (!project.hasProperty('cdvBuildArch')) {
137
-        cdvBuildArch = null
138
-    }
139
-
140
-    // Plugin gradle extensions can append to this to have code run at the end.
141
-    cdvPluginPostBuildExtras = []
142
-}
143
-
144
-// PLUGIN GRADLE EXTENSIONS START
145
-// PLUGIN GRADLE EXTENSIONS END
146
-
147
-def hasBuildExtras1 = file('build-extras.gradle').exists()
148
-if (hasBuildExtras1) {
149
-    apply from: 'build-extras.gradle'
150
-}
151
-
152
-def hasBuildExtras2 = file('../build-extras.gradle').exists()
153
-if (hasBuildExtras2) {
154
-    apply from: '../build-extras.gradle'
155
-}
156
-
157
-// Set property defaults after extension .gradle files.
158
-ext.cdvCompileSdkVersion = cdvCompileSdkVersion == null ? (
159
-    defaultCompileSdkVersion == null
160
-        ? privateHelpers.getProjectTarget()
161
-        : defaultCompileSdkVersion
162
-) : Integer.parseInt('' + cdvCompileSdkVersion);
163
-
164
-if (ext.cdvBuildToolsVersion == null) {
165
-    ext.cdvBuildToolsVersion = privateHelpers.findLatestInstalledBuildTools()
166
-    //ext.cdvBuildToolsVersion = project.ext.defaultBuildToolsVersion
167
-}
168
-if (ext.cdvDebugSigningPropertiesFile == null && file('../debug-signing.properties').exists()) {
169
-    ext.cdvDebugSigningPropertiesFile = '../debug-signing.properties'
170
-}
171
-if (ext.cdvReleaseSigningPropertiesFile == null && file('../release-signing.properties').exists()) {
172
-    ext.cdvReleaseSigningPropertiesFile = '../release-signing.properties'
173
-}
174
-
175
-// Cast to appropriate types.
176
-ext.cdvBuildMultipleApks = cdvBuildMultipleApks == null ? false : cdvBuildMultipleApks.toBoolean();
177
-ext.cdvVersionCodeForceAbiDigit = cdvVersionCodeForceAbiDigit == null ? false : cdvVersionCodeForceAbiDigit.toBoolean();
178
-
179
-// minSdkVersion, maxSdkVersion and targetSdkVersion
180
-ext.cdvMinSdkVersion = cdvMinSdkVersion == null ? defaultMinSdkVersion : Integer.parseInt('' + cdvMinSdkVersion)
181
-if (cdvMaxSdkVersion != null) {
182
-    ext.cdvMaxSdkVersion = Integer.parseInt('' + cdvMaxSdkVersion)
183
-}
184
-ext.cdvTargetSdkVersion = cdvTargetSdkVersion == null ? defaultTargetSdkVersion  : Integer.parseInt('' + cdvTargetSdkVersion)
185
-
186
-ext.cdvVersionCode = cdvVersionCode == null ? null : Integer.parseInt('' + cdvVersionCode)
187
-
188
-def computeBuildTargetName(debugBuild) {
189
-    def ret = 'assemble'
190
-    if (cdvBuildMultipleApks && cdvBuildArch) {
191
-        def arch = cdvBuildArch == 'arm' ? 'armv7' : cdvBuildArch
192
-        ret += '' + arch.toUpperCase().charAt(0) + arch.substring(1);
193
-    }
194
-    return ret + (debugBuild ? 'Debug' : 'Release')
195
-}
196
-
197
-// Make cdvBuild a task that depends on the debug/arch-sepecific task.
198
-task cdvBuildDebug
199
-cdvBuildDebug.dependsOn {
200
-    return computeBuildTargetName(true)
201
-}
202
-
203
-task cdvBuildRelease
204
-cdvBuildRelease.dependsOn {
205
-    return computeBuildTargetName(false)
206
-}
207
-
208
-task cdvPrintProps {
209
-    doLast {
210
-        println('cdvCompileSdkVersion=' + cdvCompileSdkVersion)
211
-        println('cdvBuildToolsVersion=' + cdvBuildToolsVersion)
212
-        println('cdvVersionCode=' + cdvVersionCode)
213
-        println('cdvVersionCodeForceAbiDigit=' + cdvVersionCodeForceAbiDigit)
214
-        println('cdvMinSdkVersion=' + cdvMinSdkVersion)
215
-        println('cdvMaxSdkVersion=' + cdvMaxSdkVersion)
216
-        println('cdvTargetSdkVersion=' + cdvTargetSdkVersion)
217
-        println('cdvBuildMultipleApks=' + cdvBuildMultipleApks)
218
-        println('cdvReleaseSigningPropertiesFile=' + cdvReleaseSigningPropertiesFile)
219
-        println('cdvDebugSigningPropertiesFile=' + cdvDebugSigningPropertiesFile)
220
-        println('cdvBuildArch=' + cdvBuildArch)
221
-        println('computedVersionCode=' + android.defaultConfig.versionCode)
222
-        android.productFlavors.each { flavor ->
223
-            println('computed' + flavor.name.capitalize() + 'VersionCode=' + flavor.versionCode)
224
-        }
225
-    }
226
-}
227
-
228
-android {
229
-    defaultConfig {
230
-        versionCode cdvVersionCode ?: new BigInteger("" + privateHelpers.extractIntFromManifest("versionCode"))
231
-        applicationId privateHelpers.extractStringFromManifest("package")
232
-
233
-        if (cdvMinSdkVersion != null) {
234
-            minSdkVersion cdvMinSdkVersion
235
-        }
236
-
237
-        if (cdvMaxSdkVersion != null) {
238
-            maxSdkVersion cdvMaxSdkVersion
239
-        }
240
-
241
-        if(cdvTargetSdkVersion != null) {
242
-            targetSdkVersion cdvTargetSdkVersion
243
-        }
244
-    }
245
-
246
-    lintOptions {
247
-      abortOnError false;
248
-    }
249
-
250
-    compileSdkVersion cdvCompileSdkVersion
251
-    buildToolsVersion cdvBuildToolsVersion
252
-
253
-    // This code exists for Crosswalk and other Native APIs.
254
-    // By default, we multiply the existing version code in the
255
-    // Android Manifest by 10 and add a number for each architecture.
256
-    // If you are not using Crosswalk or SQLite, you can
257
-    // ignore this chunk of code, and your version codes will be respected.
258
-
259
-    if (Boolean.valueOf(cdvBuildMultipleApks)) {
260
-        flavorDimensions "default"
261
-
262
-        productFlavors {
263
-            armeabi {
264
-                versionCode defaultConfig.versionCode*10 + 1
265
-                ndk {
266
-                    abiFilters = ["armeabi"]
267
-                }
268
-            }
269
-            armv7 {
270
-                versionCode defaultConfig.versionCode*10 + 2
271
-                ndk {
272
-                    abiFilters = ["armeabi-v7a"]
273
-                }
274
-            }
275
-            arm64 {
276
-                versionCode defaultConfig.versionCode*10 + 3
277
-                ndk {
278
-                    abiFilters = ["arm64-v8a"]
279
-                }
280
-            }
281
-            x86 {
282
-                versionCode defaultConfig.versionCode*10 + 4
283
-                ndk {
284
-                    abiFilters = ["x86"]
285
-                }
286
-            }
287
-            x86_64 {
288
-                versionCode defaultConfig.versionCode*10 + 5
289
-                ndk {
290
-                    abiFilters = ["x86_64"]
291
-                }
292
-            }
293
-        }
294
-    } else if (Boolean.valueOf(cdvVersionCodeForceAbiDigit)) {
295
-        // This provides compatibility to the default logic for versionCode before cordova-android 5.2.0
296
-        defaultConfig {
297
-            versionCode defaultConfig.versionCode*10
298
-        }
299
-    }
300
-
301
-    compileOptions {
302
-        sourceCompatibility JavaVersion.VERSION_1_8
303
-        targetCompatibility JavaVersion.VERSION_1_8
304
-    }
305
-
306
-    if (cdvReleaseSigningPropertiesFile) {
307
-        signingConfigs {
308
-            release {
309
-                // These must be set or Gradle will complain (even if they are overridden).
310
-                keyAlias = ""
311
-                keyPassword = "__unset" // And these must be set to non-empty in order to have the signing step added to the task graph.
312
-                storeFile = null
313
-                storePassword = "__unset"
314
-            }
315
-        }
316
-        buildTypes {
317
-            release {
318
-                signingConfig signingConfigs.release
319
-            }
320
-        }
321
-        addSigningProps(cdvReleaseSigningPropertiesFile, signingConfigs.release)
322
-    }
323
-
324
-    if (cdvDebugSigningPropertiesFile) {
325
-        addSigningProps(cdvDebugSigningPropertiesFile, signingConfigs.debug)
326
-    }
327
-
328
-    sourceSets {
329
-        main.java.srcDirs += 'src/main/kotlin'
330
-    }
331
-}
332
-
333
-/*
334
- * WARNING: Cordova Lib and platform scripts do management inside of this code here,
335
- * if you are adding the dependencies manually, do so outside the comments, otherwise
336
- * the Cordova tools will overwrite them
337
- */
338
-
339
-
340
-dependencies {
341
-    implementation fileTree(dir: 'libs', include: '*.jar')
342
-
343
-    if (cdvHelpers.getConfigPreference('GradlePluginKotlinEnabled', 'false').toBoolean()) {
344
-        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
345
-    }
346
-
347
-    // SUB-PROJECT DEPENDENCIES START
348
-    implementation(project(path: ":CordovaLib"))
349
-    // SUB-PROJECT DEPENDENCIES END
350
-}
351
-
352
-def promptForReleaseKeyPassword() {
353
-    if (!cdvReleaseSigningPropertiesFile) {
354
-        return;
355
-    }
356
-    if ('__unset'.equals(android.signingConfigs.release.storePassword)) {
357
-        android.signingConfigs.release.storePassword = privateHelpers.promptForPassword('Enter key store password: ')
358
-    }
359
-    if ('__unset'.equals(android.signingConfigs.release.keyPassword)) {
360
-        android.signingConfigs.release.keyPassword = privateHelpers.promptForPassword('Enter key password: ');
361
-    }
362
-}
363
-
364
-gradle.taskGraph.whenReady { taskGraph ->
365
-    taskGraph.getAllTasks().each() { task ->
366
-      if(['validateReleaseSigning', 'validateSigningRelease', 'validateSigningArmv7Release', 'validateSigningX76Release'].contains(task.name)) {
367
-         promptForReleaseKeyPassword()
368
-      }
369
-    }
370
-}
371
-
372
-def addSigningProps(propsFilePath, signingConfig) {
373
-    def propsFile = file(propsFilePath)
374
-    def props = new Properties()
375
-    propsFile.withReader { reader ->
376
-        props.load(reader)
377
-    }
378
-
379
-    def storeFile = new File(props.get('key.store') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'storeFile'))
380
-    if (!storeFile.isAbsolute()) {
381
-        storeFile = RelativePath.parse(true, storeFile.toString()).getFile(propsFile.getParentFile())
382
-    }
383
-    if (!storeFile.exists()) {
384
-        throw new FileNotFoundException('Keystore file does not exist: ' + storeFile.getAbsolutePath())
385
-    }
386
-    signingConfig.keyAlias = props.get('key.alias') ?: privateHelpers.ensureValueExists(propsFilePath, props, 'keyAlias')
387
-    signingConfig.keyPassword = props.get('keyPassword', props.get('key.alias.password', signingConfig.keyPassword))
388
-    signingConfig.storeFile = storeFile
389
-    signingConfig.storePassword = props.get('storePassword', props.get('key.store.password', signingConfig.storePassword))
390
-    def storeType = props.get('storeType', props.get('key.store.type', ''))
391
-    if (!storeType) {
392
-        def filename = storeFile.getName().toLowerCase();
393
-        if (filename.endsWith('.p12') || filename.endsWith('.pfx')) {
394
-            storeType = 'pkcs12'
395
-        } else {
396
-            storeType = signingConfig.storeType // "jks"
397
-        }
398
-    }
399
-    signingConfig.storeType = storeType
400
-}
401
-
402
-for (def func : cdvPluginPostBuildExtras) {
403
-    func()
404
-}
405
-
406
-// This can be defined within build-extras.gradle as:
407
-//     ext.postBuildExtras = { ... code here ... }
408
-if (hasProperty('postBuildExtras')) {
409
-    postBuildExtras()
410
-}
411
-
412
-if (cdvHelpers.getConfigPreference('GradlePluginGoogleServicesEnabled', 'false').toBoolean()) {
413
-    apply plugin: 'com.google.gms.google-services'
414
-}

+ 0
- 23
platforms/android/app/repositories.gradle 查看文件

@@ -1,23 +0,0 @@
1
-/* Licensed to the Apache Software Foundation (ASF) under one
2
-   or more contributor license agreements.  See the NOTICE file
3
-   distributed with this work for additional information
4
-   regarding copyright ownership.  The ASF licenses this file
5
-   to you under the Apache License, Version 2.0 (the
6
-   "License"); you may not use this file except in compliance
7
-   with the License.  You may obtain a copy of the License at
8
-
9
-     http://www.apache.org/licenses/LICENSE-2.0
10
-
11
-   Unless required by applicable law or agreed to in writing,
12
-   software distributed under the License is distributed on an
13
-   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
-   KIND, either express or implied.  See the License for the
15
-   specific language governing permissions and limitations
16
-   under the License.
17
-*/
18
-
19
-ext.repos = {
20
-    mavenCentral()
21
-    google()
22
-    jcenter()
23
-}

+ 0
- 13
platforms/android/app/src/main/AndroidManifest.xml 查看文件

@@ -1,13 +0,0 @@
1
-<?xml version='1.0' encoding='utf-8'?>
2
-<manifest android:hardwareAccelerated="true" android:versionCode="10000" android:versionName="1.0.0" package="io.cordova.hellocordova" xmlns:android="http://schemas.android.com/apk/res/android">
3
-    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
4
-    <uses-permission android:name="android.permission.INTERNET" />
5
-    <application android:hardwareAccelerated="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true">
6
-        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|smallestScreenSize|screenLayout|uiMode" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
7
-            <intent-filter android:label="@string/launcher_name">
8
-                <action android:name="android.intent.action.MAIN" />
9
-                <category android:name="android.intent.category.LAUNCHER" />
10
-            </intent-filter>
11
-        </activity>
12
-    </application>
13
-</manifest>

二进制
platforms/android/app/src/main/assets/www/.DS_Store 查看文件


+ 0
- 3
platforms/android/app/src/main/assets/www/api.py 查看文件

@@ -1,3 +0,0 @@
1
-from mysql.connector import (connection)
2
-cnx = connection.MySQLConnection(user="alejandro.alvarez5", password="QnJ3Uq=i7=", host="136.145.231.32",database="Dato_pr")
3
-cnx.close()

+ 0
- 6
platforms/android/app/src/main/assets/www/conectar.php 查看文件

@@ -1,6 +0,0 @@
1
-<?php
2
-    $mysqli = new mysqli("136.145.231.32", "alejandro.alvarez5", "QnJ3Uq=i7=", "Dato_pr");
3
-    $result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
4
-    $row = $result->fetch_assoc();
5
-    echo htmlentities($row['_message']);
6
-?>

+ 0
- 36
platforms/android/app/src/main/assets/www/cordova-js-src/android/nativeapiprovider.js 查看文件

@@ -1,36 +0,0 @@
1
-/*
2
- * Licensed to the Apache Software Foundation (ASF) under one
3
- * or more contributor license agreements.  See the NOTICE file
4
- * distributed with this work for additional information
5
- * regarding copyright ownership.  The ASF licenses this file
6
- * to you under the Apache License, Version 2.0 (the
7
- * "License"); you may not use this file except in compliance
8
- * with the License.  You may obtain a copy of the License at
9
- *
10
- *   http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing,
13
- * software distributed under the License is distributed on an
14
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
- * KIND, either express or implied.  See the License for the
16
- * specific language governing permissions and limitations
17
- * under the License.
18
-*/
19
-
20
-/**
21
- * Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi.
22
- */
23
-
24
-var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi');
25
-var currentApi = nativeApi;
26
-
27
-module.exports = {
28
-    get: function () { return currentApi; },
29
-    setPreferPrompt: function (value) {
30
-        currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi;
31
-    },
32
-    // Used only by tests.
33
-    set: function (value) {
34
-        currentApi = value;
35
-    }
36
-};

+ 0
- 35
platforms/android/app/src/main/assets/www/cordova-js-src/android/promptbasednativeapi.js 查看文件

@@ -1,35 +0,0 @@
1
-/*
2
- * Licensed to the Apache Software Foundation (ASF) under one
3
- * or more contributor license agreements.  See the NOTICE file
4
- * distributed with this work for additional information
5
- * regarding copyright ownership.  The ASF licenses this file
6
- * to you under the Apache License, Version 2.0 (the
7
- * "License"); you may not use this file except in compliance
8
- * with the License.  You may obtain a copy of the License at
9
- *
10
- *   http://www.apache.org/licenses/LICENSE-2.0
11
- *
12
- * Unless required by applicable law or agreed to in writing,
13
- * software distributed under the License is distributed on an
14
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15
- * KIND, either express or implied.  See the License for the
16
- * specific language governing permissions and limitations
17
- * under the License.
18
-*/
19
-
20
-/**
21
- * Implements the API of ExposedJsApi.java, but uses prompt() to communicate.
22
- * This is used pre-JellyBean, where addJavascriptInterface() is disabled.
23
- */
24
-
25
-module.exports = {
26
-    exec: function (bridgeSecret, service, action, callbackId, argsJson) {
27
-        return prompt(argsJson, 'gap:' + JSON.stringify([bridgeSecret, service, action, callbackId]));
28
-    },
29
-    setNativeToJsBridgeMode: function (bridgeSecret, value) {
30
-        prompt(value, 'gap_bridge_mode:' + bridgeSecret);
31
-    },
32
-    retrieveJsMessages: function (bridgeSecret, fromOnlineEvent) {
33
-        return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret);
34
-    }
35
-};

+ 0
- 287
platforms/android/app/src/main/assets/www/cordova-js-src/exec.js 查看文件

@@ -1,287 +0,0 @@
1
-/*
2
- *
3
- * Licensed to the Apache Software Foundation (ASF) under one
4
- * or more contributor license agreements.  See the NOTICE file
5
- * distributed with this work for additional information
6
- * regarding copyright ownership.  The ASF licenses this file
7
- * to you under the Apache License, Version 2.0 (the
8
- * "License"); you may not use this file except in compliance
9
- * with the License.  You may obtain a copy of the License at
10
- *
11
- *   http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing,
14
- * software distributed under the License is distributed on an
15
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
- * KIND, either express or implied.  See the License for the
17
- * specific language governing permissions and limitations
18
- * under the License.
19
- *
20
-*/
21
-
22
-/**
23
- * Execute a cordova command.  It is up to the native side whether this action
24
- * is synchronous or asynchronous.  The native side can return:
25
- *      Synchronous: PluginResult object as a JSON string
26
- *      Asynchronous: Empty string ""
27
- * If async, the native side will cordova.callbackSuccess or cordova.callbackError,
28
- * depending upon the result of the action.
29
- *
30
- * @param {Function} success    The success callback
31
- * @param {Function} fail       The fail callback
32
- * @param {String} service      The name of the service to use
33
- * @param {String} action       Action to be run in cordova
34
- * @param {String[]} [args]     Zero or more arguments to pass to the method
35
- */
36
-var cordova = require('cordova');
37
-var nativeApiProvider = require('cordova/android/nativeapiprovider');
38
-var utils = require('cordova/utils');
39
-var base64 = require('cordova/base64');
40
-var channel = require('cordova/channel');
41
-var jsToNativeModes = {
42
-    PROMPT: 0,
43
-    JS_OBJECT: 1
44
-};
45
-var nativeToJsModes = {
46
-    // Polls for messages using the JS->Native bridge.
47
-    POLLING: 0,
48
-    // For LOAD_URL to be viable, it would need to have a work-around for
49
-    // the bug where the soft-keyboard gets dismissed when a message is sent.
50
-    LOAD_URL: 1,
51
-    // For the ONLINE_EVENT to be viable, it would need to intercept all event
52
-    // listeners (both through addEventListener and window.ononline) as well
53
-    // as set the navigator property itself.
54
-    ONLINE_EVENT: 2,
55
-    EVAL_BRIDGE: 3
56
-};
57
-var jsToNativeBridgeMode; // Set lazily.
58
-var nativeToJsBridgeMode = nativeToJsModes.EVAL_BRIDGE;
59
-var pollEnabled = false;
60
-var bridgeSecret = -1;
61
-
62
-var messagesFromNative = [];
63
-var isProcessing = false;
64
-var resolvedPromise = typeof Promise === 'undefined' ? null : Promise.resolve();
65
-var nextTick = resolvedPromise ? function (fn) { resolvedPromise.then(fn); } : function (fn) { setTimeout(fn); };
66
-
67
-function androidExec (success, fail, service, action, args) {
68
-    if (bridgeSecret < 0) {
69
-        // If we ever catch this firing, we'll need to queue up exec()s
70
-        // and fire them once we get a secret. For now, I don't think
71
-        // it's possible for exec() to be called since plugins are parsed but
72
-        // not run until until after onNativeReady.
73
-        throw new Error('exec() called without bridgeSecret');
74
-    }
75
-    // Set default bridge modes if they have not already been set.
76
-    // By default, we use the failsafe, since addJavascriptInterface breaks too often
77
-    if (jsToNativeBridgeMode === undefined) {
78
-        androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT);
79
-    }
80
-
81
-    // If args is not provided, default to an empty array
82
-    args = args || [];
83
-
84
-    // Process any ArrayBuffers in the args into a string.
85
-    for (var i = 0; i < args.length; i++) {
86
-        if (utils.typeName(args[i]) === 'ArrayBuffer') {
87
-            args[i] = base64.fromArrayBuffer(args[i]);
88
-        }
89
-    }
90
-
91
-    var callbackId = service + cordova.callbackId++;
92
-    var argsJson = JSON.stringify(args);
93
-    if (success || fail) {
94
-        cordova.callbacks[callbackId] = { success: success, fail: fail };
95
-    }
96
-
97
-    var msgs = nativeApiProvider.get().exec(bridgeSecret, service, action, callbackId, argsJson);
98
-    // If argsJson was received by Java as null, try again with the PROMPT bridge mode.
99
-    // This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2.  See CB-2666.
100
-    if (jsToNativeBridgeMode === jsToNativeModes.JS_OBJECT && msgs === '@Null arguments.') {
101
-        androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT);
102
-        androidExec(success, fail, service, action, args);
103
-        androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT);
104
-    } else if (msgs) {
105
-        messagesFromNative.push(msgs);
106
-        // Always process async to avoid exceptions messing up stack.
107
-        nextTick(processMessages);
108
-    }
109
-}
110
-
111
-androidExec.init = function () {
112
-    bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode);
113
-    channel.onNativeReady.fire();
114
-};
115
-
116
-function pollOnceFromOnlineEvent () {
117
-    pollOnce(true);
118
-}
119
-
120
-function pollOnce (opt_fromOnlineEvent) {
121
-    if (bridgeSecret < 0) {
122
-        // This can happen when the NativeToJsMessageQueue resets the online state on page transitions.
123
-        // We know there's nothing to retrieve, so no need to poll.
124
-        return;
125
-    }
126
-    var msgs = nativeApiProvider.get().retrieveJsMessages(bridgeSecret, !!opt_fromOnlineEvent);
127
-    if (msgs) {
128
-        messagesFromNative.push(msgs);
129
-        // Process sync since we know we're already top-of-stack.
130
-        processMessages();
131
-    }
132
-}
133
-
134
-function pollingTimerFunc () {
135
-    if (pollEnabled) {
136
-        pollOnce();
137
-        setTimeout(pollingTimerFunc, 50);
138
-    }
139
-}
140
-
141
-function hookOnlineApis () {
142
-    function proxyEvent (e) {
143
-        cordova.fireWindowEvent(e.type);
144
-    }
145
-    // The network module takes care of firing online and offline events.
146
-    // It currently fires them only on document though, so we bridge them
147
-    // to window here (while first listening for exec()-releated online/offline
148
-    // events).
149
-    window.addEventListener('online', pollOnceFromOnlineEvent, false);
150
-    window.addEventListener('offline', pollOnceFromOnlineEvent, false);
151
-    cordova.addWindowEventHandler('online');
152
-    cordova.addWindowEventHandler('offline');
153
-    document.addEventListener('online', proxyEvent, false);
154
-    document.addEventListener('offline', proxyEvent, false);
155
-}
156
-
157
-hookOnlineApis();
158
-
159
-androidExec.jsToNativeModes = jsToNativeModes;
160
-androidExec.nativeToJsModes = nativeToJsModes;
161
-
162
-androidExec.setJsToNativeBridgeMode = function (mode) {
163
-    if (mode === jsToNativeModes.JS_OBJECT && !window._cordovaNative) {
164
-        mode = jsToNativeModes.PROMPT;
165
-    }
166
-    nativeApiProvider.setPreferPrompt(mode === jsToNativeModes.PROMPT);
167
-    jsToNativeBridgeMode = mode;
168
-};
169
-
170
-androidExec.setNativeToJsBridgeMode = function (mode) {
171
-    if (mode === nativeToJsBridgeMode) {
172
-        return;
173
-    }
174
-    if (nativeToJsBridgeMode === nativeToJsModes.POLLING) {
175
-        pollEnabled = false;
176
-    }
177
-
178
-    nativeToJsBridgeMode = mode;
179
-    // Tell the native side to switch modes.
180
-    // Otherwise, it will be set by androidExec.init()
181
-    if (bridgeSecret >= 0) {
182
-        nativeApiProvider.get().setNativeToJsBridgeMode(bridgeSecret, mode);
183
-    }
184
-
185
-    if (mode === nativeToJsModes.POLLING) {
186
-        pollEnabled = true;
187
-        setTimeout(pollingTimerFunc, 1);
188
-    }
189
-};
190
-
191
-function buildPayload (payload, message) {
192
-    var payloadKind = message.charAt(0);
193
-    if (payloadKind === 's') {
194
-        payload.push(message.slice(1));
195
-    } else if (payloadKind === 't') {
196
-        payload.push(true);
197
-    } else if (payloadKind === 'f') {
198
-        payload.push(false);
199
-    } else if (payloadKind === 'N') {
200
-        payload.push(null);
201
-    } else if (payloadKind === 'n') {
202
-        payload.push(+message.slice(1));
203
-    } else if (payloadKind === 'A') {
204
-        var data = message.slice(1);
205
-        payload.push(base64.toArrayBuffer(data));
206
-    } else if (payloadKind === 'S') {
207
-        payload.push(window.atob(message.slice(1)));
208
-    } else if (payloadKind === 'M') {
209
-        var multipartMessages = message.slice(1);
210
-        while (multipartMessages !== '') {
211
-            var spaceIdx = multipartMessages.indexOf(' ');
212
-            var msgLen = +multipartMessages.slice(0, spaceIdx);
213
-            var multipartMessage = multipartMessages.substr(spaceIdx + 1, msgLen);
214
-            multipartMessages = multipartMessages.slice(spaceIdx + msgLen + 1);
215
-            buildPayload(payload, multipartMessage);
216
-        }
217
-    } else {
218
-        payload.push(JSON.parse(message));
219
-    }
220
-}
221
-
222
-// Processes a single message, as encoded by NativeToJsMessageQueue.java.
223
-function processMessage (message) {
224
-    var firstChar = message.charAt(0);
225
-    if (firstChar === 'J') {
226
-        // This is deprecated on the .java side. It doesn't work with CSP enabled.
227
-        // eslint-disable-next-line no-eval
228
-        eval(message.slice(1));
229
-    } else if (firstChar === 'S' || firstChar === 'F') {
230
-        var success = firstChar === 'S';
231
-        var keepCallback = message.charAt(1) === '1';
232
-        var spaceIdx = message.indexOf(' ', 2);
233
-        var status = +message.slice(2, spaceIdx);
234
-        var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1);
235
-        var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx);
236
-        var payloadMessage = message.slice(nextSpaceIdx + 1);
237
-        var payload = [];
238
-        buildPayload(payload, payloadMessage);
239
-        cordova.callbackFromNative(callbackId, success, status, payload, keepCallback);
240
-    } else {
241
-        console.log('processMessage failed: invalid message: ' + JSON.stringify(message));
242
-    }
243
-}
244
-
245
-function processMessages () {
246
-    // Check for the reentrant case.
247
-    if (isProcessing) {
248
-        return;
249
-    }
250
-    if (messagesFromNative.length === 0) {
251
-        return;
252
-    }
253
-    isProcessing = true;
254
-    try {
255
-        var msg = popMessageFromQueue();
256
-        // The Java side can send a * message to indicate that it
257
-        // still has messages waiting to be retrieved.
258
-        if (msg === '*' && messagesFromNative.length === 0) {
259
-            nextTick(pollOnce);
260
-            return;
261
-        }
262
-        processMessage(msg);
263
-    } finally {
264
-        isProcessing = false;
265
-        if (messagesFromNative.length > 0) {
266
-            nextTick(processMessages);
267
-        }
268
-    }
269
-}
270
-
271
-function popMessageFromQueue () {
272
-    var messageBatch = messagesFromNative.shift();
273
-    if (messageBatch === '*') {
274
-        return '*';
275
-    }
276
-
277
-    var spaceIdx = messageBatch.indexOf(' ');
278
-    var msgLen = +messageBatch.slice(0, spaceIdx);
279
-    var message = messageBatch.substr(spaceIdx + 1, msgLen);
280
-    messageBatch = messageBatch.slice(spaceIdx + msgLen + 1);
281
-    if (messageBatch) {
282
-        messagesFromNative.unshift(messageBatch);
283
-    }
284
-    return message;
285
-}
286
-
287
-module.exports = androidExec;

+ 0
- 122
platforms/android/app/src/main/assets/www/cordova-js-src/platform.js 查看文件

@@ -1,122 +0,0 @@
1
-/*
2
- *
3
- * Licensed to the Apache Software Foundation (ASF) under one
4
- * or more contributor license agreements.  See the NOTICE file
5
- * distributed with this work for additional information
6
- * regarding copyright ownership.  The ASF licenses this file
7
- * to you under the Apache License, Version 2.0 (the
8
- * "License"); you may not use this file except in compliance
9
- * with the License.  You may obtain a copy of the License at
10
- *
11
- *   http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing,
14
- * software distributed under the License is distributed on an
15
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
- * KIND, either express or implied.  See the License for the
17
- * specific language governing permissions and limitations
18
- * under the License.
19
- *
20
-*/
21
-
22
-// The last resume event that was received that had the result of a plugin call.
23
-var lastResumeEvent = null;
24
-
25
-module.exports = {
26
-    id: 'android',
27
-    bootstrap: function () {
28
-        var channel = require('cordova/channel');
29
-        var cordova = require('cordova');
30
-        var exec = require('cordova/exec');
31
-        var modulemapper = require('cordova/modulemapper');
32
-
33
-        // Get the shared secret needed to use the bridge.
34
-        exec.init();
35
-
36
-        // TODO: Extract this as a proper plugin.
37
-        modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app');
38
-
39
-        var APP_PLUGIN_NAME = Number(cordova.platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App';
40
-
41
-        // Inject a listener for the backbutton on the document.
42
-        var backButtonChannel = cordova.addDocumentEventHandler('backbutton');
43
-        backButtonChannel.onHasSubscribersChange = function () {
44
-            // If we just attached the first handler or detached the last handler,
45
-            // let native know we need to override the back button.
46
-            exec(null, null, APP_PLUGIN_NAME, 'overrideBackbutton', [this.numHandlers === 1]);
47
-        };
48
-
49
-        // Add hardware MENU and SEARCH button handlers
50
-        cordova.addDocumentEventHandler('menubutton');
51
-        cordova.addDocumentEventHandler('searchbutton');
52
-
53
-        function bindButtonChannel (buttonName) {
54
-            // generic button bind used for volumeup/volumedown buttons
55
-            var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button');
56
-            volumeButtonChannel.onHasSubscribersChange = function () {
57
-                exec(null, null, APP_PLUGIN_NAME, 'overrideButton', [buttonName, this.numHandlers === 1]);
58
-            };
59
-        }
60
-        // Inject a listener for the volume buttons on the document.
61
-        bindButtonChannel('volumeup');
62
-        bindButtonChannel('volumedown');
63
-
64
-        // The resume event is not "sticky", but it is possible that the event
65
-        // will contain the result of a plugin call. We need to ensure that the
66
-        // plugin result is delivered even after the event is fired (CB-10498)
67
-        var cordovaAddEventListener = document.addEventListener;
68
-
69
-        document.addEventListener = function (evt, handler, capture) {
70
-            cordovaAddEventListener(evt, handler, capture);
71
-
72
-            if (evt === 'resume' && lastResumeEvent) {
73
-                handler(lastResumeEvent);
74
-            }
75
-        };
76
-
77
-        // Let native code know we are all done on the JS side.
78
-        // Native code will then un-hide the WebView.
79
-        channel.onCordovaReady.subscribe(function () {
80
-            exec(onMessageFromNative, null, APP_PLUGIN_NAME, 'messageChannel', []);
81
-            exec(null, null, APP_PLUGIN_NAME, 'show', []);
82
-        });
83
-    }
84
-};
85
-
86
-function onMessageFromNative (msg) {
87
-    var cordova = require('cordova');
88
-    var action = msg.action;
89
-
90
-    switch (action) {
91
-    // pause and resume are Android app life cycle events
92
-    case 'backbutton':
93
-    case 'menubutton':
94
-    case 'searchbutton':
95
-    case 'pause':
96
-    case 'volumedownbutton':
97
-    case 'volumeupbutton':
98
-        cordova.fireDocumentEvent(action);
99
-        break;
100
-    case 'resume':
101
-        if (arguments.length > 1 && msg.pendingResult) {
102
-            if (arguments.length === 2) {
103
-                msg.pendingResult.result = arguments[1];
104
-            } else {
105
-                // The plugin returned a multipart message
106
-                var res = [];
107
-                for (var i = 1; i < arguments.length; i++) {
108
-                    res.push(arguments[i]);
109
-                }
110
-                msg.pendingResult.result = res;
111
-            }
112
-
113
-            // Save the plugin result so that it can be delivered to the js
114
-            // even if they miss the initial firing of the event
115
-            lastResumeEvent = msg;
116
-        }
117
-        cordova.fireDocumentEvent(action, msg);
118
-        break;
119
-    default:
120
-        throw new Error('Unknown event action ' + action);
121
-    }
122
-}

+ 0
- 108
platforms/android/app/src/main/assets/www/cordova-js-src/plugin/android/app.js 查看文件

@@ -1,108 +0,0 @@
1
-/*
2
- *
3
- * Licensed to the Apache Software Foundation (ASF) under one
4
- * or more contributor license agreements.  See the NOTICE file
5
- * distributed with this work for additional information
6
- * regarding copyright ownership.  The ASF licenses this file
7
- * to you under the Apache License, Version 2.0 (the
8
- * "License"); you may not use this file except in compliance
9
- * with the License.  You may obtain a copy of the License at
10
- *
11
- *   http://www.apache.org/licenses/LICENSE-2.0
12
- *
13
- * Unless required by applicable law or agreed to in writing,
14
- * software distributed under the License is distributed on an
15
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16
- * KIND, either express or implied.  See the License for the
17
- * specific language governing permissions and limitations
18
- * under the License.
19
- *
20
-*/
21
-
22
-var exec = require('cordova/exec');
23
-var APP_PLUGIN_NAME = Number(require('cordova').platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App';
24
-
25
-module.exports = {
26
-    /**
27
-    * Clear the resource cache.
28
-    */
29
-    clearCache: function () {
30
-        exec(null, null, APP_PLUGIN_NAME, 'clearCache', []);
31
-    },
32
-
33
-    /**
34
-    * Load the url into the webview or into new browser instance.
35
-    *
36
-    * @param url           The URL to load
37
-    * @param props         Properties that can be passed in to the activity:
38
-    *      wait: int                           => wait msec before loading URL
39
-    *      loadingDialog: "Title,Message"      => display a native loading dialog
40
-    *      loadUrlTimeoutValue: int            => time in msec to wait before triggering a timeout error
41
-    *      clearHistory: boolean              => clear webview history (default=false)
42
-    *      openExternal: boolean              => open in a new browser (default=false)
43
-    *
44
-    * Example:
45
-    *      navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000});
46
-    */
47
-    loadUrl: function (url, props) {
48
-        exec(null, null, APP_PLUGIN_NAME, 'loadUrl', [url, props]);
49
-    },
50
-
51
-    /**
52
-    * Cancel loadUrl that is waiting to be loaded.
53
-    */
54
-    cancelLoadUrl: function () {
55
-        exec(null, null, APP_PLUGIN_NAME, 'cancelLoadUrl', []);
56
-    },
57
-
58
-    /**
59
-    * Clear web history in this web view.
60
-    * Instead of BACK button loading the previous web page, it will exit the app.
61
-    */
62
-    clearHistory: function () {
63
-        exec(null, null, APP_PLUGIN_NAME, 'clearHistory', []);
64
-    },
65
-
66
-    /**
67
-    * Go to previous page displayed.
68
-    * This is the same as pressing the backbutton on Android device.
69
-    */
70
-    backHistory: function () {
71
-        exec(null, null, APP_PLUGIN_NAME, 'backHistory', []);
72
-    },
73
-
74
-    /**
75
-    * Override the default behavior of the Android back button.
76
-    * If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired.
77
-    *
78
-    * Note: The user should not have to call this method.  Instead, when the user
79
-    *       registers for the "backbutton" event, this is automatically done.
80
-    *
81
-    * @param override        T=override, F=cancel override
82
-    */
83
-    overrideBackbutton: function (override) {
84
-        exec(null, null, APP_PLUGIN_NAME, 'overrideBackbutton', [override]);
85
-    },
86
-
87
-    /**
88
-    * Override the default behavior of the Android volume button.
89
-    * If overridden, when the volume button is pressed, the "volume[up|down]button"
90
-    * JavaScript event will be fired.
91
-    *
92
-    * Note: The user should not have to call this method.  Instead, when the user
93
-    *       registers for the "volume[up|down]button" event, this is automatically done.
94
-    *
95
-    * @param button          volumeup, volumedown
96
-    * @param override        T=override, F=cancel override
97
-    */
98
-    overrideButton: function (button, override) {
99
-        exec(null, null, APP_PLUGIN_NAME, 'overrideButton', [button, override]);
100
-    },
101
-
102
-    /**
103
-    * Exit and terminate the application.
104
-    */
105
-    exitApp: function () {
106
-        return exec(null, null, APP_PLUGIN_NAME, 'exitApp', []);
107
-    }
108
-};

+ 0
- 1904
platforms/android/app/src/main/assets/www/cordova.js
文件差异内容过多而无法显示
查看文件


+ 0
- 6
platforms/android/app/src/main/assets/www/cordova_plugins.js 查看文件

@@ -1,6 +0,0 @@
1
-cordova.define('cordova/plugin_list', function(require, exports, module) {
2
-  module.exports = [];
3
-  module.exports.metadata = {
4
-    "cordova-plugin-whitelist": "1.3.5"
5
-  };
6
-});

+ 0
- 3281
platforms/android/app/src/main/assets/www/css/animate.css
文件差异内容过多而无法显示
查看文件


+ 0
- 7317
platforms/android/app/src/main/assets/www/css/bootstrap.css
文件差异内容过多而无法显示
查看文件


+ 0
- 7
platforms/android/app/src/main/assets/www/css/bootstrap.css.map
文件差异内容过多而无法显示
查看文件


+ 0
- 2437
platforms/android/app/src/main/assets/www/css/icomoon.css
文件差异内容过多而无法显示
查看文件


+ 0
- 368
platforms/android/app/src/main/assets/www/css/magnific-popup.css 查看文件

@@ -1,368 +0,0 @@
1
-/* Magnific Popup CSS */
2
-.mfp-bg {
3
-  top: 0;
4
-  left: 0;
5
-  width: 100%;
6
-  height: 100%;
7
-  z-index: 1042;
8
-  overflow: hidden;
9
-  position: fixed;
10
-  background: #0b0b0b;
11
-  opacity: 0.8;
12
-  filter: alpha(opacity=80); }
13
-
14
-.mfp-wrap {
15
-  top: 0;
16
-  left: 0;
17
-  width: 100%;
18
-  height: 100%;
19
-  z-index: 1043;
20
-  position: fixed;
21
-  outline: none !important;
22
-  -webkit-backface-visibility: hidden; }
23
-
24
-.mfp-container {
25
-  text-align: center;
26
-  position: absolute;
27
-  width: 100%;
28
-  height: 100%;
29
-  left: 0;
30
-  top: 0;
31
-  padding: 0 8px;
32
-  -webkit-box-sizing: border-box;
33
-  -moz-box-sizing: border-box;
34
-  box-sizing: border-box; }
35
-
36
-.mfp-container:before {
37
-  content: '';
38
-  display: inline-block;
39
-  height: 100%;
40
-  vertical-align: middle; }
41
-
42
-.mfp-align-top .mfp-container:before {
43
-  display: none; }
44
-
45
-.mfp-content {
46
-  position: relative;
47
-  display: inline-block;
48
-  vertical-align: middle;
49
-  margin: 0 auto;
50
-  text-align: left;
51
-  z-index: 1045; }
52
-
53
-.mfp-inline-holder .mfp-content, .mfp-ajax-holder .mfp-content {
54
-  width: 100%;
55
-  cursor: auto; }
56
-
57
-.mfp-ajax-cur {
58
-  cursor: progress; }
59
-
60
-.mfp-zoom-out-cur, .mfp-zoom-out-cur .mfp-image-holder .mfp-close {
61
-  cursor: -moz-zoom-out;
62
-  cursor: -webkit-zoom-out;
63
-  cursor: zoom-out; }
64
-
65
-.mfp-zoom {
66
-  cursor: pointer;
67
-  cursor: -webkit-zoom-in;
68
-  cursor: -moz-zoom-in;
69
-  cursor: zoom-in; }
70
-
71
-.mfp-auto-cursor .mfp-content {
72
-  cursor: auto; }
73
-
74
-.mfp-close, .mfp-arrow, .mfp-preloader, .mfp-counter {
75
-  -webkit-user-select: none;
76
-  -moz-user-select: none;
77
-  user-select: none; }
78
-
79
-.mfp-loading.mfp-figure {
80
-  display: none; }
81
-
82
-.mfp-hide {
83
-  display: none !important; }
84
-
85
-.mfp-preloader {
86
-  color: #cccccc;
87
-  position: absolute;
88
-  top: 50%;
89
-  width: auto;
90
-  text-align: center;
91
-  margin-top: -0.8em;
92
-  left: 8px;
93
-  right: 8px;
94
-  z-index: 1044; }
95
-  .mfp-preloader a {
96
-    color: #cccccc; }
97
-    .mfp-preloader a:hover {
98
-      color: white; }
99
-
100
-.mfp-s-ready .mfp-preloader {
101
-  display: none; }
102
-
103
-.mfp-s-error .mfp-content {
104
-  display: none; }
105
-
106
-button.mfp-close, button.mfp-arrow {
107
-  overflow: visible;
108
-  cursor: pointer;
109
-  background: transparent;
110
-  border: 0;
111
-  -webkit-appearance: none;
112
-  display: block;
113
-  outline: none;
114
-  padding: 0;
115
-  z-index: 1046;
116
-  -webkit-box-shadow: none;
117
-  box-shadow: none; }
118
-button::-moz-focus-inner {
119
-  padding: 0;
120
-  border: 0; }
121
-
122
-.mfp-close {
123
-  width: 44px;
124
-  height: 44px;
125
-  line-height: 44px;
126
-  position: absolute;
127
-  right: 0;
128
-  top: 0;
129
-  text-decoration: none;
130
-  text-align: center;
131
-  opacity: 0.65;
132
-  filter: alpha(opacity=65);
133
-  padding: 0 0 18px 10px;
134
-  color: white;
135
-  font-style: normal;
136
-  font-size: 28px;
137
-  font-family: Arial, Baskerville, monospace; }
138
-  .mfp-close:hover, .mfp-close:focus {
139
-    opacity: 1;
140
-    filter: alpha(opacity=100); }
141
-  .mfp-close:active {
142
-    top: 1px; }
143
-
144
-.mfp-close-btn-in .mfp-close {
145
-  color: #333333; }
146
-
147
-.mfp-image-holder .mfp-close, .mfp-iframe-holder .mfp-close {
148
-  color: white;
149
-  right: -6px;
150
-  text-align: right;
151
-  padding-right: 6px;
152
-  width: 100%; }
153
-
154
-.mfp-counter {
155
-  position: absolute;
156
-  top: 0;
157
-  right: 0;
158
-  color: #cccccc;
159
-  font-size: 12px;
160
-  line-height: 18px; }
161
-
162
-.mfp-arrow {
163
-  position: absolute;
164
-  opacity: 0.65;
165
-  filter: alpha(opacity=65);
166
-  margin: 0;
167
-  top: 50%;
168
-  margin-top: -55px;
169
-  padding: 0;
170
-  width: 90px;
171
-  height: 110px;
172
-  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }
173
-  .mfp-arrow:active {
174
-    margin-top: -54px; }
175
-  .mfp-arrow:hover, .mfp-arrow:focus {
176
-    opacity: 1;
177
-    filter: alpha(opacity=100); }
178
-  .mfp-arrow:before, .mfp-arrow:after, .mfp-arrow .mfp-b, .mfp-arrow .mfp-a {
179
-    content: '';
180
-    display: block;
181
-    width: 0;
182
-    height: 0;
183
-    position: absolute;
184
-    left: 0;
185
-    top: 0;
186
-    margin-top: 35px;
187
-    margin-left: 35px;
188
-    border: medium inset transparent; }
189
-  .mfp-arrow:after, .mfp-arrow .mfp-a {
190
-    border-top-width: 13px;
191
-    border-bottom-width: 13px;
192
-    top: 8px; }
193
-  .mfp-arrow:before, .mfp-arrow .mfp-b {
194
-    border-top-width: 21px;
195
-    border-bottom-width: 21px;
196
-    opacity: 0.7; }
197
-
198
-.mfp-arrow-left {
199
-  left: 0; }
200
-  .mfp-arrow-left:after, .mfp-arrow-left .mfp-a {
201
-    border-right: 17px solid white;
202
-    margin-left: 31px; }
203
-  .mfp-arrow-left:before, .mfp-arrow-left .mfp-b {
204
-    margin-left: 25px;
205
-    border-right: 27px solid #3f3f3f; }
206
-
207
-.mfp-arrow-right {
208
-  right: 0; }
209
-  .mfp-arrow-right:after, .mfp-arrow-right .mfp-a {
210
-    border-left: 17px solid white;
211
-    margin-left: 39px; }
212
-  .mfp-arrow-right:before, .mfp-arrow-right .mfp-b {
213
-    border-left: 27px solid #3f3f3f; }
214
-
215
-.mfp-iframe-holder {
216
-  padding-top: 40px;
217
-  padding-bottom: 40px; }
218
-  .mfp-iframe-holder .mfp-content {
219
-    line-height: 0;
220
-    width: 100%;
221
-    max-width: 900px; }
222
-  .mfp-iframe-holder .mfp-close {
223
-    top: -40px; }
224
-
225
-.mfp-iframe-scaler {
226
-  width: 100%;
227
-  height: 0;
228
-  overflow: hidden;
229
-  padding-top: 56.25%; }
230
-  .mfp-iframe-scaler iframe {
231
-    position: absolute;
232
-    display: block;
233
-    top: 0;
234
-    left: 0;
235
-    width: 100%;
236
-    height: 100%;
237
-    box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
238
-    background: black; }
239
-
240
-/* Main image in popup */
241
-img.mfp-img {
242
-  width: auto;
243
-  max-width: 100%;
244
-  height: auto;
245
-  display: block;
246
-  line-height: 0;
247
-  -webkit-box-sizing: border-box;
248
-  -moz-box-sizing: border-box;
249
-  box-sizing: border-box;
250
-  padding: 40px 0 40px;
251
-  margin: 0 auto; }
252
-
253
-/* The shadow behind the image */
254
-.mfp-figure {
255
-  line-height: 0; }
256
-  .mfp-figure:after {
257
-    content: '';
258
-    position: absolute;
259
-    left: 0;
260
-    top: 40px;
261
-    bottom: 40px;
262
-    display: block;
263
-    right: 0;
264
-    width: auto;
265
-    height: auto;
266
-    z-index: -1;
267
-    box-shadow: 0 0 8px rgba(0, 0, 0, 0.6);
268
-    background: #444444; }
269
-  .mfp-figure small {
270
-    color: #bdbdbd;
271
-    display: block;
272
-    font-size: 12px;
273
-    line-height: 14px; }
274
-  .mfp-figure figure {
275
-    margin: 0; }
276
-
277
-.mfp-bottom-bar {
278
-  margin-top: -36px;
279
-  position: absolute;
280
-  top: 100%;
281
-  left: 0;
282
-  width: 100%;
283
-  cursor: auto; }
284
-
285
-.mfp-title {
286
-  text-align: left;
287
-  line-height: 18px;
288
-  color: #f3f3f3;
289
-  word-wrap: break-word;
290
-  padding-right: 36px; }
291
-
292
-.mfp-image-holder .mfp-content {
293
-  max-width: 100%; }
294
-
295
-.mfp-gallery .mfp-image-holder .mfp-figure {
296
-  cursor: pointer; }
297
-
298
-@media screen and (max-width: 800px) and (orientation: landscape), screen and (max-height: 300px) {
299
-  /**
300
-       * Remove all paddings around the image on small screen
301
-       */
302
-  .mfp-img-mobile .mfp-image-holder {
303
-    padding-left: 0;
304
-    padding-right: 0; }
305
-  .mfp-img-mobile img.mfp-img {
306
-    padding: 0; }
307
-  .mfp-img-mobile .mfp-figure:after {
308
-    top: 0;
309
-    bottom: 0; }
310
-  .mfp-img-mobile .mfp-figure small {
311
-    display: inline;
312
-    margin-left: 5px; }
313
-  .mfp-img-mobile .mfp-bottom-bar {
314
-    background: rgba(0, 0, 0, 0.6);
315
-    bottom: 0;
316
-    margin: 0;
317
-    top: auto;
318
-    padding: 3px 5px;
319
-    position: fixed;
320
-    -webkit-box-sizing: border-box;
321
-    -moz-box-sizing: border-box;
322
-    box-sizing: border-box; }
323
-    .mfp-img-mobile .mfp-bottom-bar:empty {
324
-      padding: 0; }
325
-  .mfp-img-mobile .mfp-counter {
326
-    right: 5px;
327
-    top: 3px; }
328
-  .mfp-img-mobile .mfp-close {
329
-    top: 0;
330
-    right: 0;
331
-    width: 35px;
332
-    height: 35px;
333
-    line-height: 35px;
334
-    background: rgba(0, 0, 0, 0.6);
335
-    position: fixed;
336
-    text-align: center;
337
-    padding: 0; } }
338
-
339
-@media all and (max-width: 900px) {
340
-  .mfp-arrow {
341
-    -webkit-transform: scale(0.75);
342
-    transform: scale(0.75); }
343
-  .mfp-arrow-left {
344
-    -webkit-transform-origin: 0;
345
-    transform-origin: 0; }
346
-  .mfp-arrow-right {
347
-    -webkit-transform-origin: 100%;
348
-    transform-origin: 100%; }
349
-  .mfp-container {
350
-    padding-left: 6px;
351
-    padding-right: 6px; } }
352
-
353
-.mfp-ie7 .mfp-img {
354
-  padding: 0; }
355
-.mfp-ie7 .mfp-bottom-bar {
356
-  width: 600px;
357
-  left: 50%;
358
-  margin-left: -300px;
359
-  margin-top: 5px;
360
-  padding-bottom: 5px; }
361
-.mfp-ie7 .mfp-container {
362
-  padding: 0; }
363
-.mfp-ie7 .mfp-content {
364
-  padding-top: 44px; }
365
-.mfp-ie7 .mfp-close {
366
-  top: 0;
367
-  right: 0;
368
-  padding-top: 0; }

+ 0
- 758
platforms/android/app/src/main/assets/www/css/simple-line-icons.css 查看文件

@@ -1,758 +0,0 @@
1
-@font-face {
2
-  font-family: 'simple-line-icons';
3
-  src:  url('../fonts/simple-line-icons/Simple-Line-Icons.eot?v=2.2.2');
4
-  src:  url('../fonts/simple-line-icons/Simple-Line-Icons.eot?#iefix&v=2.2.2') format('embedded-opentype'),
5
-        url('../fonts/simple-line-icons/Simple-Line-Icons.ttf?v=2.2.2') format('truetype'),
6
-        url('../fonts/simple-line-icons/Simple-Line-Icons.woff2?v=2.2.2') format('woff2'),
7
-        url('../fonts/simple-line-icons/Simple-Line-Icons.woff?v=2.2.2') format('woff'),
8
-        url('../fonts/simple-line-icons/Simple-Line-Icons.svg?v=2.2.2#simple-line-icons') format('svg');
9
-  font-weight: normal;
10
-  font-style: normal;
11
-}
12
-/*
13
- Use the following CSS code if you want to have a class per icon.
14
- Instead of a list of all class selectors, you can use the generic [class*="icon-"] selector, but it's slower:
15
-*/
16
-.icon-user,
17
-.icon-people,
18
-.icon-user-female,
19
-.icon-user-follow,
20
-.icon-user-following,
21
-.icon-user-unfollow,
22
-.icon-login,
23
-.icon-logout,
24
-.icon-emotsmile,
25
-.icon-phone,
26
-.icon-call-end,
27
-.icon-call-in,
28
-.icon-call-out,
29
-.icon-map,
30
-.icon-location-pin,
31
-.icon-direction,
32
-.icon-directions,
33
-.icon-compass,
34
-.icon-layers,
35
-.icon-menu,
36
-.icon-list,
37
-.icon-options-vertical,
38
-.icon-options,
39
-.icon-arrow-down,
40
-.icon-arrow-left,
41
-.icon-arrow-right,
42
-.icon-arrow-up,
43
-.icon-arrow-up-circle,
44
-.icon-arrow-left-circle,
45
-.icon-arrow-right-circle,
46
-.icon-arrow-down-circle,
47
-.icon-check,
48
-.icon-clock,
49
-.icon-plus,
50
-.icon-close,
51
-.icon-trophy,
52
-.icon-screen-smartphone,
53
-.icon-screen-desktop,
54
-.icon-plane,
55
-.icon-notebook,
56
-.icon-mustache,
57
-.icon-mouse,
58
-.icon-magnet,
59
-.icon-energy,
60
-.icon-disc,
61
-.icon-cursor,
62
-.icon-cursor-move,
63
-.icon-crop,
64
-.icon-chemistry,
65
-.icon-speedometer,
66
-.icon-shield,
67
-.icon-screen-tablet,
68
-.icon-magic-wand,
69
-.icon-hourglass,
70
-.icon-graduation,
71
-.icon-ghost,
72
-.icon-game-controller,
73
-.icon-fire,
74
-.icon-eyeglass,
75
-.icon-envelope-open,
76
-.icon-envelope-letter,
77
-.icon-bell,
78
-.icon-badge,
79
-.icon-anchor,
80
-.icon-wallet,
81
-.icon-vector,
82
-.icon-speech,
83
-.icon-puzzle,
84
-.icon-printer,
85
-.icon-present,
86
-.icon-playlist,
87
-.icon-pin,
88
-.icon-picture,
89
-.icon-handbag,
90
-.icon-globe-alt,
91
-.icon-globe,
92
-.icon-folder-alt,
93
-.icon-folder,
94
-.icon-film,
95
-.icon-feed,
96
-.icon-drop,
97
-.icon-drawar,
98
-.icon-docs,
99
-.icon-doc,
100
-.icon-diamond,
101
-.icon-cup,
102
-.icon-calculator,
103
-.icon-bubbles,
104
-.icon-briefcase,
105
-.icon-book-open,
106
-.icon-basket-loaded,
107
-.icon-basket,
108
-.icon-bag,
109
-.icon-action-undo,
110
-.icon-action-redo,
111
-.icon-wrench,
112
-.icon-umbrella,
113
-.icon-trash,
114
-.icon-tag,
115
-.icon-support,
116
-.icon-frame,
117
-.icon-size-fullscreen,
118
-.icon-size-actual,
119
-.icon-shuffle,
120
-.icon-share-alt,
121
-.icon-share,
122
-.icon-rocket,
123
-.icon-question,
124
-.icon-pie-chart,
125
-.icon-pencil,
126
-.icon-note,
127
-.icon-loop,
128
-.icon-home,
129
-.icon-grid,
130
-.icon-graph,
131
-.icon-microphone,
132
-.icon-music-tone-alt,
133
-.icon-music-tone,
134
-.icon-earphones-alt,
135
-.icon-earphones,
136
-.icon-equalizer,
137
-.icon-like,
138
-.icon-dislike,
139
-.icon-control-start,
140
-.icon-control-rewind,
141
-.icon-control-play,
142
-.icon-control-pause,
143
-.icon-control-forward,
144
-.icon-control-end,
145
-.icon-volume-1,
146
-.icon-volume-2,
147
-.icon-volume-off,
148
-.icon-calendar,
149
-.icon-bulb,
150
-.icon-chart,
151
-.icon-ban,
152
-.icon-bubble,
153
-.icon-camrecorder,
154
-.icon-camera,
155
-.icon-cloud-download,
156
-.icon-cloud-upload,
157
-.icon-envelope,
158
-.icon-eye,
159
-.icon-flag,
160
-.icon-heart,
161
-.icon-info,
162
-.icon-key,
163
-.icon-link,
164
-.icon-lock,
165
-.icon-lock-open,
166
-.icon-magnifier,
167
-.icon-magnifier-add,
168
-.icon-magnifier-remove,
169
-.icon-paper-clip,
170
-.icon-paper-plane,
171
-.icon-power,
172
-.icon-refresh,
173
-.icon-reload,
174
-.icon-settings,
175
-.icon-star,
176
-.icon-symble-female,
177
-.icon-symbol-male,
178
-.icon-target,
179
-.icon-credit-card,
180
-.icon-paypal,
181
-.icon-social-tumblr,
182
-.icon-social-twitter,
183
-.icon-social-facebook,
184
-.icon-social-instagram,
185
-.icon-social-linkedin,
186
-.icon-social-pinterest,
187
-.icon-social-github,
188
-.icon-social-gplus,
189
-.icon-social-reddit,
190
-.icon-social-skype,
191
-.icon-social-dribbble,
192
-.icon-social-behance,
193
-.icon-social-foursqare,
194
-.icon-social-soundcloud,
195
-.icon-social-spotify,
196
-.icon-social-stumbleupon,
197
-.icon-social-youtube,
198
-.icon-social-dropbox {
199
-  font-family: 'simple-line-icons';
200
-  speak: none;
201
-  font-style: normal;
202
-  font-weight: normal;
203
-  font-variant: normal;
204
-  text-transform: none;
205
-  line-height: 1;
206
-  /* Better Font Rendering =========== */
207
-  -webkit-font-smoothing: antialiased;
208
-  -moz-osx-font-smoothing: grayscale;
209
-}
210
-.icon-user:before {
211
-  content: "\e005";
212
-}
213
-.icon-people:before {
214
-  content: "\e001";
215
-}
216
-.icon-user-female:before {
217
-  content: "\e000";
218
-}
219
-.icon-user-follow:before {
220
-  content: "\e002";
221
-}
222
-.icon-user-following:before {
223
-  content: "\e003";
224
-}
225
-.icon-user-unfollow:before {
226
-  content: "\e004";
227
-}
228
-.icon-login:before {
229
-  content: "\e066";
230
-}
231
-.icon-logout:before {
232
-  content: "\e065";
233
-}
234
-.icon-emotsmile:before {
235
-  content: "\e021";
236
-}
237
-.icon-phone:before {
238
-  content: "\e600";
239
-}
240
-.icon-call-end:before {
241
-  content: "\e048";
242
-}
243
-.icon-call-in:before {
244
-  content: "\e047";
245
-}
246
-.icon-call-out:before {
247
-  content: "\e046";
248
-}
249
-.icon-map:before {
250
-  content: "\e033";
251
-}
252
-.icon-location-pin:before {
253
-  content: "\e096";
254
-}
255
-.icon-direction:before {
256
-  content: "\e042";
257
-}
258
-.icon-directions:before {
259
-  content: "\e041";
260
-}
261
-.icon-compass:before {
262
-  content: "\e045";
263
-}
264
-.icon-layers:before {
265
-  content: "\e034";
266
-}
267
-.icon-menu:before {
268
-  content: "\e601";
269
-}
270
-.icon-list:before {
271
-  content: "\e067";
272
-}
273
-.icon-options-vertical:before {
274
-  content: "\e602";
275
-}
276
-.icon-options:before {
277
-  content: "\e603";
278
-}
279
-.icon-arrow-down:before {
280
-  content: "\e604";
281
-}
282
-.icon-arrow-left:before {
283
-  content: "\e605";
284
-}
285
-.icon-arrow-right:before {
286
-  content: "\e606";
287
-}
288
-.icon-arrow-up:before {
289
-  content: "\e607";
290
-}
291
-.icon-arrow-up-circle:before {
292
-  content: "\e078";
293
-}
294
-.icon-arrow-left-circle:before {
295
-  content: "\e07a";
296
-}
297
-.icon-arrow-right-circle:before {
298
-  content: "\e079";
299
-}
300
-.icon-arrow-down-circle:before {
301
-  content: "\e07b";
302
-}
303
-.icon-check:before {
304
-  content: "\e080";
305
-}
306
-.icon-clock:before {
307
-  content: "\e081";
308
-}
309
-.icon-plus:before {
310
-  content: "\e095";
311
-}
312
-.icon-close:before {
313
-  content: "\e082";
314
-}
315
-.icon-trophy:before {
316
-  content: "\e006";
317
-}
318
-.icon-screen-smartphone:before {
319
-  content: "\e010";
320
-}
321
-.icon-screen-desktop:before {
322
-  content: "\e011";
323
-}
324
-.icon-plane:before {
325
-  content: "\e012";
326
-}
327
-.icon-notebook:before {
328
-  content: "\e013";
329
-}
330
-.icon-mustache:before {
331
-  content: "\e014";
332
-}
333
-.icon-mouse:before {
334
-  content: "\e015";
335
-}
336
-.icon-magnet:before {
337
-  content: "\e016";
338
-}
339
-.icon-energy:before {
340
-  content: "\e020";
341
-}
342
-.icon-disc:before {
343
-  content: "\e022";
344
-}
345
-.icon-cursor:before {
346
-  content: "\e06e";
347
-}
348
-.icon-cursor-move:before {
349
-  content: "\e023";
350
-}
351
-.icon-crop:before {
352
-  content: "\e024";
353
-}
354
-.icon-chemistry:before {
355
-  content: "\e026";
356
-}
357
-.icon-speedometer:before {
358
-  content: "\e007";
359
-}
360
-.icon-shield:before {
361
-  content: "\e00e";
362
-}
363
-.icon-screen-tablet:before {
364
-  content: "\e00f";
365
-}
366
-.icon-magic-wand:before {
367
-  content: "\e017";
368
-}
369
-.icon-hourglass:before {
370
-  content: "\e018";
371
-}
372
-.icon-graduation:before {
373
-  content: "\e019";
374
-}
375
-.icon-ghost:before {
376
-  content: "\e01a";
377
-}
378
-.icon-game-controller:before {
379
-  content: "\e01b";
380
-}
381
-.icon-fire:before {
382
-  content: "\e01c";
383
-}
384
-.icon-eyeglass:before {
385
-  content: "\e01d";
386
-}
387
-.icon-envelope-open:before {
388
-  content: "\e01e";
389
-}
390
-.icon-envelope-letter:before {
391
-  content: "\e01f";
392
-}
393
-.icon-bell:before {
394
-  content: "\e027";
395
-}
396
-.icon-badge:before {
397
-  content: "\e028";
398
-}
399
-.icon-anchor:before {
400
-  content: "\e029";
401
-}
402
-.icon-wallet:before {
403
-  content: "\e02a";
404
-}
405
-.icon-vector:before {
406
-  content: "\e02b";
407
-}
408
-.icon-speech:before {
409
-  content: "\e02c";
410
-}
411
-.icon-puzzle:before {
412
-  content: "\e02d";
413
-}
414
-.icon-printer:before {
415
-  content: "\e02e";
416
-}
417
-.icon-present:before {
418
-  content: "\e02f";
419
-}
420
-.icon-playlist:before {
421
-  content: "\e030";
422
-}
423
-.icon-pin:before {
424
-  content: "\e031";
425
-}
426
-.icon-picture:before {
427
-  content: "\e032";
428
-}
429
-.icon-handbag:before {
430
-  content: "\e035";
431
-}
432
-.icon-globe-alt:before {
433
-  content: "\e036";
434
-}
435
-.icon-globe:before {
436
-  content: "\e037";
437
-}
438
-.icon-folder-alt:before {
439
-  content: "\e039";
440
-}
441
-.icon-folder:before {
442
-  content: "\e089";
443
-}
444
-.icon-film:before {
445
-  content: "\e03a";
446
-}
447
-.icon-feed:before {
448
-  content: "\e03b";
449
-}
450
-.icon-drop:before {
451
-  content: "\e03e";
452
-}
453
-.icon-drawar:before {
454
-  content: "\e03f";
455
-}
456
-.icon-docs:before {
457
-  content: "\e040";
458
-}
459
-.icon-doc:before {
460
-  content: "\e085";
461
-}
462
-.icon-diamond:before {
463
-  content: "\e043";
464
-}
465
-.icon-cup:before {
466
-  content: "\e044";
467
-}
468
-.icon-calculator:before {
469
-  content: "\e049";
470
-}
471
-.icon-bubbles:before {
472
-  content: "\e04a";
473
-}
474
-.icon-briefcase:before {
475
-  content: "\e04b";
476
-}
477
-.icon-book-open:before {
478
-  content: "\e04c";
479
-}
480
-.icon-basket-loaded:before {
481
-  content: "\e04d";
482
-}
483
-.icon-basket:before {
484
-  content: "\e04e";
485
-}
486
-.icon-bag:before {
487
-  content: "\e04f";
488
-}
489
-.icon-action-undo:before {
490
-  content: "\e050";
491
-}
492
-.icon-action-redo:before {
493
-  content: "\e051";
494
-}
495
-.icon-wrench:before {
496
-  content: "\e052";
497
-}
498
-.icon-umbrella:before {
499
-  content: "\e053";
500
-}
501
-.icon-trash:before {
502
-  content: "\e054";
503
-}
504
-.icon-tag:before {
505
-  content: "\e055";
506
-}
507
-.icon-support:before {
508
-  content: "\e056";
509
-}
510
-.icon-frame:before {
511
-  content: "\e038";
512
-}
513
-.icon-size-fullscreen:before {
514
-  content: "\e057";
515
-}
516
-.icon-size-actual:before {
517
-  content: "\e058";
518
-}
519
-.icon-shuffle:before {
520
-  content: "\e059";
521
-}
522
-.icon-share-alt:before {
523
-  content: "\e05a";
524
-}
525
-.icon-share:before {
526
-  content: "\e05b";
527
-}
528
-.icon-rocket:before {
529
-  content: "\e05c";
530
-}
531
-.icon-question:before {
532
-  content: "\e05d";
533
-}
534
-.icon-pie-chart:before {
535
-  content: "\e05e";
536
-}
537
-.icon-pencil:before {
538
-  content: "\e05f";
539
-}
540
-.icon-note:before {
541
-  content: "\e060";
542
-}
543
-.icon-loop:before {
544
-  content: "\e064";
545
-}
546
-.icon-home:before {
547
-  content: "\e069";
548
-}
549
-.icon-grid:before {
550
-  content: "\e06a";
551
-}
552
-.icon-graph:before {
553
-  content: "\e06b";
554
-}
555
-.icon-microphone:before {
556
-  content: "\e063";
557
-}
558
-.icon-music-tone-alt:before {
559
-  content: "\e061";
560
-}
561
-.icon-music-tone:before {
562
-  content: "\e062";
563
-}
564
-.icon-earphones-alt:before {
565
-  content: "\e03c";
566
-}
567
-.icon-earphones:before {
568
-  content: "\e03d";
569
-}
570
-.icon-equalizer:before {
571
-  content: "\e06c";
572
-}
573
-.icon-like:before {
574
-  content: "\e068";
575
-}
576
-.icon-dislike:before {
577
-  content: "\e06d";
578
-}
579
-.icon-control-start:before {
580
-  content: "\e06f";
581
-}
582
-.icon-control-rewind:before {
583
-  content: "\e070";
584
-}
585
-.icon-control-play:before {
586
-  content: "\e071";
587
-}
588
-.icon-control-pause:before {
589
-  content: "\e072";
590
-}
591
-.icon-control-forward:before {
592
-  content: "\e073";
593
-}
594
-.icon-control-end:before {
595
-  content: "\e074";
596
-}
597
-.icon-volume-1:before {
598
-  content: "\e09f";
599
-}
600
-.icon-volume-2:before {
601
-  content: "\e0a0";
602
-}
603
-.icon-volume-off:before {
604
-  content: "\e0a1";
605
-}
606
-.icon-calendar:before {
607
-  content: "\e075";
608
-}
609
-.icon-bulb:before {
610
-  content: "\e076";
611
-}
612
-.icon-chart:before {
613
-  content: "\e077";
614
-}
615
-.icon-ban:before {
616
-  content: "\e07c";
617
-}
618
-.icon-bubble:before {
619
-  content: "\e07d";
620
-}
621
-.icon-camrecorder:before {
622
-  content: "\e07e";
623
-}
624
-.icon-camera:before {
625
-  content: "\e07f";
626
-}
627
-.icon-cloud-download:before {
628
-  content: "\e083";
629
-}
630
-.icon-cloud-upload:before {
631
-  content: "\e084";
632
-}
633
-.icon-envelope:before {
634
-  content: "\e086";
635
-}
636
-.icon-eye:before {
637
-  content: "\e087";
638
-}
639
-.icon-flag:before {
640
-  content: "\e088";
641
-}
642
-.icon-heart:before {
643
-  content: "\e08a";
644
-}
645
-.icon-info:before {
646
-  content: "\e08b";
647
-}
648
-.icon-key:before {
649
-  content: "\e08c";
650
-}
651
-.icon-link:before {
652
-  content: "\e08d";
653
-}
654
-.icon-lock:before {
655
-  content: "\e08e";
656
-}
657
-.icon-lock-open:before {
658
-  content: "\e08f";
659
-}
660
-.icon-magnifier:before {
661
-  content: "\e090";
662
-}
663
-.icon-magnifier-add:before {
664
-  content: "\e091";
665
-}
666
-.icon-magnifier-remove:before {
667
-  content: "\e092";
668
-}
669
-.icon-paper-clip:before {
670
-  content: "\e093";
671
-}
672
-.icon-paper-plane:before {
673
-  content: "\e094";
674
-}
675
-.icon-power:before {
676
-  content: "\e097";
677
-}
678
-.icon-refresh:before {
679
-  content: "\e098";
680
-}
681
-.icon-reload:before {
682
-  content: "\e099";
683
-}
684
-.icon-settings:before {
685
-  content: "\e09a";
686
-}
687
-.icon-star:before {
688
-  content: "\e09b";
689
-}
690
-.icon-symble-female:before {
691
-  content: "\e09c";
692
-}
693
-.icon-symbol-male:before {
694
-  content: "\e09d";
695
-}
696
-.icon-target:before {
697
-  content: "\e09e";
698
-}
699
-.icon-credit-card:before {
700
-  content: "\e025";
701
-}
702
-.icon-paypal:before {
703
-  content: "\e608";
704
-}
705
-.icon-social-tumblr:before {
706
-  content: "\e00a";
707
-}
708
-.icon-social-twitter:before {
709
-  content: "\e009";
710
-}
711
-.icon-social-facebook:before {
712
-  content: "\e00b";
713
-}
714
-.icon-social-instagram:before {
715
-  content: "\e609";
716
-}
717
-.icon-social-linkedin:before {
718
-  content: "\e60a";
719
-}
720
-.icon-social-pinterest:before {
721
-  content: "\e60b";
722
-}
723
-.icon-social-github:before {
724
-  content: "\e60c";
725
-}
726
-.icon-social-gplus:before {
727
-  content: "\e60d";
728
-}
729
-.icon-social-reddit:before {
730
-  content: "\e60e";
731
-}
732
-.icon-social-skype:before {
733
-  content: "\e60f";
734
-}
735
-.icon-social-dribbble:before {
736
-  content: "\e00d";
737
-}
738
-.icon-social-behance:before {
739
-  content: "\e610";
740
-}
741
-.icon-social-foursqare:before {
742
-  content: "\e611";
743
-}
744
-.icon-social-soundcloud:before {
745
-  content: "\e612";
746
-}
747
-.icon-social-spotify:before {
748
-  content: "\e613";
749
-}
750
-.icon-social-stumbleupon:before {
751
-  content: "\e614";
752
-}
753
-.icon-social-youtube:before {
754
-  content: "\e008";
755
-}
756
-.icon-social-dropbox:before {
757
-  content: "\e00c";
758
-}

+ 0
- 942
platforms/android/app/src/main/assets/www/css/style.css 查看文件

@@ -1,942 +0,0 @@
1
-@font-face {
2
-  font-family: 'icomoon';
3
-  src: url("../fonts/icomoon/icomoon.eot?srf3rx");
4
-  src: url("../fonts/icomoon/icomoon.eot?srf3rx#iefix") format("embedded-opentype"), url("../fonts/icomoon/icomoon.ttf?srf3rx") format("truetype"), url("../fonts/icomoon/icomoon.woff?srf3rx") format("woff"), url("../fonts/icomoon/icomoon.svg?srf3rx#icomoon") format("svg");
5
-  font-weight: normal;
6
-  font-style: normal;
7
-}
8
-
9
-body {
10
-  font-family: "Inconsolata", Arial, sans-serif;
11
-  font-weight: 300;
12
-  font-size: 20px;
13
-  line-height: 1.5;
14
-  color: #cccccc;
15
-  background: #000;
16
-  height: 100%;
17
-  position: relative;
18
-}
19
-
20
-a {
21
-  color: #8C7676;
22
-  -webkit-transition: 0.5s;
23
-  -o-transition: 0.5s;
24
-  transition: 0.5s;
25
-}
26
-a:hover, a:active, a:focus {
27
-  color: #8C7676;
28
-  outline: none;
29
-}
30
-
31
-p {
32
-  margin-bottom: 1.5em;
33
-  font-size: 16px;
34
-}
35
-
36
-h1, h2, h3, h4, h5, h6 {
37
-  color: #fff;
38
-  font-family: "Inconsolata", Arial, sans-serif;
39
-  font-weight: 400;
40
-  margin: 0 0 30px 0;
41
-}
42
-
43
-::-webkit-selection {
44
-  color: #fff;
45
-  background: #8C7676;
46
-}
47
-
48
-::-moz-selection {
49
-  color: #fff;
50
-  background: #8C7676;
51
-}
52
-
53
-::selection {
54
-  color: #fff;
55
-  background: #8C7676;
56
-}
57
-
58
-.navbar-collapse {
59
-  border: none !important;
60
-}
61
-
62
-#fh5co-header {
63
-  position: absolute;
64
-  z-index: 999999;
65
-  width: 100%;
66
-  opacity: 1;
67
-  top: 0;
68
-  float: left;
69
-}
70
-#fh5co-header .navbar {
71
-  padding-bottom: 0;
72
-  margin-bottom: 0;
73
-  display: table;
74
-}
75
-#fh5co-header #navbar {
76
-  display: table-cell;
77
-  vertical-align: middle;
78
-}
79
-#fh5co-header #navbar li {
80
-  width: 16px;
81
-  height: 16px;
82
-  display: block !important;
83
-  margin: 15px 0;
84
-  clear: both;
85
-  -webkit-border-radius: 50%;
86
-  -moz-border-radius: 50%;
87
-  -ms-border-radius: 50%;
88
-  border-radius: 50%;
89
-}
90
-@media screen and (max-width: 768px) {
91
-  #fh5co-header #navbar li {
92
-    margin-left: 10px !important;
93
-  }
94
-}
95
-#fh5co-header #navbar li a {
96
-  font-family: "Inconsolata", Arial, sans-serif;
97
-  background: rgba(255, 255, 255, 0.2);
98
-  position: relative;
99
-  font-size: 16px;
100
-  font-weight: 400;
101
-  margin: 0 auto;
102
-  width: 12px;
103
-  height: 12px !important;
104
-  text-indent: -999999px;
105
-  padding: 0;
106
-  -webkit-border-radius: 50%;
107
-  -moz-border-radius: 50%;
108
-  -ms-border-radius: 50%;
109
-  border-radius: 50%;
110
-}
111
-#fh5co-header #navbar li a span {
112
-  position: relative;
113
-  display: block;
114
-  padding-bottom: 2px;
115
-}
116
-#fh5co-header #navbar li a:hover {
117
-  color: #000;
118
-}
119
-#fh5co-header #navbar li a:hover span:before {
120
-  visibility: visible;
121
-  -webkit-transform: scaleX(1);
122
-  -moz-transform: scaleX(1);
123
-  -ms-transform: scaleX(1);
124
-  -o-transform: scaleX(1);
125
-  transform: scaleX(1);
126
-}
127
-#fh5co-header #navbar li.active {
128
-  width: 16px;
129
-  height: 16px;
130
-  background: #fff;
131
-}
132
-#fh5co-header #navbar li.active a {
133
-  background: #000;
134
-  background: none;
135
-}
136
-@media screen and (max-width: 480px) {
137
-  #fh5co-header #navbar li.active a {
138
-    color: #8C7676;
139
-  }
140
-}
141
-#fh5co-header .navbar-brand {
142
-  float: left;
143
-  display: block;
144
-  font-size: 24px;
145
-  font-weight: 700;
146
-  padding-left: 28px;
147
-  color: #535659;
148
-  text-transform: uppercase;
149
-  letter-spacing: 3px;
150
-  position: relative;
151
-}
152
-#fh5co-header .navbar-brand:after, #fh5co-header .navbar-brand:before {
153
-  content: "";
154
-  position: absolute;
155
-  display: block;
156
-  width: 24px;
157
-  height: 24px;
158
-  left: -12px;
159
-  margin-left: 0px;
160
-  bottom: 16px;
161
-  -webkit-border-radius: 50%;
162
-  -moz-border-radius: 50%;
163
-  -ms-border-radius: 50%;
164
-  border-radius: 50%;
165
-}
166
-#fh5co-header .navbar-brand:before {
167
-  left: 0px;
168
-  background: rgba(140, 118, 118, 0.8);
169
-}
170
-#fh5co-header .navbar-brand > span {
171
-  color: #8C7676;
172
-}
173
-@media screen and (max-width: 992px) {
174
-  #fh5co-header .navbar-brand {
175
-    padding-left: 55px !important;
176
-    padding-right: 0 !important;
177
-  }
178
-  #fh5co-header .navbar-brand:after, #fh5co-header .navbar-brand:before {
179
-    margin-left: 25px;
180
-  }
181
-}
182
-#fh5co-header.navbar-fixed-top {
183
-  position: fixed !important;
184
-  -webkit-box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.1);
185
-  -moz-box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.1);
186
-  -ms-box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.1);
187
-  box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.1);
188
-  margin-top: 0px;
189
-  top: 0;
190
-}
191
-#fh5co-header.navbar-fixed-top .navbar-brand {
192
-  color: #535659;
193
-}
194
-#fh5co-header.navbar-fixed-top #navbar li a {
195
-  -webkit-transition: 0.3s;
196
-  -o-transition: 0.3s;
197
-  transition: 0.3s;
198
-}
199
-#fh5co-header.navbar-fixed-top #navbar li a:hover {
200
-  color: #8C7676;
201
-}
202
-@media screen and (max-width: 992px) {
203
-  #fh5co-header.navbar-fixed-top #navbar li a {
204
-    font-size: 20px;
205
-  }
206
-}
207
-#fh5co-header.navbar-fixed-top #navbar li.active a {
208
-  color: #8C7676 !important;
209
-}
210
-@media screen and (max-width: 768px) {
211
-  #fh5co-header.navbar-fixed-top #navbar li.active a {
212
-    color: #8C7676 !important;
213
-  }
214
-}
215
-#fh5co-header.navbar-fixed-top #navbar li.active a span:before {
216
-  visibility: visible;
217
-  -webkit-transform: scaleX(1);
218
-  transform: scaleX(1);
219
-  background-color: #8C7676;
220
-}
221
-@media screen and (max-width: 768px) {
222
-  #fh5co-header.navbar-fixed-top #navbar li.active a span:before {
223
-    background-color: transparent;
224
-  }
225
-}
226
-#fh5co-header .navbar-default {
227
-  border: transparent;
228
-  background: transparent;
229
-  margin: 0;
230
-  padding-left: 50px;
231
-  padding-right: 50px;
232
-  -webkit-border-radius: 0px;
233
-  -moz-border-radius: 0px;
234
-  -ms-border-radius: 0px;
235
-  border-radius: 0px;
236
-}
237
-@media screen and (max-width: 768px) {
238
-  #fh5co-header .navbar-default {
239
-    margin-top: 0px;
240
-    padding-right: 0px;
241
-    padding-left: 0px;
242
-  }
243
-}
244
-
245
-#fh5co-home {
246
-  background-color: transparent;
247
-  background-size: cover;
248
-  position: relative;
249
-  width: 100%;
250
-  color: #fff;
251
-}
252
-@media screen and (max-width: 480px) {
253
-  #fh5co-home {
254
-    background-position: center center;
255
-    background-attachment: initial;
256
-  }
257
-}
258
-#fh5co-home a {
259
-  color: rgba(255, 255, 255, 0.8) !important;
260
-  text-decoration: underline;
261
-}
262
-#fh5co-home a:hover {
263
-  color: #fff;
264
-  text-decoration: none;
265
-}
266
-#fh5co-home .gradient {
267
-  position: absolute;
268
-  top: 0;
269
-  bottom: 0;
270
-  left: 0;
271
-  right: 0;
272
-  z-index: 2;
273
-  background: rgba(0, 0, 0, 0.3);
274
-}
275
-#fh5co-home, #fh5co-home .text-wrap {
276
-  height: 900px;
277
-}
278
-@media screen and (max-width: 768px) {
279
-  #fh5co-home, #fh5co-home .text-wrap {
280
-    height: 500px;
281
-  }
282
-}
283
-#fh5co-home .text-wrap {
284
-  display: table;
285
-  width: 100%;
286
-  position: relative;
287
-  z-index: 4;
288
-}
289
-#fh5co-home .text-inner {
290
-  display: table-cell;
291
-  vertical-align: middle;
292
-}
293
-#fh5co-home .text-inner h1 {
294
-  font-size: 60px;
295
-  color: white;
296
-  margin: 0 0 30px 0;
297
-  font-weight: 700;
298
-  line-height: 58px;
299
-}
300
-#fh5co-home .text-inner h1 span {
301
-  color: #8C7676;
302
-}
303
-@media screen and (max-width: 768px) {
304
-  #fh5co-home .text-inner h1 {
305
-    font-size: 40px;
306
-  }
307
-}
308
-#fh5co-home .text-inner h2 {
309
-  font-size: 20px;
310
-  line-height: 30px;
311
-  font-weight: 300;
312
-  color: rgba(255, 255, 255, 0.8);
313
-  margin: 0 0 60px 0;
314
-}
315
-
316
-#fh5co-services,
317
-#fh5co-explore,
318
-#fh5co-team,
319
-#fh5co-footer,
320
-#fh5co-work,
321
-#fh5co-counters,
322
-#fh5co-pricing {
323
-  padding: 8em 0;
324
-}
325
-@media screen and (max-width: 768px) {
326
-  #fh5co-services,
327
-  #fh5co-explore,
328
-  #fh5co-team,
329
-  #fh5co-footer,
330
-  #fh5co-work,
331
-  #fh5co-counters,
332
-  #fh5co-pricing {
333
-    padding: 3em 0;
334
-  }
335
-}
336
-
337
-#fh5co-services {
338
-  padding-bottom: 0;
339
-}
340
-
341
-.fh5co-explore {
342
-  padding-bottom: 40px;
343
-}
344
-
345
-.fh5co-project .project-grid {
346
-  width: 100%;
347
-  height: 800px;
348
-  background-size: cover;
349
-  background-position: center center;
350
-  position: relative;
351
-  margin-bottom: 30px;
352
-  display: table;
353
-}
354
-@media screen and (max-width: 768px) {
355
-  .fh5co-project .project-grid {
356
-    height: 400px;
357
-  }
358
-}
359
-.fh5co-project .project-grid .desc {
360
-  position: relative;
361
-  display: table-cell;
362
-  vertical-align: middle;
363
-  width: 100%;
364
-  height: 250px;
365
-  background: rgba(0, 0, 0, 0.5);
366
-  opacity: 0;
367
-  -webkit-transition: 0.3s;
368
-  -o-transition: 0.3s;
369
-  transition: 0.3s;
370
-}
371
-@media screen and (max-width: 768px) {
372
-  .fh5co-project .project-grid .desc {
373
-    opacity: 1;
374
-  }
375
-}
376
-.fh5co-project .project-grid .desc h3 {
377
-  margin-bottom: 10px;
378
-}
379
-.fh5co-project .project-grid .desc h3 a {
380
-  color: #fff;
381
-}
382
-.fh5co-project .project-grid .desc h3 a:hover, .fh5co-project .project-grid .desc h3 a:focus {
383
-  text-decoration: none;
384
-}
385
-.fh5co-project .project-grid .desc span {
386
-  font-size: 12px;
387
-  text-transform: uppercase;
388
-  color: rgba(255, 255, 255, 0.6);
389
-  letter-spacing: 2px;
390
-}
391
-.fh5co-project .project-grid .desc p {
392
-  padding: 0;
393
-}
394
-.fh5co-project .project-grid .desc p a {
395
-  padding: 0;
396
-  color: #fff;
397
-}
398
-.fh5co-project .project-grid .desc p a:hover, .fh5co-project .project-grid .desc p a:focus {
399
-  text-decoration: none;
400
-}
401
-.fh5co-project .project-grid:hover .desc {
402
-  opacity: 1;
403
-}
404
-
405
-.getting-started {
406
-  background: #8C7676;
407
-  display: -webkit-box;
408
-  display: -moz-box;
409
-  display: -ms-flexbox;
410
-  display: -webkit-flex;
411
-  display: flex;
412
-  flex-wrap: wrap;
413
-  -webkit-flex-wrap: wrap;
414
-  -moz-flex-wrap: wrap;
415
-}
416
-.getting-started .getting-grid {
417
-  background-size: cover;
418
-  background-position: center center;
419
-  position: relative;
420
-  width: 100%;
421
-  display: table;
422
-}
423
-.getting-started .getting-grid .desc {
424
-  width: 50%;
425
-  display: table-cell;
426
-  vertical-align: middle;
427
-  height: 400px;
428
-  padding: 0 3em;
429
-}
430
-.getting-started h2 {
431
-  color: #fff;
432
-  margin-bottom: 10px;
433
-}
434
-.getting-started p {
435
-  color: rgba(255, 255, 255, 0.8);
436
-}
437
-
438
-#fh5co-pricing .price-box {
439
-  border: 2px solid rgba(255, 255, 255, 0.1);
440
-  text-align: center;
441
-  padding: 30px;
442
-  -webkit-border-radius: 5px;
443
-  -moz-border-radius: 5px;
444
-  -ms-border-radius: 5px;
445
-  border-radius: 5px;
446
-  margin-bottom: 40px;
447
-  position: relative;
448
-}
449
-#fh5co-pricing .price-box.popular {
450
-  border: 2px solid #8C7676;
451
-}
452
-#fh5co-pricing .price-box.popular .popular-text {
453
-  top: 0;
454
-  left: 50%;
455
-  margin-left: -65px;
456
-  margin-top: -2em;
457
-  position: absolute;
458
-  padding: 4px 20px;
459
-  background: #8C7676;
460
-  color: #fff;
461
-  -webkit-border-radius: 4px;
462
-  -moz-border-radius: 4px;
463
-  -ms-border-radius: 4px;
464
-  border-radius: 4px;
465
-}
466
-#fh5co-pricing .price-box.popular .popular-text:after {
467
-  content: "";
468
-  position: absolute;
469
-  top: 100%;
470
-  left: 50%;
471
-  margin-left: -10px;
472
-  border-top: 10px solid black;
473
-  border-top-color: #8C7676;
474
-  border-left: 10px solid transparent;
475
-  border-right: 10px solid transparent;
476
-}
477
-#fh5co-pricing .price-box hr {
478
-  border: 1px solid #1a1a1a;
479
-}
480
-#fh5co-pricing .pricing-plan {
481
-  margin: 0;
482
-  padding: 0;
483
-  font-size: 15px;
484
-  letter-spacing: 2px;
485
-  text-transform: uppercase;
486
-  font-weight: 700;
487
-}
488
-#fh5co-pricing .price {
489
-  font-size: 50px;
490
-  color: #fff;
491
-}
492
-#fh5co-pricing .price .currency {
493
-  font-size: 20px;
494
-  top: -1.2em;
495
-}
496
-#fh5co-pricing .price small {
497
-  font-size: 16px;
498
-}
499
-#fh5co-pricing .pricing-info {
500
-  padding: 0;
501
-  margin: 0 0 30px 0;
502
-}
503
-#fh5co-pricing .pricing-info li {
504
-  padding: 0;
505
-  margin: 0;
506
-  list-style: none;
507
-  text-align: center;
508
-}
509
-
510
-.core-features {
511
-  display: -webkit-box;
512
-  display: -moz-box;
513
-  display: -ms-flexbox;
514
-  display: -webkit-flex;
515
-  display: flex;
516
-  flex-wrap: wrap;
517
-  -webkit-flex-wrap: wrap;
518
-  -moz-flex-wrap: wrap;
519
-  width: 100%;
520
-}
521
-.core-features .grid2 {
522
-  width: 50%;
523
-  background-size: cover;
524
-  background-position: center center;
525
-  position: relative;
526
-}
527
-@media screen and (max-width: 768px) {
528
-  .core-features .grid2 {
529
-    width: 100%;
530
-  }
531
-}
532
-.core-features .grid2 .core-f {
533
-  padding: 40px;
534
-}
535
-.core-features .grid2 .core-f h3 {
536
-  margin-bottom: 10px;
537
-}
538
-.core-features .grid2 .core-f .core {
539
-  margin-bottom: 2em;
540
-}
541
-.core-features .grid2 .core-f .core i {
542
-  float: left;
543
-  color: #8C7676;
544
-  font-size: 28px;
545
-}
546
-.core-features .grid2 .core-f .core .fh5co-post {
547
-  padding-left: 50px;
548
-}
549
-
550
-.fh5co-counters {
551
-  padding: 3em 0;
552
-  background-size: cover;
553
-  background-attachment: fixed;
554
-  background-position: center center;
555
-}
556
-.fh5co-counters .counter-wrap {
557
-  border: 1px solid red !important;
558
-}
559
-.fh5co-counters .fh5co-counter {
560
-  font-size: 30px;
561
-  display: block;
562
-  color: white;
563
-  font-family: "Inconsolata", Arial, sans-serif;
564
-  width: 100%;
565
-  font-weight: 400;
566
-  margin-bottom: .3em;
567
-}
568
-.fh5co-counters .fh5co-counter-label {
569
-  color: rgba(255, 255, 255, 0.5);
570
-  text-transform: uppercase;
571
-  font-size: 12px;
572
-  letter-spacing: 2px;
573
-  margin-bottom: 2em;
574
-  display: block;
575
-}
576
-
577
-#fh5co-team .team-box {
578
-  position: relative;
579
-  padding: 30px;
580
-  float: left;
581
-  width: 100%;
582
-  -webkit-box-shadow: 0px 2px 10px -1px rgba(0, 0, 0, 0.19);
583
-  -moz-box-shadow: 0px 2px 10px -1px rgba(0, 0, 0, 0.19);
584
-  -ms-box-shadow: 0px 2px 10px -1px rgba(0, 0, 0, 0.19);
585
-  -o-box-shadow: 0px 2px 10px -1px rgba(0, 0, 0, 0.19);
586
-  box-shadow: 0px 2px 10px -1px rgba(0, 0, 0, 0.19);
587
-  -webkit-border-radius: 5px;
588
-  -moz-border-radius: 5px;
589
-  -ms-border-radius: 5px;
590
-  border-radius: 5px;
591
-}
592
-@media screen and (max-width: 992px) {
593
-  #fh5co-team .team-box {
594
-    margin-bottom: 110px;
595
-  }
596
-}
597
-#fh5co-team .team-box .user {
598
-  margin: 0 auto;
599
-  margin-bottom: 20px;
600
-  width: 80%;
601
-}
602
-#fh5co-team .team-box .user img {
603
-  width: 80%;
604
-  -webkit-border-radius: 50%;
605
-  -moz-border-radius: 50%;
606
-  -ms-border-radius: 50%;
607
-  border-radius: 50%;
608
-}
609
-#fh5co-team .team-box h3 {
610
-  margin-bottom: 10px;
611
-  font-weight: 700;
612
-}
613
-#fh5co-team .team-box .position {
614
-  font-size: 16px;
615
-  color: #8f989f;
616
-  display: block;
617
-  margin-bottom: 30px;
618
-}
619
-#fh5co-team .team-box .social-media {
620
-  margin: 0;
621
-  padding: 0;
622
-}
623
-#fh5co-team .team-box .social-media li {
624
-  display: inline-block;
625
-  margin: 0;
626
-  padding: 0;
627
-  font-size: 24px;
628
-  margin-right: 10px;
629
-}
630
-#fh5co-team .team-box .social-media li a {
631
-  color: rgba(255, 255, 255, 0.8);
632
-}
633
-#fh5co-team .team-box .social-media li a:hover, #fh5co-team .team-box .social-media li a:focus, #fh5co-team .team-box .social-media li a:active {
634
-  text-decoration: none;
635
-  color: #8C7676 !important;
636
-}
637
-
638
-.section-heading {
639
-  float: left;
640
-  width: 100%;
641
-  padding-bottom: 50px;
642
-  margin-bottom: 0px;
643
-}
644
-.section-heading h2 {
645
-  margin: 0 0 20px 0;
646
-  font-size: 40px;
647
-  font-weight: 400;
648
-  position: relative;
649
-  padding-bottom: 10px;
650
-  line-height: 1.5;
651
-}
652
-@media screen and (max-width: 768px) {
653
-  .section-heading h2 {
654
-    font-size: 28px;
655
-  }
656
-}
657
-.section-heading h3 {
658
-  font-size: 18px;
659
-  font-weight: 400;
660
-  line-height: 1.5;
661
-  position: relative;
662
-  display: block;
663
-  padding-bottom: 30px;
664
-}
665
-@media screen and (max-width: 768px) {
666
-  .section-heading h3 {
667
-    font-size: 16px !important;
668
-    line-height: 28px;
669
-  }
670
-}
671
-
672
-#fh5co-footer {
673
-  color: rgba(255, 255, 255, 0.6);
674
-}
675
-#fh5co-footer a {
676
-  color: rgba(255, 255, 255, 0.6);
677
-}
678
-#fh5co-footer a:hover {
679
-  color: #fff !important;
680
-  text-decoration: underline;
681
-}
682
-#fh5co-footer .section-title {
683
-  font-size: 22px;
684
-  color: #fff;
685
-  position: relative;
686
-  padding-bottom: 20px;
687
-}
688
-#fh5co-footer .copy-right {
689
-  position: relative;
690
-  padding-top: 20px;
691
-  margin-top: 40px;
692
-}
693
-#fh5co-footer .copy-right > a {
694
-  color: rgba(255, 255, 255, 0.6);
695
-}
696
-#fh5co-footer .contact-info {
697
-  margin: 0 0 60px 0;
698
-  padding: 0;
699
-}
700
-#fh5co-footer .contact-info li {
701
-  font-size: 16px;
702
-  list-style: none;
703
-  margin: 0 0 20px 0;
704
-  position: relative;
705
-  padding-left: 40px;
706
-}
707
-#fh5co-footer .contact-info li i {
708
-  position: absolute;
709
-  top: 0;
710
-  left: 0;
711
-  font-size: 22px;
712
-  color: #8C7676;
713
-}
714
-#fh5co-footer .social-media {
715
-  margin: 0 0 30px 0;
716
-  padding: 0;
717
-}
718
-#fh5co-footer .social-media li {
719
-  display: inline-block;
720
-  margin: 0;
721
-  padding: 0;
722
-  font-size: 24px;
723
-  margin-right: 10px;
724
-}
725
-#fh5co-footer .social-media li a {
726
-  color: #8C7676;
727
-}
728
-#fh5co-footer .social-media li a:hover, #fh5co-footer .social-media li a:focus, #fh5co-footer .social-media li a:active {
729
-  text-decoration: none;
730
-}
731
-#fh5co-footer .contact-form .form-group input[type="name"],
732
-#fh5co-footer .contact-form .form-group input[type="text"],
733
-#fh5co-footer .contact-form .form-group input[type="email"],
734
-#fh5co-footer .contact-form .form-group textarea {
735
-  font-size: 16px;
736
-}
737
-#fh5co-footer .contact-form .form-group input[type="name"]::-webkit-input-placeholder,
738
-#fh5co-footer .contact-form .form-group input[type="text"]::-webkit-input-placeholder,
739
-#fh5co-footer .contact-form .form-group input[type="email"]::-webkit-input-placeholder,
740
-#fh5co-footer .contact-form .form-group textarea::-webkit-input-placeholder {
741
-  color: rgba(255, 255, 255, 0.5);
742
-}
743
-#fh5co-footer .contact-form .form-group input[type="name"]:-moz-placeholder,
744
-#fh5co-footer .contact-form .form-group input[type="text"]:-moz-placeholder,
745
-#fh5co-footer .contact-form .form-group input[type="email"]:-moz-placeholder,
746
-#fh5co-footer .contact-form .form-group textarea:-moz-placeholder {
747
-  /* Firefox 18- */
748
-  color: rgba(255, 255, 255, 0.5);
749
-}
750
-#fh5co-footer .contact-form .form-group input[type="name"]::-moz-placeholder,
751
-#fh5co-footer .contact-form .form-group input[type="text"]::-moz-placeholder,
752
-#fh5co-footer .contact-form .form-group input[type="email"]::-moz-placeholder,
753
-#fh5co-footer .contact-form .form-group textarea::-moz-placeholder {
754
-  /* Firefox 19+ */
755
-  color: rgba(255, 255, 255, 0.5);
756
-}
757
-#fh5co-footer .contact-form .form-group input[type="name"]:-ms-input-placeholder,
758
-#fh5co-footer .contact-form .form-group input[type="text"]:-ms-input-placeholder,
759
-#fh5co-footer .contact-form .form-group input[type="email"]:-ms-input-placeholder,
760
-#fh5co-footer .contact-form .form-group textarea:-ms-input-placeholder {
761
-  color: rgba(255, 255, 255, 0.5);
762
-}
763
-#fh5co-footer .contact-form .form-group input {
764
-  color: #fff;
765
-  background: transparent;
766
-  border: none;
767
-  background: rgba(255, 255, 255, 0.1);
768
-  box-shadow: none;
769
-}
770
-#fh5co-footer .contact-form .form-group textarea {
771
-  color: #fff;
772
-  background: transparent;
773
-  border: none;
774
-  background: rgba(255, 255, 255, 0.1);
775
-  box-shadow: none;
776
-}
777
-#fh5co-footer #btn-submit {
778
-  color: rgba(255, 255, 255, 0.9) !important;
779
-  background: #8C7676 !important;
780
-}
781
-
782
-.btn {
783
-  -webkit-transition: 0.3s;
784
-  -o-transition: 0.3s;
785
-  transition: 0.3s;
786
-}
787
-
788
-.btn {
789
-  text-transform: uppercase;
790
-  letter-spacing: 2px;
791
-  -webkit-transition: 0.3s;
792
-  -o-transition: 0.3s;
793
-  transition: 0.3s;
794
-}
795
-.btn.btn-primary {
796
-  background: #8C7676;
797
-  color: #fff;
798
-  border: none !important;
799
-  border: 2px solid transparent !important;
800
-}
801
-.btn.btn-primary:hover, .btn.btn-primary:active, .btn.btn-primary:focus {
802
-  box-shadow: none;
803
-  background: #8C7676;
804
-}
805
-.btn:hover, .btn:active, .btn:focus {
806
-  background: #393e46 !important;
807
-  color: #fff;
808
-  outline: none !important;
809
-}
810
-.btn.btn-default:hover, .btn.btn-default:focus, .btn.btn-default:active {
811
-  border-color: transparent;
812
-}
813
-
814
-.social {
815
-  padding: 0;
816
-  margin: 0;
817
-  display: inline-block;
818
-  position: relative;
819
-  width: 100%;
820
-}
821
-.social li {
822
-  list-style: none;
823
-  padding: 0;
824
-  margin: 0;
825
-  display: inline-block;
826
-}
827
-.social li a {
828
-  font-size: 16px;
829
-  display: table;
830
-  width: 40px;
831
-  height: 40px;
832
-  margin: 0 4px;
833
-}
834
-.social li a i {
835
-  display: table-cell;
836
-  vertical-align: middle;
837
-}
838
-.social li a:hover, .social li a:active, .social li a:focus {
839
-  text-decoration: none;
840
-  border-bottom: none;
841
-}
842
-.social li a.social-box {
843
-  background: #8C7676;
844
-  color: #fff;
845
-}
846
-.social li a.social-circle {
847
-  background: #8C7676;
848
-  color: #fff;
849
-  -webkit-border-radius: 50%;
850
-  -moz-border-radius: 50%;
851
-  -ms-border-radius: 50%;
852
-  border-radius: 50%;
853
-}
854
-.social li a:hover {
855
-  background: #393e46 !important;
856
-}
857
-.social.social-box a {
858
-  background: #8C7676;
859
-  color: #fff;
860
-}
861
-.social.social-circle a {
862
-  background: #8C7676;
863
-  color: #fff;
864
-  -webkit-border-radius: 50%;
865
-  -moz-border-radius: 50%;
866
-  -ms-border-radius: 50%;
867
-  border-radius: 50%;
868
-}
869
-
870
-.mfp-with-zoom .mfp-container,
871
-.mfp-with-zoom.mfp-bg {
872
-  opacity: 0;
873
-  -webkit-backface-visibility: hidden;
874
-  /* ideally, transition speed should match zoom duration */
875
-  -webkit-transition: all 0.3s ease-out;
876
-  -moz-transition: all 0.3s ease-out;
877
-  -o-transition: all 0.3s ease-out;
878
-  transition: all 0.3s ease-out;
879
-}
880
-
881
-.mfp-with-zoom.mfp-ready .mfp-container {
882
-  opacity: 1;
883
-}
884
-
885
-.mfp-with-zoom.mfp-ready.mfp-bg {
886
-  opacity: 0.8;
887
-}
888
-
889
-.mfp-with-zoom.mfp-removing .mfp-container,
890
-.mfp-with-zoom.mfp-removing.mfp-bg {
891
-  opacity: 0;
892
-}
893
-
894
-.js .to-animate,
895
-.js .to-animate-2,
896
-.js .to-animate-3,
897
-.js .single-animate {
898
-  opacity: 0;
899
-}
900
-
901
-@media screen and (max-width: 480px) {
902
-  .col-xxs-12 {
903
-    float: none;
904
-    width: 100%;
905
-  }
906
-}
907
-
908
-.row-bottom-padded-lg {
909
-  padding-bottom: 7em;
910
-}
911
-@media screen and (max-width: 768px) {
912
-  .row-bottom-padded-lg {
913
-    padding-bottom: 2em;
914
-  }
915
-}
916
-
917
-.row-bottom-padded-md {
918
-  padding-bottom: 4em;
919
-}
920
-@media screen and (max-width: 768px) {
921
-  .row-bottom-padded-md {
922
-    padding-bottom: 2em;
923
-  }
924
-}
925
-
926
-.row-bottom-padded-sm {
927
-  padding-bottom: 2em;
928
-}
929
-@media screen and (max-width: 768px) {
930
-  .row-bottom-padded-sm {
931
-    padding-bottom: 2em;
932
-  }
933
-}
934
-
935
-.fh5co-animated {
936
-  -webkit-animation-duration: .3s;
937
-  animation-duration: .3s;
938
-  -webkit-animation-fill-mode: both;
939
-  animation-fill-mode: both;
940
-}
941
-
942
-/*# sourceMappingURL=style.css.map */

+ 0
- 7
platforms/android/app/src/main/assets/www/css/style.css.map
文件差异内容过多而无法显示
查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/.DS_Store 查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/bootstrap/glyphicons-halflings-regular.eot 查看文件


+ 0
- 288
platforms/android/app/src/main/assets/www/fonts/bootstrap/glyphicons-halflings-regular.svg 查看文件

@@ -1,288 +0,0 @@
1
-<?xml version="1.0" standalone="no"?>
2
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
-<svg xmlns="http://www.w3.org/2000/svg">
4
-<metadata></metadata>
5
-<defs>
6
-<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
7
-<font-face units-per-em="1200" ascent="960" descent="-240" />
8
-<missing-glyph horiz-adv-x="500" />
9
-<glyph horiz-adv-x="0" />
10
-<glyph horiz-adv-x="400" />
11
-<glyph unicode=" " />
12
-<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
13
-<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
14
-<glyph unicode="&#xa0;" />
15
-<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
16
-<glyph unicode="&#x2000;" horiz-adv-x="650" />
17
-<glyph unicode="&#x2001;" horiz-adv-x="1300" />
18
-<glyph unicode="&#x2002;" horiz-adv-x="650" />
19
-<glyph unicode="&#x2003;" horiz-adv-x="1300" />
20
-<glyph unicode="&#x2004;" horiz-adv-x="433" />
21
-<glyph unicode="&#x2005;" horiz-adv-x="325" />
22
-<glyph unicode="&#x2006;" horiz-adv-x="216" />
23
-<glyph unicode="&#x2007;" horiz-adv-x="216" />
24
-<glyph unicode="&#x2008;" horiz-adv-x="162" />
25
-<glyph unicode="&#x2009;" horiz-adv-x="260" />
26
-<glyph unicode="&#x200a;" horiz-adv-x="72" />
27
-<glyph unicode="&#x202f;" horiz-adv-x="260" />
28
-<glyph unicode="&#x205f;" horiz-adv-x="325" />
29
-<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
30
-<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
31
-<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
32
-<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
33
-<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
34
-<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
35
-<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
36
-<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
37
-<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
38
-<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
39
-<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
40
-<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
41
-<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
42
-<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
43
-<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
44
-<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
45
-<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
46
-<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
47
-<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
48
-<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
49
-<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
50
-<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
51
-<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
52
-<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
53
-<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
54
-<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
55
-<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
56
-<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
57
-<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
58
-<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
59
-<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
60
-<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
61
-<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
62
-<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
63
-<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
64
-<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
65
-<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
66
-<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
67
-<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
68
-<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
69
-<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
70
-<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
71
-<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
72
-<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
73
-<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
74
-<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
75
-<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
76
-<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
77
-<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
78
-<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
79
-<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
80
-<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
81
-<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
82
-<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
83
-<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
84
-<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
85
-<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
86
-<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
87
-<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
88
-<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
89
-<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
90
-<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
91
-<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
92
-<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
93
-<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
94
-<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
95
-<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
96
-<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
97
-<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
98
-<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
99
-<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
100
-<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
101
-<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
102
-<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
103
-<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
104
-<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
105
-<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
106
-<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
107
-<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
108
-<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
109
-<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
110
-<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
111
-<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
112
-<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
113
-<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
114
-<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
115
-<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
116
-<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
117
-<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
118
-<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
119
-<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
120
-<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
121
-<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
122
-<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
123
-<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
124
-<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
125
-<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
126
-<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
127
-<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
128
-<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
129
-<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
130
-<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
131
-<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
132
-<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
133
-<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
134
-<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
135
-<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
136
-<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
137
-<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
138
-<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
139
-<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
140
-<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
141
-<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
142
-<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
143
-<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
144
-<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
145
-<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
146
-<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
147
-<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
148
-<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
149
-<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
150
-<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
151
-<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
152
-<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
153
-<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
154
-<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
155
-<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
156
-<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
157
-<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
158
-<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
159
-<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
160
-<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
161
-<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
162
-<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
163
-<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
164
-<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
165
-<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
166
-<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
167
-<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
168
-<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
169
-<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
170
-<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
171
-<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
172
-<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
173
-<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
174
-<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
175
-<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
176
-<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
177
-<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
178
-<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
179
-<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
180
-<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
181
-<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
182
-<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
183
-<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
184
-<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
185
-<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
186
-<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
187
-<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
188
-<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
189
-<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
190
-<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
191
-<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
192
-<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
193
-<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
194
-<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
195
-<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
196
-<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
197
-<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
198
-<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
199
-<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
200
-<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
201
-<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
202
-<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
203
-<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
204
-<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
205
-<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
206
-<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
207
-<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
208
-<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
209
-<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
210
-<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
211
-<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
212
-<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
213
-<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
214
-<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
215
-<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
216
-<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
217
-<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
218
-<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
219
-<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
220
-<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
221
-<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
222
-<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
223
-<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
224
-<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
225
-<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
226
-<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
227
-<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
228
-<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
229
-<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
230
-<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
231
-<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
232
-<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
233
-<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
234
-<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
235
-<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
236
-<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
237
-<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
238
-<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
239
-<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
240
-<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
241
-<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
242
-<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
243
-<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
244
-<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
245
-<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
246
-<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
247
-<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
248
-<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
249
-<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
250
-<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
251
-<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
252
-<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
253
-<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
254
-<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
255
-<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
256
-<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
257
-<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
258
-<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
259
-<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
260
-<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
261
-<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
262
-<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
263
-<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
264
-<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
265
-<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
266
-<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
267
-<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
268
-<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
269
-<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
270
-<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
271
-<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
272
-<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
273
-<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
274
-<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
275
-<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
276
-<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
277
-<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
278
-<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
279
-<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
280
-<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
281
-<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
282
-<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
283
-<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
284
-<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
285
-<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
286
-<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
287
-</font>
288
-</defs></svg> 

二进制
platforms/android/app/src/main/assets/www/fonts/bootstrap/glyphicons-halflings-regular.ttf 查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/bootstrap/glyphicons-halflings-regular.woff 查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/bootstrap/glyphicons-halflings-regular.woff2 查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon.eot 查看文件


+ 0
- 725
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon.svg
文件差异内容过多而无法显示
查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon.ttf 查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon.woff 查看文件


+ 0
- 7
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/Read Me.txt 查看文件

@@ -1,7 +0,0 @@
1
-Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.
2
-
3
-To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied.
4
-
5
-You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.
6
-
7
-You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu > Manage Projects) to retrieve your icon selection.

+ 0
- 153
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/demo-files/demo.css 查看文件

@@ -1,153 +0,0 @@
1
-body {
2
-	padding: 0;
3
-	margin: 0;
4
-	font-family: sans-serif;
5
-	font-size: 1em;
6
-	line-height: 1.5;
7
-	color: #555;
8
-	background: #fff;
9
-}
10
-h1 {
11
-	font-size: 1.5em;
12
-	font-weight: normal;
13
-}
14
-small {
15
-	font-size: .66666667em;
16
-}
17
-a {
18
-	color: #e74c3c;
19
-	text-decoration: none;
20
-}
21
-a:hover, a:focus {
22
-	box-shadow: 0 1px #e74c3c;
23
-}
24
-.bshadow0, input {
25
-	box-shadow: inset 0 -2px #e7e7e7;
26
-}
27
-input:hover {
28
-	box-shadow: inset 0 -2px #ccc;
29
-}
30
-input, fieldset {
31
-	font-size: 1em;
32
-	margin: 0;
33
-	padding: 0;
34
-	border: 0;
35
-}
36
-input {
37
-	color: inherit;
38
-	line-height: 1.5;
39
-	height: 1.5em;
40
-	padding: .25em 0;
41
-}
42
-input:focus {
43
-	outline: none;
44
-	box-shadow: inset 0 -2px #449fdb;
45
-}
46
-.glyph {
47
-	font-size: 16px;
48
-	width: 15em;
49
-	padding-bottom: 1em;
50
-	margin-right: 4em;
51
-	margin-bottom: 1em;
52
-	float: left;
53
-	overflow: hidden;
54
-}
55
-.liga {
56
-	width: 80%;
57
-	width: calc(100% - 2.5em);
58
-}
59
-.talign-right {
60
-	text-align: right;
61
-}
62
-.talign-center {
63
-	text-align: center;
64
-}
65
-.bgc1 {
66
-	background: #f1f1f1;
67
-}
68
-.fgc1 {
69
-	color: #999;
70
-}
71
-.fgc0 {
72
-	color: #000;
73
-}
74
-p {
75
-	margin-top: 1em;
76
-	margin-bottom: 1em;
77
-}
78
-.mvm {
79
-	margin-top: .75em;
80
-	margin-bottom: .75em;
81
-}
82
-.mtn {
83
-	margin-top: 0;
84
-}
85
-.mtl, .mal {
86
-	margin-top: 1.5em;
87
-}
88
-.mbl, .mal {
89
-	margin-bottom: 1.5em;
90
-}
91
-.mal, .mhl {
92
-	margin-left: 1.5em;
93
-	margin-right: 1.5em;
94
-}
95
-.mhmm {
96
-	margin-left: 1em;
97
-	margin-right: 1em;
98
-}
99
-.mls {
100
-	margin-left: .25em;
101
-}
102
-.ptl {
103
-	padding-top: 1.5em;
104
-}
105
-.pbs, .pvs {
106
-	padding-bottom: .25em;
107
-}
108
-.pvs, .pts {
109
-	padding-top: .25em;
110
-}
111
-.unit {
112
-	float: left;
113
-}
114
-.unitRight {
115
-	float: right;
116
-}
117
-.size1of2 {
118
-	width: 50%;
119
-}
120
-.size1of1 {
121
-	width: 100%;
122
-}
123
-.clearfix:before, .clearfix:after {
124
-	content: " ";
125
-	display: table;
126
-}
127
-.clearfix:after {
128
-	clear: both;
129
-}
130
-.hidden-true {
131
-	display: none;
132
-}
133
-.textbox0 {
134
-	width: 3em;
135
-	background: #f1f1f1;
136
-	padding: .25em .5em;
137
-	line-height: 1.5;
138
-	height: 1.5em;
139
-}
140
-#testDrive {
141
-	display: block;
142
-	padding-top: 24px;
143
-	line-height: 1.5;
144
-}
145
-.fs0 {
146
-	font-size: 16px;
147
-}
148
-.fs1 {
149
-	font-size: 14px;
150
-}
151
-.fs2 {
152
-	font-size: 24px;
153
-}

+ 0
- 30
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/demo-files/demo.js 查看文件

@@ -1,30 +0,0 @@
1
-if (!('boxShadow' in document.body.style)) {
2
-	document.body.setAttribute('class', 'noBoxShadow');
3
-}
4
-
5
-document.body.addEventListener("click", function(e) {
6
-	var target = e.target;
7
-	if (target.tagName === "INPUT" &&
8
-		target.getAttribute('class').indexOf('liga') === -1) {
9
-		target.select();
10
-	}
11
-});
12
-
13
-(function() {
14
-	var fontSize = document.getElementById('fontSize'),
15
-		testDrive = document.getElementById('testDrive'),
16
-		testText = document.getElementById('testText');
17
-	function updateTest() {
18
-		testDrive.innerHTML = testText.value || String.fromCharCode(160);
19
-		if (window.icomoonLiga) {
20
-			window.icomoonLiga(testDrive);
21
-		}
22
-	}
23
-	function updateSize() {
24
-		testDrive.style.fontSize = fontSize.value + 'px';
25
-	}
26
-	fontSize.addEventListener('change', updateSize, false);
27
-	testText.addEventListener('input', updateTest, false);
28
-	testText.addEventListener('change', updateTest, false);
29
-	updateSize();
30
-}());

+ 0
- 12906
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/demo.html
文件差异内容过多而无法显示
查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/fonts/icomoon.eot 查看文件


+ 0
- 725
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/fonts/icomoon.svg
文件差异内容过多而无法显示
查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/fonts/icomoon.ttf 查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/fonts/icomoon.woff 查看文件


+ 0
- 18459
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/selection.json
文件差异内容过多而无法显示
查看文件


+ 0
- 2438
platforms/android/app/src/main/assets/www/fonts/icomoon/icomoon/style.css
文件差异内容过多而无法显示
查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/simple-line-icons/Simple-Line-Icons.eot 查看文件


+ 0
- 211
platforms/android/app/src/main/assets/www/fonts/simple-line-icons/Simple-Line-Icons.svg 查看文件

@@ -1,211 +0,0 @@
1
-<?xml version="1.0" standalone="no"?>
2
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
-<svg xmlns="http://www.w3.org/2000/svg">
4
-<metadata>
5
-<json>
6
-<![CDATA[
7
-{
8
-	"fontFamily": "simple-line-icons",
9
-	"majorVersion": 2,
10
-	"minorVersion": 0,
11
-	"license": "MIT",
12
-	"designer": "Jamal Jama, Ahmad Firoz",
13
-	"version": "Version 2.0",
14
-	"fontId": "simple-line-icons",
15
-	"psName": "simple-line-icons",
16
-	"subFamily": "Regular",
17
-	"fullName": "simple-line-icons",
18
-	"description": "Font generated by IcoMoon."
19
-}
20
-]]>
21
-</json>
22
-</metadata>
23
-<defs>
24
-<font id="simple-line-icons" horiz-adv-x="1024">
25
-<font-face units-per-em="1024" ascent="960" descent="-64" />
26
-<missing-glyph horiz-adv-x="1024" />
27
-<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
28
-<glyph unicode="&#xe000;" glyph-name="user-female" d="M960.032 157.312l-278.496 132.064c37.152 18.624 182.256 24.528 194.256 57.28 0 0-57.344 88.016-71.344 202.336-5.44 44.368-14.752 102.592-24 184.592-15.008 133.008-126.88 226.416-268.192 226.416-0.080 0-0.176 0-0.256 0-0.096 0-0.192 0-0.256 0-141.312 0-253.184-93.408-268.176-226.4-9.248-82-18.56-140.224-24-184.592-14-114.336-71.344-202.336-71.344-202.336 12-32.752 157.088-38.656 194.256-57.28l-278.512-132.080c0 0-63.968-22.464-63.968-75.472v-84.528c0-35.376 28.624-61.312 63.968-61.312h896.064c35.344 0 63.968 25.936 63.968 61.312v84.528c0 53.008-63.968 75.472-63.968 75.472zM64 0v81.84c0 3.408 12.096 11.6 21.936 15.344 2.128 0.752 3.44 1.344 5.44 2.32l278.496 132.064c22.128 10.464 36.32 32.688 36.592 57.152 0.256 24.464-13.44 46.976-35.312 57.936-21.68 10.88-50.336 16.256-95.248 24.032-10.656 1.872-25.216 4.496-39.344 7.312 18.32 41.104 38.56 98.592 46.528 163.632 1.968 16.192 4.496 34.416 7.312 54.592 4.848 34.336 10.848 77.872 16.752 130.224 11.168 98.864 95.28 169.552 204.592 169.552 0.064 0 0.16 0 0.256 0 0.080 0 0.176 0 0.256 0 109.312 0 193.44-70.688 204.592-169.568 5.904-52.336 11.904-95.888 16.752-130.224 2.816-20.176 5.344-38.4 7.312-54.592 7.968-65.024 28.224-122.512 46.528-163.632-14.128-2.816-28.688-5.44-39.344-7.312-44.912-7.776-73.568-13.152-95.248-24.032-21.872-10.976-35.568-33.472-35.312-57.936 0.288-24.464 14.464-46.688 36.592-57.152l278.496-132.064c2-0.976 3.312-1.568 5.44-2.32 9.84-3.744 20.496-11.936 21.936-15.344l0.032-81.824h-896.032z" />
29
-<glyph unicode="&#xe001;" glyph-name="people" d="M746 124.72l-201.472 111.6c74.88 58.912 95.216 174.688 95.216 239.6v135.12c0 89.472-118.88 189.12-238.288 189.12-119.376 0-241.408-99.664-241.408-189.12v-135.12c0-59.024 24.976-178.432 100.624-239.088l-206.672-112.112c0 0-54-24.064-54-54.064v-81.088c0-29.84 24.224-54.064 54-54.064h692c29.808 0 54.032 24.224 54.032 54.064v81.088c0 31.808-54.032 54.064-54.032 54.064zM736.032-0.496h-672.032v57.216c4.592 3.344 11.008 7.216 16.064 9.536 1.504 0.688 3.008 1.408 4.432 2.224l206.688 112.096c18.848 10.224 31.344 29.184 33.248 50.528s-7.008 42.256-23.712 55.664c-53.664 43.024-76.656 138.32-76.656 189.152v135.12c0 45.968 86.656 125.12 177.408 125.12 92.432 0 174.288-78.064 174.288-125.12v-135.12c0-50.128-15.568-145.84-70.784-189.28-16.912-13.312-26-34.224-24.224-55.664 1.808-21.44 14.256-40.528 33.12-50.848l201.472-111.6c1.776-0.976 4.032-2.032 5.904-2.848 4.72-2 10.528-5.344 14.784-8.288v-57.888zM969.968 284.064l-204.464 111.6c74.88 58.912 98.224 174.688 98.224 239.6v135.12c0 89.472-121.872 190.128-241.28 190.128-77.6 0-156.944-42.192-203.12-96.224 26.336-1.632 55.376-1.664 80.464-9.664 33.712 26.256 76.368 41.872 122.656 41.872 92.432 0 177.28-79.056 177.28-126.128v-135.12c0-50.128-18.56-145.84-73.776-189.28-16.912-13.312-26-34.224-24.224-55.664 1.808-21.44 14.256-40.528 33.12-50.848l204.464-111.6c1.776-0.976 4.032-2.032 5.904-2.848 4.72-2 10.528-5.344 14.784-8.288v-56.912h-129.184c19.504-14.72 25.408-35.776 32.976-64h106.192c29.808 0 54.032 24.224 54.032 54.064v80.096c-0.016 31.84-54.048 54.096-54.048 54.096z" />
30
-<glyph unicode="&#xe002;" glyph-name="user-follow" d="M64.064 65.312c0 25.44 19.088 33.408 26.72 36.944l281.040 132.624c20.144 9.248 34.048 28.32 36.752 50.32 2.72 22-6.16 43.84-23.456 57.712-66.48 53.376-97.456 170.688-97.456 233.184v159.904c0 66.864 116.4 159.856 224.128 159.856 108.672 0 223.92-91.536 223.92-159.856v-159.92c0-61.552-25.6-179.312-94.256-233.36-17.504-13.776-26.592-35.68-23.968-57.808 2.624-22.16 16.592-41.312 36.848-50.624l95.92-45.504 15.808 63.872-85.008 39.776c88.656 69.776 118.656 206.832 118.656 283.648v159.92c0 105.92-146.624 223.856-287.92 223.856-141.312 0-288.128-117.936-288.128-223.856v-159.92c0-69.872 31.888-211.248 121.392-283.088l-281.040-132.624c0 0-63.952-28.496-63.952-63.968v-96.032c0-35.344 28.64-63.968 63.952-63.968h703.92v64l-703.872-0.032v64.944zM991.936 128.128h-96v96c0 17.68-14.336 32-32 32s-32-14.32-32-32v-96h-96c-17.664 0-32-14.32-32-32 0-17.664 14.336-32 32-32h96v-96c0-17.664 14.336-32 32-32s32 14.336 32 32v96h96c17.664 0 32 14.336 32 32 0 17.68-14.32 32-32 32z" />
31
-<glyph unicode="&#xe003;" glyph-name="user-following" d="M63.504 0.24v64.944c0 25.44 19.104 33.424 26.72 36.944l281.040 132.624c20.144 9.248 34.048 28.32 36.752 50.32 2.72 22-6.16 43.84-23.456 57.712-66.48 53.376-97.456 170.704-97.456 233.184v159.92c0 66.864 116.4 159.856 224.128 159.856 108.672 0 223.936-91.536 223.936-159.856v-159.92c0-61.552-25.6-179.312-94.256-233.376-17.504-13.776-26.592-35.68-23.968-57.808 2.624-22.16 16.592-41.312 36.848-50.624l162.24-77.248 38.144 54.064-173.664 81.344c88.656 69.776 118.656 206.848 118.656 283.664v159.92c0 105.92-146.624 223.856-287.936 223.856s-288.128-117.936-288.128-223.856v-159.92c0-69.872 31.888-211.248 121.392-283.088l-281.040-132.656c0 0-63.952-28.496-63.952-63.968v-96.032c0-35.344 28.64-63.968 63.952-63.968h639.712l-52 63.984-587.664-0.016zM1012.208 236.496c-13.904 10.912-34.032 8.432-44.912-5.472l-136.848-208.704-85.056 85.072c-12.496 12.496-32.768 12.496-45.264 0s-12.496-32.752 0-45.248l113.136-113.136c12.496-12.496 32.752-12.496 45.248 0 3.040 3.024 5.312 6.544 6.88 10.288l152.304 232.304c10.88 13.904 8.432 34.016-5.488 44.896z" />
32
-<glyph unicode="&#xe004;" glyph-name="user-unfollow" d="M799.12 576.144v159.92c0 105.92-146.608 223.856-287.904 223.856-141.312 0-288.128-117.936-288.128-223.856v-159.92c0-69.872 31.888-211.232 121.392-283.072l-281.040-132.64c0 0-63.952-28.496-63.952-63.968v-96.032c0-35.344 28.64-63.968 63.952-63.968h607.936v64l-607.888-0.032v64.944c0 25.44 19.104 33.424 26.72 36.944l281.040 132.624c20.144 9.248 34.048 28.336 36.752 50.336 2.72 22-6.16 43.824-23.456 57.696-66.48 53.376-97.456 170.688-97.456 233.2v159.92c0 66.864 116.4 159.856 224.128 159.856 108.688 0 223.904-91.536 223.904-159.856v-159.92c0-61.552-25.6-179.328-94.224-233.36-17.536-13.76-26.624-35.664-23.968-57.792 2.592-22.16 16.56-41.312 36.848-50.624l18.112-8.352 28.064 51.792-19.488 14.72c88.656 69.728 118.656 206.768 118.656 283.584zM924.624 81.2l90.496 90.512c12.496 12.464 12.496 32.752 0 45.248-12.48 12.48-32.752 12.48-45.232 0l-90.512-90.528-90.496 90.528c-12.496 12.48-32.768 12.48-45.248 0-12.496-12.496-12.496-32.784 0-45.248l90.496-90.512-90.496-90.496c-12.496-12.48-12.496-32.768 0-45.264 12.48-12.464 32.752-12.464 45.248 0l90.496 90.512 90.512-90.512c12.48-12.464 32.752-12.464 45.232 0 12.496 12.496 12.496 32.784 0 45.264l-90.496 90.496z" />
33
-<glyph unicode="&#xe005;" glyph-name="user" d="M511.728 896c108.672 0 223.92-91.536 223.92-159.856v-159.92c0-61.552-25.6-179.312-94.256-233.376-17.504-13.776-26.592-35.68-23.968-57.808 2.624-22.16 16.592-41.312 36.848-50.624l278.496-132.064c2.176-0.992 26.688-5.104 26.688-39.344l0.032-62.464-895.488-0.048v64.944c0 25.44 19.088 33.424 26.72 36.944l281.024 132.624c20.16 9.248 34.064 28.32 36.768 50.32 2.72 22-6.16 43.84-23.456 57.712-66.48 53.376-97.456 170.704-97.456 233.184v159.92c0.016 66.848 116.416 159.856 224.128 159.856zM511.728 960c-141.312 0-288.128-117.936-288.128-223.856v-159.92c0-69.872 31.888-211.248 121.392-283.088l-281.040-132.64c0 0-63.952-28.496-63.952-63.968v-96.032c0-35.344 28.64-63.968 63.952-63.968h895.552c35.344 0 63.968 28.624 63.968 63.968v96.032c0 37.6-63.968 63.968-63.968 63.968l-278.496 132.064c88.656 69.776 118.656 206.848 118.656 283.664v159.92c0 105.92-146.64 223.856-287.936 223.856v0z" />
34
-<glyph unicode="&#xe006;" glyph-name="trophy" d="M735.808 32.128h-449.936c-17.68 0-32-14.32-32-32s14.32-32 32-32h449.936c17.68 0 32 14.32 32 32s-14.304 32-32 32zM1017.312 838.368c-3.024 14.88-16.16 25.568-31.344 25.568h-156.624v31.936c0 17.68-14.32 32-32 32h-575.536c-17.68 0-32-14.32-32-32v-31.936h-151.776c-15.184 0-28.32-10.688-31.344-25.568-0.944-4.624-22.4-116.752 39.904-193.152 35.84-43.92 90.608-66.928 162.496-68.976 40.992-121.152 144.064-210.864 268.192-224.24v-222.912h-95.776c-17.68 0-32-14.32-32-32s14.32-32 32-32h258.688c17.68 0 32 14.32 32 32s-14.32 32-32 32h-98.912v222.88c124.336 13.12 227.632 102.8 268.736 224.080 74.336 1.088 130.736 24.24 167.392 69.168 62.304 76.416 40.848 188.528 39.904 193.152zM96.4 685.44c-28.336 34.496-31.184 85.408-29.744 114.496h123.152v-108.032c0-17.296 1.6-34.16 3.936-50.768-43.68 4.080-76.448 18.832-97.344 44.304zM765.344 691.904c0-153.088-114.72-277.664-255.712-277.664-141.056 0-255.808 124.56-255.808 277.664v171.968h511.536v-171.968zM927.6 685.44c-21.68-26.432-56.032-41.488-102.272-44.864 2.384 16.784 4.016 33.84 4.016 51.328v108.032h128c1.44-29.12-1.408-80-29.744-114.496z" />
35
-<glyph unicode="&#xe007;" glyph-name="speedometer" d="M511.984 923.872c-281.968 0-511.344-229.408-511.344-511.376 0-177.152 89.68-339.184 239.904-433.408 14.944-9.472 34.688-4.88 44.096 10.096s4.88 34.72-10.096 44.096c-54.096 33.952-99.040 78.048-133.424 128.88l33.552 19.376c15.312 8.848 20.56 28.4 11.712 43.712-8.88 15.344-28.464 20.56-43.712 11.712l-33.6-19.392c-24.4 50.512-39.296 105.792-43.28 163.424h35.616c17.68 0 32 14.32 32 32s-14.32 32-32 32h-35.456c4.24 58.688 19.776 114.304 44.56 164.592l32.16-18.56c5.024-2.912 10.528-4.288 15.968-4.288 11.056 0 21.808 5.744 27.744 16 8.848 15.312 3.6 34.88-11.712 43.712l-31.84 18.368c32.112 46.832 72.864 87.296 119.984 119.024l18.016-31.2c5.936-10.288 16.688-16 27.744-16 5.44 0 10.944 1.376 15.968 4.288 15.312 8.848 20.56 28.4 11.712 43.712l-17.952 31.072c49.328 23.792 103.68 38.656 160.976 42.816v-39.872c0-17.68 14.32-32 32-32s32 14.32 32 32v40c58.592-4.080 114.128-19.392 164.384-43.952l-17.36-30.048c-8.848-15.312-3.6-34.88 11.712-43.712 5.024-2.912 10.528-4.288 15.968-4.288 11.056 0 21.808 5.712 27.744 16l17.28 29.936c46.688-31.776 87.072-72.144 118.88-118.816l-29.968-17.312c-15.312-8.848-20.56-28.4-11.712-43.712 5.936-10.288 16.688-16 27.744-16 5.44 0 10.944 1.376 15.968 4.288l30.128 17.392c24.592-50.272 39.952-105.824 44.048-164.432h-35.136c-17.68 0-32-14.32-32-32s14.32-32 32-32h35.12c-4.048-56.88-18.592-111.44-42.496-161.312l-31.68 18.288c-15.28 8.848-34.912 3.568-43.712-11.712-8.848-15.312-3.6-34.88 11.712-43.712l31.776-18.352c-35.104-52.24-81.44-97.392-137.36-131.824-15.056-9.28-19.712-29.008-10.464-44.032 6.064-9.808 16.528-15.216 27.28-15.216 5.712 0 11.536 1.536 16.752 4.752 152.464 93.904 243.472 256.784 243.472 435.632 0 281.952-229.408 511.36-511.376 511.36zM748.112 512.272c15.296 8.848 20.544 28.4 11.712 43.712-8.832 15.296-28.416 20.544-43.712 11.696l-173.824-100.352c-9.28 5.248-19.856 8.496-31.28 8.496-35.28 0-63.84-28.592-63.84-63.808 0-35.248 28.576-63.84 63.84-63.84 35.28 0 63.84 28.592 63.84 63.84 0 0.064-0.016 0.144-0.016 0.208l173.28 100.048z" />
36
-<glyph unicode="&#xe008;" glyph-name="social-youtube" d="M940.736 770.304c-27.744 19.968-105.056 46.496-429.008 46.496-347.152 0-398.656-30.464-415.184-40.432-87.968-52.848-96.32-286.816-97.088-334.256 1.056-62.656 11.184-271.12 97.024-322.688 16.496-9.936 67.712-40.224 415.248-40.224 324.16 0 401.376 26.4 429.008 46.288 74.976 53.936 83.6 239.68 83.808 317.44-0.192 62.528-6.752 271.872-83.808 327.376zM903.36 177.424c-11.152-8.032-75.184-34.224-391.632-34.224-305.936 0-370.128 23.744-382.256 31.056-30.88 18.528-63.472 116.88-66.032 268.032 2.528 150.816 35.568 260.912 66.096 279.216 12.16 7.344 76.592 31.28 382.192 31.28 316.192 0 380.4-26.368 391.632-34.432 27.408-19.744 56.752-123.68 57.184-275.632-0.432-154.336-29.968-245.712-57.184-265.296zM720.416 473.168l-287.936 176.688c-9.904 5.968-22.224 6.128-32.256 0.464-10.064-5.68-16.288-16.336-16.288-27.872v-353.44c0-11.536 6.224-22.192 16.288-27.872 4.88-2.752 10.32-4.128 15.712-4.128 5.712 0 11.472 1.536 16.528 4.592l287.936 176.752c9.6 5.808 15.472 16.192 15.472 27.408s-5.856 21.632-15.456 27.408zM447.952 325.696v240.096l194-120.032-194-120.064z" />
37
-<glyph unicode="&#xe009;" glyph-name="social-twitter" d="M684.4 801.312c52.88 0 100.624-21.632 134.256-56.368 41.84 8.096 81.28 22.848 116.72 43.28-13.712-41.632-42.88-76.56-80.816-98.656 37.12 4.368 72.656 13.904 105.632 28.16-24.72-35.744-55.84-67.216-91.776-92.368 0.336-7.632 0.528-15.344 0.528-23.024 0-235.728-185.008-507.616-523.312-507.616-103.84 0-200.56 29.632-281.904 80.224 14.368-1.68 29.008-2.528 43.84-2.528 86.16 0 165.504 28.496 228.464 76.4-80.528 1.376-148.496 53.008-171.808 123.84 11.216-2.096 22.752-3.216 34.624-3.216 16.72 0 33.008 2.16 48.4 6.256-84.128 16.336-147.536 88.448-147.536 174.928 0 0.784 0 1.536 0 2.288 24.816-13.376 53.152-21.408 83.344-22.336-49.376 32.032-81.84 86.56-81.84 148.464 0 32.72 9.088 63.376 24.912 89.632 90.688-107.872 226.208-178.912 379.088-186.384-3.152 13.024-4.784 26.784-4.784 40.624 0 98.544 82.352 178.4 183.968 178.4zM960.192 717.696h0.16zM684.4 865.312c-125.664 0-229.776-91.808-245.808-210.432-102.816 20.656-196.32 75.088-263.504 154.944-12.192 14.512-30.16 22.816-48.976 22.816-1.664 0-3.344-0.064-5.024-0.192-20.592-1.648-39.12-13.12-49.776-30.784-22.32-37.024-34.096-79.44-34.096-122.656 0-28.848 5.184-56.944 15.008-83.216-10.464-11.632-16.496-26.848-16.496-42.912v-2.288c0-62.688 24.784-120.864 65.936-164.464-2.368-10.976-1.84-22.464 1.776-33.472 14.192-43.184 40.032-80.4 73.536-108.752-22.496-5.008-45.712-7.536-69.408-7.536-12.528 0-24.72 0.688-36.256 2.096-2.56 0.32-5.088 0.432-7.632 0.432-26.88 0-51.28-16.944-60.336-42.784-9.936-28.32 1.088-59.712 26.56-75.568 94.528-58.816 203.712-89.872 315.712-89.872 364.032 0 583.008 284.976 587.264 563.344 29.792 24.656 56.128 53.184 78.448 85.152 8.128 10.688 12.96 24.032 12.96 38.496 0 21.776-10.896 41.024-27.488 52.592 7.184 24.624-1.008 51.28-21.008 67.568-11.68 9.504-26 14.336-40.4 14.336-11.008 0-22.032-2.816-31.968-8.56-21.152-12.192-43.776-21.84-67.6-28.784-43.104 32.432-96.544 50.496-151.424 50.496v0z" />
38
-<glyph unicode="&#xe00a;" glyph-name="social-tumblr" d="M528.016 896.256v-223.872h224.32v-95.968h-223.328l-0.32-278.528c0-51.776 2.688-85.008 8.16-99.744 8.528-23.248 39.568-53.008 97.184-53.008 44.688 0 104.976 13.44 150.16 47.248v-149.312c-37.68-17.968-72.72-25.216-103.248-32.464-30.56-7.216-63.664-10.848-99.152-10.848-39.536 0-153.664 1.088-200.496 120.4-8.432 21.472-12.656 52.656-12.656 93.472v362.624h-128.848l0.624 98.128c42.656 0 170.624 25.904 170.624 221.872h116.976zM528.016 960.256h-116.976c-35.344 0-64-28.656-64-64 0-146.496-81.632-157.872-106.624-157.872-35.216 0-63.84-28.464-64-63.68l-0.624-98.128c-0.096-17.024 6.624-33.376 18.624-45.472 12.032-12.064 28.336-18.848 45.376-18.848h64.848v-298.624c0-49.376 5.6-87.632 17.088-116.88 28.848-73.44 97.376-161.008 260.064-161.008 40.288 0 78.592 4.224 113.872 12.56l7.056 1.664c29.872 7.024 68.032 15.776 109.008 35.312 22.288 10.624 36.464 33.088 36.464 57.776v149.312c0 24.224-13.68 46.368-35.344 57.216-9.056 4.56-18.88 6.784-28.656 6.784-13.568 0-27.056-4.32-38.336-12.752-38.096-28.528-86.848-34.496-111.808-34.496-25.6 0-35.12 9.28-37.216 11.744-1.088 5.024-4.128 23.776-4.128 77.008l0.224 214.528h159.408c35.344 0 64 28.656 64 64v95.968c0 35.344-28.656 64-64 64h-160.32v159.888c0 35.344-28.656 64-64 64v0z" />
39
-<glyph unicode="&#xe00b;" glyph-name="social-facebook" d="M581.76 879.504c3.808 0 6-0.16 6-0.16h83.568l-0.432-96h-83.008c-45.68 0-44.624-39.008-44.624-39.008v-152.192h161.632l-22.56-95.872h-139.6v-479.776h-95.904l-0.064 479.776h-127.408l-0.256 95.872h127.712c0 0 0 117.376 0 149.184 0.016 130.080 108.048 138.176 134.944 138.176zM671.328 879.344h0.16zM581.76 943.504v0c-23.008 0-67.968-3.808-110.56-29.472-40.32-24.256-88.368-73.936-88.368-172.688v-85.184h-63.712c-17.008 0-33.312-6.784-45.344-18.816-12-12.064-18.72-28.368-18.656-45.408l0.256-95.872c0.128-35.248 28.752-63.776 64-63.776h63.408l0.064-415.776c0-35.344 28.656-64 64-64h95.904c35.344 0 64 28.656 64 64v415.776h75.6c28.4 0 53.408 18.72 61.408 45.968l22.56 95.872c5.68 19.344 1.904 40.256-10.192 56.368-12.064 16.16-31.056 25.664-51.216 25.664h-97.632v63.152l63.632 0.032c35.216 0 63.84 28.464 64 63.712l0.432 92.752c0.064 1.184 0.096 2.336 0.096 3.536 0 35.344-28.592 64-63.936 64h-81.936c-1.84 0.096-4.496 0.16-7.808 0.16v0z" />
40
-<glyph unicode="&#xe00c;" glyph-name="social-dropbox" d="M1023.424 735.248c-0.72 10.224-6.288 19.472-14.976 24.912l-285.184 177.968c-11.6 7.216-26.432 6.32-37.056-2.288l-174.224-140.944-174.192 140.944c-10.592 8.56-25.536 9.536-37.056 2.288l-285.184-177.968c-8.688-5.44-14.256-14.688-14.976-24.912-0.752-10.224 3.472-20.16 11.312-26.752l165.216-138.816-141.536-111.184c-8.096-6.32-12.624-16.176-12.224-26.416s5.68-19.664 14.224-25.36l130.976-87.312c-6.432-5.84-10.544-14.208-10.544-23.6v-128.336c0-11.12 5.776-21.44 15.248-27.28l321.968-182.432c5.12-3.152 10.944-4.72 16.752-4.72s11.632 1.6 16.784 4.752l318.224 182.432c9.472 5.84 15.216 16.16 15.216 27.248v150.528c0 2.064-0.24 4.080-0.608 6.032l124.048 82.688c8.528 5.68 13.808 15.088 14.224 25.328 0.4 10.256-4.096 20.080-12.16 26.416l-140.912 111.152 165.312 138.88c7.856 6.592 12.080 16.528 11.328 26.752zM736.672 569.344l-224.688-140.784-224.688 140.784 224.688 146.224 224.688-146.224zM86.8 729.152l228.464 142.592 142.368-115.184-227.344-147.968-143.488 120.56zM229.92 529.776l225.968-141.6-128.064-98.032-218 145.312 120.096 94.32zM222.016 283.776l89.344-59.568c11.344-7.568 26.32-7.056 37.184 1.216l129.408 99.040v-282.8l-255.936 143.68v98.432zM798.208 185.344l-256.256-145.68v287.776l132.656-101.968c5.712-4.4 12.624-6.624 19.504-6.624 6.192 0 12.368 1.776 17.744 5.376l86.336 57.568v-96.448zM913.456 435.52l-218.032-145.328-127.44 97.936 226 141.632 119.472-94.24zM793.664 608.592l-227.344 147.968 142.4 115.184 228.464-142.592-143.52-120.56z" />
41
-<glyph unicode="&#xe00d;" glyph-name="social-dribbble" d="M511.984 959.728c-69.856 0-136.464-14.112-197.184-39.568-2.112-0.672-4.176-1.552-6.144-2.672-181.264-78.816-308.384-259.552-308.384-469.504 0-282.16 229.568-511.712 511.712-511.712 282.192 0 511.744 229.568 511.744 511.712 0 282.192-229.552 511.744-511.744 511.744zM959.728 447.984c0-3.584-0.192-7.12-0.272-10.672-49.024 13.008-173.392 37.44-326.8 3.744-13.52 30.896-28.512 62.576-45.28 94.816-1.408 2.704-2.784 5.28-4.176 7.952 164.128 63.344 233.888 148.672 262.768 201.952 70.688-79.216 113.76-183.552 113.76-297.792zM797.536 792.56c-14.912-35.2-69.040-126-244.72-191.888-78.896 144.224-140.224 230.672-174.592 274.64 42.256 13.264 87.184 20.416 133.76 20.416 108.432 0 207.984-38.768 285.552-103.168zM316.048 850.48c27.216-33.28 90.384-117.056 175.104-270.448-200-60.288-362.448-53.040-418.832-47.792 26.816 140.144 119.072 257.312 243.728 318.24zM64.272 447.984c0 6.896 0.208 13.744 0.528 20.576 19.248-1.936 49.152-4.080 88.288-4.080 86.896 0 217.712 10.752 369.008 58.144 2.848-5.376 5.664-10.736 8.544-16.272 14.432-27.776 27.488-55.184 39.408-82.064-27.376-8.608-55.392-19.072-83.872-31.968-182.624-82.704-268.192-200.704-298.672-252.336-76.272 80.32-123.232 188.752-123.232 308zM236.096 95.76c16.24 30.752 90.608 154.080 276.448 238.256 27.968 12.672 55.52 22.784 82.384 30.912 60.736-154.32 81.808-281.568 88.176-330.592-52.752-21.904-110.528-34.064-171.12-34.064-104.016 0-199.792 35.76-275.888 95.488zM743.616 64.96c-9.232 61.6-32.144 177.392-85.968 315.664 148.448 29.552 265.952 0.56 295.616-8.080-22.224-130.208-100.736-241.488-209.648-307.584z" />
42
-<glyph unicode="&#xe00e;" glyph-name="shield" d="M907.952 815.52c-11.872 11.088-27.504 17.216-43.664 17.216-1.472 0-2.944-0.064-4.4-0.16-0.912-0.064-11.184-0.688-27.28-0.688-26.656 0-78.688 1.808-127.968 13.936-63.664 15.632-137.12 88.16-158.496 102.464-10.752 7.184-23.152 10.784-35.568 10.784-12.368 0-24.784-3.6-35.536-10.752-2.592-1.744-79.504-84.032-154.752-102.496-49.248-12.128-102.288-13.936-128.912-13.936-16.096 0-26.368 0.624-27.376 0.688-1.408 0.096-2.816 0.16-4.224 0.16-16.192 0-31.872-6.16-43.776-17.28-12.944-12.096-20.32-29.008-20.32-46.72v-160.032c0-591.632 387.12-667.808 403.568-670.784 3.744-0.656 7.536-1.008 11.312-1.008s7.6 0.336 11.312 1.008c16.432 2.976 406.4 79.152 406.4 670.784v160.032c0.032 17.744-7.344 34.688-20.32 46.784zM864.304 608.704c0-544.912-353.712-607.776-353.712-607.776s-350.88 62.88-350.88 607.776c0 139.68 0 160.032 0 160.032s12.096-0.848 31.68-0.848c33.568 0 90.032 2.464 144.16 15.776 88.624 21.744 175.024 111.408 175.024 111.408s90.256-89.664 178.784-111.408c54.192-13.312 109.68-15.776 143.248-15.776 19.568 0 31.68 0.848 31.68 0.848s0.016-20.352 0.016-160.032zM647.6 613.76c-12.496 12.496-32.768 12.496-45.248 0l-90.512-90.512-90.512 90.512c-12.496 12.496-32.768 12.496-45.264 0s-12.496-32.768 0-45.248l90.512-90.512-90.512-90.512c-12.496-12.48-12.496-32.752 0-45.248s32.768-12.496 45.264 0l90.512 90.512 90.512-90.512c12.48-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.248l-90.512 90.512 90.512 90.512c12.496 12.48 12.496 32.752 0 45.248z" />
43
-<glyph unicode="&#xe00f;" glyph-name="screen-tablet" d="M832.144 960h-640.288c-53.024 0-96-42.976-96-96v-832c0-53.024 42.976-96 96-96h640.288c53.024 0 96 42.976 96 96v832c0 53.024-42.976 96-96 96zM864.144 32c0-17.664-14.336-32-32-32h-640.288c-17.664 0-32 14.336-32 32v832c0 17.664 14.336 32 32 32h640.288c17.664 0 32-14.336 32-32v-832zM512.048 159.824c-35.28 0-63.84-28.592-63.84-63.824s28.56-63.84 63.84-63.84c35.264 0 63.84 28.608 63.84 63.84s-28.576 63.824-63.84 63.824zM576.048 864h-128c-17.664 0-32-14.336-32-32s14.336-32 32-32h128c17.664 0 32 14.336 32 32s-14.336 32-32 32z" />
44
-<glyph unicode="&#xe010;" glyph-name="screen-smartphone" d="M704.144 960h-384.288c-53.024 0-96-42.976-96-96v-832c0-53.024 42.976-96 96-96h384.288c53.024 0 96 42.976 96 96v832c0 53.024-42.976 96-96 96zM736.144 32c0-17.664-14.336-32-32-32h-384.288c-17.664 0-32 14.336-32 32v832c0 17.664 14.336 32 32 32h384.288c17.664 0 32-14.336 32-32v-832zM512.048 159.824c-35.28 0-63.84-28.592-63.84-63.824s28.576-63.84 63.84-63.84c35.28 0 63.84 28.608 63.84 63.84s-28.56 63.824-63.84 63.824zM576.048 864h-128c-17.664 0-32-14.336-32-32s14.336-32 32-32h128c17.664 0 32 14.336 32 32s-14.336 32-32 32z" />
45
-<glyph unicode="&#xe011;" glyph-name="screen-desktop" d="M960 864.192h-896c-35.184 0-64-28.8-64-64v-544.192c0-35.184 28.816-63.984 64-63.984h416v-96.208h-160c-17.664 0-32-14.336-32-32s14.336-32 32-32h384c17.664 0 32 14.336 32 32s-14.336 32-32 32h-160v96.208h416c35.184 0 64 28.8 64 63.984v544.192c0 35.2-28.816 64-64 64zM960 256h-896v544.192h896v-544.192z" />
46
-<glyph unicode="&#xe012;" glyph-name="plane" d="M934.32 894.096v0c10.432 0 17.776-1.936 21.6-3.408 4.592-12.224 10.752-56.032-34.528-101.344l-230.992-230.976 1.664-28.656c3.504-59.968 10-167.44 15.6-259.568 4.944-82 9.632-159.44 9.936-166.032 0.16-4.528 0.224-5.6-4-10.688-9.44-11.472-27.056-30.912-41.904-47.024-23.024 62.032-71.408 193.056-98.128 266.4l-34.336 94.368-71.024-71.024-130.608-125.584-18.192-18.16-0.56-25.68c-0.432-20.496-0.336-57.28-0.288-89.712 0.064-22.592 0.128-43.12-0.032-54.432-0.288-0.528 4.368-1.152 3.936-1.904-2.784 4.464-5.776 9.28-8.944 14.288-26.336 42-62.784 100.096-73.904 118.224l-8.128 13.28-13.344 8.064c-48.528 29.312-102.288 63.152-135.088 84.288 1.136 0.656 2.064-2.816 2.816-2.416h2.128c10.32 0 27.376-0.224 46.496-0.496 25.008-0.336 53.376-0.752 75.088-0.752 8.32 0 15.712 0.064 21.664 0.192l25.68 0.592 18.16 18.16 125.744 129.712 70.784 70.752-93.936 34.56c-70.592 25.968-205.808 76.464-269.056 100.224 16.224 14.944 35.776 32.688 47.184 42.128 3.184 2.624 5.664 3.968 7.376 3.968l2.256-0.064c7.056-0.336 94.688-6.064 179.408-11.6 89.936-5.872 191.44-12.496 249.152-16.16l28.848-1.808 231.024 231.040c32.448 32.4 64.32 37.248 80.448 37.248zM934.32 958.096c-37.808 0-84.224-14.528-125.68-56l-210.608-210.592c-118.624 7.504-422.432 27.6-429.968 27.808-1.344 0.064-3.008 0.128-4.88 0.128-10.256 0-27.968-1.968-48.128-18.624-23.664-19.568-73.008-65.968-73.008-65.968-11.904-11.936-17.936-26.72-16.496-40.624 0.88-8.4 5.44-23.712 26.064-31.776 12.528-4.912 211.904-79.504 303.968-113.376l-125.744-129.712c-5.568-0.128-12.464-0.192-20.256-0.192-38.336 0-97.776 1.248-121.6 1.248-3.152 0-5.68 0-7.472-0.064-7.248-0.224-22.256 3.344-61.84-29.744l-2.816-2.624c-11.872-11.872-14.656-23.712-14.912-31.536-0.256-8.064 1.904-19.68 13.568-29.024 7.008-5.664 96.848-63.184 170.528-107.68 17.664-28.816 98.944-158 103.184-165.008 6.192-10.464 16.32-16.432 28.432-16.816 0.336 0 0.656 0 1.008 0 11.776 0 23.872 5.84 35.712 17.344 33.504 39.184 28.88 55.408 29.024 62.224 0.528 21.376-0.368 111.936 0.4 147.84l130.592 125.6c33.376-91.68 106.336-289.008 111.216-301.568 8.128-20.624 23.44-25.152 31.84-26 1.376-0.16 2.784-0.224 4.16-0.224 12.624 0 25.712 5.936 36.432 16.656 0 0 46.256 49.088 65.904 72.976 19.68 23.872 18.912 44.256 18.528 53.872-0.16 6.656-18.688 308.816-25.568 426.816l210.656 210.656c74.656 74.688 62.784 164.688 35.056 192.368-12.24 12.304-37.024 21.616-67.296 21.616v0z" />
47
-<glyph unicode="&#xe013;" glyph-name="notebook" d="M849.152 960h-638c-46 0-66.032-34-66.032-66v-127.312h-34.928c-17.312 0-31.344-14.032-31.344-31.344s14.032-31.344 31.344-31.344h34.928v-128.752h-31.936c-17.312 0-31.344-14.032-31.344-31.344s14.032-31.344 31.344-31.344h31.936v-129.44h-32.624c-17.312 0-31.344-14.032-31.344-31.344s14.032-31.344 31.344-31.344h32.624v-128.464h-32.624c-17.312 0-31.344-14.032-31.344-31.344s14.032-31.344 31.344-31.344h32.624v-129.28c0-53.024 41.536-64 64.528-64h639.504c53.024 0 96 42.976 96 96v832c0 53.024-42.96 96-96 96zM209.12 0v129.28h33.344c17.312 0 31.344 14.032 31.344 31.344s-14.032 31.344-31.344 31.344h-33.344v128.464h33.344c17.312 0 31.344 14.032 31.344 31.344s-14.032 31.344-31.344 31.344h-33.344v129.44h34.032c17.312 0 31.344 14.032 31.344 31.344s-14.032 31.344-31.344 31.344h-34.032v128.752h31.024c17.312 0 31.344 14.032 31.344 31.344s-14.032 31.344-31.344 31.344h-31.024v127.312c0 0.752 0.064 1.376 0.16 1.936 0.496 0.032 1.12 0.064 1.872 0.064h510v-896h-512.032zM881.152 32c0-17.664-14.336-32-32-32h-64v896h64c17.664 0 32-14.336 32-32v-832z" />
48
-<glyph unicode="&#xe014;" glyph-name="mustache" d="M792.848 223.28c-101.344 0-158.864 47.632-196.944 79.152-13.472 11.152-25.728 21.904-36.88 31.664-16.912 14.848-38 33.344-45.344 35.904-0.224 0-3.712 0.16-3.936 0.192-1.168-0.096-4.144-0.688-4.448-0.72-5.072-2.064-23.088-17.568-37.568-30-13.136-11.28-28.112-24.16-45.040-37.376l-3.088-2.368c-43.472-33.936-97.584-76.16-193.152-76.16-70.992 0-140.928 32.128-182.576 83.872-27.92 34.688-57.296 95.024-38.672 185.472 2.256 10.944 10.016 19.904 20.432 23.632 10.48 3.776 22.016 1.712 30.608-5.376 0.624-0.464 22.576-17.344 59.056-17.344 18.368 0 37.504 4.336 56.832 12.944 33.136 14.752 56.736 56.128 81.712 84.064 34.176 38.16 72.848 81.408 136.688 81.904 44.048 0 83.792-16.288 119.248-48.496 35.312 32.064 74.768 48.256 117.68 48.256 65.104-0.496 104.592-43.776 139.44-82 25.44-27.872 49.472-69.216 82.608-83.968 19.328-8.592 38.672-12.944 57.488-12.944 37.872 0 61.504 17.312 62.448 18.064 8.768 6.496 20.32 8.192 30.48 4.224 10.144-4 17.68-12.88 19.712-23.664 17.088-89.44-12.96-149.408-41.184-183.968-42.768-52.4-113.904-84.96-185.6-84.96zM510.736 434.128c0.992 0 3.68-0.096 4.624-0.192 0.032 0 4.688-0.336 4.688-0.368 0.336-0.032 3.008-0.368 3.296-0.432 23.152-3.28 44.624-22.128 77.216-50.688 10.704-9.408 22.496-19.744 35.472-30.496 34.784-28.816 78.096-64.656 156.816-64.656 53.312 0 105.744 23.632 136.784 61.68 20.4 24.976 31.008 54.72 31.68 88.784-15.024-4.688-33.28-8.192-54.32-8.192-27.664 0-55.568 6.192-82.976 18.368-45.248 20.096-76.304 69.12-103.68 99.152-34.528 37.872-57.472 61.088-92.080 61.376-46.16 0-75.952-29.056-94.416-50.912-6.032-7.12-14.816-11.216-24.096-11.216v0c-9.28 0-18.080 4.128-24.080 11.248-18.528 21.936-48.416 51.12-93.84 51.12-35.088-0.256-57.408-23.28-90.992-60.848-27.056-30.224-57.696-79.472-103.232-99.68-27.392-12.192-55.104-18.368-82.304-18.368-20.4 0-38.064 3.408-52.624 8.032-0.032-34.72 10.112-64.912 30.336-90.032 29.936-37.152 81.040-60.256 133.44-60.256 74 0 114.896 31.936 154.464 62.816l3.088 2.416c16.048 12.528 30.24 24.752 42.688 35.44 28.512 24.496 47.328 40.688 67.648 44.288v0c0.016-0.016 9.696 1.616 16.4 1.616z" />
49
-<glyph unicode="&#xe015;" glyph-name="mouse" d="M513.584 960c-158.128 0-289.504-128.224-289.504-286.336v-451.312c0-158.128 131.376-286.352 289.504-286.352s286.352 128.224 286.352 286.336v451.328c0 158.112-128.224 286.336-286.352 286.336zM735.936 222.336c0-122.592-99.744-222.336-222.352-222.336s-225.504 99.744-225.504 222.336v451.328c0 122.592 102.912 222.336 225.504 222.336s222.352-99.744 222.352-222.336v-451.328zM512.336 768c-17.664 0-32-14.336-32-32v-160c0-17.664 14.336-32 32-32s32 14.336 32 32v160c0 17.664-14.336 32-32 32z" />
50
-<glyph unicode="&#xe016;" glyph-name="magnet" d="M960.288 899.824v29.008c0 17.68-14.32 32-32 32h-224.624c-17.68 0-32-14.32-32-32v-130.656c0-0.048 0.032-0.096 0.032-0.144v-397.52c0-96.32-54.336-174.656-150.656-174.656s-168.656 78.336-168.656 174.656v499.312h-0.096v29.008c0 17.68-14.32 32-32 32h-224.624c-17.68 0-32-14.32-32-32v-130.656c0-0.656 0.336-1.2 0.368-1.84v-410.496c0-248.912 198.784-450.656 447.664-450.656s448.656 201.744 448.656 450.656v513.984h-0.064zM896.288 896.832v-128.336h-160.256v128.336h160.256zM288.288 896.832v-128.336h-160.256v128.336h160.256zM511.68-0.832c-213.216 0-383.664 173.472-383.664 386.656v318.672h160.336v-303.984c0-131.808 100.848-238.656 232.656-238.656s214.672 106.848 214.672 238.656v303.984h160.656v-318.672c0-213.184-171.424-386.656-384.656-386.656z" />
51
-<glyph unicode="&#xe017;" glyph-name="magic-wand" d="M1020.512 530.624l-102.784 153.68 51.152 178.816c3.184 11.216 0.064 23.28-8.224 31.504-8.256 8.256-20.256 11.312-31.536 8.032l-178.512-52.128-154.288 103.904c-9.712 6.528-22.16 7.312-32.464 1.936-10.368-5.312-17.024-15.872-17.408-27.504l-5.536-185.936-146.496-114.592c-9.184-7.184-13.712-18.816-11.872-30.32s9.808-21.088 20.816-25.024l137.456-49.28c-0.928-0.736-1.904-1.392-2.768-2.256l-530.752-530.752c-12.496-12.496-12.496-32.752 0-45.248 6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376l530.752 530.752c2.064 2.064 3.664 4.4 5.040 6.816l53.792-147.552c4-10.944 13.632-18.848 25.152-20.656 1.632-0.256 3.28-0.368 4.912-0.368 9.808 0 19.184 4.528 25.312 12.432l113.776 147.168 183.904 6.56c11.664 0.4 22.16 7.12 27.44 17.536 5.264 10.384 4.448 22.848-2.112 32.48zM794.048 537.456c-9.504-0.32-18.368-4.88-24.192-12.4l-87.472-113.104-48.976 134.32c-3.248 8.944-10.32 15.936-19.28 19.152l-134.592 48.256 112.624 88.064c7.504 5.872 11.968 14.752 12.288 24.256l4.256 142.944 118.592-79.872c7.904-5.312 17.776-6.816 26.848-4.192l137.248 40.096-39.344-137.472c-2.592-9.152-1.008-18.976 4.336-26.848l80.56-118.128-142.896-5.072z" />
52
-<glyph unicode="&#xe018;" glyph-name="hourglass" d="M833.056 895.392h-64.464v-215.408c0-104.384-56.656-183.36-178.096-245.2 126.064-63.808 179.104-142.16 179.104-259.072 0-76.128-0.336-140-0.592-175.12h64.064c17.68 0 32-14.288 32-31.968s-14.32-32-32-32h-642.128c-17.68 0-32 14.32-32 32s14.32 31.968 32 31.968h65.936c-0.24 35.12-0.592 99.008-0.592 175.12 0 116.912 52.288 195.248 178.144 259.056-121.232 61.84-177.136 140.816-177.136 245.2v215.424h-66.352c-17.68 0-32 14.304-32 32 0 17.664 14.32 31.984 32 31.984h642.128c17.68 0 32-14.32 32-31.984-0.016-17.696-14.32-32-32.016-32zM320.272 175.712c0-76.288 0.352-140.224 0.592-175.12h384.176c0.224 34.912 0.592 98.848 0.592 175.12 0 89.008-33.12 158.032-193.184 224.4-160.016-66.368-192.176-135.392-192.176-224.4zM704.624 895.392h-383.36v-215.408c0-61.376 20.64-140.416 191.168-210.528 170.56 70.112 192.192 149.152 192.192 210.528v215.408z" />
53
-<glyph unicode="&#xe019;" glyph-name="graduation" d="M990.848 263.696v258.144l16.096 8.496c10.464 5.44 17.056 16.224 17.184 28.032 0.128 11.776-6.256 22.688-16.592 28.368l-481.44 257.6c-9.632 5.28-21.28 5.248-30.976-0.096l-478.8-257.92c-10.192-5.68-16.496-16.464-16.432-28.16s6.496-22.4 16.816-27.968l210.384-111.984c-2.64-4.656-4.272-9.968-4.272-15.696v-270.784c0-9.12 3.904-17.84 10.72-23.904 6.944-6.16 73.44-60.096 276.752-60.096 202.592 0 270.88 50.976 278 56.784 7.44 6.064 11.744 15.152 11.744 24.784v277.728c0 4.496-0.944 8.768-2.608 12.64l129.424 68.368v-224.512c-18.976-11.104-31.84-31.472-31.84-55.024 0-35.344 28.656-64 64-64s64 28.656 64 64c0 23.696-13.040 44.144-32.16 55.2zM736.032 147.632c-25.152-12.096-91.712-35.904-225.744-35.904-134.88 0-199.936 25.344-223.472 37.536v237.136l207.808-110.624c4.72-2.56 9.968-3.84 15.184-3.84 5.088 0 10.192 1.216 14.816 3.664l211.408 111.664v-239.632zM510.064 340.192l-411.6 218.56 412.32 220.976 413.6-220.336-414.32-219.2z" />
54
-<glyph unicode="&#xe01a;" glyph-name="ghost" d="M511.984 960.128c-229.216 0-415.68-199.904-415.68-445.6v-546.672c0-13.216 8.16-25.088 20.496-29.84 3.712-1.472 7.632-2.16 11.504-2.16 8.848 0 17.536 3.68 23.712 10.528l120.592 133.12 94.432-130.432c5.968-8.256 15.504-13.152 25.68-13.216h0.224c10.096 0 19.632 4.784 25.664 12.912l94.816 127.344 93.184-127.152c6.032-8.224 15.6-13.088 25.808-13.088 10.192 0 19.776 4.848 25.808 13.056l95.568 130.288 118-132.624c8.816-9.904 22.944-13.376 35.28-8.624 12.4 4.72 20.624 16.624 20.624 29.904v546.672c0 245.68-186.496 445.584-415.712 445.584zM863.696 51.968l-88.4 99.376c-6.432 7.216-15.808 11.312-25.408 10.688-9.664-0.464-18.592-5.248-24.32-13.024l-93.12-127.008-93.008 126.912c-6 8.192-15.536 13.056-25.68 13.088h-0.128c-10.128 0-19.632-4.784-25.664-12.912l-94.688-127.152-92 127.088c-5.664 7.808-14.528 12.656-24.16 13.152-0.592 0.032-1.152 0.064-1.744 0.064-9.008 0-17.632-3.808-23.712-10.528l-91.376-100.848v463.68c0 210.4 157.776 381.6 351.68 381.6 193.936 0 351.712-171.184 351.712-381.6v-462.576zM672 607.84c-35.28 0-63.84-28.592-63.84-63.808 0-35.248 28.56-63.84 63.84-63.84s63.84 28.592 63.84 63.84c0 35.216-28.56 63.808-63.84 63.808zM352 607.84c-35.28 0-63.84-28.592-63.84-63.808 0-35.248 28.576-63.84 63.84-63.84s63.84 28.592 63.84 63.84c0 35.216-28.56 63.808-63.84 63.808z" />
55
-<glyph unicode="&#xe01b;" glyph-name="game-controller" d="M743.216 884.448c-25.6 12.016-49.808 23.328-71.84 34.384-56.464 28.288-107.664 42.032-156.464 42.032-98.288 0-166.304-56.704-208.96-99.36l-206.848-207.072c-110.688-110.8-128.368-223.6-57.264-365.808 11.024-22.080 22.368-46.336 34.368-72.032 64.704-138.384 131.584-281.488 241.056-281.488 3.072 0 6.112 0.096 9.216 0.336 112.976 8.848 145.024 154.288 173.312 282.592 4.496 20.32 8.752 39.808 13.12 57.28 7.6 30.208 22.56 48.976 63.552 90.064l5.632 5.664 3.472 3.472 9.12 9.088c41.088 41.088 59.856 56.032 90.096 63.664 17.312 4.352 36.752 8.64 57.024 13.088 128.224 28.304 273.6 60.368 282.4 173.52 8.88 114.832-138.464 183.84-280.992 250.576zM958.464 639.664c-6.224-79.776-184.816-103.328-291.104-129.984-47.008-11.872-75.616-36.752-118.784-79.936-3.008-3.008-6.032-6.016-9.088-9.072-3.024-3.024-6.032-6.096-9.056-9.088-43.168-43.216-68-71.808-79.824-118.88-26.672-106.384-50.192-285.168-129.872-291.44-1.44-0.112-2.88-0.144-4.32-0.144-84.544 0-155.68 192.24-218.448 317.664-63.744 127.504-36.432 210.224 45.36 292.096 15.696 15.728 35.216 35.248 59.136 59.184 24.432 24.464 53.488 53.552 87.92 88 23.904 23.936 43.408 43.424 59.12 59.184 50.8 50.848 101.936 80.64 163.92 80.64 37.808 0 79.632-11.056 127.872-35.248 127.456-63.904 323.888-136.48 317.168-222.976zM478.784 608.72h64v64h-64v-64zM478.784 704.72h64v64h-64v-64zM574.784 704.72h64v64h-64v-64zM574.784 608.72h64v64h-64v-64zM329.888 416.56l24.336 24.336c12 12 12 31.472 0 43.456-12 12-31.44 12-43.44 0l-24.352-24.352-24.352 24.352c-12 12-31.44 12-43.44 0s-12-31.456 0-43.456l24.352-24.352-24.352-24.352c-12-11.984-12-31.44 0-43.44s31.456-12 43.44 0l24.352 24.336 25.056-25.056c12-12 31.44-12 43.44 0s12 31.472 0 43.472l-25.040 25.056z" />
56
-<glyph unicode="&#xe01c;" glyph-name="fire" d="M508.416-63.28c-241.248 0-412.368 167.28-412.368 397.776 0 122.368 73.376 254.192 76.496 259.712 6.368 11.344 18.88 17.504 31.936 16.064 12.912-1.664 23.536-10.976 26.88-23.568 0.192-0.752 19.968-74.752 46.064-115.84 17.536-27.648 35.312-47.184 55.312-60.752-13.536 58.656-23.904 146.912-7.024 237.472 46.336 248.576 241.984 308.048 250.368 310.448 10.784 3.088 22.224 0.32 30.432-7.152 8.192-7.504 11.936-18.752 9.808-29.664-0.32-1.744-32.624-175.776 35.936-324.064 6.224-13.472 14.912-29.12 24.256-44.784 2.656 21.504 6.784 44.368 13.12 66.56 25.152 87.968 90.192 118 92.944 119.216 10.848 4.944 23.504 3.312 32.88-4.032 9.344-7.376 13.84-19.28 11.68-31.008-0.336-2.16-9.408-62.032 41.536-146.944 46-76.672 59.28-126.368 59.28-221.68 0-230.48-176.432-397.76-419.536-397.76zM195.696 492.32c-17.568-44.304-35.664-103.248-35.664-157.808 0-193.408 144.192-333.776 348.368-333.776 206 0 355.536 140.368 355.536 333.776 0 83.536-10.32 122.32-50.16 188.752-26.624 44.368-39.776 84.256-46.064 116-6.336-10.256-12.224-22.784-16.528-37.872-19.504-68.192-14.592-147.936-14.528-148.752 0.944-14.272-7.744-27.472-21.248-32.256s-28.528-0.064-36.816 11.664c-2.4 3.408-59.312 83.968-84.4 138.24-52.096 112.592-51.216 234.336-45.904 304.464-52.72-30.72-133.664-99.344-159.664-238.912-25.312-135.808 23.872-271.6 24.4-272.944 4.256-11.088 2-23.664-5.808-32.592-7.84-8.88-19.904-12.816-31.536-10.032-3.968 0.976-94.032 24.4-152.336 116.288-10.416 16.464-19.76 36.384-27.648 55.76z" />
57
-<glyph unicode="&#xe01d;" glyph-name="eyeglass" d="M1025.376 308.208c-0.976 13.84-53.008 319.312-61.152 368.224-0.784 4.688-1.408 9.68-2.096 14.944-6.288 49.152-18.032 140.624-165.472 140.624-17.68 0-32-14.32-32-32s14.32-32 32-32c91.12 0 95.936-37.408 102-84.784 0.784-6.064 1.536-11.872 2.432-17.28 3.744-22.528 20.704-112.16 35.344-201.024-37.552 28.624-84.288 45.808-135.12 45.808-81.648 0-154.32-43.952-194.272-109.36-19.216 7.264-51.824 16.336-95.392 16.336-42.944 0-74.512-9.136-94.032-17.088-38.848 65.824-110.304 110.128-192.272 110.128-53.264 0-102.736-18.72-141.84-49.84 14.832 89.984 32.4 182.032 36.208 205.024 0.912 5.408 1.664 11.216 2.432 17.28 6.064 47.376 10.88 84.784 102 84.784 17.68 0 32 14.32 32 32s-14.32 32-32 32c-147.44 0-159.184-91.472-165.472-140.624-0.688-5.248-1.312-10.256-2.096-14.944-8.16-48.912-57.008-352.368-57.968-366.224-0.224-3.088 0.144-6.048 0.752-8.944-0.304-4.624-0.72-9.216-0.72-13.904 0-123.344 103.344-223.344 226.688-223.344s223.344 100 223.344 223.344c0 18.656-2.544 36.672-6.848 53.984 13.12 5.28 36.832 12.336 69.808 12.336 32.176 0 56.464-6.432 70.304-11.328-4.608-17.632-7.328-35.968-7.328-54.992 0-123.344 103.344-223.344 226.688-223.344s223.344 100 223.344 223.344c0 3.344-0.352 6.608-0.496 9.92 0.976 3.488 1.52 7.136 1.232 10.944zM225.344 128.016c-88.192 0-162.688 72.976-162.688 159.344s74.496 159.344 162.688 159.344c87.872 0 159.344-71.472 159.344-159.344s-71.472-159.344-159.344-159.344zM801.312 128.016c-88.192 0-162.688 72.976-162.688 159.344s74.496 159.344 162.688 159.344c76 0 139.632-53.488 155.456-124.784 0.656-6.528 1.2-12.672 1.616-18.288 0.192-2.688 0.912-5.216 1.84-7.664 0.16-2.88 0.432-5.712 0.432-8.624 0-87.856-71.472-159.328-159.344-159.328z" />
58
-<glyph unicode="&#xe01e;" glyph-name="envelope-open" d="M1023.312 486.704c-1.36 11.312-5.616 21.712-12.096 30.464h0.16l-0.88 0.88c-3.28 4.32-7.12 8.128-11.408 11.504l-417.28 403.408c-36.224 36.224-99.504 36.288-135.776 0l-417.216-400.256c-9.024-8.4-28.88-31.088-28.88-53.344v-479.52c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v478.256c0.224 2.88-0.064 5.76-0.624 8.608zM269.792 233.664l-205.856-189.568v371.184l205.856-181.616zM335.568 207.28c2.288 1.52 4.464 3.248 6.368 5.408 0.368 0.416 0.624 0.912 0.96 1.344l141.168 130c7.248 5.84 15.84 8.912 24.88 8.912 9.184 0 18.368-3.216 24.528-8l383.6-345.104h-806.736l225.232 207.44zM757.456 229.44l202.48 179.696v-361.84l-202.48 182.144zM103.776 517.168l387.504 370.544c6.064 6.032 14.096 9.376 22.624 9.376 8.56 0 16.592-3.344 22.656-9.376l361.376-344.352h-0.976l54.896-55.792-242.304-215.040-135.248 121.664c-37.68 29.536-91.776 30.816-131.68-1.376l-125.504-115.584-241.792 213.344 26.992 26.592h1.456z" />
59
-<glyph unicode="&#xe01f;" glyph-name="envolope-letter" d="M1023.312 486.72c-1.36 11.312-5.616 21.712-12.096 30.464h0.16l-0.88 0.88c-3.28 4.32-7.12 8.128-11.408 11.504l-167.152 168.384v103.264c0 17.68-14.32 32-32 32h-101.328l-116.8 99.712c-36.224 36.224-99.504 36.288-135.776 0l-116.4-99.712h-105.696c-17.68 0-32-14.32-32-32v-105.376l-163.12-163.12c-17.344-11.472-28.88-31.088-28.88-53.344v-479.504c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v478.24c0.224 2.88-0.064 5.76-0.624 8.608zM268.864 234.496l-204.928-190.080v370.896l204.928-180.816zM330.56 204.496c4.224 1.808 8.128 4.528 11.376 8.224 1.712 1.936 3.056 4.064 4.224 6.256l137.904 127.936c7.248 5.84 15.84 8.912 24.88 8.912 9.184 0 18.368-3.216 24.528-8l383.84-347.936h-807.312l220.56 204.608zM758.336 230.272l201.6 178.896v-361.632l-201.6 182.736zM897.936 543.376h-0.976l54.896-55.792-119.92-106.432v228.208l66-65.984zM491.28 887.68c6.064 6.032 14.096 9.376 22.624 9.376 8.56 0 16.592-3.344 22.656-9.376l64.624-54.464h-174.432l64.528 54.464zM767.936 769.216v-444.848l-57.312-50.88-136.32 123.568c-37.68 29.536-91.776 30.816-131.68-1.376l-126.624-117.44-60.064 53.008v437.968h512zM103.776 517.184l88.16 88.128v-217.616l-116.624 102.896 26.992 26.592h1.472z" />
60
-<glyph unicode="&#xe020;" glyph-name="energy" d="M595.344 895.28h0.176zM595.344 895.28l-72.208-379.376 261.584-0.88-356.064-514.304 72.208 417.376-261.568 0.912 356.048 476.272zM595.392 959.28c-1.728 0-3.456-0.064-5.152-0.192-11.296-0.912-18.784-4.688-27.664-10.656-4.928-3.28-9.44-7.28-13.392-11.936-1.168-1.376-2.272-2.816-3.296-4.288l-358.608-474.608c-14.16-19.408-16.24-45.024-5.36-66.432 10.864-21.408 32.832-34.976 56.912-35.152l184.736-1.344-58.080-342.192c-5.52-29.408 10.16-58.72 37.76-70.528 8.224-3.536 16.864-5.216 25.392-5.216 20.112 0 36.64 9.408 49.040 26.4l359.056 514.304c14.16 19.408 16.224 45.056 5.36 66.432-10.864 21.408-32.832 34.976-56.912 35.152l-184.736 0.32 57.456 300.88c1.2 4.848 1.824 9.872 1.824 15.056 0 34.624-27.568 62.848-62.064 63.968-0.768 0.032-1.52 0.032-2.272 0.032v0z" />
61
-<glyph unicode="&#xe021;" glyph-name="emotsmile" d="M781.264 352.848c-16.256 7.28-35.088-0.064-42.256-16.192-0.656-1.424-66.128-144.208-229.44-146.128-1.008 0-2-0.032-3.008-0.032-153.664 0-219.936 140.368-222.688 146.4-7.312 16-26.192 23.12-42.32 15.872-16.096-7.28-23.248-26.208-15.968-42.336 3.408-7.568 85.376-183.936 280.848-183.936 1.28 0 2.592 0.032 3.872 0.032 203.872 2.4 283.84 176.656 287.12 184.064 7.248 16.16-0.032 35.072-16.16 42.256zM512 960c-282.784 0-512-229.216-512-512s229.216-512 512-512 512 229.216 512 512-229.216 512-512 512zM512 0c-247.024 0-448 200.976-448 448s200.976 448 448 448 448-200.976 448-448-200.976-448-448-448zM351.504 480.176c35.264 0 63.84 28.592 63.84 63.824s-28.576 63.824-63.84 63.824c-35.28 0-63.84-28.592-63.84-63.824s28.56-63.824 63.84-63.824zM671.504 480.176c35.264 0 63.84 28.592 63.84 63.824s-28.576 63.824-63.84 63.824c-35.28 0-63.84-28.592-63.84-63.824s28.56-63.824 63.84-63.824z" />
62
-<glyph unicode="&#xe022;" glyph-name="disc" d="M512 960c-282.784 0-512-229.216-512-512s229.216-512 512-512 512 229.216 512 512-229.216 512-512 512zM960 448c0-66.32-14.592-129.264-40.56-185.936l-283.216 151.552c3.024 10.976 4.784 22.464 4.784 34.384 0 71.248-57.744 129.008-129.008 129.008-14.624 0-28.624-2.544-41.712-7.024l-169.616 272.912c62.992 33.84 134.944 53.104 211.328 53.104 247.024 0 448-200.976 448-448zM512 512.992c35.84 0 65.008-29.152 65.008-65.008s-29.168-64.992-65.008-64.992-64.992 29.168-64.992 65.008 29.152 64.992 64.992 64.992zM246.576 808.624l170.176-273.84c-0.752-0.832-1.536-1.648-2.288-2.512l-283.168 151.52c30.208 48.576 69.392 90.976 115.28 124.832zM64 448c0 63.68 13.44 124.256 37.504 179.168l284.368-152.16c-1.856-8.72-2.88-17.728-2.88-27.008 0-71.248 57.744-129.008 129.008-129.008 12.4 0 24.352 1.84 35.696 5.104l170.192-273.792c-61.68-32.048-131.664-50.304-205.888-50.304-247.024 0-448 200.976-448 448zM772.448 83.84l-169.504 272.688c0.496 0.496 0.96 1.024 1.456 1.536l284.288-152.144c-30.752-47.632-70.24-89.088-116.24-122.080z" />
63
-<glyph unicode="&#xe023;" glyph-name="cursor-move" d="M1016.4 463.36l-8.48 8.080c-0.16 0.16-0.336 0.224-0.528 0.368l-129.744 118.432c-9.344 8.944-24.448 8.944-33.824 0l-5.488-8.064c-9.344-8.944-6.304-23.408 3.040-32.336l76.464-69.344h-371.344v373.344l69.344-76.464c8.944-9.344 23.408-12.384 32.336-3.024l8.064 5.472c8.944 9.376 8.944 24.48 0 33.84l-113.168 123.968c-2.752 5.552-7.008 10.144-12.32 13.296l-1.424 1.488c-4.432 4.672-10.336 7.008-16.224 6.976-5.904 0.032-11.776-2.304-16.288-6.976l-8.096-8.464c-0.16-0.16-0.176-0.368-0.336-0.544l-115.504-127.744c-8.928-9.328-8.928-24.448 0-33.824l8.064-5.472c8.928-9.344 23.424-6.32 32.368 3.024l69.152 77.104v-375.984h-376.304l76.464 69.344c9.344 8.944 12.384 23.408 3.040 32.336l-5.472 8.064c-9.36 8.944-24.496 8.944-33.84 0l-123.984-113.184c-5.536-2.736-10.128-7.008-13.28-12.288l-1.488-1.424c-4.688-4.448-7.008-10.352-6.976-16.24-0.016-5.904 2.288-11.776 6.976-16.288l8.464-8.096c0.16-0.16 0.368-0.176 0.528-0.336l127.744-115.504c9.344-8.928 24.464-8.928 33.84 0l5.472 8.064c9.344 8.944 6.304 23.44-3.040 32.368l-77.12 69.152h379.008v-376.96l-69.152 77.104c-8.944 9.344-23.44 12.368-32.368 3.024l-8.064-5.472c-8.928-9.376-8.928-24.496 0-33.824l115.504-127.744c0.16-0.176 0.192-0.368 0.336-0.528l8.096-8.48c4.512-4.672 10.384-7.008 16.288-6.976 5.872-0.032 11.776 2.304 16.224 6.976l8.096 8.48c0.16 0.16 0.224 0.336 0.368 0.528l118.432 129.744c8.944 9.344 8.944 24.464 0 33.824l-8.064 5.488c-8.944 9.344-23.408 6.304-32.336-3.040l-69.344-76.464v374.336h373.968l-77.104-69.152c-9.344-8.944-12.368-23.44-3.024-32.368l5.472-8.064c9.376-8.928 24.496-8.928 33.824 0l127.744 115.504c0.176 0.176 0.368 0.192 0.528 0.336l8.48 8.096c4.672 4.496 7.008 10.368 6.976 16.288 0.032 5.856-2.304 11.776-6.976 16.224z" />
64
-<glyph unicode="&#xe024;" glyph-name="crop" d="M992 160h-128v593.904l119.456 119.296c12.48 12.496 12.48 32.768 0 45.264-12.496 12.496-32.768 12.496-45.264 0l-118.608-118.464h-595.584v128c0 17.68-14.32 32-32 32s-32-14.32-32-32v-128h-128c-17.68 0-32-14.32-32-32 0-17.664 14.32-32 32-32h128v-608c0-2.944 0.944-5.6 1.68-8.288 0.32-1.216 0.256-2.464 0.72-3.632 3.216-8.064 9.6-14.432 17.664-17.68 1.376-0.56 2.88-0.496 4.288-0.848 2.528-0.64 4.928-1.552 7.648-1.552h608v-128c0-17.68 14.32-32 32-32s32 14.32 32 32v128h128c17.68 0 32 14.32 32 32s-14.32 32-32 32zM755.488 736l-531.488-530.784v530.784h531.488zM269.28 160l530.72 529.984v-529.984h-530.72z" />
65
-<glyph unicode="&#xe025;" glyph-name="credit-card" d="M928.144 784h-832.288c-53.024 0-96-42.976-96-96v-480c0-53.024 42.976-96 96-96h832.288c53.024 0 96 42.976 96 96v480c0 53.024-42.976 96-96 96zM95.856 720h832.288c17.664 0 32-14.336 32-32v-64h-896.288v64c0 17.664 14.352 32 32 32zM928.144 176h-832.288c-17.664 0-32 14.336-32 32v288h896.288v-288c0-17.664-14.352-32-32-32z" />
66
-<glyph unicode="&#xe026;" glyph-name="chemistry" d="M810.416-10.72l-170.4 201.664v353.504h21.312c17.68 0 32 14.32 32 32s-14.32 32-32 32h-53.312c-17.68 0-32-14.32-32-32v-397.824c0-7.936 2.944-15.568 8.256-21.44l130.368-157.344h-405.28l130.368 157.344c5.312 5.872 8.256 13.504 8.256 21.44v397.824c0 17.68-14.32 32-32 32h-53.312c-17.68 0-32-14.32-32-32s14.32-32 32-32h21.312v-353.504l-170.4-201.664c-8.464-9.376-10.624-22.88-5.504-34.432 5.152-11.568 16.592-19.008 29.248-19.008h549.344c12.656 0 24.096 7.44 29.248 19.008 5.12 11.552 2.976 25.056-5.504 34.432zM480 640.32c35.264 0 63.84 28.592 63.84 63.84 0 35.216-28.576 63.808-63.84 63.808-35.28 0-63.84-28.592-63.84-63.808 0-35.248 28.56-63.84 63.84-63.84zM688.48 735.312c62.368 0 112.928 50.336 112.928 112.416s-50.544 112.416-112.928 112.416c-62.352 0-112.928-50.336-112.928-112.416s50.576-112.416 112.928-112.416zM687.984 896.336c26.656 0 48.336-21.584 48.336-48.128 0-26.528-21.68-48.128-48.336-48.128s-48.336 21.6-48.336 48.128c0.016 26.544 21.68 48.128 48.336 48.128z" />
67
-<glyph unicode="&#xe027;" glyph-name="bell" d="M905.616 248.112c-37.344 45.424-88.48 109.744-88.48 175.36v208.96c0 180.016-134.64 326.48-306.688 326.48-172.080 0-305.664-146.464-305.664-326.48v-208.96c0-64.512-55.488-125.488-90.672-172.8-31.648-42.512-56.624-76.096-39.76-109.664 14.832-29.536 51.968-33.328 82.656-33.328h183.36c0.048-94.208 76.448-170.576 170.672-170.576 94.24 0 170.64 76.368 170.688 170.576h187.664c19.52 0 65.152 0 80.864 33.2 15.856 33.616-9.52 64.512-44.64 107.232zM511.008 4.144c-57.216 0-103.632 46.352-103.712 103.536h207.424c-0.080-57.184-46.464-103.536-103.712-103.536zM869.392 175.808h-712.384c-4.896 0-8.992 0.16-12.368 0.368 6.592 10.208 16.272 23.248 24.144 33.856 38.992 52.4 104.144 126.368 104.144 213.424v208.96c0 142.464 103.040 258.352 237.52 258.352s238.56-115.888 238.56-258.352v-208.96c0-90.016 60.080-165.248 103.968-218.608 7.392-8.992 16.24-19.76 23.12-28.96-2.032-0.048-4.272-0.080-6.704-0.080z" />
68
-<glyph unicode="&#xe028;" glyph-name="badge" d="M1021.056 120.032l-187.264 346.304c19.104 43.36 29.792 91.28 29.792 141.696 0 194.304-157.52 351.808-351.808 351.808-194.336 0-351.84-157.52-351.84-351.808 0-51.632 11.216-100.624 31.184-144.784l-188.096-343.056c-6.064-11.024-5.056-24.624 2.528-34.688 7.6-10.032 20.432-14.752 32.688-11.872l160.624 36.848 54.976-153.12c4.288-11.904 15.152-20.16 27.744-21.088 0.816-0.064 1.6-0.096 2.368-0.096 11.712 0 22.592 6.432 28.192 16.88l163.696 304.976c11.808-1.2 23.792-1.808 35.92-1.808 11.12 0 22.096 0.576 32.944 1.6l167.248-305.008c5.664-10.32 16.432-16.624 28.064-16.624 0.816 0 1.664 0.032 2.496 0.096 12.56 1.008 23.376 9.248 27.632 21.088l54.976 153.12 160.624-36.848c12.32-2.976 25.024 1.808 32.624 11.808 7.632 9.984 8.656 23.52 2.688 34.576zM289.776 46.656l-40.256 112.16c-5.504 15.248-21.472 24.128-37.28 20.368l-118.8-27.248 135.408 246.976c44.592-60.24 107.952-105.68 181.44-127.792l-120.512-224.464zM224.224 608.032c0 158.544 129.008 287.536 287.568 287.536 158.544 0 287.536-128.992 287.536-287.536s-128.992-287.568-287.536-287.568c-158.576 0-287.568 129.024-287.568 287.568zM811.744 179.184c-15.872 3.744-31.776-5.12-37.28-20.368l-40.528-112.976-123.152 224.56c75.44 22.096 140.336 68.736 185.504 130.736l134.848-249.328-119.392 27.376z" />
69
-<glyph unicode="&#xe029;" glyph-name="anchor" d="M1021.024 228.592l-82.288 151.296c-0.128 0.208-0.096 0.4-0.224 0.592l-5.872 10.144c-3.28 5.616-8.432 9.232-14.192 10.592-5.696 1.408-11.984 0.544-17.408-2.976l-9.84-6.336c-0.192-0.112-0.304-0.288-0.496-0.416l-145.6-98.32c-10.88-7.008-14.416-21.68-7.936-32.912l6.544-7.2c6.48-11.184 21.264-11.648 32.16-4.64l87.040 59.184c-20.608-166-154.736-293.392-318.96-308.176v641.6h128.048c17.664 0 32 14.336 32 32s-14.336 32-32 32h-129.44c-0.24 0.832-0.448 1.664-0.768 2.464 57.104 13.28 99.696 64.368 99.696 125.536 0 71.248-57.744 129.008-129.008 129.008-71.248 0-128.992-57.744-128.992-129.008 0-60.816 42.112-111.664 98.736-125.28-0.336-0.88-0.576-1.808-0.848-2.72h-129.376c-17.664 0-32-14.336-32-32s14.336-32 32-32h127.984v-641.584c-164.176 14.784-298.16 142.128-318.816 308.112l86.944-59.12c10.88-7.008 25.664-6.544 32.144 4.64l6.56 7.2c6.48 11.216 2.944 25.904-7.952 32.912l-145.6 98.32c-0.192 0.144-0.304 0.32-0.48 0.416l-9.856 6.336c-5.408 3.52-11.696 4.368-17.408 2.976-5.744-1.36-10.912-4.992-14.192-10.592l-5.872-10.16c-0.112-0.192-0.096-0.384-0.208-0.592l-82.272-151.296c-6.496-11.168-2.944-25.872 7.952-32.896l9.12-3.424c10.88-6.992 24.256-0.64 30.752 10.544l47.904 88.976c29.376-204.72 205.104-357.824 413.28-357.824 208.064 0 383.92 153.088 413.36 357.712l47.84-88.864c6.496-11.184 19.888-17.536 30.768-10.544l9.12 3.424c10.896 7.024 14.448 21.728 7.952 32.896zM447.504 833.024c0 35.84 29.152 65.008 64.992 65.008s65.008-29.152 65.008-65.008-29.152-65.008-65.008-65.008c-35.824 0.016-64.992 29.168-64.992 65.008z" />
70
-<glyph unicode="&#xe02a;" glyph-name="wallet" d="M1023.648 669.52c0.464 23.664-5.904 78.848-77.84 98.064l-722.416 144.624c-52.944 0-96-43.056-96-96v-128.704l-32 0.080c-52.752-0.224-95.632-43.152-95.632-95.968v-511.808c0-52.944 43.056-96 96-96h832.464c52.944 0 96 43.056 96 96l-0.576 589.712zM191.392 816.208c0 16.72 12.88 30.464 29.216 31.872l706-142.88c0.256-0.128-5.248-17.936-30.88-17.6h-704.336v128.608zM960.24 79.792c0-17.664-14.336-32-32-32h-832.48c-17.664 0-32 14.336-32 32v511.824c0 17.664 14.336 32 32 32h800.064c31.408 0 64.4 10.704 64.4 31.888v-575.712zM191.824 399.504c-35.344 0-64-28.656-64-64s28.656-64 64-64 64 28.656 64 64-28.656 64-64 64z" />
71
-<glyph unicode="&#xe02b;" glyph-name="vector" d="M992 288h-32.272v1.616c0 161.92-86.528 303.808-215.664 382.384h160.816c11.088-19.040 31.504-32 55.12-32 35.344 0 64 28.656 64 64s-28.656 64-64 64c-23.632 0-44.032-12.96-55.12-32h-296.88v32c0 17.664-14.336 32-32 32h-128c-17.664 0-32-14.336-32-32v-32h-296.88c-11.088 19.040-31.488 32-55.12 32-35.344 0-64-28.656-64-64s28.656-64 64-64c23.632 0 44.032 12.96 55.12 32h160.8c-129.136-78.592-215.648-220.464-215.648-382.384v-1.616h-32.272c-17.664 0-32-14.336-32-32v-128c0-17.664 14.336-32 32-32h128c17.664 0 32 14.336 32 32v128c0 17.664-14.336 32-32 32h-31.728v1.616c0 178.448 122.464 328.672 287.728 371.392v-21.008c0-17.664 14.336-32 32-32h128c17.664 0 32 14.336 32 32v21.008c165.264-42.736 287.728-192.96 287.728-371.392v-1.616h-31.728c-17.664 0-32-14.336-32-32v-128c0-17.664 14.336-32 32-32h128c17.664 0 32 14.336 32 32v128c0 17.664-14.336 32-32 32zM128 160h-64v64h64v-64zM544 672h-64v64h64v-64zM960 160h-64v64h64v-64z" />
72
-<glyph unicode="&#xe02c;" glyph-name="speech" d="M960 896.4h-896c-35.344 0-64-28.656-64-64v-577.504c0-35.344 28.656-64 64-64h127.536v-159.312c0-12.912 7.744-24.528 19.632-29.504 4-1.68 8.224-2.496 12.368-2.496 8.256 0 16.336 3.184 22.432 9.184l185.024 182.128h529.008c35.344 0 64 28.656 64 64v577.504c0 35.344-28.656 64-64 64zM960 254.912h-555.216l-149.248-146.912v146.912h-191.536v577.488h896v-577.488zM224 510.992h576c17.664 0 32 14.336 32 32s-14.336 32-32 32h-576c-17.664 0-32-14.336-32-32s14.336-32 32-32zM224 638.992h576c17.664 0 32 14.336 32 32s-14.336 32-32 32h-576c-17.664 0-32-14.336-32-32s14.336-32 32-32zM224 382.992h384c17.664 0 32 14.336 32 32s-14.336 32-32 32h-384c-17.664 0-32-14.336-32-32s14.336-32 32-32z" />
73
-<glyph unicode="&#xe02d;" glyph-name="puzzle" d="M512-64.16c-20.288 0-39.376 7.872-53.744 22.192l-436.512 436.496c-29.536 29.68-29.536 77.952-0.064 107.568l159.904 159.872c9.872 9.872 25.024 12.224 37.44 5.744 12.368-6.464 19.12-20.224 16.688-33.968-1.632-9.152-2.368-16.496-2.368-23.12 0-70 56.976-128.144 127.008-128.144 70.096 0 121.28 58.144 121.28 128.144 0 70.096-51.184 127.088-121.28 127.088-6.56 0-13.872-0.752-23.024-2.368-13.872-2.56-27.504 4.32-33.968 16.688-6.464 12.4-4.128 27.568 5.744 37.44l149.088 149.12c28.88 28.752 78.816 28.688 107.568 0.064l109.152-109.216c22.784 70.816 89.28 122.224 167.536 122.224 97.024 0 175.968-78.976 175.968-176.032 0-78.256-51.376-144.752-122.224-167.504l106.032-105.968c29.6-29.68 29.6-77.952 0.032-107.6l-436.448-436.464c-14.432-14.384-33.52-22.256-53.808-22.256zM174.896 564.784l-107.904-107.872c-4.656-4.688-4.656-12.432 0.064-17.184l436.368-436.384c6.128-6.064 10.944-6.128 17.184 0.064l436.352 436.384c4.688 4.72 4.688 12.4-0.032 17.152l-153.904 153.808c-9.632 9.632-12.128 24.32-6.192 36.56s18.848 19.504 32.528 17.84l4.88-0.624c2.688-0.368 5.376-0.816 8.192-0.816 61.744 0 111.968 50.192 111.968 111.904 0 61.776-50.224 112.032-111.968 112.032-61.712 0-111.936-50.256-111.936-112.032 0-2.56 0.4-5.056 0.752-7.568l0.688-5.712c1.44-13.504-5.776-26.432-18.032-32.288-12.16-5.808-26.816-3.312-36.4 6.256l-156.944 157.024c-6.128 6.064-10.944 6.128-17.184-0.064l-97.12-97.12c83.28-20.624 139.376-95.968 139.376-185.536 0-105.312-79.92-192.128-185.296-192.128-89.536 0.016-164.848 63.088-185.44 146.304z" />
74
-<glyph unicode="&#xe02e;" glyph-name="printer" d="M952.736 705.072h-120.72v254.448h-640.032v-254.448h-120.72c-39.312 0-71.312-32-71.312-71.344v-433.888c0-39.344 32-71.344 71.312-71.344h120.72v-192.016h640.032v192.016h120.72c39.312 0 71.312 32 71.312 71.344v433.888c0 39.344-32 71.344-71.312 71.344zM255.984 896.512h512.032v-191.44h-512.032v191.44zM768.016 0.48h-512.032v352.4h512.032v-352.4zM960.048 199.84c0-4.080-3.28-7.344-7.312-7.344h-120.72v224.384h-640.032v-224.368h-120.72c-4.032 0-7.312 3.264-7.312 7.344v433.872c0 4.064 3.28 7.344 7.312 7.344h881.472c4.032 0 7.312-3.28 7.312-7.344v-433.888zM832 576.56h-32c-17.664 0-32-14.336-32-32s14.336-32 32-32h32c17.664 0 32 14.336 32 32s-14.336 32-32 32z" />
75
-<glyph unicode="&#xe02f;" glyph-name="present" d="M1024 639.504c0 35.344-28.656 64-64 64h-109.248c28.272 27.888 46.368 64.448 46.368 109.472 0 55.44-31.84 115.664-121.216 115.664-117.6 0-215.84-125.216-262-195.408-46.192 70.176-147.44 195.392-265.024 195.392-89.376 0-121.216-60.224-121.216-115.664 0-45.008 18.592-81.584 47.44-109.472h-111.104c-35.344 0-64-28.656-64-64v-191.568h64.56v-416.56c0-35.344 28.656-64 64-64h767.68c35.344 0 64 28.656 64 64v416.576h63.76v191.568zM775.904 864.624c39.568 0 57.216-16.624 57.216-51.664 0-71.088-79.344-109.44-153.968-109.44h-108.336c45.472 67.536 125.504 161.104 205.088 161.104zM248.88 864.624c79.6 0 162.656-93.568 208.128-161.088h-108.368c-74.624 0-156.976 39.344-156.976 110.432 0 35.024 17.648 50.656 57.216 50.656zM960 511.936h-416v127.568h416v-127.568zM64 639.504h416v-127.568h-416v127.568zM128.56 447.936h351.44v-416.56h-351.44v416.56zM896.256 31.376h-352.256v416.56h352.256v-416.56z" />
76
-<glyph unicode="&#xe030;" glyph-name="playlist" d="M33.76 896.24h448c17.664 0 32 14.336 32 32s-14.336 32-32 32h-448c-17.664 0-32-14.336-32-32s14.32-32 32-32zM33.76 704.24h448c17.664 0 32 14.336 32 32s-14.336 32-32 32h-448c-17.664 0-32-14.336-32-32s14.32-32 32-32zM513.76 544.24c0 17.664-14.336 32-32 32h-448c-17.664 0-32-14.336-32-32s14.336-32 32-32h448c17.664 0 32 14.336 32 32zM1012.88 635.456l-312.912 312.896c-9.904 9.92-24.656 11.84-36.592 6.016-12.544-4.336-21.616-16.112-21.616-30.128v-708.4c-33.92 25.136-78.432 40.528-127.376 40.528-106.064 0-192.096-71.776-192.096-160.288 0-88.528 86.032-160.336 192.096-160.336 106.128 0 192.096 71.808 192.096 160.336 0 4.016-0.368 7.936-0.72 11.872v744.096l261.84-261.856c12.496-12.496 32.768-12.496 45.264 0s12.496 32.768 0.016 45.264zM641.76 92.976c-2.304-44.496-54.192-92.816-128.128-92.816-75.648 0-128.352 50.56-128.352 95.872 0 45.344 52.704 95.84 128.352 95.84 73.936 0 125.824-48.256 128.128-92.784v-6.112z" />
77
-<glyph unicode="&#xe031;" glyph-name="pin" d="M1014.848 580.336l-368.16 370.016c-7.936 7.968-19.376 11.216-30.32 8.496-10.912-2.656-19.6-10.848-22.944-21.568-22.16-71.312-24.72-135.84-7.792-194.688-1.552-1.072-3.040-2.24-4.416-3.616l-171.104-171.072c-55.2 25.6-114.544 39.456-173.696 39.456-37.6 0-74.464-5.568-109.568-16.464-10.688-3.344-18.88-12-21.568-22.848-2.688-10.88 0.464-22.336 8.368-30.288l218.976-220.384-306.16-311.040-26.624-70.128 64.368 24.88 313.36 311.040 221.824-223.264c6.064-6.128 14.288-9.44 22.688-9.44 2.528 0 5.088 0.32 7.632 0.912 10.912 2.688 19.6 10.88 22.944 21.6 28.976 93.232 20.48 193.344-20.336 283.12l174.704 174.736c0.624 0.624 1.056 1.328 1.632 2 26.368-7.536 53.696-11.568 82.048-11.568 35.216 0 72.56 5.056 110.976 17.008 10.688 3.312 18.88 12 21.568 22.848 2.656 10.848-0.496 22.304-8.4 30.256zM603.152 135.856l-402.784 405.408c103.376 12.064 214.848-29.6 295.568-110.32 80.32-80.304 119.504-191.296 107.216-295.088zM600.224 403.456c-16.832 25.728-36.464 50.176-59.024 72.752-22.464 22.464-47.008 42.256-72.96 59.328l144.128 144.096c14.704-25.568 33.664-50 57.008-73.328 23.856-23.84 49.088-43.136 75.6-58.064l-144.752-144.784zM714.624 651.552c-61.536 61.536-85.248 130.128-72.688 212.88l286.912-288.4c-82.656-11.856-151.6 12.896-214.224 75.52z" />
78
-<glyph unicode="&#xe032;" glyph-name="picture" d="M960 880.096h-896c-35.184 0-64-28.816-64-64v-736.192c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v736.192c0 35.184-28.816 64-64 64zM960 79.904h-896v188.56l256.848 248.912 264.784-264.496c10.912-13.248 30.336-11.568 44.128-1.12l116.88 105.808 210.8-216.384c0.8-0.8 1.696-1.392 2.56-2.080v-59.2zM960 230.208l-188.032 192.416c-11.408 11.248-29.28 12.4-41.936 2.752l-120.56-105.024-264.944 262.080c-5.664 6.848-13.84 11.024-22.688 11.6-8.816 0.32-17.504-2.56-23.968-8.624l-233.872-227.6v458.288h896v-585.888zM736 559.872c35.28 0 63.84 28.608 63.84 63.84 0 35.216-28.56 63.824-63.84 63.824s-63.84-28.608-63.84-63.824c0-35.232 28.56-63.84 63.84-63.84z" />
79
-<glyph unicode="&#xe033;" glyph-name="map" d="M993.184 824.992l-320.96 133.072-319.44-126.432-321.968 126.368c-2.752 0.816-5.44 1.12-7.968 1.12-13.136 0.064-22.848-9.744-22.848-24.496v-830c0-17.568 13.872-35.872 30.816-40.56l322.336-127.184 319.008 129.504 321.024-126.128c2.752-0.752 5.44-1.12 7.968-1.12 13.12 0 22.848 9.744 22.848 24.496v820.736c0 17.568-13.872 35.888-30.816 40.624zM384 778.864l256 100.304v-761.504l-256-101.184v762.384zM64 873.312l256-94.576v-761.76l-256 104.272v752.064zM960 22l-256 96.384v759.824l256-110.384v-745.824z" />
80
-<glyph unicode="&#xe034;" glyph-name="layers" d="M21.84 658.192l475.088-258.72c4.784-2.592 10.032-3.904 15.312-3.904 5.216 0 10.432 1.28 15.184 3.84l480.096 258.72c10.464 5.632 16.976 16.624 16.816 28.528-0.16 11.936-6.912 22.752-17.504 28.16l-475.12 241.28c-9.056 4.592-19.744 4.624-28.88 0.064l-480.048-241.28c-10.624-5.344-17.44-16.16-17.632-28.064s6.256-22.944 16.688-28.624zM517.152 891.712l406.16-206.272-410.976-221.472-406.176 221.184 410.992 206.56zM1001.344 479.68l-94.976 48.224-68.56-36.976 80-40.624-410.96-221.456-406.192 221.184 85.312 42.88-68.368 37.248-100.32-50.4c-10.624-5.344-17.44-16.16-17.632-28.064s6.256-22.944 16.688-28.624l475.088-258.72c4.784-2.592 10.032-3.904 15.312-3.904 5.216 0 10.432 1.28 15.184 3.84l480.096 258.72c10.464 5.632 16.976 16.624 16.816 28.528-0.144 11.936-6.896 22.752-17.488 28.144zM1001.344 255.68l-89.968 44.224-68.56-36.976 75.008-36.624-410.976-221.456-406.192 221.184 79.312 35.872-68.368 37.248-94.32-43.408c-10.624-5.344-17.44-16.16-17.632-28.064s6.256-22.944 16.688-28.624l475.088-258.72c4.784-2.592 10.032-3.904 15.312-3.904 5.216 0 10.432 1.28 15.184 3.84l480.096 258.72c10.464 5.632 16.976 16.624 16.816 28.528-0.144 11.952-6.896 22.768-17.488 28.16z" />
81
-<glyph unicode="&#xe035;" glyph-name="handbag" d="M1022.736 17.36l-83.408 503.776c-7.44 65.312-66.976 118.432-132.72 118.432h-70.656v85.28c0 130.16-92.848 236.032-222.976 236.032-130.096 0-224.944-105.872-224.944-236.032v-85.28h-76.672c-65.744 0-125.28-53.12-132.528-117.056l-77.28-504.16c-2.976-26.56 2.224-47.504 15.408-62.288 12.432-13.904 30.528-20.976 53.744-20.976h873.568c32.912 0 51.776 13.216 61.84 24.32 9.216 10.208 19.648 28.144 16.624 57.952zM352.048 724.864c0 94.848 66.128 172.032 160.944 172.032s158.976-77.184 158.976-172.032v-85.28h-319.92v85.28zM947.168-0.448l-872.496-0.448c-5.504 0-11.008 2.944-9.712 10.688l77.248 504.096c3.84 33.44 35.504 61.68 69.152 61.68h76.688v-72.928c-19.072-11.072-32.048-31.488-32.048-55.136 0-35.344 28.656-64 64-64s64 28.656 64 64c0 23.616-12.928 44-31.952 55.088v72.992h319.904v-72.992c-19.008-11.088-31.952-31.488-31.952-55.088 0-35.344 28.656-64 64-64s64 28.656 64 64c0 23.648-12.976 44.064-32.048 55.152v72.928h70.656c33.664 0 65.312-28.256 69.408-63.44l83.344-503.28c0.4-4.096-2.816-9.312-12.192-9.312z" />
82
-<glyph unicode="&#xe036;" glyph-name="globe-alt" d="M929.504 545.584c0 168.784-88.976 321.872-237.968 409.568-15.248 9.008-34.88 3.872-43.808-11.376-8.944-15.216-3.872-34.848 11.376-43.808 129.248-76.032 206.4-208.528 206.4-354.368 0-242.368-175.936-418.288-418.32-418.288-54.192 0-106.784 10.16-156.32 30.16-16.368 6.656-35.056-1.28-41.664-17.664-6.624-16.4 1.28-35.056 17.664-41.664 57.216-23.12 117.872-34.848 180.32-34.848 0.192 0 0.384 0.016 0.576 0.016v-63.008h-92.928c-18.464 0-33.44-14.304-33.44-31.952s14.976-31.936 33.44-31.936h252.848c18.464 0 33.44 14.304 33.44 31.936 0 17.664-14.976 31.952-33.44 31.952h-96.384v66.8c245.808 28.56 418.208 220.912 418.208 478.48zM799.376 542.704c0 194.656-157.744 353.408-352.4 353.408-194.688 0-352.464-158.752-352.464-353.408s157.776-351.44 352.464-351.44c194.656 0 352.4 156.784 352.4 351.44zM158.496 542.704c0 159.024 129.408 289.408 288.464 289.408 159.024 0 288.4-130.368 288.4-289.408s-129.376-287.44-288.4-287.44c-159.056 0-288.464 128.4-288.464 287.44z" />
83
-<glyph unicode="&#xe037;" glyph-name="globe" d="M1025.024 448c0 272.016-213.664 495.104-482.32 511.024-5.536 0.608-11.088 1.008-16.72 1.008-1.664 0-3.328-0.176-4.992-0.224-2.992 0.048-5.968 0.224-8.992 0.224-282.88 0-513.024-229.696-513.024-512.032s230.144-512.032 513.024-512.032c3.024 0 6 0.176 9.008 0.24 1.664-0.064 3.328-0.24 4.992-0.24 5.632 0 11.184 0.4 16.72 1.008 268.64 15.92 482.304 238.976 482.304 511.024zM929.568 283.168c-17.632 5.12-61.92 16.24-140.064 25.392 6.464 44.192 10 90.896 10 139.44 0 38.256-2.208 75.344-6.288 111.008 99.008 11.824 142.384 26.72 145.296 27.744l-11.92 33.584c22.24-53.088 34.56-111.296 34.56-172.336 0-58.192-11.28-113.76-31.584-164.832zM285.488 448c0 35.808 2.368 70.768 6.704 104.4 51.888-4.080 113.936-7.088 186.864-7.792v-222.064c-70.992-0.688-131.664-3.568-182.688-7.472-7.040 42.192-10.88 86.88-10.88 132.928zM542.944 891.776c78.464-22.736 145.648-131.696 175.744-276.112-48.368-3.856-106.624-6.672-175.744-7.328v283.44zM479.056 890.992v-282.624c-68.368 0.688-126.88 3.472-176.064 7.232 30.704 142.608 98.432 250.752 176.064 275.392zM479.056 258.768v-253.744c-72.4 22.976-136.192 118.576-169.36 247.024 47.76 3.504 104.096 6.064 169.36 6.72zM542.944 4.224v254.56c65.952-0.624 122.064-3.28 169.216-6.928-32.608-130.128-96-226.416-169.216-247.632zM542.944 322.544v222.032c73.312 0.688 134.992 3.776 186.192 8 4.208-33.696 6.496-68.704 6.496-104.592 0-46.128-3.712-90.864-10.528-133.12-50.416 4.080-110.8 7.008-182.16 7.68zM914.8 646.064c-9.664-3.008-50.064-14.48-131.024-24.032-18.048 95.952-50.672 177.968-93.12 237.168 97.536-42.384 177.136-118.304 224.144-213.136zM358.816 869.408c-52.208-59.952-94.832-146.16-118.096-248.112-72.48 7.856-115.92 17.088-133.312 21.28 50.72 104.64 141.040 186.752 251.408 226.832zM83.632 582.816c12.32-3.344 58.912-14.944 145.552-24.528-4.96-35.44-7.68-72.304-7.68-110.304 0-48.272 4.368-94.72 12.24-138.688-74.4-8.032-120.16-17.648-140.688-22.608-19.44 50.096-30.208 104.448-30.208 161.312 0 46.96 7.312 92.256 20.784 134.816zM121.088 227.648c23.264 4.944 64.912 12.464 126.592 18.928 24.288-89.712 63.792-165.616 111.136-219.968-101.12 36.72-185.296 108.752-237.728 201.040zM690.656 36.816c38.224 53.264 68.48 125.024 87.296 208.8 63.408-7.28 103.216-15.792 123.296-20.864-48.016-83.072-121.856-149.392-210.592-187.936z" />
84
-<glyph unicode="&#xe038;" glyph-name="frame" d="M224 848h-192c-17.664 0-32-14.336-32-32v-192c0-17.664 14.336-32 32-32s32 14.336 32 32v160h160c17.664 0 32 14.336 32 32s-14.336 32-32 32zM992 304c-17.664 0-32-14.336-32-32v-160h-160c-17.664 0-32-14.336-32-32s14.336-32 32-32h192c17.664 0 32 14.336 32 32v192c0 17.664-14.336 32-32 32zM224 112h-160v160c0 17.664-14.336 32-32 32s-32-14.336-32-32v-192c0-17.664 14.336-32 32-32h192c17.664 0 32 14.336 32 32s-14.336 32-32 32zM992 848h-192c-17.664 0-32-14.336-32-32s14.336-32 32-32h160v-160c0-17.664 14.336-32 32-32s32 14.336 32 32v192c0 17.664-14.336 32-32 32z" />
85
-<glyph unicode="&#xe039;" glyph-name="folder-alt" d="M960.16 752h-480l-96 96h-320c-35.344 0-64-28.656-64-64v-160h-0.304v-64h0.304v-448c0-35.344 28.656-64 64-64h896c35.344 0 64 28.656 64 64v576c0 35.344-28.656 64-64 64zM64.144 784h290.752l78.624-77.248 20.112-18.752h506.528v-64h-896v160zM64.144 112v448h896v-448h-896z" />
86
-<glyph unicode="&#xe03a;" glyph-name="film" d="M800 687.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM800 495.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM800 303.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM800 111.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM160 687.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM160 495.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM160 303.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM160 111.712h64c17.664 0 32 14.336 32 32v32c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32zM960 944.096h-896c-35.184 0-64-28.816-64-64v-864.192c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v864.192c0 35.184-28.816 64-64 64zM960 15.904h-896v864.192h896v-864.192z" />
87
-<glyph unicode="&#xe03b;" glyph-name="feed" d="M101.872 629.744c-18.128 0-32.768-14.656-32.768-32.768 0-18.096 14.64-32.768 32.768-32.768 303.008 0 525.344-224.368 525.344-527.36 0-18.096 14.656-32.752 32.768-32.752s32.768 14.656 32.768 32.752c0 340.368-250.528 592.896-590.88 592.896zM102.16 957.376c-18.112 0-32.768-14.656-32.768-32.768s14.656-32.768 32.768-32.768c470.176 0 852.672-382.496 852.672-852.656 0-18.096 14.656-32.752 32.768-32.752s32.768 14.656 32.768 32.752c-0.016 506.288-411.92 918.192-918.208 918.192zM184.016 300.4c-99.472 0-180.368-81.12-180.368-180.88 0-99.712 80.912-180.912 180.368-180.912s180.4 81.184 180.4 180.912c0 99.76-80.928 180.88-180.4 180.88zM184.016 1.968c-64.608 0-117.168 52.752-117.168 117.568s52.56 117.536 117.168 117.536c64.624 0 117.216-52.72 117.216-117.536s-52.592-117.568-117.216-117.568z" />
88
-<glyph unicode="&#xe03c;" glyph-name="earphones-alt" d="M1023.84 387.456c0.096 21.056-3.216 100.496-5.744 123.216-29.12 260.752-240.752 450-503.184 450-273.344 0-494.816-210.624-509.84-489.904-0.32-6.096-2.56-49.344-2.72-75.088l-0.080-14.32c-1.312-5.92-2.112-12.032-2.112-18.336v-214.656c0-46.88 38.128-85.008 85.008-85.008h86.288c46.88 0 85.024 38.128 85.024 85.008v214.64c0 46.88-38.16 85.008-85.024 85.008h-86.304c-5.888 0-11.632-0.608-17.184-1.744 0.48 10.384 0.912 18.576 1.024 21.056 13.168 244.784 207.136 429.344 445.92 429.344 229.28 0 414.128-165.344 439.568-393.12 1.072-9.504 2.448-33.664 3.552-57.92-6.192 1.44-12.576 2.384-19.2 2.384h-85.28c-46.88 0-85.008-38.128-85.008-85.008v-213.664c0-32.368 18.4-60.256 45.088-74.592l-205.44-80.656v5.216c0 17.664-14.336 32-32 32h-96c-17.664 0-32-14.336-32-32v-32c0-17.664 14.336-32 32-32h96c0.272 0 0.512 0.080 0.784 0.080l57.36 0.224 329.552 129.376c4.32 1.792 7.984 4.464 10.992 7.664 28.848 13.616 48.992 42.736 48.992 76.688v213.664c0 5.216-0.64 10.288-1.552 15.232 0.88 2.944 1.504 6 1.52 9.216zM85.152 384.016h86.288c11.6 0 21.024-9.408 21.024-21.008v-214.656c0-11.6-9.44-21.008-21.024-21.008h-86.288c-11.6 0-21.008 9.408-21.008 21.008v214.656c0.016 11.6 9.424 21.008 21.008 21.008zM832.528 363.008c0 11.6 9.408 21.008 21.008 21.008h85.28c11.6 0 21.024-9.408 21.024-21.008v-213.664c0-11.6-9.44-21.008-21.024-21.008h-85.28c-11.6 0-21.008 9.408-21.008 21.008v213.664z" />
89
-<glyph unicode="&#xe03d;" glyph-name="earphones" d="M1023.84 355.44c0.096 21.056-3.216 100.496-5.744 123.216-29.12 260.752-240.752 450-503.184 450-273.344 0-494.816-210.624-509.84-489.904-0.32-6.096-2.56-49.344-2.72-75.088l-0.080-14.32c-1.312-5.92-2.112-12.032-2.112-18.336v-278.656c0-46.88 38.128-85.008 85.008-85.008h86.288c46.88 0 85.024 38.128 85.024 85.008v278.64c0 46.88-38.16 85.008-85.024 85.008h-86.32c-5.888 0-11.632-0.608-17.184-1.744 0.48 10.384 0.912 18.592 1.024 21.056 13.184 244.784 207.136 429.344 445.936 429.344 229.28 0 414.128-165.344 439.568-393.12 1.088-9.504 2.464-33.664 3.568-57.92-6.24 1.44-12.608 2.384-19.232 2.384h-85.28c-46.88 0-85.008-38.128-85.008-85.008v-277.664c0-46.896 38.128-85.008 85.008-85.008h85.28c46.88 0 85.024 38.128 85.024 85.008v277.664c0 5.216-0.64 10.288-1.568 15.216 0.928 2.944 1.536 6.016 1.568 9.232zM85.136 352h86.288c11.6 0 21.024-9.408 21.024-21.008v-278.656c0-11.616-9.44-21.008-21.024-21.008h-86.288c-11.6 0-21.008 9.408-21.008 21.008v278.656c0.032 11.6 9.44 21.008 21.008 21.008zM959.84 53.344c0-11.6-9.44-21.008-21.024-21.008h-85.28c-11.6 0-21.008 9.408-21.008 21.008v277.648c0 11.6 9.408 21.008 21.008 21.008h85.28c11.6 0 21.024-9.408 21.024-21.008v-277.648z" />
90
-<glyph unicode="&#xe03e;" glyph-name="drop" d="M510.4-62.704c-193.312 0-350.592 155.12-350.592 345.776 0 222.688 311.632 644.848 324.912 662.72 6 8.064 15.408 12.848 25.472 12.912 11.184 0.096 19.568-4.592 25.664-12.56 13.408-17.536 328.336-432.224 328.336-663.056 0-190.672-158.72-345.792-353.792-345.792zM510.752 872.304c-74.4-105.664-286.944-422.064-286.944-589.216 0-155.376 128.56-281.776 286.592-281.776 159.776 0 289.776 126.4 289.776 281.776 0.016 173.36-214.144 485.024-289.424 589.216z" />
91
-<glyph unicode="&#xe03f;" glyph-name="drawar" d="M1022.976 450.016l-117.504 407.088c-3.84 13.872-16.464 23.472-30.848 23.472h-735.344c-14.496 0-27.184-9.744-30.944-23.776l-107.392-386.352c-1.984-7.504-1.008-15.008 2-21.536-1.728-5.792-2.944-11.824-2.944-18.176v-351.312c0-35.344 28.656-64 64-64h896c35.344 0 64 28.656 64 64v351.312c0 1.712-0.368 3.328-0.496 5.008 0.832 4.592 0.816 9.44-0.528 14.272zM163.904 816.576h686.368l93.12-321.84h-298.336c-1.44-76.816-55.904-129.68-133.056-129.68s-130.624 52.88-132.064 129.68h-305.776l89.744 321.84zM960 79.424h-896v351.312h263.12c27.936-80.432 95.776-129.68 184.88-129.68s157.936 49.248 185.872 129.68h262.128v-351.312z" />
92
-<glyph unicode="&#xe040;" glyph-name="docs" d="M768 960h-352c-35.344 0-64-28.656-64-64h352v-256h256v-512h-224v-64h224c35.344 0 64 28.656 64 64v575.984l-256 256.016zM768 704v165.504l165.472-165.504h-165.472zM64 832c-35.344 0-64-28.656-64-64v-768c0-35.344 28.656-64 64-64h544c35.344 0 64 28.656 64 64v575.984l-256 256.016h-352zM608 0h-544v768h288v-256h256v-512zM416 576v165.504l165.472-165.504h-165.472z" />
93
-<glyph unicode="&#xe041;" glyph-name="directions" d="M1017.056 773.936l-99.696 111.344c-6.064 6.848-14.784 10.752-23.936 10.752h-350.256v33.968c0 16.56-14.336 30-32 30s-32-13.44-32-30v-33.968h-255.808c-17.68 0-32-14.32-32-32v-223.664c0-17.68 14.32-32 32-32h255.808v-64.096h-348.592c-9.152 0-17.872-3.904-23.936-10.752l-99.68-113.312c-10.752-12.128-10.752-30.368 0-42.496l99.68-112.288c6.112-6.848 14.784-9.744 23.936-9.744h348.592v-289.68c0-16.56 14.336-30 32-30s32 13.44 32 30v289.68h256.464c17.68 0 32 14.32 32 32v224.608c0 17.68-14.32 32-32 32h-256.464v64.096h350.256c9.152 0 17.872 3.904 23.936 10.752l99.696 112.32c10.736 12.112 10.736 30.352 0 42.48zM767.648 319.68h-622.688l-71.28 79.28 71.28 81.312h622.688v-160.592zM879.040 672.368h-623.68v159.664h623.68l71.28-79.344-71.28-80.32z" />
94
-<glyph unicode="&#xe042;" glyph-name="direction" d="M966.912 661.84l-179.12 192c-6.080 6.48-14.544 10.16-23.424 10.16h-267.12l-1.008 66c0 16.56-14.336 30-32 30s-30-13.44-30-30l-0.976-66h-352.768c-17.68 0-32-14.32-32-32v-384c0-17.68 14.32-32 32-32h352.336v-450c0-16.56 14.336-30 32-30s32 13.44 32 30v450h267.536c8.88 0 17.344 3.68 23.408 10.16l179.12 192c11.472 12.304 11.472 31.376 0.016 43.68zM750.464 480h-637.968v320h637.968l149.28-160-149.28-160z" />
95
-<glyph unicode="&#xe043;" glyph-name="diamond" d="M1018.72 664.528l-139.872 267.44c-8.16 15.6-29.264 28.352-46.848 28.352h-321.936c-0.352 0.016-0.704 0.112-1.056 0.128-0.288 0-0.56-0.112-0.848-0.128h-316.16c-17.6 0-38.752-12.72-47.024-28.256l-139.504-262.288c-8.288-15.536-6.624-39.936 3.632-54.256l480.016-669.152c5.152-7.184 12-10.816 18.832-10.816 6.784 0 13.584 3.536 18.768 10.592l487.904 664.256c10.384 14.192 12.256 38.544 4.096 54.128zM942.368 672.368h-171.456l68.656 196.608 102.8-196.608zM575.344 896.32h205.968l-63.888-182.928-142.080 182.928zM668.24 672.368h-297.648l140.672 202.096 156.976-202.096zM313.888 702.912l-64.176 193.408h198.816l-134.64-193.408zM680.752 608.368l-172.032-492.544-163.456 492.544h335.488zM436.928 128.912l-343.936 479.456h184.832l159.104-479.456zM748.544 608.368h185.168l-352.976-480.56 167.808 480.56zM188.48 877.584l68.096-205.216h-177.248l109.152 205.216z" />
96
-<glyph unicode="&#xe044;" glyph-name="cup" d="M832.56 544.208c-8.336 0-35.2 0.16-64.304 0.368l0.112 63.968c0 35.344-28.656 64-64 64l-640.496 0.16c-35.344 0-64-28.656-64-64v-480.944c0-106.032 85.968-192 192-192h384.656c106.032 0 191.008 85.968 191.008 192l0.064 32.848c29.024-0.224 58.608-0.4 64.976-0.4 105.776 0 191.568 85.040 191.568 191.072-0.016 106.048-85.808 192.928-191.584 192.928zM703.536 127.76c0-70.592-56.4-128-127.008-128h-384.656c-70.592 0-128 57.408-128 128l-0.096 480.944 640.592-0.192-0.832-480.752zM832.56 223.28c-6.352 0-35.888 0.192-64.864 0.4l0.448 256.816c29.12-0.208 56.048-0.368 64.4-0.368 73.12 0 128.624-54.544 128.624-127.84s-55.488-129.008-128.608-129.008zM575.872 736.24c17.664 0 32 14.336 32 32v160c0 17.664-14.336 32-32 32s-32-14.336-32-32v-160c0-17.68 14.336-32 32-32zM191.872 736.24c17.664 0 32 14.336 32 32v160c0 17.664-14.336 32-32 32s-32-14.336-32-32v-160c0-17.68 14.336-32 32-32zM383.872 736.24c17.664 0 32 14.336 32 32v160c0 17.664-14.336 32-32 32s-32-14.336-32-32v-160c0-17.68 14.336-32 32-32z" />
97
-<glyph unicode="&#xe045;" glyph-name="compass" d="M733.184 679.728l-313.152-134.64c-5.664-2.88-10.256-7.472-13.152-13.152l-143.456-289.216c-5.872-11.536-3.744-25.536 5.312-34.784 5.808-5.904 13.632-9.024 21.536-9.024 4.432 0 8.944 0.976 13.12 3.008l305.728 126.976c5.6 2.688 10.224 7.056 13.216 12.496l150.88 296.896c6.432 11.6 4.528 26.032-4.656 35.568-9.216 9.536-23.584 11.872-35.376 5.872zM357.856 295.184l87.008 177.68 87.872-109.984-174.88-67.696zM584.704 400.384l-88.8 111.152 176.784 69.76-87.984-180.912zM512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008z" />
98
-<glyph unicode="&#xe046;" glyph-name="call-out" d="M1000.352 188.384c-15.664 11.008-187.056 124.976-208.064 137.808-9.152 5.6-20.32 8.336-32.464 8.336-15.664 0-33.008-4.56-49.936-13.472-16.496-8.688-66.464-37.12-90.912-51.088-21.536 15.12-72.128 53.872-151.84 133.664-79.216 79.184-118.32 130.192-133.536 151.84 13.936 24.432 42.336 74.4 50.976 90.848 16.368 31.008 18.224 61.968 4.944 82.848-12.464 19.68-125.968 191.808-137.68 208-11.024 15.28-30.816 23.536-52.288 23.536-16.944 0-34.912-5.12-50.496-15.968-1.504-1.072-152.096-110.256-150.096-172.352 5.552-174.432 175.056-379.424 316.272-520.688s346.224-310.816 521.344-316.4h1.44c61.312 0 169.088 148.688 170.128 150.16 28.272 40.4 17.968 84.88-7.792 102.928zM956.144 122.736c-40.592-56.224-98.224-114.944-120.784-123.344-120.032 5.632-288.464 111.12-474.88 297.568-186.4 186.464-291.872 354.704-297.44 474.336 8.096 22.624 66.816 80.624 122.528 120.912 4.128 2.848 9.216 4.496 13.968 4.496 1.056 0 1.936-0.096 2.624-0.224 18-26.16 114.624-172.432 132.16-199.776 0.064-2.88-0.912-10.192-6.4-20.624-5.84-11.12-24.032-43.536-49.904-88.88l-20.128-35.28 23.344-33.248c17.408-24.72 58.816-78.464 140.624-160.288 82.16-82.192 135.712-123.472 160.336-140.784l33.248-23.344 35.28 20.16c34.192 19.536 75.504 42.944 88.944 50 10.784 5.68 18.16 6.128 20.16 6.128 0.32 0 0.592 0 0.816-0.032 24.496-15.376 173.936-114.592 200.32-132.688 0.432-2.56 0.032-8.128-4.816-15.088zM683.904 577.728l275.248 273.568-0.88-155.056c-0.288-12.944 9.968-24.192 22.912-23.888l16.416 0.016c12.96 0.32 23.648 8 23.92 20.928l0.656 231.008c0 0.224-0.864 0.384-0.864 0.608l1.264 11.712c0.128 6.496-1.376 12.288-5.6 16.432-4.128 4.176-9.936 6.72-16.384 6.544l-11.696-0.272c-0.224 0-0.4-0.096-0.656-0.128l-229.472 1.024c-12.928-0.288-23.616-10.976-23.92-23.92l-0.032-16.416c1.968-15.232 13.936-24.16 26.88-23.872l151.248-0.4-274.288-272.624c-12.496-12.496-12.496-32.768 0-45.264 12.496-12.48 32.752-12.48 45.248 0z" />
99
-<glyph unicode="&#xe047;" glyph-name="call-in" d="M1000.352 188.384c-15.664 11.008-187.056 124.976-208.064 137.808-9.152 5.6-20.32 8.336-32.464 8.336-15.664 0-33.008-4.56-49.936-13.472-16.496-8.688-66.464-37.12-90.912-51.088-21.536 15.12-72.128 53.872-151.84 133.664-79.216 79.184-118.32 130.192-133.536 151.84 13.936 24.432 42.336 74.4 50.976 90.848 16.368 31.008 18.224 61.968 4.944 82.848-12.464 19.68-125.968 191.808-137.68 208-11.024 15.28-30.816 23.536-52.288 23.536-16.944 0-34.912-5.12-50.496-15.968-1.504-1.072-152.096-110.256-150.096-172.352 5.552-174.432 175.056-379.424 316.272-520.688s346.224-310.816 521.344-316.4h1.44c61.312 0 169.088 148.688 170.128 150.16 28.272 40.4 17.968 84.88-7.792 102.928zM956.144 122.736c-40.592-56.224-98.224-114.944-120.784-123.344-120.032 5.632-288.464 111.12-474.88 297.568-186.4 186.464-291.872 354.704-297.44 474.336 8.096 22.624 66.816 80.624 122.528 120.912 4.128 2.848 9.216 4.496 13.968 4.496 1.056 0 1.936-0.096 2.624-0.224 18-26.16 114.624-172.432 132.16-199.776 0.064-2.88-0.912-10.192-6.4-20.624-5.84-11.12-24.032-43.536-49.904-88.88l-20.128-35.28 23.344-33.248c17.408-24.72 58.816-78.464 140.624-160.288 82.16-82.192 135.712-123.472 160.336-140.784l33.248-23.344 35.28 20.16c34.192 19.536 75.504 42.944 88.944 50 10.784 5.68 18.16 6.128 20.16 6.128 0.32 0 0.592 0 0.816-0.032 24.496-15.376 173.936-114.592 200.32-132.688 0.432-2.56 0.032-8.128-4.816-15.088zM643.84 583.488c4.128-4.176 9.936-6.72 16.384-6.544l11.712 0.272c0.224 0 0.384 0.096 0.64 0.112l229.504-1.008c12.912 0.304 23.616 10.992 23.92 23.936l0.016 16.416c-1.952 15.232-13.936 24.16-26.864 23.872l-151.504 0.4 261.952 261.6c12.496 12.496 12.496 32.768 0 45.264-12.496 12.48-32.752 12.48-45.248 0l-262.672-262.32 0.88 154.832c0.288 12.928-9.968 24.192-22.896 23.888l-16.416-0.016c-12.96-0.32-23.664-8.016-23.936-20.944l-0.656-231.008c0-0.224 0.88-0.384 0.88-0.608l-1.28-11.712c-0.128-6.496 1.392-12.272 5.584-16.432z" />
100
-<glyph unicode="&#xe048;" glyph-name="call-end" d="M961.696 760.448c0-1.056-0.096-1.936-0.224-2.624-26.16-18-172.432-114.624-199.776-132.16-2.88-0.064-10.192 0.912-20.624 6.4-11.12 5.84-43.536 24.032-88.88 49.904l-35.28 20.128-33.248-23.344c-24.72-17.408-78.464-58.816-160.288-140.624-82.176-82.16-123.456-135.712-140.768-160.336l-23.344-33.248 20.16-35.28c19.536-34.192 42.944-75.504 50-88.944 5.68-10.784 6.128-18.16 6.128-20.16 0-0.32 0-0.592-0.032-0.816-15.36-24.496-114.592-173.936-132.672-200.32-2.56-0.432-8.128-0.032-15.088 4.816-56.256 40.608-114.96 98.24-123.376 120.8 5.632 120.032 111.12 288.464 297.568 474.88 186.464 186.4 354.72 291.872 474.352 297.44 22.624-8.096 80.624-66.816 120.912-122.528 2.832-4.128 4.48-9.232 4.48-13.984zM1023.696 760.448c0 16.944-5.12 34.912-15.968 50.496-1.056 1.504-108.256 152.096-170.336 150.096-174.432-5.552-379.44-175.056-520.704-316.272-141.232-141.216-310.8-346.224-316.384-521.344v-1.44c0-61.312 148.672-169.088 150.144-170.128 40.4-28.288 84.88-17.968 102.944 7.776 11.008 15.664 124.976 187.056 137.808 208.064 5.6 9.152 8.336 20.32 8.336 32.464 0 15.664-4.576 33.008-13.472 49.936-8.688 16.496-37.12 66.464-51.088 90.912 15.12 21.536 53.872 72.128 133.664 151.84 79.184 79.216 130.192 118.32 151.84 133.536 24.432-13.936 74.4-42.336 90.848-50.976 31.008-16.368 61.968-18.224 82.848-4.944 19.68 12.464 189.808 125.968 206 137.68 15.28 11.056 23.52 30.848 23.52 52.304v0z" />
101
-<glyph unicode="&#xe049;" glyph-name="calculator" d="M960 960.096h-896c-35.184 0-64-28.816-64-64v-896.192c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v896.192c0 35.184-28.816 64-64 64zM960-0.096h-896v896.192h896v-896.192zM224 607.696h64v-64c0-17.664 14.336-32 32-32s32 14.336 32 32v64h64c17.664 0 32 14.336 32 32s-14.336 32-32 32h-64v64c0 17.664-14.336 32-32 32s-32-14.336-32-32v-64h-64c-17.664 0-32-14.336-32-32s14.336-32 32-32zM433.136 368.848c-12.496 12.496-32.752 12.496-45.248 0l-67.888-67.872-67.888 67.872c-12.496 12.496-32.752 12.496-45.264 0-12.496-12.496-12.496-32.768 0-45.264l67.872-67.872-67.872-67.872c-12.496-12.496-12.496-32.768 0-45.264s32.752-12.496 45.264 0l67.888 67.856 67.888-67.872c12.496-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.264l-67.872 67.872 67.872 67.872c12.496 12.512 12.496 32.768 0 45.28zM608 607.696h192c17.664 0 32 14.336 32 32s-14.336 32-32 32h-192c-17.664 0-32-14.336-32-32s14.336-32 32-32zM608 287.696h192c17.664 0 32 14.336 32 32s-14.336 32-32 32h-192c-17.664 0-32-14.336-32-32s14.336-32 32-32zM608 159.696h192c17.664 0 32 14.336 32 32s-14.336 32-32 32h-192c-17.664 0-32-14.336-32-32s14.336-32 32-32z" />
102
-<glyph unicode="&#xe04a;" glyph-name="bubbles" d="M424.816 280.656c230.944 0 409.904 131.904 407.152 327.632 0 173.184-183.216 311.632-414.16 311.632-230.976 0-418.16-138.448-418.16-311.632 0-107.872 52.912-222.88 163.408-279.376 0-0.656-0.192-1.152-0.192-1.872 0-46.88-39.024-111.152-54.4-137.664h0.064c-1.216-2.88-1.952-6-1.952-9.344 0-13.12 10.576-23.664 23.696-23.664 1.936 0 5.088 0.4 6.224 0.4 0.32 0 0.432 0 0.4-0.096 81.664 13.344 202.256 105.248 220.128 127.024 18.336-2.72 30.72-3.152 46.080-3.152 6.528 0.016 13.472 0.112 21.712 0.112zM330.688 349.536l-40.976-34.032c-9.504-10.976-50.8-45.44-86.352-67.808 21.648 61.68 20.704 81.216 20.704 81.216l3.008 39.152-34.88 17.808c-88.672 45.344-128.528 139.744-128.528 222.4 0 137.664 158.864 247.632 354.16 247.632 195.28 0 350.16-109.968 350.16-247.632-0.608-152.608-145.872-264.624-341.152-264.624 0 0-29.808-1.152-60.4 3.376l-35.744 2.512zM1024.336 349.808c0 86.736-33.888 152.88-118.448 202.512-2.064-23.072-8.64-47.824-15.792-69.568 54.656-37.776 70.256-76.56 70.256-132.944 0-69.024-32.16-119.088-106.912-157.344l-31.84-15.808c0 0 3.312-82 8.224-102.752-62.448 45.776-83.904 84-83.904 84l-33.664-5.184c-13.312-1.936-49.312-1.968-49.312-1.968-86.944 0-151.376 20.72-206.336 63.744 14.928 0.912-89.184 0.88-91.504-1.152 63.568-77.632 167.472-126.592 297.84-126.592 7.088 0 13.088-0.064 18.72-0.064 13.28 0 24 0.368 39.84 2.688 15.488-18.784 102.224-101.504 172.816-113.008-0.032 0.064 0.064 0.064 0.368 0.064 0.944 0 3.68-0.336 5.344-0.336 11.344 0 20.496 9.12 20.496 20.464 0 2.88-0.656 5.6-1.68 8.064h0.064c-13.28 22.88-34.128 89.744-34.128 130.256 0 0.624-0.192 1.056-0.192 1.632 95.504 48.832 139.744 120.080 139.744 213.296z" />
103
-<glyph unicode="&#xe04b;" glyph-name="briefcase" d="M960.016 768.528h-255.6v62c0 52.944-43.056 96-96 96h-192.432c-52.944 0-96-43.056-96-96v-62h-255.968c-35.184 0-64-28.816-64-64v-224.256h-0.032v-64h0.032v-382.816c0-35.184 28.816-64 64-64h896c35.184 0 64 28.816 64 64v671.072c0 35.184-28.816 64-64 64zM383.984 830.528c0 17.664 14.336 32 32 32h192.432c17.664 0 32-14.336 32-32v-62h-256.432v62zM64.016 704.528h896v-224.256h-352.368v32.752c0 35.28-28.72 64-64 64h-63.744c-35.28 0-64-28.72-64-64v-32.752h-351.888v224.256zM543.696 351.872h-63.808v161.152h63.744l0.064-161.152zM64.016 33.472v382.816h351.872v-64.4c0-35.28 28.72-64 64-64h63.744c35.28 0 64 28.72 64 64v64.4h352.368v-382.816h-895.984z" />
104
-<glyph unicode="&#xe04c;" glyph-name="book-open" d="M952.080 958.448l-423.040-114.592c-10.752-2.88-34.096-2.848-44.816 0.16l-412.144 114.208c-36.784 10.128-72.416-16.4-72.416-54.272v-778.112c0-32.096 24.336-62.784 55.312-71.408l412.16-114.224c11.024-3.056 25.216-4.752 39.936-4.752 10.096 0 25.008 0.784 38.72 4.528l423.024 114.592c31.056 8.4 55.504 39.024 55.504 71.248v778.128c0.016 37.84-35.616 64.464-72.24 54.496zM480 3.056l-408.928 113.056c-3.088 0.848-7.408 6.496-7.408 9.712v768.032l403.472-111.536c3.904-1.088 8.288-1.936 12.864-2.656v-776.608zM960.336 125.824c0-3.152-5.184-8.656-8.256-9.504l-408.080-110.528v775.92c0.592 0.144 1.2 0.224 1.792 0.384l414.528 112.128v-768.4zM642 593.696c2.88 0 5.808 0.368 8.688 1.184l223.936 63.024c17.024 4.816 26.944 22.464 22.16 39.472s-22.56 26.88-39.472 22.16l-223.936-63.024c-17.024-4.816-26.944-22.464-22.16-39.472 3.968-14.128 16.816-23.344 30.784-23.344zM642 401.696c2.88 0 5.808 0.368 8.688 1.184l223.936 63.024c17.024 4.816 26.944 22.464 22.16 39.472s-22.56 26.88-39.472 22.16l-223.936-63.024c-17.024-4.816-26.944-22.464-22.16-39.456 3.968-14.128 16.816-23.36 30.784-23.36zM642 209.696c2.88 0 5.808 0.368 8.688 1.184l223.936 63.024c17.024 4.816 26.944 22.464 22.16 39.472s-22.56 26.88-39.472 22.16l-223.936-63.024c-17.024-4.816-26.944-22.464-22.16-39.472 3.968-14.112 16.816-23.344 30.784-23.344zM394.624 656.512l-223.936 63.024c-16.912 4.72-34.688-5.152-39.472-22.16s5.12-34.656 22.16-39.472l223.936-63.024c2.88-0.816 5.808-1.184 8.688-1.184 13.968 0 26.816 9.216 30.784 23.344 4.784 16.992-5.12 34.656-22.16 39.472zM394.624 464.512l-223.936 63.024c-16.912 4.72-34.688-5.152-39.472-22.16s5.12-34.656 22.16-39.472l223.936-63.024c2.88-0.816 5.808-1.184 8.688-1.184 13.968 0 26.816 9.216 30.784 23.344 4.784 16.992-5.12 34.656-22.16 39.472zM394.624 272.512l-223.936 63.024c-16.912 4.72-34.688-5.152-39.472-22.16s5.12-34.656 22.16-39.472l223.936-63.024c2.88-0.816 5.808-1.184 8.688-1.184 13.968 0 26.816 9.216 30.784 23.344 4.784 17.008-5.12 34.656-22.16 39.472z" />
105
-<glyph unicode="&#xe04d;" glyph-name="basket-loaded" d="M1015.664 676c-5.968 8.464-15.664 13.504-26 13.504h-99.744l-205.136 174.832c-24.976 24.976-65.52 25.008-90.496 0l-201.648-174.832h-82.096l-51.408 177.28c-20.16 69.808-68.064 77.344-87.712 77.344h-137.088c-17.568 0-31.776-14.224-31.776-31.776s14.224-31.776 31.776-31.776h137.056c4.336 0 17.568 0 26.592-31.184l176.848-649.936c3.84-13.712 16.336-23.184 30.592-23.184h431.968c13.408 0 25.376 8.4 29.904 21.024l152.256 449.68c3.504 9.744 2.048 20.592-3.888 29.024zM639.536 819.072l152.032-129.584h-304.112l152.080 129.584zM815.024 239.808h-385.488l-101.152 386.128h616.096l-129.456-386.128zM752 111.872c-44.192 0-80-35.808-80-80s35.808-80 80-80 80 35.808 80 80-35.808 80-80 80zM464 111.872c-44.192 0-80-35.808-80-80s35.808-80 80-80 80 35.808 80 80-35.808 80-80 80z" />
106
-<glyph unicode="&#xe04e;" glyph-name="basket" d="M1015.664 676c-5.968 8.464-15.664 13.504-26 13.504h-679.136l-51.408 177.28c-20.16 69.808-68.064 77.344-87.712 77.344h-137.072c-17.568 0-31.776-14.224-31.776-31.776s14.224-31.776 31.776-31.776h137.056c4.336 0 17.568 0 26.592-31.184l176.848-649.936c3.84-13.712 16.336-23.184 30.592-23.184h431.968c13.408 0 25.376 8.4 29.904 21.024l152.256 449.68c3.504 9.744 2.048 20.592-3.888 29.024zM815.024 239.808h-385.488l-101.152 386.128h616.096l-129.456-386.128zM752 111.872c-44.192 0-80-35.808-80-80s35.808-80 80-80 80 35.808 80 80-35.808 80-80 80zM464 111.872c-44.192 0-80-35.808-80-80s35.808-80 80-80 80 35.808 80 80-35.808 80-80 80z" />
107
-<glyph unicode="&#xe04f;" glyph-name="bag" d="M864 801.296h-191.184v61.376c0 52.944-43.056 96-96 96h-127.632c-52.944 0-96-43.056-96-96v-61.376h-193.184c-35.344 0-64-28.656-64-64v-735.968c0-35.344 28.656-64 64-64h704c35.344 0 64 28.656 64 64v735.968c0 35.344-28.656 64-64 64zM417.184 862.672c0 17.664 14.336 32 32 32h127.632c17.664 0 32-14.336 32-32v-61.376h-191.632v61.376zM864 1.328h-704v735.968h193.184v-65.84c0 0-0.848-31.968 31.808-31.968 36 0 32.192 31.968 32.192 31.968v65.84h191.632v-65.84c0 0-2.128-32.128 31.872-32.128 32 0 32.128 32.128 32.128 32.128v65.84h191.184v-735.968z" />
108
-<glyph unicode="&#xe050;" glyph-name="action-undo" d="M990.064 17.664c-0.336 0-0.72 0-1.088 0.032-16.192 0.528-26.4 13.088-27.776 29.216-1.088 11.872-33.968 299.088-482.256 298.784v-183.664c0-12.368-7.12-23.664-18.336-28.944-11.088-5.312-24.432-3.68-33.968 4.224l-414.976 343.776c-7.44 6.096-11.712 15.184-11.68 24.784s4.336 18.688 11.776 24.752l414.96 340.56c9.568 7.808 22.784 9.312 33.936 4.096 11.152-5.312 18.288-16.56 18.288-28.912v-179.632c185.968-5.904 330.992-65.712 424.336-174.976 151.936-177.776 118.032-436.16 116.432-446.912-2.368-15.664-13.872-27.184-29.648-27.184zM446.944 410.192c0.032 0 0.064 0 0.064 0 320.224-0.192 442.592-108.32 512.464-203.808-10.224 76.496-40.064 168.72-105.008 244.032-86.336 100.096-225.44 152.848-407.536 152.848-17.68 0-32 14.32-32 32v143.776l-332.432-273.36 332.432-275.904v148.4c0 8.496 3.376 16.656 9.408 22.656 6 5.984 14.128 9.36 22.608 9.36z" />
109
-<glyph unicode="&#xe051;" glyph-name="action-redo" d="M33.936 17.664c0.336 0 0.72 0 1.088 0.032 16.192 0.528 26.4 13.088 27.776 29.216 1.088 11.872 32.976 299.088 481.248 298.784l1.008-183.664c0-12.368 7.12-23.664 18.336-28.944 11.088-5.312 24.432-3.68 33.968 4.224l414.976 343.776c7.44 6.096 11.712 15.184 11.68 24.784s-4.336 18.688-11.776 24.752l-414.96 340.56c-9.568 7.808-22.784 9.312-33.936 4.096-11.152-5.312-18.288-16.56-18.288-28.912l-1.008-179.632c-185.952-5.888-329.968-65.712-423.328-174.96-151.936-177.776-118.032-436.16-116.432-446.912 2.368-15.68 13.872-27.2 29.648-27.2zM577.056 410.192c-0.032 0-0.064 0-0.064 0-320.208-0.192-442.592-108.32-512.464-203.824 10.224 76.496 40.064 168.72 105.008 244.032 86.336 100.096 225.44 152.848 407.536 152.848 17.68 0 32 14.32 32 32v143.776l332.432-273.344-332.448-275.904v148.4c0 8.496-3.376 16.656-9.408 22.656-5.984 5.984-14.112 9.36-22.592 9.36z" />
110
-<glyph unicode="&#xe052;" glyph-name="wrench" d="M1006.368 744.064c-10.784 4.976-23.584 3.088-32.56-4.848l-161.312-144.896-145.632 149.408 144.192 166.528c7.84 9.056 9.744 21.536 4.864 32.512s-15.664 17.696-27.52 17.696h-8.688c-89.12 0-242.976-7.664-311.664-77.344l-13.856-13.76c-73.28-74.768-86.288-197.376-47.68-290.576l-369.28-376.896c-49.792-50.48-49.792-132.32 0-182.816l45.072-45.696c24.896-25.232 57.536-37.856 90.176-37.856 32.624 0 65.264 12.624 90.144 37.856l374.72 377.728c35.44-19.152 84-31.664 124.784-31.664 65.376 0 127.344 26.368 174.528 74.256l13.664 13.84c74.608 75.648 73.456 237.296 73.792 308.416 0.032 12.096-6.928 23.088-17.744 28.112zM905.664 450.992l-11.872-13.872c-35.744-36.272-82.496-53.648-131.664-53.648-24.32 0-57.088 4.576-79.216 13.792-20 8.304-38.576 20.288-55.2 35.424l-410.176-413.616c-12.032-12.224-28.032-18.944-45.056-18.944s-33.040 6.72-45.088 18.944l-45.056 45.68c-24.864 25.216-24.864 66.224-0.016 91.44l400.784 408.864c-13.44 19.568-22.592 40.896-28.048 62.976h-0.016c-15.424 62.384-6.432 148.608 42.016 198.048l13.792 13.92c41.552 42.16 149.456 54.624 209.2 58.304l-117.36-135.536c-10.496-12.128-9.968-30.4 1.216-41.872l185.536-190.336c11.248-11.584 29.44-12.256 41.552-1.52l130.608 117.632c-3.888-63.36-16.192-155.376-55.936-195.68z" />
111
-<glyph unicode="&#xe053;" glyph-name="umbrella" d="M1024.32 450.416c0-17.664-14.288-31.984-31.968-31.984h-448.88v-324.192c0-87.152-70.912-158.080-158.096-158.080s-158.112 70.928-158.112 158.080c0 17.664 14.32 31.984 31.984 31.984s31.984-14.32 31.984-31.984c0-51.904 42.224-94.128 94.16-94.128 51.92 0 94.16 42.224 94.16 94.128v324.192h-447.888c-17.664 0-31.984 14.336-31.984 31.984 0 247.296 180.912 404.112 479.856 414.48v62.976c0 17.664 14.32 31.968 31.984 31.968 17.68 0 31.968-14.32 31.968-31.968v-62.976c299.008-10.352 480.832-167.184 480.832-414.48zM959.152 482.384c-15.776 200.528-178.896 319.12-447.648 319.12s-430.896-118.592-446.656-319.104h894.304z" />
112
-<glyph unicode="&#xe054;" glyph-name="trash" d="M896.8 800.976h-225.28v87.264c0 40.528-33.008 72.496-73.536 72.496h-171.984c-40.528 0-73.52-31.968-73.52-72.496v-87.264h-225.28c-17.664 0-32-14.336-32-32s14.336-32 32-32h44.016l74.24-739.92c3.104-34.624 32.608-61.776 67.136-61.776h398.8c34.528 0 64 27.152 67.088 61.472l74.304 740.24h44.016c17.68 0 32 14.336 32 32s-14.32 31.984-32 31.984zM416.48 888.24c0 5.232 4.272 9.504 9.52 9.504h171.984c5.248 0 9.536-4.272 9.536-9.504v-87.264h-191.040v87.264zM714.768 2.8c-0.16-1.776-2.256-3.536-3.376-3.536h-398.8c-1.12 0-3.232 1.744-3.424 3.84l-73.632 733.856h552.912l-73.68-734.16z" />
113
-<glyph unicode="&#xe055;" glyph-name="tag" d="M1023.984 543.728v338.368c0 42.944-34.944 77.904-77.872 77.904h-345.376c-21.68 0-54.496 0-75.92-21.44l-505.936-505.952c-12.16-12.16-18.88-28.304-18.88-45.488 0-17.216 6.688-33.376 18.848-45.536l386.8-386.72c12.112-12.176 28.272-18.864 45.456-18.864s33.36 6.688 45.488 18.848l505.952 505.968c21.696 21.648 21.568 52.816 21.44 82.912zM957.296 506.064l-506.416-505.936-386.752 387.216 505.392 505.504c5.088 3.152 23.408 3.152 30.992 3.152l14.4-0.048 331.2 0.048c7.664 0 13.872-6.24 13.872-13.904v-338.624c0.064-12.176 0.128-32.544-2.688-37.408zM768.016 832c-70.688 0-128-57.312-128-128s57.312-128 128-128 128 57.312 128 128-57.312 128-128 128zM768.016 640c-35.344 0-64 28.656-64 64s28.656 64 64 64 64-28.656 64-64-28.656-64-64-64z" />
114
-<glyph unicode="&#xe056;" glyph-name="support" d="M512 960c-282.768 0-512-229.232-512-512s229.232-512 512-512 512 229.232 512 512-229.232 512-512 512zM640 877.024c144.224-42.992 257.648-156.8 300.704-301.024h-207.568c-22.416 38.528-54.592 70.672-93.136 93.056v207.968zM703.632 447.792c0-105.936-85.792-191.808-191.632-191.808s-191.632 85.872-191.632 191.808 85.808 191.824 191.632 191.824 191.632-85.888 191.632-191.824zM448 891.072c20.912 2.992 42.256 4.624 64 4.624 21.728 0 43.088-1.632 64-4.624v-195.808c-20.48 5.296-41.856 8.4-64 8.4s-43.504-3.104-64-8.4v195.808zM384 877.024v-207.968c-38.56-22.384-70.72-54.544-93.136-93.056h-207.568c43.040 144.224 156.48 258.032 300.704 301.024zM64.304 447.84c0 21.824 1.856 43.168 4.88 64.16h195.392c-5.312-20.512-8.24-41.984-8.24-64.176 0-22.064 2.912-43.424 8.16-63.824h-195.36c-2.976 20.88-4.832 42.144-4.832 63.84zM384 18.672c-144.336 43.008-257.808 156.976-300.8 301.328h207.472c22.432-38.656 54.656-70.944 93.328-93.392v-207.936zM576 4.624c-20.912-2.992-42.272-4.624-64-4.624-21.744 0-43.088 1.648-64 4.624v195.776c20.496-5.296 41.856-8.4 64-8.4s43.52 3.104 64 8.4v-195.776zM640 18.672v207.936c38.656 22.448 70.896 54.736 93.312 93.392h207.472c-42.992-144.336-156.464-258.32-300.784-301.328zM759.504 384c5.248 20.4 8.16 41.76 8.16 63.824 0 22.192-2.928 43.664-8.256 64.176h195.408c3.008-20.992 4.88-42.336 4.88-64.16 0-21.696-1.84-42.976-4.832-63.84h-195.36z" />
115
-<glyph unicode="&#xe057;" glyph-name="size-fullscreen" d="M685.904 576.816l275.264 273.568-0.896-155.072c-0.288-12.928 9.968-24.176 22.912-23.888l16.416 0.016c12.944 0.304 23.648 8 23.92 20.928l0.672 231.008c0 0.224-0.88 0.4-0.88 0.624l1.264 11.712c0.128 6.496-1.392 12.288-5.584 16.432-4.144 4.176-9.952 6.72-16.4 6.544l-11.696-0.272c-0.224 0-0.4-0.080-0.64-0.112l-229.488 1.008c-12.928-0.288-23.632-10.976-23.92-23.92l-0.032-16.416c1.968-15.248 13.952-24.16 26.88-23.872l151.248-0.4-274.288-272.624c-12.496-12.496-12.496-32.752 0-45.264 12.496-12.48 32.752-12.48 45.248 0zM339.088 319.184l-275.264-272.72 0.88 154.224c0.304 12.944-9.968 24.192-22.896 23.904l-17.424-0.032c-12.96-0.32-23.648-8-23.92-20.944l-0.672-231.008c0-0.224 0.88-0.368 0.88-0.624l-1.264-11.68c-0.144-6.496 1.376-12.32 5.584-16.432 4.128-4.192 9.952-6.72 16.384-6.56l11.712 0.288c0.224 0 0.384 0.096 0.64 0.096l230.496-1.008c12.928 0.32 23.616 11.008 23.92 23.936l0.032 16.432c-1.968 15.216-13.952 24.16-26.88 23.872l-151.248 0.4 274.272 272.592c12.496 12.496 12.496 32.752 0 45.248s-32.736 12.512-45.232 0.016zM1024.208-27.376l-0.672 231.008c-0.288 12.944-10.992 20.624-23.92 20.944l-16.416 0.032c-12.944 0.288-23.184-10.976-22.912-23.904l0.896-155.072-275.28 273.552c-12.496 12.496-32.752 12.496-45.248 0s-12.496-32.752 0-45.248l274.272-272.592-151.232-0.4c-12.928 0.288-24.912-8.656-26.88-23.872l0.032-16.432c0.304-12.944 11.008-23.632 23.92-23.936l229.504 1.008c0.24 0 0.416-0.096 0.64-0.096l11.696-0.288c6.448-0.16 12.272 2.368 16.4 6.56 4.192 4.128 5.696 9.936 5.584 16.432l-1.264 11.68c0 0.256 0.88 0.4 0.88 0.624zM110.048 894.672l151.264 0.4c12.928-0.288 24.912 8.64 26.88 23.872l-0.032 16.432c-0.32 12.944-11.008 23.648-23.92 23.92l-230.512-0.992c-0.256 0.032-0.416 0.112-0.64 0.112l-11.712 0.272c-6.432 0.176-12.272-2.368-16.384-6.544-4.208-4.144-5.728-9.936-5.584-16.432l1.264-11.712c0-0.224-0.88-0.384-0.88-0.624l0.672-231.008c0.288-12.928 10.976-20.624 23.92-20.928l17.424-0.016c12.928-0.288 23.184 10.96 22.896 23.888l-0.88 154.224 275.264-272.72c12.48-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.264l-274.288 272.592z" />
116
-<glyph unicode="&#xe058;" glyph-name="size-actual" d="M383.2 613.2l-0.672 231.008c-0.288 12.928-10.992 20.624-23.92 20.928l-16.416 0.016c-12.944 0.288-23.184-10.976-22.912-23.888l0.896-155.248-266.272 263.728c-12.496 12.496-32.752 12.496-45.248 0s-12.496-32.752 0-45.248l265.12-262.608-151.088-0.4c-12.928 0.288-24.912-8.64-26.88-23.872l0.032-16.416c0.32-12.944 11.008-23.648 23.92-23.936l229.504 1.008c0.256-0.016 0.416-0.112 0.64-0.112l11.696-0.272c6.448-0.176 12.272 2.352 16.4 6.544 4.208 4.144 5.712 9.952 5.584 16.432l-1.264 11.712c0.016 0.224 0.88 0.4 0.88 0.624zM645.984 584.432c4.128-4.176 9.952-6.72 16.4-6.544l11.696 0.272c0.224 0 0.384 0.080 0.64 0.112l229.504-1.008c12.928 0.288 23.616 10.992 23.92 23.936l0.032 16.416c-1.968 15.248-13.952 24.16-26.88 23.872l-151.088 0.4 265.12 262.608c12.496 12.496 12.496 32.752 0 45.248s-32.752 12.496-45.248 0l-266.256-263.712 0.88 155.232c0.304 12.928-9.952 24.176-22.896 23.888l-16.416-0.016c-12.96-0.304-23.648-8-23.92-20.928l-0.672-231.008c0-0.224 0.88-0.384 0.88-0.624l-1.264-11.712c-0.144-6.496 1.36-12.288 5.568-16.432zM378.016 312.576c-4.144 4.176-9.952 6.704-16.4 6.544l-11.696-0.288c-0.224 0-0.384-0.096-0.64-0.112l-229.52 1.008c-12.928-0.304-23.616-10.992-23.92-23.92l-0.032-16.432c1.968-15.216 13.952-24.16 26.88-23.856l151.248-0.4-265.28-263.616c-12.496-12.496-12.496-32.752 0-45.248s32.752-12.496 45.248 0l266.272 264.576-0.896-156.080c-0.288-12.944 9.968-24.192 22.912-23.904l16.416 0.032c12.944 0.32 23.648 8 23.92 20.928l0.672 231.008c0 0.224-0.88 0.368-0.88 0.608l1.264 12.704c0.144 6.496-1.36 12.288-5.568 16.448zM750.064 255.104l151.248 0.4c12.928-0.304 24.912 8.64 26.88 23.856l-0.032 16.432c-0.32 12.944-11.008 23.632-23.92 23.92h-229.504c-0.256 0.016-0.416 0.112-0.64 0.112l-13.696 0.272c-6.448 0.176-12.288-4.352-16.4-8.544-4.208-4.144-5.712-9.936-5.584-16.432l1.264-11.696c0-0.24-0.88-0.384-0.88-0.608l0.672-231.008c0.288-12.928 10.976-20.608 23.92-20.928l17.424-0.032c12.944-0.288 23.184 10.976 22.896 23.904l-0.88 154.528 267.264-263.024c12.496-12.496 32.752-12.496 45.248 0s12.496 32.752 0 45.248l-265.28 263.6z" />
117
-<glyph unicode="&#xe059;" glyph-name="shuffle" d="M402.304 454.144l39.264 55.248-134.304 183.28h-304.528v-64h271.488l128.080-174.528zM918.784 628.672l-77.536-69.536c-9.344-8.944-12.368-23.44-3.024-32.368l5.472-8.064c9.376-8.944 24.496-8.944 33.824 0l127.744 115.504c0.176 0.16 0.384 0.192 0.544 0.336l8.464 8.096c4.672 4.496 7.008 10.368 6.976 16.288 0.032 5.872-2.304 11.776-6.976 16.224l-8.464 8.096c-0.16 0.16-0.336 0.224-0.544 0.368l-129.728 118.432c-9.36 8.944-24.464 8.944-33.84 0l-5.472-8.064c-9.36-8.944-6.32-23.408 3.024-32.336l76.048-68.976h-231.76l-409.312-576h-271.488v-64h304.512l409.328 576h202.208zM1005.808 107.232c-0.16 0.16-0.336 0.224-0.544 0.368l-129.728 118.432c-9.36 8.944-24.464 8.944-33.84 0l-5.472-8.064c-9.36-8.944-6.32-23.408 3.024-32.336l76.336-69.232-199.008 0.272-114.432 177.008-39.28-55.248 120.656-185.76 234.944-0.288-77.216-69.248c-9.344-8.944-12.368-23.44-3.024-32.368l5.472-8.064c9.376-8.944 24.496-8.944 33.824 0l127.744 115.504c0.176 0.16 0.384 0.192 0.544 0.336l8.464 8.096c4.672 4.496 7.008 10.368 6.976 16.288 0.032 5.872-2.304 11.776-6.976 16.224l-8.464 8.080z" />
118
-<glyph unicode="&#xe05a;" glyph-name="share-alt" d="M901.84 10.624h-832v640h257.6l64.72 62.336-1.664 1.664h-320.656c-35.344 0-64-28.656-64-64v-640c0-35.344 28.656-64 64-64h832c35.344 0 64 28.656 64 64v500.672l-64-61.088v-439.584zM270.128 266.624h64.48c44.864 254.496 266.544 448 533.888 448 11.216 0 21.856-0.096 32.624-0.176l-117.248-117.232c-12.464-12.496-12.464-32.752 0-45.248 6.256-6.256 14.464-9.376 22.656-9.376s16.336 3.12 22.592 9.376l189.024 194-189.024 194.032c-12.464 12.496-32.72 12.496-45.248 0-12.464-12.496-12.464-32.752 0-45.248l116.176-116.16c-10.032 0.016-19.968 0.048-30.208 0.048-303.056 0-553.568-221.952-599.712-512.016z" />
119
-<glyph unicode="&#xe05b;" glyph-name="share" d="M864 256c-52.688 0-99.296-25.584-128.432-64.88l-421.36 214.72c3.664 13.456 5.792 27.536 5.792 42.16 0 18.304-3.216 35.808-8.88 52.176l423.76 205.616c29.088-39.808 76.016-65.792 129.12-65.792 88.368 0 160 71.648 160 160 0 88.368-71.632 160-160 160s-160-71.632-160-160c0-12.432 1.568-24.464 4.24-36.080l-429.84-208.576c-29.28 32.272-71.392 52.656-118.4 52.656-88.368 0-160-71.632-160-160 0-88.352 71.632-160 160-160 50.896 0 96.128 23.824 125.424 60.864l423.104-215.632c-2.864-11.968-4.528-24.384-4.528-37.232 0-88.368 71.632-160 160-160s160 71.632 160 160-71.632 160-160 160zM864 896c53.008 0 96-42.992 96-96s-42.992-96-96-96-96 42.992-96 96 42.992 96 96 96zM160 352c-53.024 0-96 42.992-96 96s42.976 96 96 96c53.008 0 96-42.992 96-96s-42.992-96-96-96zM864 0c-53.008 0-96 42.992-96 96s42.992 96 96 96 96-42.992 96-96-42.992-96-96-96z" />
120
-<glyph unicode="&#xe05c;" glyph-name="rocket" d="M209.68 76.736c-20.112-41.808-32.8-69.664-144.688-73.728 3.216 107.968 23.792 119.552 64.992 140.080 17.296 8.624 38.832 19.344 62.112 37.248l-38.96 49.744c-18.4-14.128-35.328-21.568-51.696-29.712-68.64-34.224-100.992-67.936-100.992-228.656l0.544-32.704 31.456 0.704c169.632 0 201.328 38.32 233.104 104.32 6.96 14.464 10.832 24.24 22.56 43.728l-47.456 43.104c-14.224-19.408-23.104-37.872-30.976-54.128zM704.96 771.344c-70.768 0-128.352-57.584-128.352-128.336 0-70.784 57.6-128.352 128.352-128.352s128.336 57.584 128.336 128.352c0 70.752-57.6 128.336-128.336 128.336zM704.96 578.928c-35.328 0-64.080 28.752-64.080 64.080 0 35.312 28.752 64.080 64.080 64.080s64.080-28.768 64.080-64.080c-0.016-35.344-28.752-64.080-64.080-64.080zM1023.776 930.688c-0.976 15.968-13.632 28.768-29.6 29.952 0 0-179.088 13.056-351.376-51.28-62.944-23.504-114.752-60.736-163.104-117.136-40.32-47.024-80.384-132.032-115.744-202.608-13.664-27.248-26.72-53.312-37.792-73.216h-178.016c-9.152 0-17.856-3.92-23.936-10.768l-117.296-127.136c-7.504-8.464-9.984-20.256-6.528-31.008 3.44-10.784 12.32-18.944 23.328-21.44l190.944-43.664c13.008-16.064 34.688-40.096 69.376-78.592l72.336-80.192 38.944-164.72c2.56-10.848 10.608-19.6 21.232-23.056 3.232-1.024 6.576-1.568 9.904-1.568 7.536 0 14.944 2.656 20.832 7.712l118.56 117.936c7.088 6.064 11.184 14.944 11.184 24.288v165.12c15.936 9.904 44.192 25.152 70.784 40.032 72.464 40.496 180.624 90.912 225.472 130.784 63.152 56.128 86.16 97.28 108.752 158.112 53.712 144.688 42.288 344.032 41.744 352.448zM922 600.528c-19.712-53.072-37.568-84.832-91.248-132.56-39.664-35.232-148.128-85.824-214.192-122.768-49.312-27.568-78.848-43.664-91.792-54.256-7.44-6.064-11.76-15.152-11.76-24.784v-167.248l-67.52-74.192-28.752 121.6c-1.232 5.216-3.776 10.064-7.392 14.064-58.848 65.216-147.744 163.808-154.56 171.632-4.448 5.408-10.608 9.248-17.568 10.848l-146.592 33.536 71.904 76h182.032c11.12 0 21.456 5.776 27.264 15.248 14.080 22.928 30.416 55.536 49.344 93.296 32.048 63.952 71.92 148.544 107.12 189.632 41.584 48.528 83.824 79.008 136.896 98.848 118.096 44.128 239.968 48.768 295.68 48.352 1.040-59.008-1.184-195.824-38.864-297.248z" />
121
-<glyph unicode="&#xe05d;" glyph-name="question" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512.016 229.216 512.016 512 0 282.768-229.232 512-512.016 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448.016-200.976 448.016-448-200.992-449.008-448.016-449.008zM464.944 159.52h80.512v81.248h-80.512v-81.248zM511.056 736.464c-46.88 0-85.504-12.64-115.84-37.888-30.336-25.264-45.088-75.856-44.336-117.776l1.184-2.336h73.44c0 25.008 8.336 60.944 25.008 73.84 16.656 12.88 36.848 19.328 60.56 19.328 27.328 0 48.336-7.424 63.072-22.272 14.72-14.848 22.064-36.080 22.064-63.664 0-23.184-5.44-42.976-16.368-59.376-10.96-16.4-29.328-39.84-55.088-70.32-26.576-23.968-42.992-43.232-49.232-57.808-6.256-14.592-9.504-40.768-9.744-78.512h76.96c0 23.68 1.504 41.136 4.496 52.336 2.976 11.184 11.504 23.824 25.568 37.888 30.224 29.152 54.496 57.664 72.88 85.552 18.336 27.856 27.52 58.592 27.52 92.192 0 46.88-14.176 83.408-42.576 109.568-28.416 26.176-68.272 39.248-119.568 39.248z" />
122
-<glyph unicode="&#xe05e;" glyph-name="pie-chart" d="M575.6 866.592c-17.664 0-32-14.336-32-32s14.336-32 32-32c226.448 0 384.4-165.472 384.4-391.904 0-226.464-184.224-410.688-410.672-410.688-226.432 0-391.92 163.6-391.92 390.064 0 17.664-14.336 32-32 32s-32-14.336-32-32c0-261.744 194.192-454.064 455.92-454.064s474.672 212.944 474.672 474.688c0 261.712-186.672 455.904-448.4 455.904zM480.256 511.744v416.256c0 17.664-14.336 32-32 32-249.248 0-448.256-199.008-448.256-448.256 0-17.664 14.336-32 32-32h416.256c17.664 0 32 14.336 32 32zM416.256 543.744h-350.944c15.456 188.496 162.448 335.488 350.944 350.944v-350.944z" />
123
-<glyph unicode="&#xe05f;" glyph-name="pencil" d="M964.256 910.336c-34.864 33.408-73.328 50.336-114.384 50.336-64.192 0-111.024-41.472-123.84-54.176-18.032-17.856-633.152-633.2-633.152-633.2-4.016-4.032-6.944-9.072-8.448-14.592-13.872-51.264-83.36-278.72-84.048-281.008-3.568-11.648-0.384-24.336 8.208-32.928 6.176-6.144 14.4-9.44 22.832-9.44 3.312 0 6.656 0.496 9.92 1.568 2.352 0.768 237.136 76.656 275.776 88.192 5.088 1.536 9.744 4.288 13.536 8.032 24.416 24.128 598.128 591.456 636.208 630.784 39.392 40.592 58.96 82.864 58.208 125.616-0.784 42.208-21.248 82.848-60.816 120.816zM715.84 804.16c16.304-3.952 54.752-16.864 94.016-56.48 39.68-40.032 50.416-85.792 52.416-96.208-125.824-125.168-415.456-411.728-529.632-524.672-10.544 24.56-27.584 54.144-54.992 81.76-33.472 33.728-67.536 52.784-93.808 63.504 112.992 113.008 408.080 408.224 532 532.096zM140.384 218.048c17.584-4.672 54.112-18.224 91.344-55.76 28.672-28.912 42.208-60.8 48.288-80.24-44.48-14.304-141.872-47.92-203.76-67.872 18.336 60.336 49.312 154.304 64.128 203.872zM920.416 709.632c-1.312-1.344-3.472-3.536-6.064-6.16-10.112 26.048-27.856 59.52-58.576 90.496-31.392 31.648-63.232 50.32-88.752 61.36 2.176 2.16 3.856 3.856 4.512 4.496 3.664 3.616 36.896 35.376 78.32 35.376 23.84 0 47.248-10.88 69.616-32.32 26.512-25.424 40.176-50.512 40.624-74.592 0.432-24.576-12.912-51.040-39.68-78.656z" />
124
-<glyph unicode="&#xe060;" glyph-name="note" d="M799.344-0.288h-736v800h449.6l64.704 62.336-1.664 1.664h-512.64c-35.344 0-64-28.656-64-64v-800c0-35.344 28.656-64 64-64h736c35.344 0 64 28.656 64 64v468.656l-64-61.088v-407.568zM974.224 918.56c-28.88 27.68-60.752 41.712-94.752 41.712-53.216 0-92.032-34.368-102.592-44.896-14.976-14.784-439.168-438.352-439.168-438.352-3.328-3.392-5.76-7.536-7.008-12.144-11.488-42.448-69.072-230.992-69.648-232.864-2.976-9.664-0.32-20.192 6.8-27.216 5.104-5.12 11.92-7.84 18.912-7.84 2.752 0 5.52 0.4 8.24 1.248 1.952 0.656 196.496 63.568 228.512 73.12 4.224 1.248 8.048 3.536 11.216 6.624 20.208 19.936 410.112 403.792 441.664 436.384 32.624 33.664 48.848 68.656 48.224 104.096-0.592 35.008-17.616 68.704-50.4 100.128zM930.432 758.88c-17.808-18.368-157.248-156.16-414.448-409.536l-19.68-19.408c-29.488-9.12-100.096-31.808-153.472-49.024 17.184 56.752 37.808 125.312 47.008 157.744 54.96 54.88 418.384 417.744 432.192 431.376 2.688 2.688 27.216 26.256 57.44 26.256 17.152 0 33.68-7.824 50.464-23.92 20.064-19.248 30.4-37.744 30.688-55.024 0.32-17.792-9.84-37.456-30.192-58.464z" />
125
-<glyph unicode="&#xe061;" glyph-name="music-tone-alt" d="M991.728 254.592c0.016 0.56 0.16 1.072 0.16 1.632v667.024c0.384 3.504 0.256 7.12-0.576 10.752-2.736 14.912-15.728 26.224-31.424 26.224-5.888 0-11.344-1.696-16.080-4.48l-597.872-155.648c-10.768-2.672-18.752-10.72-22.032-20.672-2.48-4.544-4-9.664-4-15.2v-572.544c-30.464 20.384-69.408 32.656-111.872 32.656-97.536 0-176.64-64.608-176.64-144.272 0-79.68 79.104-144.304 176.64-144.304 97.568 0 176.608 64.608 176.608 144.304 0 4.064-0.336 8.064-0.736 12.048 0 0.032 0 0.064 0 0.096v651.648l544 141.6v-533.76c-30.448 20.384-69.408 32.656-111.872 32.656-97.536 0-176.64-64.624-176.64-144.272 0-79.68 79.104-144.304 176.64-144.304 97.568 0 176.608 64.608 176.608 144.304-0.016 4.912-0.32 9.744-0.912 14.512zM208.704 0.048c-66.56 0-112.96 42.192-112.96 80 0 37.824 46.384 79.952 112.96 79.952 59.232 0 102.4-33.392 111.184-67.408v-0.368c0-3.232 0.624-6.288 1.52-9.216 0.064-0.992 0.224-1.968 0.224-2.96 0-37.808-46.4-80-112.928-80zM815.696 160.048c-65.968 0-111.952 42.176-111.952 80s45.984 79.952 111.952 79.952c65.952 0 111.936-42.128 111.936-79.952s-45.968-80-111.936-80z" />
126
-<glyph unicode="&#xe062;" glyph-name="music-tone" d="M852.608 636.704l-312.912 312.912c-9.92 9.92-24.672 11.84-36.608 6.016-12.544-4.336-21.6-16.112-21.6-30.128v-708.4c-33.92 25.12-78.432 40.528-127.376 40.528-106.064 0-192.112-71.776-192.112-160.288 0-88.544 86.048-160.336 192.112-160.336 106.112 0 192.080 71.776 192.080 160.336 0 3.92-0.368 7.76-0.704 11.632v744.336l261.872-261.856c12.48-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.248zM353.376 1.424c-75.648 0-128.352 50.544-128.352 95.872s52.72 95.824 128.352 95.824c74.032 0 126-48.4 128.128-92.992v-5.68c-2.144-44.576-54.096-93.024-128.128-93.024z" />
127
-<glyph unicode="&#xe063;" glyph-name="microphone" d="M510.88 256h7.6c88.96 0 153.52 65.6 153.52 155.968v381.408c0 93.44-67.44 166.624-153.536 166.624h-7.584c-87.616 0-158.88-74.752-158.88-166.624v-381.408c0-88.912 68.304-155.968 158.88-155.968zM416 793.376c0 56.592 42.56 102.624 94.88 102.624h7.6c51.024 0 89.52-44.128 89.52-102.624v-381.408c0-54.992-35.968-91.968-89.536-91.968h-7.584c-55.872 0-94.88 37.808-94.88 91.968v381.408zM800 608c-17.68 0-32-14.336-32-32v-133.072c0-190.4-67.968-282.928-207.744-282.928h-95.136c-182.8 0-209.12 153.84-209.12 282.928v133.072c0 17.664-14.336 32-32 32s-32-14.336-32-32v-133.072c0-220.496 91.888-346.928 273.12-346.928h14.88v-96h-160c-17.664 0-32-14.336-32-32s14.336-32 32-32h384c17.664 0 32 14.336 32 32s-14.336 32-32 32h-160v96h16.256c123.968 0 271.744 60.192 271.744 346.928v133.072c0 17.664-14.32 32-32 32z" />
128
-<glyph unicode="&#xe064;" glyph-name="loop" d="M960 858.16h-896c-35.344 0-64-28.656-64-64v-576c0-35.36 28.656-64 64-64h160c20.496 0 32 26.32 32 31.984v0.016c0 5.824-10.88 32.416-32 32.416h-120.96c-21.376 0-38.72 17.344-38.72 38.72v496.704c0 21.392 17.328 38.72 38.72 38.72l818.272 1.008c21.376 0 38.72-17.328 38.72-38.72v-497.696c0-21.376-17.344-38.72-38.72-38.72h-403.168l75.984 68.912c9.344 8.944 12.368 23.408 3.024 32.336l-5.472 8.064c-9.376 8.944-24.496 8.944-33.84 0l-129.728-118.432c-0.192-0.16-0.368-0.224-0.528-0.368l-8.48-8.096c-4.672-4.432-7.008-10.336-6.976-16.224-0.032-5.904 2.288-11.776 6.976-16.288l8.48-8.096c0.16-0.16 0.368-0.192 0.528-0.336l127.728-115.504c9.344-8.944 24.464-8.944 33.84 0l5.472 8.064c9.344 8.944 6.32 23.44-3.024 32.368l-77.136 69.168h445.008c35.344 0 64 28.64 64 64v576c0 35.344-28.656 64-64 64z" />
129
-<glyph unicode="&#xe065;" glyph-name="logout" d="M116.832 416.336h554.448c17.696 0 32 14.336 32 32s-14.304 32-32 32h-552.448l115.76 115.76c12.496 12.496 12.496 32.752 0 45.248s-32.752 12.496-45.248 0l-189.008-194 189.008-194c6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376c12.496 12.496 12.496 32.752 0 45.248l-117.76 117.744zM959.664 960h-544c-35.36 0-64-28.656-64-64v-288h64.416v248.976c0 21.376 17.344 38.72 38.72 38.72h464.72c21.392 0 38.72-17.344 38.72-38.72l1.008-818.288c0-21.376-17.328-38.72-38.72-38.72h-465.712c-21.376 0-38.72 17.344-38.72 38.72v250.368l-64.416-0.080v-288.976c0-35.344 28.64-64 64-64h543.984c35.36 0 64.016 28.656 64.016 64v896c-0.016 35.344-28.672 64-64.016 64z" />
130
-<glyph unicode="&#xe066;" glyph-name="login" d="M532.528 298.592c-12.512-12.496-12.512-32.752 0-45.248 6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376l189.008 194-189.008 194.016c-12.496 12.496-32.752 12.496-45.248 0-12.512-12.496-12.512-32.752 0-45.248l115.744-115.76h-616.432c-17.68 0-32-14.336-32-32s14.32-32 32-32h618.448l-117.76-117.76zM960.16 960h-576c-35.36 0-64.016-28.656-64.016-64v-288h64.432v248.976c0 21.376 17.344 38.72 38.72 38.72h496.704c21.408 0 38.72-17.344 38.72-38.72l1.008-818.288c0-21.376-17.312-38.72-38.72-38.72h-497.696c-21.376 0-38.72 17.344-38.72 38.72v250.368l-64.432-0.080v-288.976c0-35.344 28.656-64 64.016-64h576c35.344 0 64 28.656 64 64v896c-0.016 35.344-28.672 64-64.016 64z" />
131
-<glyph unicode="&#xe067;" glyph-name="list" d="M96 512h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32h64c17.664 0 32 14.336 32 32v64c0 17.664-14.336 32-32 32zM992 480h-672c-17.664 0-32-14.336-32-32s14.336-32 32-32h672c17.664 0 32 14.336 32 32s-14.336 32-32 32zM96 256h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32h64c17.664 0 32 14.336 32 32v64c0 17.664-14.336 32-32 32zM992 224h-672c-17.664 0-32-14.336-32-32s14.336-32 32-32h672c17.664 0 32 14.336 32 32s-14.336 32-32 32zM96 768h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32h64c17.664 0 32 14.336 32 32v64c0 17.664-14.336 32-32 32zM320 672h672c17.664 0 32 14.336 32 32s-14.336 32-32 32h-672c-17.664 0-32-14.336-32-32s14.336-32 32-32z" />
132
-<glyph unicode="&#xe068;" glyph-name="like" d="M608.544-63.744c-290.832 0-293.072 12.064-329.088 39.184-19.104 14.368-55.152 24.32-186.816 32.896-9.552 0.624-18.64 4.288-24.736 11.68-2.8 3.408-68.592 99.36-68.592 253.040 0 151.44 47.088 220.464 49.104 223.664 5.84 9.36 16.096 15.040 27.12 15.040 108.112 0 257.984 138 358.736 378.896 17.424 41.664 21.024 69.072 85.024 69.072 36.4 0 77.2-26.064 97.344-59.504 41.328-68.32 20.336-215.056 0.928-293.472 66 0.528 185.472 1.424 242.32 1.424 79.072 0 131.408-47.152 132.992-116.080 0.528-22.752-2.464-51.808-9.040-66.848 17.408-17.36 39.856-43.536 40.832-77.248 1.216-43.52-27.28-76.656-45.472-95.664 4.176-12.656 12.528-29.44 11.712-49.504-2-49.344-40.096-81.136-63.824-97.728 1.968-13.504 3.504-38.976-0.832-58.672-17.12-78.608-132.4-110.176-317.712-110.176zM109.616 73.232c114.688-9.488 176-22.336 208.336-46.672 25.024-18.848 21.168-26.32 290.592-26.32 82.176 0 242.896 3.424 255.216 59.84 4.896 22.56-18.896 44.736-18.976 44.912-6.496 16.032 0.736 34.848 16.576 41.776 0.256 0.128 64.144 23.008 65.6 58.72 0.96 22.832-14.72 36.544-15.072 37.12-9.328 14.464-5.92 34.304 8.224 44.16 0.16 0.128 41.552 25.216 40.544 59.424-0.784 27.168-36.576 46.288-37.664 46.928-8 4.576-13.824 12.496-15.648 21.552-1.792 9.040 0.224 18.528 5.84 25.872 0 0 16.272 25.856 15.68 50.112-1.168 51.92-57.008 53.552-68.992 53.552-80.72 0-288.032-0.816-288.032-0.816-11.184-0.048-20.864 5.232-26.88 14.176-6 8.944-6.448 20.048-2.928 30.224 31.264 90.032 48.72 231.28 19.728 279.536-8.544 14.224-10.496 28.432-42.496 28.432-4.432 0-14.992-3.504-26-29.744-106.928-255.84-266.64-403.824-397.456-417.168-11.28-25.728-32.496-79.040-32.496-175.776 0-98.736 31.28-175.12 46.304-199.84z" />
133
-<glyph unicode="&#xe069;" glyph-name="home" d="M1016.704 446.64l-480.368 503.168c-6.032 6.304-14.368 9.84-23.088 9.84-8.704 0-17.040-3.552-23.088-9.84l-482.848-503.152c-12.24-12.752-11.808-32.992 0.944-45.248 12.752-12.224 32.992-11.872 45.248 0.944l43.008 44.832v-478.832c0-17.68 14.336-32 32-32h223.552c17.632 0 31.936 14.256 32 31.904l1.008 319.664h254.992v-319.568c0-17.68 14.32-32 32-32h223.472c17.68 0 32 14.32 32 32v478.992l42.992-45.040c6.288-6.528 14.688-9.84 23.088-9.84 7.968 0 15.968 2.944 22.16 8.944 12.736 12.224 13.152 32.48 0.928 45.232zM863.536 505.184v-504.832h-159.472v319.552c0 17.68-14.32 32-32 32h-318.88c-17.632 0-31.936-14.256-32-31.904l-1.008-319.664h-159.664v504.848c0 2.64-0.416 5.168-1.008 7.632l353.76 368.624 351.424-368.208c-0.688-2.592-1.152-5.264-1.152-8.048z" />
134
-<glyph unicode="&#xe06a;" glyph-name="grid" d="M960-64h-320c-35.344 0-64 28.656-64 64v320c0 35.344 28.656 64 64 64h320c35.344 0 64-28.656 64-64v-320c0-35.344-28.656-64-64-64zM960 320h-320v-320h320v320zM960 512h-320c-35.344 0-64 28.656-64 64v320c0 35.344 28.656 64 64 64h320c35.344 0 64-28.656 64-64v-320c0-35.344-28.656-64-64-64zM960 896h-320v-320h320v320zM384-64h-320c-35.344 0-64 28.656-64 64v320c0 35.344 28.656 64 64 64h320c35.344 0 64-28.656 64-64v-320c0-35.344-28.656-64-64-64zM384 320h-320v-320h320v320zM384 512h-320c-35.344 0-64 28.656-64 64v320c0 35.344 28.656 64 64 64h320c35.344 0 64-28.656 64-64v-320c0-35.344-28.656-64-64-64zM384 896h-320v-320h320v320z" />
135
-<glyph unicode="&#xe06b;" glyph-name="graph" d="M944 736c-44.192 0-80-35.824-80-80 0-9.072 1.84-17.632 4.608-25.76l-195.008-167.92c-13.68 10.896-30.752 17.68-49.6 17.68-21.744 0-41.408-8.736-55.808-22.816l-152.752 76.48c-2.976 41.488-37.2 74.336-79.44 74.336-44.176 0-80-35.824-80-80 0-12.096 2.88-23.44 7.68-33.712l-155.744-179.584c-8.736 3.264-18.064 5.296-27.936 5.296-44.176 0-80-35.824-80-80s35.824-80 80-80 80 35.824 80 80c0 10.64-2.176 20.768-5.952 30.048l158.272 181.92c7.536-2.336 15.376-3.968 23.68-3.968 23.28 0 44.048 10.112 58.672 26l149.408-74.912c0.528-43.744 36.048-79.088 79.92-79.088 44.192 0 80 35.824 80 80 0 1.424-0.336 2.752-0.416 4.16l208.096 178.768c9.904-4.384 20.784-6.928 32.32-6.928 44.192 0 80 35.808 80 80 0 44.176-35.808 80-80 80z" />
136
-<glyph unicode="&#xe06c;" glyph-name="equalizer" d="M160.048 572.128v355.872c0 17.664-14.336 32-32 32s-32-14.336-32-32v-355.84c-55.328-14.256-96.4-64.448-96.4-124.16 0-59.728 41.072-109.904 96.4-124.176v-355.824c0-17.664 14.336-32 32-32s32 14.336 32 32v355.856c55.28 14.304 96.304 64.448 96.304 124.144 0 59.68-41.024 109.84-96.304 124.128zM128.416 383.968c-0.112 0-0.24 0.032-0.368 0.032-0.144 0-0.272-0.032-0.416-0.048-35.152 0.208-63.696 28.848-63.696 64.048 0 35.184 28.56 63.84 63.712 64.032 0.128 0 0.272-0.032 0.4-0.032s0.24 0.032 0.368 0.032c35.136-0.224 63.664-28.864 63.664-64.032 0-35.184-28.528-63.808-63.664-64.032zM544.064 380.128v547.872c0 17.664-14.336 32-32 32s-32-14.336-32-32v-547.84c-55.328-14.272-96.4-64.432-96.4-124.16s41.072-109.904 96.4-124.176v-163.824c0-17.664 14.336-32 32-32s32 14.336 32 32v163.856c55.264 14.304 96.288 64.448 96.288 124.144-0.016 59.664-41.024 109.824-96.288 124.128zM512.416 191.968c-0.128 0-0.24 0.032-0.368 0.032-0.144 0-0.272-0.032-0.416-0.048-35.152 0.208-63.696 28.848-63.696 64.048 0 35.216 28.608 63.872 63.792 64.032 0.112 0 0.224-0.032 0.336-0.032 0.096 0 0.192 0.032 0.288 0.032 35.168-0.192 63.744-28.832 63.744-64.032 0-35.184-28.528-63.808-63.68-64.032zM928.064 764.128v163.872c0 17.664-14.336 32-32 32-17.68 0-32-14.336-32-32v-163.84c-55.328-14.256-96.4-64.432-96.4-124.16s41.072-109.92 96.4-124.176v-547.824c0-17.664 14.32-32 32-32 17.664 0 32 14.336 32 32v547.856c55.264 14.304 96.288 64.448 96.288 124.144-0.016 59.664-41.024 109.824-96.288 124.128zM896.416 575.968c-0.128 0-0.24 0.032-0.352 0.032-0.144 0-0.288-0.032-0.416-0.032-35.152 0.192-63.712 28.832-63.712 64.032 0 35.184 28.56 63.84 63.696 64.032 0.144 0 0.288-0.032 0.416-0.032s0.24 0.032 0.352 0.032c35.136-0.24 63.664-28.864 63.664-64.032 0.032-35.184-28.496-63.808-63.648-64.032z" />
137
-<glyph unicode="&#xe06d;" glyph-name="dislike" d="M415.44 959.76c290.832 0 293.088-12.064 329.104-39.184 19.104-14.368 55.152-24.336 186.832-32.912 9.568-0.624 18.64-4.288 24.736-11.68 2.8-3.408 68.592-99.36 68.592-253.024 0-151.44-47.088-220.48-49.104-223.696-5.84-9.344-16.096-15.024-27.12-15.024-108.112 0-257.984-138-358.752-378.912-17.424-41.664-21.008-69.056-85.024-69.056-36.4 0-77.2 26.064-97.376 59.504-41.312 68.32-20.336 215.056-0.912 293.472-66-0.528-185.472-1.44-242.32-1.44-79.072 0-131.392 47.152-133.008 116.096-0.512 22.752 2.464 51.824 9.056 66.832-17.392 17.36-39.856 43.552-40.832 77.264-1.232 43.504 27.28 76.64 45.456 95.664-4.16 12.656-12.512 29.44-11.712 49.504 2.016 49.344 40.096 81.152 63.84 97.744-1.952 13.456-3.488 38.944 0.832 58.624 17.12 78.624 132.4 110.224 317.712 110.224zM914.384 822.752c-114.688 9.488-176 22.336-208.336 46.688-25.024 18.832-21.152 26.304-290.608 26.304-82.176 0-242.896-3.424-255.216-59.824-4.912-22.56 18.88-44.752 18.976-44.912 6.496-16.048-0.752-34.848-16.592-41.776-0.256-0.128-64.128-23.024-65.6-58.736-0.944-22.832 14.72-36.544 15.088-37.104 9.312-14.464 5.904-34.32-8.224-44.16-0.16-0.128-41.568-25.216-40.544-59.44 0.784-27.152 36.576-46.288 37.664-46.928 8-4.576 13.824-12.496 15.632-21.568 1.808-9.024-0.224-18.528-5.824-25.84 0 0-16.272-25.872-15.696-50.112 1.184-51.936 57.024-53.568 69.008-53.568 80.72 0 288.032 0.848 288.032 0.848 11.184 0.032 20.864-5.248 26.864-14.192s6.464-20.064 2.928-30.224c-31.248-90.032-48.704-231.28-19.712-279.536 8.528-14.224 10.496-28.432 42.496-28.432 4.432 0 14.992 3.504 26 29.744 106.992 255.808 266.704 403.808 397.52 417.152 11.28 25.728 32.496 79.040 32.496 175.792-0.032 98.736-31.312 175.104-46.352 199.824z" />
138
-<glyph unicode="&#xe06e;" glyph-name="cursor" d="M921.088 856.768l-336.256-785.792-119.312 344.512-344.192 104.032 799.76 337.248zM1004.464 959.232c-6.096 0-13.52-1.728-22.096-5.36l-954.656-405.072c-34.384-14.592-36.56-42.704-4.848-62.464l395.296-123.584 129.36-403.264c9.28-15.184 20.496-22.72 31.264-22.72 11.936 0 23.296 9.152 31.040 27.248l408.272 953.728c11.056 25.888 4.768 41.488-13.632 41.488v0z" />
139
-<glyph unicode="&#xe06f;" glyph-name="control-start" d="M974.944 894.608c0 23.232-12.592 44.656-32.912 55.936-9.68 5.392-20.368 8.064-31.088 8.064-11.712 0-23.472-3.232-33.776-9.648l-735.728-446.592c-15.952-9.904-26.512-26.208-29.376-44.4v470.032c0 17.664-14.336 32-32 32s-32-14.336-32-32v-960c0-17.664 14.336-32 32-32s32 14.336 32 32v470.064c2.88-18.208 13.44-34.512 29.376-44.384l736.72-446.64c10.32-6.432 22.064-9.664 33.776-9.664 10.72 0 21.408 2.688 31.088 8.064 20.32 11.28 32.912 32.688 32.912 55.936l-0.992 893.232zM175.2 448.016l735.744 446.592 1.008-893.216-736.752 446.624z" />
140
-<glyph unicode="&#xe070;" glyph-name="control-rewind" d="M573.92 762.096l-505.28-314.096 505.28-314.096v246.976l384-246.976v628.192l-384-246.992v255.84zM571.264 826.096c10.704 0 22.736-2.672 32.416-8.064 20.32-11.28 34.24-32.704 34.24-55.936v-131.84l298.224 186.192c10.32 6.4 21.376 9.648 33.12 9.648 10.688 0 15.728-2.672 25.424-8.064 20.32-11.28 27.232-32.704 27.232-55.936v-628.192c0-23.248-7.248-44.656-27.568-55.936-9.68-5.376-17.728-8.064-28.432-8.064-11.728 0-20.784 3.216-31.104 9.664l-296.896 186.176v-131.84c0-23.248-13.92-44.656-34.24-55.936-9.68-5.376-21.040-8.064-31.76-8.064-11.712 0-23.792 3.216-34.112 9.664l-505.456 314.096c-18.768 11.648-30.272 32.208-30.272 54.336s11.376 42.672 30.16 54.352l505.264 314.096c10.304 6.416 22.032 9.648 33.76 9.648v0z" />
141
-<glyph unicode="&#xe071;" glyph-name="control-play" d="M144.624 894.608l735.744-446.592-736.736-446.624 0.992 893.216zM144.624 958.608c-10.72 0-21.408-2.672-31.088-8.064-20.32-11.28-32.912-32.704-32.912-55.936l-0.992-893.216c0-23.248 12.592-44.656 32.912-55.936 9.68-5.376 20.368-8.064 31.088-8.064 11.712 0 23.472 3.216 33.776 9.664l736.72 446.624c18.816 11.664 30.256 32.224 30.256 54.336s-11.44 42.672-30.256 54.352l-735.728 446.608c-10.304 6.4-22.064 9.632-33.776 9.632v0z" />
142
-<glyph unicode="&#xe072;" glyph-name="control-pause" d="M416.272 960h-224.208c-17.664 0-32-14.32-32-32v-960c0-17.664 14.336-32 32-32h224.208c17.68 0 32 14.336 32 32v960c0 17.68-14.32 32-32 32zM384.272 0h-160.208v896h160.208v-896zM831.936 960h-223.056c-17.68 0-32-14.32-32-32v-960c0-17.664 14.32-32 32-32h223.056c17.68 0 32 14.336 32 32v960c0 17.68-14.304 32-32 32zM799.936 0h-159.056v896h159.056v-896z" />
143
-<glyph unicode="&#xe073;" glyph-name="control-forward" d="M450.080 762.096l505.28-314.096-505.28-314.096v246.976l-384-246.976v628.192l384-246.992v255.84zM452.736 826.096c-10.72 0-22.736-2.672-32.432-8.064-20.304-11.28-34.224-32.704-34.224-55.936v-131.84l-298.224 186.192c-10.32 6.4-21.376 9.648-33.12 9.648-10.688 0-15.728-2.672-25.44-8.064-20.288-11.28-27.216-32.704-27.216-55.936v-628.192c0-23.248 7.248-44.656 27.568-55.936 9.68-5.376 17.728-8.064 28.432-8.064 11.728 0 20.784 3.216 31.104 9.664l296.896 186.176v-131.84c0-23.248 13.92-44.656 34.224-55.936 9.696-5.376 21.056-8.064 31.776-8.064 11.712 0 23.792 3.216 34.112 9.664l505.456 314.096c18.784 11.664 30.288 32.224 30.288 54.336s-11.376 42.672-30.16 54.352l-505.28 314.096c-10.304 6.416-22.048 9.648-33.76 9.648v0z" />
144
-<glyph unicode="&#xe074;" glyph-name="control-end" d="M943.936 960c-17.664 0-32-14.336-32-32v-470c-2.88 18.192-13.44 34.464-29.376 44.368l-735.712 446.608c-10.32 6.4-22.064 9.648-33.776 9.648-10.72 0-21.408-2.672-31.088-8.064-20.32-11.28-32.912-32.704-32.912-55.936l-1.008-893.232c0-23.248 12.592-44.656 32.912-55.936 9.68-5.376 20.368-8.064 31.088-8.064 11.712 0 23.472 3.216 33.776 9.664l736.72 446.608c15.936 9.872 26.496 26.16 29.376 44.352v-470.016c0-17.664 14.336-32 32-32s32 14.336 32 32v960c0 17.664-14.32 32-32 32zM112.064 1.392l0.992 893.216 735.744-446.592-736.736-446.624z" />
145
-<glyph unicode="&#xe075;" glyph-name="calender" d="M960 864.112h-256.224v63.776c0 17.68-14.32 32-32 32s-32-14.32-32-32v-63.76h-256v63.76c0 17.68-14.32 32-32 32s-32-14.32-32-32v-63.76h-255.776c-35.344 0-64-28.656-64-64v-800c0-35.344 28.656-64 64-64h896c35.344 0 64 28.656 64 64v800c0 35.328-28.656 63.984-64 63.984zM960 0.128h-896v800h255.776v-32.24c0-17.68 14.32-32 32-32s32 14.32 32 32v32.224h256v-32.24c0-17.68 14.32-32 32-32s32 14.32 32 32v32.24h256.224v-799.984zM736 448.112h64c17.664 0 32 14.336 32 32v64c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32zM736 192.128h64c17.664 0 32 14.32 32 32v64c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32v-64c0-17.696 14.336-32 32-32zM544 320.128h-64c-17.664 0-32-14.336-32-32v-64c0-17.68 14.336-32 32-32h64c17.664 0 32 14.32 32 32v64c0 17.648-14.336 32-32 32zM544 576.112h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32h64c17.664 0 32 14.336 32 32v64c0 17.68-14.336 32-32 32zM288 576.112h-64c-17.664 0-32-14.336-32-32v-64c0-17.664 14.336-32 32-32h64c17.664 0 32 14.336 32 32v64c0 17.68-14.336 32-32 32zM288 320.128h-64c-17.664 0-32-14.336-32-32v-64c0-17.68 14.336-32 32-32h64c17.664 0 32 14.32 32 32v64c0 17.648-14.336 32-32 32z" />
146
-<glyph unicode="&#xe076;" glyph-name="bulb" d="M511.984 960c-198.032 0-353.12-161.104-353.12-359.136 0-149.2 73.28-220.256 131.184-272.128 37.28-33.424 62.368-53.552 62.368-78.352v-54.256c0-1.392 0.192-2.752 0.368-4.128h-0.72v-92.624c0.016-97.712 63.2-163.376 161.072-163.376 94.464 0 158.944 65.664 158.944 163.376v92.624h-0.928c0.176 1.376 0.416 2.736 0.416 4.128v54.256c0 37.76 28.032 60.592 70.528 97.696 57.504 50.208 123.024 112.688 123.024 252.784 0.016 198.032-155.104 359.136-353.136 359.136zM510.768 0c-59.904 0-94.688 37.152-94.688 99.376l-0.464 42.672c23.024-7.872 54.384-14.048 96.384-14.048 41.424 0 72.848 6.624 96.080 14.768v-43.392c0-63.152-35.248-99.376-97.312-99.376zM700.016 396.288c-43.472-37.968-92.432-77.216-92.432-145.904v-40.432c-15.184-8.48-43.184-18.56-96.128-18.56-55.568 0-81.92 9.856-95.024 17.472v41.536c0 54.608-42.688 89.296-83.68 126.016-54.32 48.672-109.872 103.84-109.872 224.464-0.016 162.72 126.384 295.12 289.104 295.12 162.752 0 289.152-132.4 289.152-295.136 0-111.024-48.464-158.576-101.12-204.576z" />
147
-<glyph unicode="&#xe077;" glyph-name="chart" d="M272.064 640.016h-224.064c-17.68 0-32-14.32-32-32v-640.016c0-17.68 14.32-32 32-32h224.064c17.68 0 32 14.32 32 32v640.016c0 17.68-14.32 32-32 32zM240.064 0h-160.064v576.016h160.064v-576.016zM623.744 449.744h-224.080c-17.68 0-32-14.32-32-32v-449.744c0-17.68 14.32-32 32-32h224.080c17.68 0 32 14.32 32 32v449.744c0 17.696-14.304 32-32 32zM591.744 0h-160.080v385.744h160.080v-385.744zM976 960h-223.728c-17.68 0-32-14.32-32-32v-960c0-17.68 14.32-32 32-32h223.728c17.68 0 32 14.32 32 32v960c0 17.68-14.32 32-32 32zM944 0h-159.728v896h159.728v-896z" />
148
-<glyph unicode="&#xe078;" glyph-name="arrow-up-circle" d="M1024 448c0 282.784-229.232 512-512 512-282.784 0-512-229.216-512-512 0-282.768 229.216-512 512-512 282.768 0 512 229.232 512 512zM63.008 448c0 247.024 201.968 448 448.992 448s448-200.976 448-448-200.976-448-448-448-448.992 200.976-448.992 448zM544.336 223.68v360.464l115.76-115.76c12.496-12.496 32.752-12.496 45.248 0s12.496 32.752 0 45.248l-194 189.008-194-189.008c-6.256-6.256-9.376-14.432-9.376-22.624s3.12-16.368 9.376-22.624c12.496-12.496 32.752-12.496 45.248 0l117.744 117.76v-362.464c0-17.68 14.336-32 32-32s32 14.32 32 32z" />
149
-<glyph unicode="&#xe079;" glyph-name="arrow-right-circle" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM532.368 641.36c-12.496-12.496-12.496-32.752 0-45.248l115.76-115.76h-360.448c-17.68 0-32-14.336-32-32s14.32-32 32-32h362.464l-117.76-117.744c-12.496-12.496-12.496-32.752 0-45.248 6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376l189.008 194-189.008 194c-12.512 12.496-32.752 12.496-45.264 0z" />
150
-<glyph unicode="&#xe07a;" glyph-name="arrow-left-circle" d="M512 960c-282.784 0-512-229.232-512-512 0-282.784 229.216-512 512-512 282.768 0 512 229.216 512 512 0 282.768-229.232 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM736.32 480.336h-360.464l115.76 115.76c12.496 12.496 12.496 32.752 0 45.248s-32.752 12.496-45.248 0l-189.008-194 189.008-194c6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376c12.496 12.496 12.496 32.752 0 45.248l-117.76 117.744h362.464c17.68 0 32 14.336 32 32s-14.32 32-32 32z" />
151
-<glyph unicode="&#xe07b;" glyph-name="arrow-down-circle" d="M0 448c0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512-282.768 0-512-229.232-512-512zM961.008 448c0-247.024-201.968-448-449.008-448s-448 200.976-448 448 200.976 448 448 448 449.008-200.976 449.008-448zM479.664 672.32v-360.448l-115.76 115.76c-12.496 12.496-32.752 12.496-45.248 0s-12.496-32.752 0-45.248l194.016-189.008 194 189.008c6.256 6.256 9.376 14.432 9.376 22.624s-3.12 16.368-9.376 22.624c-12.496 12.496-32.752 12.496-45.248 0l-117.744-117.76v362.448c0 17.68-14.336 32-32 32s-32.016-14.32-32.016-32z" />
152
-<glyph unicode="&#xe07c;" glyph-name="ban" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM64 448c0 112.272 41.616 214.96 110.096 293.664l631.856-631.856c-78.736-68.88-181.536-110.816-293.952-110.816-247.024 0-448 201.984-448 449.008zM851.024 155.216l-631.616 631.616c78.576 67.936 180.832 109.168 292.592 109.168 247.024 0 448-200.976 448-448 0-111.664-41.152-214.032-108.976-292.784z" />
153
-<glyph unicode="&#xe07d;" glyph-name="bubble" d="M512 832c247.024 0 448-143.552 448-320 0-176.432-200.976-320-448-320l-26.512-0.096c-17.584 0-29.088 0.464-47.072 3.152l-35.856 5.12-23.008-27.84c-10.576-12.784-64.544-57.12-124.112-85.664 12.112 32.032 21.040 67.008 21.84 101.6l0.32 1.904v44.624l-34.864 17.808c-113.6 58.112-178.736 152.64-178.736 259.392 0 176.448 200.976 320 448 320zM512 896c-282.8 0-512-171.936-512-384 0-132.064 78.256-247.152 213.584-316.336 0-0.816-0.256-1.408-0.256-2.32 0-57.376-32.16-120.464-51.008-152.944h0.048c-1.488-3.488-2.368-7.312-2.368-11.408 0-16.080 12.96-28.992 29.008-28.992 2.416 0 6.256 0.496 7.664 0.496 0.336 0 0.528 0 0.496-0.096 100 16.336 209.952 104.688 231.824 131.344 22.48-3.344 37.664-3.84 56.48-3.84 7.936 0 16.496 0.096 26.528 0.096 282.752 0 512 171.904 512 384 0 212.064-229.248 384-512 384v0z" />
154
-<glyph unicode="&#xe07e;" glyph-name="camrecorder" d="M638.128 736.624c1.28 0 2.32-1.008 2.32-2.24v-127.872c0-23.664 13.056-45.424 34-56.528 9.408-5.008 19.712-7.472 30-7.472 12.56 0 27.056 3.68 37.84 10.992l217.712 123.232v-456.416l-218.912 119.52c-10.976 7.664-23.776 11.536-36.656 11.536-10.128 0-20.256-2.4-29.568-7.216-21.12-11.024-34.4-32.88-34.432-56.688l-0.16-125.84c0-1.248-1.008-2.256-2.288-2.256h-571.696c-1.28 0-2.288 0.992-2.288 2.224l0.16 572.784c0 1.248 1.008 2.24 2.288 2.24h571.68zM990.368 768.656c-6.816 0-20.288-2.016-27.968-9.664l-257.968-152.48v127.872c0 36.56-29.68 66.24-66.32 66.24h-571.68c-36.672 0-66.288-29.664-66.288-66.24l-0.144-572.752c0-36.56 29.632-66.256 66.288-66.256h571.712c36.656 0 66.288 29.68 66.288 66.256l0.16 125.744 262.976-153.312c7.712-7.68 16.256-6.688 23.088-6.688 7.088 0 12.368 2.16 13.024 2.432 12.432 5.184 20.464 17.184 20.464 30.688v574.976c0 13.504-8.032 25.552-20.464 30.656-0.72 0.32-6.032 2.528-13.168 2.528v0z" />
155
-<glyph unicode="&#xe07f;" glyph-name="camera" d="M928 736h-147.184l-76.816 128h-384l-76.8-128h-147.2c-32 0-96-32-96-95.008v-512.992c0-53.008 48-96 89.328-96h840.672c42 0 94 44.992 94 94.992v513.008c0 32-32 96-96 96zM960 126.992c0-12.624-20.464-30.288-30-31.008h-840.48c-7.408 0.608-25.52 15.040-25.52 32.016v512.992c0 20.272 27.232 30.496 32 31.008h183.44l76.8 128h313.648l57.12-96.944 17.6-31.056h183.392c22.56 0 31.68-29.472 32-32v-513.008zM512 640c-123.712 0-224-100.288-224-224s100.288-224 224-224 224 100.288 224 224-100.288 224-224 224zM512 256c-88.224 0-160 71.776-160 160s71.776 160 160 160 160-71.776 160-160-71.776-160-160-160z" />
156
-<glyph unicode="&#xe080;" glyph-name="check" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM716.336 635.344l-300.4-302.288-135.28 135.28c-12.496 12.496-32.752 12.496-45.264 0-12.496-12.496-12.496-32.752 0-45.248l158.384-158.4c12.496-12.48 32.752-12.48 45.264 0 1.44 1.44 2.672 3.008 3.792 4.64l318.784 320.752c12.48 12.496 12.48 32.752 0 45.264-12.512 12.496-32.768 12.496-45.28 0z" />
157
-<glyph unicode="&#xe081;" glyph-name="clock" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM544 460.992v307.008c0 17.664-14.336 32-32 32s-32-14.336-32-32v-320c0-9.056 3.792-17.2 9.856-23.008 0.528-0.624 0.96-1.296 1.536-1.888l158.384-158.4c12.496-12.48 32.752-12.48 45.248 0 12.496 12.496 12.496 32.768 0 45.264l-151.024 151.024z" />
158
-<glyph unicode="&#xe082;" glyph-name="close" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM693.008 629.008c-12.496 12.496-32.752 12.496-45.248 0l-135.76-135.76-135.76 135.76c-12.496 12.496-32.752 12.496-45.264 0-12.496-12.496-12.496-32.752 0-45.248l135.76-135.76-135.76-135.76c-12.496-12.48-12.496-32.768 0-45.248 12.496-12.496 32.752-12.496 45.264 0l135.76 135.76 135.76-135.76c12.496-12.496 32.752-12.496 45.248 0 12.496 12.48 12.496 32.768 0 45.248l-135.76 135.76 135.76 135.76c12.512 12.512 12.512 32.768 0 45.248z" />
159
-<glyph unicode="&#xe083;" glyph-name="cloud-download" d="M763.024 700c-44.624 118.432-140.56 193.44-285.456 193.44-184.384 0-313.392-136.912-324.48-315.536-88.912-28.432-153.088-119.12-153.088-221.84 0-125.744 98.848-231.968 215.824-231.968h28.448c17.664 0 32 14.32 32 32s-14.336 32-32 32h-28.448c-82.304 0-152.832 76.912-152.832 167.968 0 80.464 56.416 153.056 127.184 165.216l29.040 5.008-2.592 29.344-0.24 0.368c0.016 155.872 102.608 273.44 261.184 273.44 127.104 0 198.512-62.624 231.552-169.44l6.832-22.032 23.072-0.496c118.864-2.496 223.088-98.944 223.088-218.784 0-109.056-72.272-230.592-181.712-230.592h-9.104c-17.664 0-32-14.32-32-32s14.336-32 32-32v0.096c160 4.224 252.24 157.088 252.24 294.496-0.032 147.728-115.792 265.744-260.512 281.312zM646.336 184.528c-8.944 9.344-23.408 9.344-32.336 0l-70.384-77.648v322.144c0 17.664-14.336 32-32 32s-32-14.336-32-32v-322.432l-68.112 75.936c-8.944 9.344-23.44 11.344-32.368 2l-8.064-4.416c-8.944-9.376-8.944-24.48 0-33.824l115.504-127.744c0.16-0.16 0.192-0.368 0.336-0.528l8.096-8.464c4.496-4.688 10.368-7.008 16.288-6.976 5.872-0.032 11.776 2.288 16.224 6.976l8.096 8.464c0.16 0.16 0.24 0.336 0.368 0.528l118.432 129.744c8.944 9.344 8.944 20.448 0 29.824l-8.080 6.416z" />
160
-<glyph unicode="&#xe084;" glyph-name="cloud-upload" d="M763.024 700.032c-44.624 118.432-140.56 193.44-285.472 193.44-184.384 0-313.392-136.912-324.48-315.536-88.896-28.432-153.072-119.12-153.072-221.84 0-125.744 98.848-231.968 215.824-231.968h92.448c17.664 0 32 14.336 32 32 0 17.68-14.336 32-32 32h-92.448c-82.304 0-152.832 76.912-152.832 167.968 0 80.464 56.416 153.056 127.184 165.216l29.040 5.008-2.576 29.328-0.24 0.368c0 155.872 102.576 273.44 261.152 273.44 127.104 0 198.512-62.624 231.536-169.44l6.848-22.032 23.056-0.496c118.88-2.496 223.104-98.944 223.104-218.768 0-109.056-72.272-230.592-181.696-230.592h-73.12c-17.664 0-32-14.336-32-32 0-17.68 14.336-32 32-32l72.88 0.096c160 4.224 243.344 157.072 243.344 294.496 0 147.712-115.76 265.744-260.48 281.312zM535.984 445.056c-0.176 0.192-0.24 0.352-0.352 0.512l-8.096 8.464c-4.432 4.688-10.336 7.008-16.24 6.976-5.904 0.048-11.776-2.288-16.288-6.976l-8.096-8.464c-0.16-0.16-0.192-0.352-0.336-0.512l-115.504-127.744c-8.944-9.344-8.944-24.464 0-33.84l8.064-5.472c8.944-9.344 23.44-6.32 32.368 3.024l68.112 75.936v-322.432c0-17.664 14.336-32 32-32s32 14.336 32 32v322.128l70.368-77.632c8.944-9.344 23.408-12.368 32.336-3.024l8.064 5.472c8.944 9.376 8.944 24.496 0 33.84l-118.4 129.744z" />
161
-<glyph unicode="&#xe085;" glyph-name="doc" d="M560 960h-352c-35.344 0-64-28.656-64-64v-896c0-35.344 28.656-64 64-64h608c35.344 0 64 28.656 64 64v639.984l-320 320.016zM816 613.472v-5.472h-288v288h5.504l282.496-282.528zM208 0v896h256v-352h352v-544h-608z" />
162
-<glyph unicode="&#xe086;" glyph-name="envolope" d="M1023.456 728c0.992 6.144 0.176 12.48-2.48 18.272-8.064 35.44-33.68 53.728-76.976 53.728h-832c-38.080 0-79.104-14-99.28-41.472-1.744-1.328-3.408-2.832-4.912-4.576-6.448-7.44-8.704-17.008-7.264-26.032-0.288-2.592-0.544-5.2-0.544-7.92v-512c0-53.024 58.992-112 112-112h832c53.024 0 80 58.976 80 112v512c0 2.832-0.368 5.312-0.544 8zM112 736h832c0.192 0 0.288 0 0.432 0l-432.432-344.656-430.688 343.248c9.792 1.808 21.84 1.408 30.688 1.408zM944 160h-832c-17.648 0-48 30.336-48 48v458.448l427.040-341.648c6.016-5.2 13.488-7.792 20.96-7.792s14.944 2.592 20.976 7.792l427.024 341.632v-458.432c0-17.664 1.664-48-16-48z" />
163
-<glyph unicode="&#xe087;" glyph-name="eye" d="M515.472 638.592c-106.032 0-192-85.968-192-192 0-106.016 85.968-192 192-192s192 85.968 192 192c0 106.032-85.968 192-192 192zM515.472 318.592c-70.576 0-129.472 58.816-129.472 129.392s57.424 128 128 128c70.592 0 128-57.424 128-128s-55.936-129.392-126.528-129.392zM1023.68 455.424c-0.368 1.616-0.208 3.328-0.688 4.912-0.208 0.672-0.624 1.056-0.864 1.648-0.336 0.912-0.256 1.984-0.72 2.864-93.072 213.104-293.664 335.76-507.424 335.76s-418.368-122.432-511.488-335.552c-0.4-0.896-0.336-1.824-0.656-2.848-0.224-0.624-0.688-0.976-0.896-1.568-0.496-1.616-0.304-3.296-0.608-4.928-0.592-2.88-1.136-5.68-1.136-8.592 0-2.944 0.544-5.664 1.136-8.592 0.32-1.6 0.112-3.344 0.608-4.88 0.208-0.72 0.672-1.024 0.896-1.68 0.336-0.88 0.256-1.968 0.656-2.848 93.136-213.056 295.744-333.712 509.504-333.712 213.776 0 416.336 120.4 509.44 333.504 0.464 0.912 0.368 1.872 0.72 2.88 0.224 0.56 0.656 0.976 0.848 1.6 0.496 1.568 0.336 3.28 0.688 4.912 0.56 2.864 1.088 5.664 1.088 8.624 0 2.816-0.528 5.6-1.104 8.496zM512 159.408c-181.296 0-359.744 95.568-447.424 287.68 86.848 191.472 267.68 289.504 449.424 289.504 181.68 0 358.496-98.144 445.376-289.712-86.816-191.408-265.632-287.472-447.376-287.472z" />
164
-<glyph unicode="&#xe088;" glyph-name="flag" d="M680 864.672c-160 0-202.656 96-405.312 96-130.688 0-210.688-98.688-210.688-98.688v-894.656c0-17.664 14.336-32 32-32s32 14.336 32 32v407.872c33.76 21.776 80.336 41.472 138.688 41.472 202.656 0 261.312-96 421.312-96s272 96 272 96v544c0 0-120-96-280-96zM896 449.28c-36.16-23.584-112.784-64.608-208-64.608-62.912 0-105.84 17.264-160.224 39.136-66.272 26.64-141.408 56.864-261.088 56.864-54.688 0-101.072-13.76-138.688-32.16v387.472c24.096 21.92 76.624 60.688 146.688 60.688 94.112 0 147.088-22.848 203.184-47.008 55.872-24.080 113.664-48.992 202.128-48.992 85.248 0 160.128 23.568 216 48.912v-400.304z" />
165
-<glyph unicode="&#xe089;" glyph-name="folder" d="M354.752 784l78.624-77.248 20.112-18.752h506.512v-576h-896v672h288zM384 848h-320c-35.344 0-64-28.656-64-64v-672c0-35.344 28.656-64 64-64h896c35.344 0 64 28.656 64 64v576c0 35.344-28.656 64-64 64h-480l-96 96z" />
166
-<glyph unicode="&#xe08a;" glyph-name="heart" d="M287.984 845.84c31.376 0 88.096-15.008 180.096-105.616l45.616-44.912 44.928 45.632c63.872 64.896 131.84 105.2 177.376 105.2 61.408 0 109.808-21.008 157.008-68.096 44.464-44.368 68.992-103.36 68.992-166.112 0.032-62.784-24.448-121.824-69.408-166.672-3.664-3.712-196.992-212.304-358.96-387.104-7.632-7.248-16.352-8.32-20.992-8.32-4.576 0-13.2 1.024-20.8 8.096-39.472 43.904-325.552 362-358.816 395.232-44.528 44.416-69.024 103.456-69.024 166.224 0.016 62.752 24.512 121.728 69.040 166.144 43.296 43.264 93.984 60.304 154.944 60.304zM287.984 909.84c-76.528 0-144-22.896-200.176-79.008-117.072-116.768-117.072-306.128 0-422.96 33.424-33.44 357.856-394.336 357.856-394.336 18.48-18.496 42.752-27.68 66.96-27.68 24.224 0 48.4 9.184 66.912 27.68 0 0 354.88 383.024 358.656 386.848 117.040 116.88 117.040 306.24 0 423.008-58.112 58-123.024 86.784-202.208 86.784-75.648 0-160-60.32-223.008-124.32-64.992 63.984-146.736 123.984-224.992 123.984v0z" />
167
-<glyph unicode="&#xe08b;" glyph-name="info" d="M576 224h-32v286c0 0.336-0.096 0.656-0.096 1.008s0.096 0.656 0.096 0.992c0 17.664-14.336 32-32 32h-64c-17.664 0-32-14.336-32-32s14.336-32 32-32h32v-256h-32c-17.664 0-32-14.336-32-32s14.336-32 32-32h128c17.664 0 32 14.336 32 32s-14.336 32-32 32zM512 608c35.344 0 64 28.656 64 64s-28.656 64-64 64-64-28.656-64-64 28.656-64 64-64zM512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008z" />
168
-<glyph unicode="&#xe08c;" glyph-name="key" d="M655.696 960c-159.056 0-288-129.152-288-288.464 0-71.408 26.032-136.624 68.944-187.008-8.832 0.544-17.84-2.432-24.592-9.184l-322.384-324.384c-12.48-12.496-12.48-32.768 0-45.248 0.24-0.24 0.512-0.384 0.768-0.624 0.080-0.080 0.128-0.176 0.208-0.256l156.912-159.904c12.48-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.248l-135.472 138.064 82.496 83.008 135.728-138.32c12.48-12.496 32.752-12.496 45.248 0s12.48 32.768 0 45.248l-135.856 138.448 172.384 173.472c6.672 6.672 9.664 15.536 9.216 24.272 50.624-44.288 116.672-71.312 189.168-71.312 159.056 0 288 129.152 288 288.48-0.016 159.312-128.944 288.464-288.016 288.464zM655.696 448c-123.248 0-224 100.272-224 224 0 123.744 100.752 224 224 224s224-100.256 224-224c0-123.728-100.736-224-224-224z" />
169
-<glyph unicode="&#xe08d;" glyph-name="link" d="M295.664 227.552c6.256-6.256 14.432-9.376 22.624-9.376s16.368 3.12 22.624 9.376l387.664 390.688c12.496 12.496 12.496 32.752 0 45.248s-32.752 12.496-45.248 0l-387.664-390.688c-12.512-12.496-12.512-32.752 0-45.248zM475.872 295.696c10.576-46.624-0.832-92.4-36.864-128.432l-129.248-125.248c-27.2-27.184-63.36-42.16-101.824-42.16s-74.624 14.976-101.808 42.16c-56.144 56.16-56.144 147.536-0.336 203.344l126.256 130.256c27.2 27.184 63.36 42.176 101.824 42.176 13.152 0 25.824-2.352 38.176-5.744l49.952 49.952c-27.872 13.024-57.952 19.792-88.128 19.792-53.232 0-106.464-20.32-147.072-60.928l-125.936-129.936c-81.216-81.216-81.216-212.912 0-294.16 40.608-40.624 93.84-60.912 147.072-60.912s106.464 20.288 147.072 60.912l128.944 124.944c62.128 62.128 75.568 148.72 42.656 224.72l-50.736-50.736zM963.136 899.216c-40.624 40.608-93.84 60.928-147.056 60.928-53.248 0-106.496-20.32-147.088-60.928l-128.928-124.944c-64.4-64.4-77.536-160.464-39.792-238.032l49.664 49.648c-14.704 49.104-3.408 104.336 35.056 142.832l129.248 125.248c27.216 27.184 63.344 42.176 101.84 42.176 38.432 0 74.624-14.992 101.808-42.176 56.128-56.16 56.128-147.536 0.32-203.344l-129.248-129.248c-27.184-27.184-63.376-42.16-101.808-42.16-9.808 0-18.432-0.992-27.84 0.928l-50.976-51.008c25.472-10.592 51.632-13.936 78.816-13.936 53.216 0 106.432 20.304 147.056 60.928l128.944 128.944c81.2 81.216 81.2 212.896-0.016 294.144z" />
170
-<glyph unicode="&#xe08e;" glyph-name="lock" d="M800 576h-32v122.128c0 146.848-106.256 261.872-257.184 261.872-151.536 0-254.816-117.472-254.816-261.872v-122.128h-32c-70.592 0-128-57.408-128-128v-384c0-70.592 57.408-128 128-128h576c70.592 0 128 57.408 128 128v384c0 70.592-57.408 128-128 128zM320 698.128c0 109.088 74.56 197.872 190.816 197.872 115.056 0 193.184-86.912 193.184-197.872v-122.128h-384v122.128zM864 64c0-35.28-28.72-64-64-64h-576c-35.28 0-64 28.72-64 64v384c0 35.28 28.72 64 64 64h576c35.28 0 64-28.72 64-64v-384zM512 384c-35.344 0-64-28.656-64-64 0-23.632 12.96-44.032 32-55.12v-104.88c0-17.664 14.336-32 32-32s32 14.336 32 32v104.88c19.040 11.088 32 31.504 32 55.12 0 35.344-28.656 64-64 64z" />
171
-<glyph unicode="&#xe08f;" glyph-name="lock-open" d="M800 574.896h-456.96l-16.56 74.272c-28.24 105.376 20.816 210.432 133.088 240.512 111.136 29.776 209.088-33.936 237.824-141.12l13.6-53.968c4.576-17.072 22.112-27.2 39.2-22.624 17.072 4.576 27.2 22.112 22.624 39.184l-13.616 53.968c-37.984 141.84-170.384 225.44-316.192 186.384-146.368-39.216-215.712-179.424-178.336-318.912l12.864-57.696h-53.536c-70.592 0-128-57.408-128-128v-384c0-70.592 57.408-128 128-128h576c70.592 0 128 57.408 128 128v384c0 70.592-57.408 128-128 128zM864 62.896c0-35.28-28.72-64-64-64h-576c-35.28 0-64 28.72-64 64v384c0 35.28 28.72 64 64 64h576c35.28 0 64-28.72 64-64v-384zM512 382.896c-35.344 0-64-28.656-64-64 0-23.632 12.96-44.032 32-55.12v-104.88c0-17.664 14.336-32 32-32s32 14.336 32 32v104.88c19.040 11.088 32 31.504 32 55.12 0 35.344-28.656 64-64 64z" />
172
-<glyph unicode="&#xe090;" glyph-name="magnifier" d="M1014.64-9.040l-310.928 312.832c57.952 69.408 92.88 158.704 92.88 256.208 0 220.912-179.088 400-400 400s-400-179.088-400-400c0-220.912 179.088-400 400-400 100.368 0 192.048 37.056 262.288 98.144l310.496-312.448c12.496-12.496 32.768-12.496 45.264 0 12.48 12.496 12.48 32.752 0 45.264zM396.592 223.472c-185.856 0-336.528 150.672-336.528 336.528s150.672 336.528 336.528 336.528 336.528-150.672 336.528-336.528-150.672-336.528-336.528-336.528z" />
173
-<glyph unicode="&#xe091;" glyph-name="magnifier-add" d="M1014.624-9.040l-283.024 284.768c60.608 72.4 97.088 165.76 97.088 267.712 0 230.064-185.504 416.56-415.552 416.56s-416.544-186.496-416.544-416.544c0-230.048 186.496-416.544 416.544-416.544 105.008 0 200.672 38.96 273.696 103.072l282.528-284.304c12.496-12.496 32.768-12.496 45.248 0 12.512 12.512 12.512 32.768 0.016 45.28zM412.592 192c-193.552 0-352 158.448-352 352s158.448 352 352 352 352-158.448 352-352-158.448-352-352-352zM572.592 576h-128v128c0 17.664-14.336 32-32 32s-32-14.336-32-32v-128h-128c-17.664 0-32-14.336-32-32s14.336-32 32-32h128v-128c0-17.664 14.336-32 32-32s32 14.336 32 32v128h128c17.664 0 32 14.336 32 32s-14.32 32-32 32z" />
174
-<glyph unicode="&#xe092;" glyph-name="magnifier-remove" d="M1014.624-9.040l-283.024 284.768c60.608 72.4 97.088 165.76 97.088 267.712 0 230.064-185.504 416.56-415.552 416.56s-416.544-186.496-416.544-416.544c0-230.048 186.496-416.544 416.544-416.544 105.008 0 200.672 38.96 273.696 103.072l282.528-284.304c12.496-12.496 32.768-12.496 45.248 0 12.512 12.512 12.512 32.768 0.016 45.28zM412.592 192c-193.552 0-352 158.448-352 352s158.448 352 352 352 352-158.448 352-352-158.448-352-352-352zM572.592 576h-320c-17.664 0-32-14.336-32-32s14.336-32 32-32h320c17.664 0 32 14.336 32 32s-14.32 32-32 32z" />
175
-<glyph unicode="&#xe093;" glyph-name="paper-clip" d="M172.72-47.632c-43.408 0-85.088 17.968-118.304 51.216-73.648 73.888-73.648 194.064-0.016 267.904l574.272 609.824c89.6 89.744 226.848 81.68 327.008-18.608 44.88-44.96 70.064-109.776 69.12-177.904-0.944-67.408-27.28-131.92-72.288-177.008l-434.016-462.048c-12.080-12.944-32.336-13.536-45.232-1.392-12.864 12.16-13.488 32.448-1.36 45.344l434.672 462.752c34 34.064 53.504 82.384 54.224 133.248 0.72 50.896-17.664 98.88-50.368 131.664-61.44 61.568-161.472 93.808-235.84 19.264l-574.256-609.824c-49.376-49.504-49.36-129.008-0.64-177.856 22.848-22.864 49.968-34 78.848-32.256 28.576 1.744 57.952 16.4 82.72 41.232l456.928 486.336c16.56 16.592 49.84 57.264 15.968 91.216-19.184 19.216-32.656 18.032-37.088 17.664-12.656-1.12-27.44-9.872-42.784-25.264l-343.92-365.776c-12.144-12.912-32.416-13.536-45.232-1.36-12.88 12.128-13.472 32.448-1.36 45.312l344.544 366.464c27.088 27.216 54.784 41.968 82.976 44.496 22 1.952 54.72-2.736 88.096-36.208 49.536-49.632 43.376-122.432-15.28-181.216l-456.928-486.304c-36.48-36.608-80.528-57.872-124.72-60.592-3.248-0.224-6.496-0.32-9.744-0.32z" />
176
-<glyph unicode="&#xe094;" glyph-name="paper-plane" d="M1004.032 960c-6.096 0-13.52-1.728-22.096-5.36l-954.656-405.088c-34.368-14.576-36.544-42.688-4.832-62.448l269.76-168.032c31.712-19.744 73.648-62.080 93.184-94.048l161.712-264.768c9.28-15.184 20.496-22.72 31.28-22.72 11.92 0 23.28 9.152 31.024 27.232l408.256 953.744c11.056 25.872 4.752 41.488-13.632 41.488zM325.552 376.080l-218.656 136.208 733.616 311.248-472.192-480.192c-14.432 12.8-29.088 24.224-42.768 32.736zM572.72 44.736l-130.432 213.52c-7.696 12.608-17.856 26.048-29.184 39.392l474.384 482.384-314.768-735.296z" />
177
-<glyph unicode="&#xe095;" glyph-name="plus" d="M512 960c-282.768 0-512-229.232-512-512 0-282.784 229.232-512 512-512 282.784 0 512 229.216 512 512 0 282.768-229.216 512-512 512zM512-1.008c-247.024 0-448 201.984-448 449.008s200.976 448 448 448 448-200.976 448-448-200.976-449.008-448-449.008zM736 480h-192v192c0 17.664-14.336 32-32 32s-32-14.336-32-32v-192h-192c-17.664 0-32-14.336-32-32s14.336-32 32-32h192v-192c0-17.664 14.336-32 32-32s32 14.336 32 32v192h192c17.664 0 32 14.336 32 32s-14.336 32-32 32z" />
178
-<glyph unicode="&#xe096;" glyph-name="location-pin" d="M515.664 960.368c-209.904 0-387.664-178.768-387.664-390.544 0-221.76 206.032-448.544 344.624-607.936 0.528-0.64 22.928-25.52 50.528-25.52h2.448c27.6 0 49.84 24.88 50.4 25.52 130.064 149.52 320 396.048 320 607.936 0 211.776-138.656 390.544-380.336 390.544zM528.496 4.816c-1.12-1.12-2.752-2.368-4.192-3.408-1.472 1.008-3.072 2.288-4.256 3.408l-16.736 19.248c-131.392 150.736-311.312 357.152-311.312 545.76 0 177.008 148.224 326.56 323.664 326.56 218.528 0 316.336-164 316.336-326.56 0-143.184-102.128-333.296-303.504-565.008zM513.12 766.592c-106.032 0-192-85.968-192-192s85.968-192 192-192 192 85.968 192 192-85.968 192-192 192zM513.12 446.592c-70.576 0-129.472 58.816-129.472 129.408 0 70.576 57.424 128 128 128 70.624 0 128-57.424 128-128 0.032-70.592-55.904-129.408-126.528-129.408z" />
179
-<glyph unicode="&#xe097;" glyph-name="power" d="M701.552 795.904c-16 7.456-35.024 0.592-42.528-15.424-7.52-16-0.592-35.040 15.408-42.544 162.336-76 250.496-251.952 214.352-427.872-42.912-208.88-247.664-343.808-456.56-301.024-101.168 20.784-184.208 79.712-241.056 165.936-56.864 86.256-76.736 189.504-55.952 290.672 24.704 120.224 102.624 219.328 213.76 271.904 15.968 7.552 22.8 26.624 15.232 42.608-7.552 15.952-26.592 22.736-42.592 15.232-129.504-61.264-220.288-176.736-249.088-316.864-24.224-117.936-1.072-238.256 65.184-338.784 66.272-100.48 163.696-169.168 281.632-193.408 30.432-6.256 60.816-9.248 90.752-9.248 209.456 0 397.648 147.12 441.376 360.112 42.112 205.008-60.656 410.096-249.92 498.704zM512.016 544c17.664 0 32 14.336 32 32v352c0 17.664-14.336 32-32 32s-32-14.336-32-32v-352c0-17.664 14.336-32 32-32z" />
180
-<glyph unicode="&#xe098;" glyph-name="refresh" d="M497.408 61.44c-0.080 0.192-0.272 0.32-0.384 0.48l-91.92 143.664c-6.528 10.72-20.688 14.528-31.728 8.512l-8.192-5.040c-11.008-6-10.768-21.536-4.256-32.256l58.928-91.408c-5.024 1.104-10.096 2-15.056 3.296-103.184 26.992-190.496 96.832-239.536 191.6-46.336 89.52-55.040 191.696-24.512 287.744 30.512 96.048 99.776 174.464 189.296 220.784 15.248 7.888 21.2 26.64 13.312 41.856-7.872 15.264-26.64 21.232-41.856 13.328-104.272-53.952-184.4-145.28-219.968-257.152-35.552-111.856-25.424-230.88 28.544-335.136 57.136-110.336 158.832-191.664 279.024-223.136 1.36-0.352 2.784-0.56 4.16-0.912l-81.312-41.232c-11.008-6.032-14.656-19.632-8.128-30.352l3.152-8.176c6.56-10.72 17.84-14.528 28.816-8.512l148.832 76.208c0.192 0.128 0.384 0.096 0.576 0.224l9.984 5.456c5.52 3.024 9.168 7.968 10.624 13.504 1.52 5.52 0.816 11.664-2.448 16.992l-5.952 9.664zM913.904 639.184c-57.056 110.304-155.584 191.632-275.76 223.12-8.56 2.24-17.312 3.984-26.048 5.712l79.824 40.48c11.008 6.032 17.568 19.632 11.040 30.368l-3.152 8.16c-6.56 10.736-20.752 14.528-31.728 8.528l-148.816-76.208c-0.176-0.112-0.384-0.080-0.576-0.208l-9.968-5.472c-5.536-3.040-9.168-7.968-10.624-13.504-1.52-5.52-0.816-11.648 2.464-16.976l5.92-9.712c0.096-0.192 0.272-0.304 0.384-0.496l91.92-143.648c6.512-10.736 20.688-14.528 31.712-8.512l7.216 5.024c11.008 6 11.728 21.536 5.232 32.24l-59.2 91.856c13.008-2 25.968-4.416 38.624-7.76 103.232-27.040 187.392-96.864 236.4-191.568 46.32-89.52 55.024-191.696 24.48-287.728-30.512-96.048-96.656-174.448-186.176-220.816-15.232-7.888-21.168-26.608-13.28-41.872 5.52-10.64 16.336-16.768 27.6-16.768 4.8 0 9.664 1.12 14.272 3.488 104.272 53.936 181.248 145.28 216.816 257.12 35.536 111.904 25.392 230.928-28.576 335.152z" />
181
-<glyph unicode="&#xe099;" glyph-name="reload" d="M511.28 960c-255.808 0-463.92-208.128-463.92-463.936 0-240.448 185.296-441.536 423.568-462.096l-91.856-46.56c-11.344-6.224-18.096-20.224-11.376-31.28l3.248-8.4c6.752-11.056 21.376-14.976 32.688-8.784l153.312 78.496c0.192 0.128 0.4 0.096 0.592 0.224l10.288 5.632c5.68 3.12 9.44 8.224 10.944 13.904 1.568 5.68 0.848 12-2.528 17.504l-6.096 10c-0.096 0.192-0.288 0.32-0.4 0.496l-94.688 147.968c-6.72 11.056-21.312 14.976-32.688 8.784l-7.44-5.184c-11.344-6.192-12.096-22.192-5.376-33.216l55.872-86.672c-0.304 0.016-0.576 0.128-0.864 0.144-209.28 13.728-373.2 189.040-373.2 399.040 0 220.528 179.408 399.936 399.92 399.936 220.544 0 400.96-179.408 400.96-399.936 0-126.976-58.32-243.6-160-319.968-14.128-10.624-16.976-30.688-6.368-44.816 10.624-14.16 30.688-16.976 44.816-6.368 117.936 88.592 185.568 223.872 185.568 371.152-0.016 255.808-209.152 463.936-464.976 463.936z" />
182
-<glyph unicode="&#xe09a;" glyph-name="settings" d="M960.496 544.944l-82.128 18.224c-6.4 20.48-14.784 40.080-24.4 58.928l44.432 74.032c16.592 26.512 24.976 65.52 0 90.512l-45.28 45.248c-24.976 24.992-67.152 20.496-92.624 2.832l-72.032-45.888c-18.688 9.696-38.224 18-58.528 24.56l-18.432 83.12c-5.504 30.48-32.16 63.488-67.504 63.488h-64c-35.344 0-57.008-33.504-64-64l-20.528-82.128c-21.68-6.912-42.496-15.744-62.336-26.208l-73.84 47.024c-25.456 17.664-67.648 22.16-92.624-2.832l-45.264-45.248c-24.992-25.008-16.608-64 0-90.512l46.752-77.92c-8.768-17.664-16.544-35.936-22.544-55.024l-82.112-18.224c-30.496-5.488-63.504-32.144-63.504-67.488v-64c0-35.344 33.504-57.008 64-64l83.152-20.784c5.744-17.632 12.928-34.56 21.056-50.976l-46.8-78c-16.592-26.496-24.976-65.504 0-90.496l45.28-45.248c24.976-25.008 67.152-20.496 92.624-2.848l74 47.152c19.952-10.528 40.88-19.44 62.704-26.336l20.48-81.904c7.008-30.496 28.656-64 64-64h64c35.344 0 62 33.008 67.504 63.504l18.464 83.344c20.096 6.496 39.376 14.688 57.84 24.256l72.192-46c25.472-17.664 67.664-22.16 92.624 2.848l45.28 45.248c24.976 25.008 16.592 64 0 90.496l-44.464 74.128c8.944 17.568 16.688 35.84 22.912 54.848l83.152 20.768c30.496 7.008 64 28.656 64 64v64c0 35.344-32.992 62-63.504 67.504zM960.032 417.952c-2.72-1.952-7.84-4.64-14.336-6.144l-118.656-29.632-11.008-33.632c-4.976-15.152-11.408-30.528-19.12-45.712l-16.064-31.568 62.688-104.528c4-6.4 5.872-12.128 6.432-15.504l-42.096-42.032c-4.064 1.28-8.688 2.944-10.912 4.464l-105.344 67.184-32.752-16.944c-15.776-8.192-31.968-14.976-48.096-20.192l-34.88-11.28-26.368-119.12c-1.216-6.368-4.624-11.504-6.96-13.344h-57.6c-1.952 2.72-4.624 7.84-6.112 14.32l-29.456 117.808-34.096 10.816c-17.568 5.536-35.088 12.912-52.144 21.904l-32.912 17.376-105.36-67.152c-4.304-2.912-8.912-4.56-13.088-4.56l-41.968 40.848c0.56 3.312 2.304 8.784 5.792 14.368l65.456 109.056-15.568 31.344c-7.264 14.784-13.024 28.656-17.504 42.4l-10.992 33.664-117.488 29.376c-7.392 1.68-12.736 4.432-15.52 6.4v59.504c0.032-0.016 0.080-0.032 0.144-0.032 1.072 0 6.336 3.744 10.72 4.544l120.72 26.736 11.088 35.28c4.512 14.368 10.672 29.344 18.816 45.776l15.568 31.36-64.768 107.92c-4.016 6.432-5.872 12.16-6.432 15.52l42.080 42.064c4.080-1.312 8.672-2.96 10.88-4.48l107.312-68.4 32.88 17.344c16.88 8.896 34.336 16.24 51.904 21.824l34.016 10.832 29.184 116.768c1.696 7.392 4.416 12.736 6.4 15.52h59.488c-0.432-0.656 3.68-6.24 4.528-10.864l26.88-121.408 34.848-11.264c16.336-5.28 32.752-12.16 48.72-20.448l32.752-17.008 103.152 65.712c4.32 2.944 8.944 4.576 13.088 4.576l42-40.816c-0.56-3.328-2.32-8.816-5.808-14.416l-63.344-105.488 16.16-31.616c8.72-17.056 15.376-33.056 20.32-48.928l11.056-35.344 118.288-26.256c7.152-1.328 12.72-5.456 13.904-7.696l-0.512-56.8zM512.432 640.32c-106.272 0-192.736-86.288-192.736-192.32 0-106.016 86.464-192.304 192.736-192.304s192.736 86.288 192.736 192.304c0 106.032-86.464 192.32-192.736 192.32zM512 320c-70.576 0-128 57.424-128 128 0 70.592 57.424 128 128 128 70.592 0 128-57.408 128-128 0-70.576-57.424-128-128-128z" />
183
-<glyph unicode="&#xe09b;" glyph-name="star" d="M512 882.512l137.472-285.088 312.608-46.464-226.416-225.84 7.616-45.312 45.28-270.16-276.608 148.784-276.592-148.848 45.296 270.224 7.584 45.312-226.336 225.872 312.592 46.464 20.544 42.544 116.96 242.512zM511.984 944.448c-28.656 0-54.784-16.176-66.976-41.456l-115.904-240.64-266.704-39.664c-27.392-4.096-50.144-22.8-58.976-48.384-8.816-25.664-2.144-53.904 17.2-73.152l195.408-195.2-45.328-270.656c-4.56-27.28 7.232-54.624 30.368-70.576 12.72-8.736 27.664-13.152 42.624-13.152 12.32 0 24.64 2.992 35.792 8.976l232.496 125.184 232.512-125.184c11.184-5.984 23.504-8.976 35.776-8.976 14.96 0 29.904 4.416 42.656 13.152 23.104 15.952 34.912 43.296 30.32 70.576l-45.344 270.656 195.504 195.2c19.344 19.248 25.968 47.504 17.152 73.152-8.848 25.616-31.6 44.32-58.976 48.384l-266.656 39.664-115.968 240.64c-12.112 25.312-38.256 41.456-66.976 41.456v0z" />
184
-<glyph unicode="&#xe09c;" glyph-name="symble-female" d="M623.696 960.224c-220.912 0-400-179.072-400-400 0-98.512 35.68-188.672 94.736-258.368l-127.312-128.096-135.264 136.544c-12.48 12.496-32.752 12.496-45.248 0s-12.496-32.752 0-45.248l135.392-136.688-136.352-137.184c-12.496-12.496-12.496-32.784 0-45.248 12.48-12.496 32.752-12.496 45.248 0l136.144 136.992 136.464-137.76c12.496-12.496 32.752-12.496 45.248 0s12.496 32.752 0 45.248l-136.608 137.904 127.408 128.192c69.952-59.968 160.768-96.288 260.128-96.288 220.912 0 400 179.088 400 400 0.016 220.928-179.072 400-399.984 400zM623.696 223.68c-185.856 0-336.528 150.688-336.528 336.544s150.672 336.528 336.528 336.528 336.528-150.672 336.528-336.528c0.016-185.856-150.656-336.544-336.528-336.544z" />
185
-<glyph unicode="&#xe09d;" glyph-name="symbol-male" d="M1023.296 937.344c0.144 6.48-1.376 12.288-5.584 16.432-4.144 4.176-9.952 6.72-16.4 6.528l-11.696-0.272c-0.224 0-0.384-0.080-0.64-0.112l-293.504 1.024c-12.928-0.288-23.616-10.992-23.92-23.92l-0.032-16.432c1.968-15.248 13.952-24.16 26.88-23.872l215.216-0.432-256.144-254.592c-69.488 58.24-159.008 93.36-256.768 93.36-220.928 0-400-179.072-400-400 0-220.912 179.072-400 400-400 220.912 0 400 179.088 400 400 0 100.112-36.864 191.568-97.664 261.712l256.896 255.312-0.944-219.152c-0.304-12.928 9.952-24.176 22.896-23.888l16.416 0.032c12.96 0.304 23.648 8 23.92 20.928l0.672 295.008c0 0.24-0.88 0.4-0.88 0.624l1.28 11.712zM737.232 335.056c0-185.856-150.672-336.528-336.544-336.528-185.856 0-336.528 150.672-336.528 336.528s150.672 336.528 336.528 336.528c185.872 0.016 336.544-150.656 336.544-336.528z" />
186
-<glyph unicode="&#xe09e;" glyph-name="target" d="M992 480h-97.44c-15.392 186.528-164.048 335.040-350.56 350.464v97.536c0 17.664-14.336 32-32 32s-32-14.336-32-32v-97.536c-186.496-15.424-335.168-163.936-350.576-350.464h-97.424c-17.664 0-32-14.336-32-32s14.336-32 32-32h97.424c15.408-186.512 164.080-335.040 350.576-350.464v-97.536c0-17.664 14.336-32 32-32s32 14.336 32 32v97.536c186.512 15.424 335.168 163.952 350.56 350.464h97.44c17.664 0 32 14.336 32 32s-14.336 32-32 32zM480 766.416v-286.416h-286.448c15.008 151.2 135.248 271.408 286.448 286.416zM193.552 416h286.448v-286.416c-151.2 15.008-271.44 135.216-286.448 286.416zM544 129.584v286.416h286.448c-15.008-151.2-135.248-271.408-286.448-286.416zM544 480v286.416c151.2-15.008 271.44-135.216 286.448-286.416h-286.448z" />
187
-<glyph unicode="&#xe09f;" glyph-name="volume-1" d="M654.768 894.096c-10.432 5.552-23.088 4.928-32.912-1.696l-321.088-252.112-106.624-0.080c-54.512 0-98.88-38.656-98.88-86.4l1.712-211.136c0-47.536 44.352-86.224 98.864-86.224l106.592-0.064 319.392-252.752c5.376-3.632 11.632-5.472 17.904-5.472 5.152 0 10.32 1.248 15.008 3.744 10.464 5.536 17.008 16.4 17.008 28.256v835.68c-0.016 11.824-6.544 22.688-16.976 28.256zM607.728 90.368l-277.6 224.528c-5.28 3.568-11.52 5.472-17.888 5.472l-116.384 0.064c-20.544 0-34.88 11.712-34.88 22.464l-1.712 211.152c0 10.48 14.336 22.16 34.896 22.16l116.4 0.080c6.352 0 12.576 1.904 17.856 5.456l279.312 224v-715.376zM789.824 612.368c-17.712 2.928-33.936-8.864-36.848-26.304-2.912-17.424 8.88-33.92 26.288-36.832 50.32-8.4 85.472-52.304 85.472-106.752 0-51.84-36.368-96.688-86.496-106.688-17.344-3.44-28.592-20.288-25.12-37.632 3.024-15.216 16.368-25.744 31.344-25.744 2.064 0 4.192 0.192 6.288 0.624 79.968 15.904 138 87.184 138 169.44-0.016 85.024-58.448 156.464-138.928 169.888z" />
188
-<glyph unicode="&#xe0a0;" glyph-name="volume-2" d="M574.496 894.096c-10.432 5.552-23.088 4.928-32.912-1.696l-321.088-252.112-106.624-0.080c-54.512 0-98.88-38.656-98.88-86.4l1.712-211.136c0-47.536 44.352-86.224 98.864-86.224l106.592-0.064 319.392-252.752c5.376-3.632 11.632-5.472 17.904-5.472 5.152 0 10.32 1.248 15.008 3.744 10.464 5.536 17.008 16.4 17.008 28.256v835.68c0 11.824-6.528 22.688-16.976 28.256zM527.472 90.368l-277.6 224.528c-5.28 3.568-11.52 5.472-17.888 5.472l-116.384 0.064c-20.544 0-34.88 11.712-34.88 22.464l-1.712 211.152c0 10.48 14.336 22.16 34.896 22.16l116.4 0.080c6.352 0 12.576 1.904 17.856 5.456l279.312 224v-715.376zM848.464 442.496c0 85.008-58.432 156.432-138.912 169.872-17.712 2.928-33.936-8.864-36.848-26.304-2.912-17.424 8.88-33.92 26.288-36.832 50.32-8.4 85.472-52.304 85.472-106.752 0-51.84-36.368-96.688-86.496-106.688-17.344-3.44-28.592-20.288-25.12-37.632 3.024-15.216 16.368-25.744 31.344-25.744 2.064 0 4.192 0.192 6.288 0.624 79.952 15.936 137.984 87.216 137.984 169.456zM806 736.096c-16.528 6.16-35.008-2.24-41.152-18.8-6.192-16.56 2.224-34.992 18.784-41.168 96.528-36.016 161.376-129.904 161.376-233.632 0-103.776-64.848-197.84-161.312-234-16.56-6.224-24.944-24.656-18.752-41.184 4.816-12.88 17.008-20.784 29.968-20.784 3.744 0 7.536 0.656 11.216 2.032 121.344 45.504 202.88 163.632 202.88 293.936s-81.6 248.288-203.008 293.6z" />
189
-<glyph unicode="&#xe0a1;" glyph-name="volume-off" d="M575.536 894.096c-10.432 5.552-23.088 4.928-32.912-1.696l-321.104-252.112-106.624-0.080c-54.512 0-98.88-38.656-98.88-86.4l1.712-211.136c0-47.536 44.352-86.224 98.864-86.224l106.592-0.064 319.392-252.752c5.376-3.632 11.632-5.472 17.904-5.472 5.152 0 10.32 1.248 15.008 3.744 10.464 5.536 17.008 16.4 17.008 28.256v835.68c0 11.824-6.528 22.688-16.96 28.256zM528.496 90.368l-277.6 224.528c-5.28 3.568-11.52 5.472-17.888 5.472l-116.384 0.064c-20.544 0-34.88 11.712-34.88 22.464l-1.728 211.152c0 10.48 14.336 22.16 34.896 22.16l116.4 0.080c6.352 0 12.576 1.904 17.856 5.456l279.328 224v-715.376zM894 447.488l104.592 105.84c12.496 12.496 12.496 32.752 0 45.248-12.464 12.496-32.752 12.496-45.248 0l-104.336-105.568-104.336 105.568c-12.464 12.496-32.752 12.496-45.248 0s-12.496-32.752 0-45.248l104.592-105.84-103.6-104.816c-12.464-12.48-12.496-32.752 0-45.248s32.784-12.496 45.28 0l103.312 104.544 103.312-104.544c12.496-12.496 32.752-12.496 45.248 0s12.496 32.768 0 45.248l-103.568 104.816z" />
190
-<glyph unicode="&#xe600;" glyph-name="phone" data-tags="phone" d="M262.2 923c37.4-51.6 82-118.2 133.6-199.6 13-22 11-48.4-5.8-79.4-6.4-13-22.6-42.6-48.4-89.2 28.4-40 71.6-89.2 129.8-147.2s106.6-101.4 145.2-129.8c46.4 27.2 76.2 43.8 89.2 50.4 16.8 9 33 13.6 48.4 13.6 11.6 0 22-2.6 31-7.8 59.4-36.2 126.6-80.8 201.4-133.6 14.2-10.4 22.2-24.6 24.2-42.6 2-18.2-3.6-37.4-16.4-58.2-6.4-9-16.8-22.2-31-39.8-14.2-17.4-35.6-39.4-64-65.8s-51.6-39.8-69.8-39.8h-2c-136.6 5.4-305 107.8-504.4 307.2-199.6 199.6-302 367.8-307.2 504.6 0 18 13.2 41.6 39.8 70.8 26.4 29 48.2 50 64.8 63 16.8 12.8 31 23.2 42.6 31 14.2 10.4 30.4 15.4 48.4 15.4 22.2 0 38.8-7.8 50.6-23.2zM198.2 882.4c-27.2-19.4-52.6-41.2-76.6-65-23.8-24-37.8-41.6-41.6-53.2 5.2-120.2 101-273.2 287.6-459.2s340-282.2 460-288.6c10.4 3.8 27.4 18 51.4 42.6s45.6 50.4 64.8 77.4c3.8 5.2 5.2 9.6 3.8 13.6-77.4 54.2-142 97.4-193.8 129.8-5.2 0-11.6-2-19.4-5.8-11.6-6.4-40.6-22.6-87.2-48.4l-33-19.4-33 21.4c-42.6 29.6-94.2 75.6-155 137.6-60.6 60.6-105.8 112.4-135.6 155l-23.2 31 19.4 34.8c25.8 46.4 42 75.6 48.4 87.2 3.8 7.8 5.8 14.2 5.8 19.4-46 73.4-88.6 138-127.4 193.6h-2c-5 0-9.6-1.4-13.4-3.8z" />
191
-<glyph unicode="&#xe601;" glyph-name="menu" data-tags="Menu" d="M27 766.4c-8.2 8.2-12.2 18.6-12.2 31.2s4 23 12.2 31.2c8.2 8.2 18.6 12.2 31.2 12.2h912.4c12.6 0 23-4 31.2-12.2s12.2-18.6 12.2-31.2c0-12.6-4-23-12.2-31.2s-18.6-12.2-31.2-12.2h-912.4c-12.6 0-23 4-31.2 12.2zM1001.8 481.2c8.2-8.2 12.2-18.6 12.2-31.2s-4-23-12.2-31.2c-8.2-8.2-18.6-12.2-31.2-12.2h-912.4c-12.6 0-23 4-31.2 12.2s-12.2 18.6-12.2 31.2c0 12.6 4 23 12.2 31.2s18.6 12.2 31.2 12.2h912.4c12.6 0 23-4 31.2-12.2zM1001.8 133.8c8.2-8.2 12.2-18.6 12.2-31.2s-4-23-12.2-31.2c-8.2-8.2-18.6-12.2-31.2-12.2h-912.4c-12.6 0-23 4-31.2 12.2s-12.2 18.6-12.2 31.2c0 12.6 4 23 12.2 31.2s18.6 12.2 31.2 12.2h912.4c12.6 0 23-4.2 31.2-12.2z" />
192
-<glyph unicode="&#xe602;" glyph-name="options-vertical" data-tags="options vertical" d="M388.8 63.6c0 9 0 18.2 0 27.2 0.6 2.2 1.6 4.2 2 6.4 8.8 57.2 56.4 102.4 112.2 106.2 62.4 4.4 115.2-31.2 132.4-89.2 2.2-7.6 3.8-15.6 5.8-23.4 0-9 0-18.2 0-27.2-0.6-1.8-1.6-3.4-1.8-5.4-8.6-52.8-46.6-93-98.6-104.4-4-0.8-8-2-12-3-9 0-18.2 0-27.2 0-1.8 0.6-3.6 1.6-5.4 1.8-52 8.4-91.6 45.4-103.6 96.8-1.2 5-2.6 9.6-3.8 14.2zM641.2 832.4c0-9 0-18.2 0-27.2-0.6-2.2-1.6-4.2-1.8-6.4-9-57.6-56.8-102.6-113.2-106.2-62.2-4-114.8 32-131.8 90.2-2.2 7.4-3.8 15-5.6 22.4 0 9 0 18.2 0 27.2 0.6 1.8 1.6 3.4 2 5.2 9.6 52 39.8 86 90.2 102.2 6.6 2.2 13.6 3.4 20.4 5.2 9 0 18.2 0 27.2 0 1.8-0.6 3.6-1.6 5.4-1.8 52.2-8.6 91.6-45.4 103.6-96.8 1.2-4.8 2.4-9.4 3.6-14zM641.2 461.6c0-9 0-18.2 0-27.2-0.6-2.2-1.6-4.2-2-6.4-9-57.4-58.6-103.6-114.6-106-63-2.8-116.4 35.2-131.4 93.8-1.6 6.2-3 12.4-4.4 18.6 0 9 0 18.2 0 27.2 0.6 2.2 1.6 4.2 2 6.4 8.8 57.4 58.6 103.6 114.6 106.2 63 3 116.4-35.2 131.4-93.8 1.6-6.4 3-12.6 4.4-18.8z" />
193
-<glyph unicode="&#xe603;" glyph-name="options" data-tags="options" d="M899.4 321.8c-9 0-18.2 0-27.2 0-2.2 0.6-4.2 1.6-6.4 2-57.2 8.8-102.4 56.4-106.2 112.2-4.4 62.4 31.2 115.2 89.2 132.4 7.6 2.2 15.6 3.8 23.4 5.8 9 0 18.2 0 27.2 0 1.8-0.6 3.4-1.6 5.4-1.8 52.8-8.6 93-46.6 104.4-98.6 0.8-4 2-8 3-12 0-9 0-18.2 0-27.2-0.6-1.8-1.6-3.6-1.8-5.4-8.4-52-45.4-91.6-96.8-103.6-5-1.2-9.6-2.6-14.2-3.8zM130.6 574.2c9 0 18.2 0 27.2 0 2.2-0.6 4.2-1.6 6.4-1.8 57.6-9 102.6-56.8 106.2-113.2 4-62.2-32-114.8-90.2-131.8-7.4-2.2-15-3.8-22.4-5.6-9 0-18.2 0-27.2 0-1.8 0.6-3.4 1.6-5.2 2-52 9.6-86 39.8-102.2 90.2-2.2 6.6-3.4 13.6-5.2 20.4 0 9 0 18.2 0 27.2 0.6 1.8 1.6 3.6 1.8 5.4 8.6 52.2 45.4 91.6 96.8 103.6 4.8 1.2 9.4 2.4 14 3.6zM501.4 574.2c9 0 18.2 0 27.2 0 2.2-0.6 4.2-1.6 6.4-2 57.4-9 103.6-58.6 106-114.6 2.8-63-35.2-116.4-93.8-131.4-6.2-1.6-12.4-3-18.6-4.4-9 0-18.2 0-27.2 0-2.2 0.6-4.2 1.6-6.4 2-57.4 8.8-103.6 58.6-106.2 114.6-3 63 35.2 116.4 93.8 131.4 6.4 1.6 12.6 3 18.8 4.4z" />
194
-<glyph unicode="&#xe604;" glyph-name="arrow-down" data-tags="arrow-down" d="M8.2 684.6c0 8.6 3.4 17.4 10 24 13.2 13.2 34.8 13.2 48 0l451.8-451.8 445.2 445.2c13.2 13.2 34.8 13.2 48 0s13.2-34.8 0-48l-469.2-469.4c-13.2-13.2-34.8-13.2-48 0l-475.8 475.8c-6.8 6.8-10 15.4-10 24.2z" />
195
-<glyph unicode="&#xe605;" glyph-name="arrow-left" data-tags="arrow-left" d="M752.145 960c8.685 0 17.572-3.434 24.237-10.099 13.33-13.33 13.33-35.143 0-48.473l-456.256-456.458 449.591-449.591c13.33-13.33 13.33-35.143 0-48.473s-35.143-13.33-48.473 0l-473.827 473.827c-13.33 13.33-13.33 35.143 0 48.473l480.492 480.694c6.665 6.665 15.552 10.099 24.237 10.099z" />
196
-<glyph unicode="&#xe606;" glyph-name="arrow-right" data-tags="arrow-right" d="M271.653-63.192c-8.685 0-17.572 3.434-24.237 10.099-13.33 13.33-13.33 35.143 0 48.473l456.256 456.458-449.591 449.591c-13.33 13.33-13.33 35.143 0 48.473s35.143 13.33 48.473 0l473.827-473.827c13.33-13.33 13.33-35.143 0-48.473l-480.492-480.694c-6.665-6.665-15.552-10.099-24.237-10.099z" />
197
-<glyph unicode="&#xe607;" glyph-name="arrow-up" data-tags="arrow-up" d="M8.2 208.6c0-8.6 3.4-17.4 10-24 13.2-13.2 34.8-13.2 48 0l451.8 451.8 445.2-445.2c13.2-13.2 34.8-13.2 48 0s13.2 34.8 0 48l-469.2 469.4c-13.2 13.2-34.8 13.2-48 0l-475.8-475.8c-6.8-6.8-10-15.4-10-24.2z" />
198
-<glyph unicode="&#xe608;" glyph-name="paypal" data-tags="paypal" d="M318.753 104.566h-215.653c-8.752 0-17.154 3.851-22.756 10.678s-7.877 15.579-6.302 24.331l138.284 752.159c8.227 41.135 42.010 68.442 84.371 68.442h331.881c133.383 0 223.179-85.246 223.179-212.152 0-127.956-88.222-366.89-300.548-366.89h-145.11l-58.464-253.637c-3.151-13.478-15.054-22.931-28.882-22.931zM138.634 163.556h156.663l58.289 253.637c3.151 13.478 15.054 22.931 28.882 22.931h168.741c168.566 0 241.384 203.75 241.384 307.725 0 94.348-62.84 152.987-164.015 152.987h-331.881c-8.227 0-22.756-2.626-26.256-20.48l-131.807-716.8zM421.153-64.175h-215.653c-8.752 0-16.979 3.851-22.581 10.503s-8.052 15.579-6.477 24.156l27.657 157.538c2.801 16.104 18.029 26.782 34.133 23.981s26.782-18.204 23.981-34.133l-21.53-122.88h156.663l55.839 256.088c2.976 13.653 15.054 23.281 28.882 23.281h168.741c168.566 0 241.384 203.75 241.384 307.725 0 67.742-28.532 114.478-84.546 138.809-14.879 6.477-21.88 23.981-15.229 38.859 6.477 15.054 23.981 21.88 38.859 15.404 77.369-33.608 120.079-102.225 120.079-193.072 0-127.956-88.222-366.89-300.548-366.89h-144.935l-55.839-256.088c-2.976-13.653-15.054-23.281-28.882-23.281zM459.837 546.899h-58.114c-8.752 0-16.979 3.851-22.756 10.678-5.601 6.652-8.052 15.579-6.477 24.156l38.859 215.653c2.451 14.003 14.704 24.331 29.057 24.331h93.998c35.534 0 63.891-11.378 81.92-32.733 19.605-23.281 26.081-56.364 19.080-98.549-14.178-100.299-66.691-143.535-175.568-143.535zM437.082 606.064h22.756c87.871 0 108.526 31.508 117.279 93.473 2.801 17.329 4.026 39.56-5.776 51.288-8.227 9.802-24.681 11.728-36.934 11.728h-69.317l-28.007-156.488z" />
199
-<glyph unicode="&#xe609;" glyph-name="social-instagram" data-tags="social-instagram" d="M511.4 191.8c-124.8 0-226.4 101.6-226.4 226.4s101.6 226.4 226.4 226.4c124.8 0 226.4-101.6 226.4-226.4 0.2-124.8-101.4-226.4-226.4-226.4zM511.4 571.2c-84.4 0-153-68.6-153-153s68.6-153 153-153c84.4 0 153 68.6 153 153s-68.6 153-153 153zM802.6-49.4h-582.2c-121.6 0-220.4 98.8-220.4 220.4v553.6c0 121.6 98.8 220.4 220.4 220.4h582.2c121.6 0 220.4-98.8 220.4-220.4v-553.6c0-121.6-98.8-220.4-220.4-220.4zM220.4 871.6c-81 0-147-66-147-147v-553.6c0-81 66-147 147-147h582.2c81 0 147 66 147 147v553.6c0 81-66 147-147 147h-582.2zM358.4 507.6h-309.4c-20.2 0-36.8 16.4-36.8 36.8s16.4 36.8 36.8 36.8h309.6c20.2 0 36.8-16.4 36.8-36.8s-16.6-36.8-37-36.8zM977.4 507.6h-313c-20.2 0-36.8 16.4-36.8 36.8s16.4 36.8 36.8 36.8h313c20.2 0 36.8-16.4 36.8-36.8s-16.4-36.8-36.8-36.8zM716.4 761.4c0 20.2 16.6 36.8 36.8 36.8h62.4c20.2 0 36.8-16.6 36.8-36.8v-62.4c0-20.2-16.6-36.8-36.8-36.8h-62.4c-20.2 0-36.8 16.6-36.8 36.8v62.4z" />
200
-<glyph unicode="&#xe60a;" glyph-name="social-linkedin" data-tags="social-linkedin" d="M997.795-42.431h-208.025c-14.715 0-26.608 11.893-26.608 26.608v335.017c0 114.898-59.263 114.898-78.816 114.898-52.611 0-74.986-41.524-82.243-59.465-3.427-8.063-5.039-21.77-5.039-40.92v-349.732c0-14.715-11.893-26.608-26.608-26.608h-208.227c-7.055 0-13.909 2.822-18.948 7.861s-7.861 11.893-7.66 18.948c0 5.644 2.822 567.433 0 624.882-0.403 7.257 2.217 14.312 7.257 19.553s11.893 8.265 19.351 8.265h208.227c14.715 0 26.608-11.893 26.608-26.608v-15.723c35.074 31.244 85.669 57.046 161.058 57.046 166.702 0 266.28-115.301 266.28-308.409v-359.005c0-14.715-11.893-26.608-26.608-26.608zM816.378 10.784h155.011v332.397c0 162.268-77.606 255.194-213.065 255.194-90.507 0-134.45-45.153-162.066-86.476-3.225-10.885-13.506-18.948-25.6-18.948h-1.411c-9.676 0-18.545 5.241-23.181 13.707-3.628 6.652-4.435 14.312-2.016 21.367v55.836h-154.608c1.411-111.068 0-470.476-0.403-572.876h154.809v322.923c0 26.809 2.822 46.161 8.869 60.876 23.383 57.852 72.567 92.724 131.427 92.724 83.855 0 132.031-61.279 132.031-168.113v-308.611zM247.131-42.431h-208.227c-14.715 0-26.608 11.893-26.608 26.608v626.091c0 14.715 11.893 26.608 26.608 26.608h208.227c14.715 0 26.608-11.893 26.608-26.608v-626.091c0-14.715-11.893-26.608-26.608-26.608zM65.512 10.784h155.011v572.876h-155.011v-572.876zM143.118 669.128h-1.411c-82.041 0-141.707 56.844-141.707 135.055 0 78.009 60.674 134.854 144.529 134.854 82.444 0 141.304-55.231 142.917-134.249 0-78.816-60.674-135.66-144.328-135.66zM144.529 885.619c-54.627 0-91.313-32.857-91.313-81.638 0-47.975 36.283-81.638 88.491-81.638h1.411c54.425 0 91.112 32.857 91.112 81.638-1.008 49.386-36.283 81.638-89.701 81.638z" />
201
-<glyph unicode="&#xe60b;" glyph-name="social-pintarest" data-tags="social-pintarest" d="M886.796 608.541c-3.822 186.292-156.115 321.283-362.524 321.283-22.331 0-45.064-1.609-67.797-4.828-165.369-22.934-292.313-142.032-316.052-296.135-16.899-109.844 18.508-241.817 135.393-271.591l16.899-4.225 9.858 14.284c3.42 4.828 33.396 49.088 28.567 85.702-2.414 18.307-13.479 29.573-20.118 36.212-1.207 1.207-2.615 2.615-3.219 3.219-18.307 28.769-25.952 77.454-18.307 118.293 18.508 100.589 102.4 173.617 208.622 181.664 7.444 0.604 14.887 0.805 22.13 0.805 110.045 0 184.481-65.584 189.712-166.978 4.828-97.974-24.544-187.297-76.85-233.166l-3.42-3.018c-12.272-10.864-21.928-19.514-42.046-22.532-5.231-0.805-10.461-1.207-15.29-1.207-40.236 0-62.164 26.556-62.969 52.709-1.006 29.372 10.662 61.561 23.136 95.761 15.29 42.046 31.183 85.702 25.349 130.766-6.237 46.673-48.685 83.087-96.767 83.087-12.272 0-24.745-2.414-36.816-6.84-87.312-33.194-100.187-147.464-68.2-239.604-7.645-36.413-17.503-72.424-27.964-110.447-31.183-114.471-63.572-232.965-39.029-371.778l5.432-30.78 28.769 11.87c27.964 11.668 43.052 37.419 55.525 58.744 2.414 4.024 4.828 8.047 7.041 11.87 40.839 64.176 63.774 140.825 81.477 215.261 44.058-33.194 89.122-43.857 153.298-36.816 177.44 19.313 269.58 209.427 266.16 378.417zM406.582 478.78l1.408 7.041-2.615 6.84c-27.36 72.223-21.124 160.138 36.615 182.067 6.237 2.414 12.674 3.621 18.911 3.621 23.538 0 44.259-17.301 47.076-39.431 4.426-32.993-8.852-68.803-22.733-107.027-13.479-37.017-27.561-75.241-26.153-114.471 1.609-49.088 41.845-101.193 113.062-101.193 7.444 0 15.088 0.604 22.934 1.811 34.804 5.231 54.117 22.331 67.998 34.804l3.219 2.817c63.371 55.727 99.382 160.541 93.749 273.402-6.84 136.399-115.678 224.918-265.556 213.652-129.358-9.858-231.356-99.181-254.089-222.504-9.858-53.111 0.402-115.275 25.349-154.505 3.018-4.627 6.438-8.248 9.657-11.467 2.213-2.414 5.834-5.834 6.035-7.444 0.805-6.84-3.42-20.923-10.662-34.804-72.827 30.982-93.347 128.956-80.874 209.628 20.118 131.973 129.961 234.172 273.402 254.089 20.52 2.817 41.040 4.225 60.957 4.225 177.842 0 309.212-114.471 312.229-272.195 3.018-146.861-73.631-311.425-221.095-327.72-10.059-1.006-19.514-1.609-28.366-1.609-53.514 0-82.282 18.508-116.885 52.91l-32.189 31.987-9.858-44.259c-18.911-84.093-40.839-172.008-84.294-240.409-2.817-4.426-5.633-9.254-8.45-14.284-1.006-1.811-2.012-3.621-3.219-5.231-8.047 107.429 18.508 204.8 44.461 299.555 10.662 39.23 21.928 80.069 29.976 120.104z" />
202
-<glyph unicode="&#xe60c;" glyph-name="social-github" data-tags="social-github" d="M158.6 437.4c-11.6 0-22.4 7.4-26 19-29.4 91.8-33.6 254 29.4 327.6-14 53.2-6.2 125.2 19.6 163.8 5.4 8 14.2 12.6 24 12.2 73.4-3.2 121.2-33.8 163.2-61.8 59.8 15.6 118 21 187 17.2 17-1 33.8-4.8 48.6-8.2 14-3.2 28.4-6.6 36.8-5.8 7.6 0.8 21.2 10 32.2 17.6 10.2 7 21 14.2 32.2 19.2 32 14 60.8 20.4 99.6 21.8 15 0.4 27.8-11.2 28.4-26.4s-11.2-27.8-26.4-28.2c-32.2-1.2-53.8-5.8-79.6-17.2-6.6-3-14.8-8.4-23.4-14.4-17-11.6-36.4-24.8-58-26.8-17.4-1.6-35.4 2.4-54.4 7-13.2 3-27 6.2-39.2 7-67.4 3.8-123.4-2-181.4-18.6-7.6-2.2-15.8-1-22.6 3.6l-6.8 4.6c-36.6 24.2-71.2 47.4-121.8 53.6-12.6-32.2-14.2-85.6-1.6-117.2 4.4-10.8 1.2-23.4-7.6-30.8-49.4-42-55.6-190.6-26.2-282.8 4.6-14.4-3.4-29.8-17.8-34.4-2.8-1.2-5.6-1.6-8.2-1.6zM366.6 167.4c-2 0-4 0.2-6 0.6-14.8 3.2-24 17.8-20.8 32.6l1.8 7.8c8.4 38 16.2 68.6 25.4 91.4-112.2 23.4-194 76.8-232.8 152.4-6.8 13.4-1.6 30 11.8 36.8s30 1.6 36.8-11.8c35-68.2 117.4-114.4 232.2-130.2 11-1.6 20-9.6 22.8-20.2 2.8-10.8-1.2-22.2-10.2-28.8-5.8-5.2-16.4-27-32.6-101.2l-1.8-8c-2.8-12.6-14-21.4-26.6-21.4zM316.2-32.8c-1.8 0-3.4 0.2-5.2 0.6-14.8 3-24.6 16.8-21.6 31.6 5 25.4 22.8 36 33.4 42.2 7.2 4.2 9.4 5.8 10.6 8.6 6.2 13.2 4.6 47.4 3.2 74.8-0.6 11.6-1.2 23.4-1.4 34.8-63.4-11-132.2-14.4-168.6 45.8-7.2 12-11.8 24.2-16 35.2-4.8 12.4-8.8 23.2-15.4 31.2-9.6 11.6-7.8 28.8 3.8 38.4s28.8 8 38.4-3.8c12.2-15 18.6-31.8 24.2-46.6 3.6-9.6 7-18.6 11.6-26.2 19.6-32.4 62.4-30.4 144.8-13.8 8.6 1.8 17.4-0.8 23.8-6.6 6.4-6 9.6-14.6 8.6-23.2-2-17.4-0.8-40.2 0.2-62.2 2-38.6 3.8-75-8.4-100.8-8.8-18.6-23-27-32.4-32.4-2.6-1.6-6.6-3.8-7.4-4.8-1.8-13.4-13.2-22.8-26.2-22.8zM713.8-27.6c-9 0-17.6 4.4-23 12.4-2.2 3.6-5.4 5.8-11 9.6-8.8 6.2-20.8 14.6-29.8 32-16.2 31.8-13.6 78-11 126.8 1.6 30 3.2 61 0 85.4-2.8 20.6-10 29.8-20 42.6-6.4 8.4-13.8 17.8-19.6 30.2-3.8 8.2-3.2 17.6 1.2 25.4 4.6 7.8 12.6 12.8 21.6 13.4 102.6 7.6 183.6 56 222.6 132.6 6.8 13.4 23.2 18.8 36.8 12 13.4-6.8 18.8-23.2 12-36.8-41.6-82.2-121-137.6-221.4-156.6 9-13.2 17.8-30 21.2-55.8 4-29.4 2.2-63 0.4-95.4-2-37.6-4.2-80.2 5.2-99 2.4-4.8 5.4-7 12.2-11.8 7.4-5 17.4-12 25.6-24.6s4.6-29.6-8-37.8c-4.6-3.2-9.8-4.6-15-4.6zM869.2 443c-2.4 0-5 0.4-7.4 1-14.6 4.2-23 19.2-18.8 33.8 30.2 106.2 9.6 244.2-43.2 289.2-8.6 7.4-11.8 19.2-8 29.8 12.8 36.6 4.2 91.6-10.4 124.8-6 13.8 0.2 30 14 36s30-0.2 36-14c16.8-38 27.8-97.8 16.8-147.6 65.2-72 78-225.6 47.4-333.2-3.6-12-14.4-19.8-26.4-19.8zM623.6-64.4c-5 0-10.2 1.4-14.8 4.4-5 3.2-20 12.8-47.8 56-12.6 19.6-21.8 117.2-27.4 290.4-0.4 15 11.4 27.8 26.4 28.2s27.8-11.4 28.2-26.4c3.6-113.4 12-242 19.6-264 20.4-31.6 30-38 30.4-38.2 12.6-8.2 16.4-25 8.2-37.8-5-8.2-13.8-12.6-22.8-12.6zM416.2-64.4c-9 0-17.8 4.4-23 12.6-8.2 12.6-4.4 29.6 8.2 37.8 0.4 0.2 10 6.6 30.4 38.2 7.6 21.8 15.8 150.6 19.6 264 0.4 15 13.2 27 28.2 26.4 15-0.4 27-13.2 26.4-28.2-5.6-173.2-14.8-271-27.4-290.4-27.8-43-42.8-52.8-47.8-56-4.4-3-9.6-4.4-14.6-4.4z" />
203
-<glyph unicode="&#xe60d;" glyph-name="social-gplus" data-tags="social-gplus" d="M976.077 812.544h-82.739v76.39c0 23.142-13.926 40.346-37.069 40.346h-59.802c-23.142 0-46.49-17.203-46.49-40.346v-76.39h-73.114c-23.142 0-45.67-20.275-45.67-43.418v-59.802c0-23.142 22.528-42.189 45.67-42.189h73.114v-77.414c0-23.142 23.347-39.322 46.49-39.322h59.802c23.142 0 37.069 16.179 37.069 39.322v77.414h82.739c23.142 0 48.333 19.046 48.333 42.189v59.802c0 23.142-25.19 43.418-48.333 43.418zM684.442 720.384v38.912h116.736v118.784h38.912v-118.784h131.072v-38.912h-131.072v-118.784h-38.912v118.784h-116.736zM522.035 418.918l-5.939 4.301c-39.117 29.082-50.381 41.574-53.658 46.49 0.41 8.192 3.277 14.541 35.84 39.936 60.621 47.514 92.774 106.906 92.774 171.827 0 40.55-9.011 78.438-26.010 110.592 3.277 1.843 6.144 4.301 8.806 7.168l57.344 60.006c7.987 7.987 12.493 17.613 12.493 28.877 0 23.142-18.842 41.165-41.984 41.165h-259.482c-153.6 0-283.443-111.616-283.443-244.941 0-129.434 82.944-222.822 207.667-236.134-0.205-3.072-0.41-5.939-0.41-9.011 0-9.421 1.024-18.432 3.277-27.238-69.018-5.53-133.53-31.334-182.682-73.114-54.886-46.694-86.426-108.954-86.426-171.008 0-116.736 134.554-201.318 319.898-201.318 90.112 0 169.165 24.166 228.762 69.632 57.754 44.032 90.726 105.267 90.726 167.936-0.205 96.051-28.672 148.070-117.555 214.835zM352.256 381.030c-21.299 20.685-34.406 34.202-34.406 59.597 0 14.336 4.301 29.491 12.698 45.466l8.192 15.36-17.613-1.434c-9.421-0.614-17.203-1.024-24.371-1.024-111.206 0-186.163 74.342-186.163 185.754 0 103.219 108.134 193.331 231.629 193.331h236.544l-39.322-38.912h-100.762l31.949-18.842c43.008-24.576 68.608-76.595 68.608-138.445 0-49.152-24.576-93.184-72.909-131.072-44.851-35.021-55.91-51.814-55.91-85.402 0-25.805 36.864-55.296 74.547-83.354l5.734-4.301c82.125-61.645 96.87-98.918 96.87-173.056 0-91.341-100.147-185.754-267.674-185.754-155.443 0-268.083 62.874-268.083 149.504 0 93.389 98.918 193.536 246.374 193.536 8.397 0 16.384 2.048 24.166 2.253 7.578 0 15.155 2.253 22.733 2.253h24.166l-16.998 14.541zM329.728 350.72c-108.134 0-199.68-70.246-199.68-153.395 0-86.835 83.149-155.034 189.235-155.034 171.418 0 207.258 82.125 207.258 150.938 0 10.035-1.229 20.275-3.686 30.515-10.65 41.984-47.309 66.765-93.798 98.099-7.578 5.12-15.565 10.445-23.757 16.179l-2.458 1.229c-22.323 7.168-46.080 11.059-70.451 11.264l-2.662 0.205zM381.542 291.738c6.349-4.506 12.698-8.602 18.842-12.698 38.707-26.214 66.765-45.261 72.704-67.994 1.434-5.734 2.048-11.878 2.048-17.818 0-42.598-16.179-99.123-155.648-99.123-77.005 0-137.421 45.261-137.421 103.219 0 54.067 69.018 101.376 147.661 101.581h2.253c17.203-0.205 33.792-2.662 49.562-7.168zM426.394 551.629c25.19 28.672 35.226 73.933 28.262 127.181-13.107 99.123-78.029 175.514-151.347 177.766h-3.277c-30.515 0-57.549-12.288-78.029-35.84-28.262-32.154-40.346-81.51-33.382-135.373 12.083-92.57 80.077-164.25 157.901-166.707h3.891c30.925 0.205 57.139 11.469 75.981 32.973zM387.482 585.83c-8.806-10.035-21.299-15.155-37.069-15.155h-2.458c-52.634 1.638-99.942 53.862-108.134 121.651v0c-6.144 38.912 2.458 73.523 20.89 94.413 10.65 12.288 23.552 18.227 38.912 18.227h1.843c47.309-1.434 91.75-59.802 101.376-132.71 5.53-38.502-0.205-69.222-15.36-86.426z" />
204
-<glyph unicode="&#xe60e;" glyph-name="social-reddit" data-tags="social-reddit" d="M664.6 230.2c-9.6 2.6-21.2-0.8-35.4-10.2l-1.4-1.2c-23-23-64.8-34.6-124.2-34.6s-101.2 11.6-124.2 34.6c-9.6 9.6-29 9.6-38.6 0-10-10-10-28.6 0.6-39.2 42.6-35.6 96.2-52.2 168.4-52.2 75 0 135 18.8 169 52.8 4.8 4.8 7.6 11.8 7.6 19.2 0 6.8-2.4 13.4-6.4 18-4.6 8.4-10.8 11.6-15.4 12.8zM438.2 380.6c0 44.2-37.2 84.4-78.2 84.4s-78.2-40.2-78.2-84.4c0-42.4 35.8-78.2 78.2-78.2s78.2 35.8 78.2 78.2zM659.6 458.8c-42.4 0-78.2-35.8-78.2-78.2s35.8-78.2 78.2-78.2 78.2 35.8 78.2 78.2c0 42.4-35.8 78.2-78.2 78.2zM896.6 583.6c-25.6 0-55.6-11.6-75.8-28.6-68 43.2-159.8 70-267.2 77.8l50 167 140.2-33.6c4.2-51.8 50.4-95.6 102.8-95.6 55 0 103.2 48.2 103.2 103.2s-48.2 103.2-103.2 103.2c-37.8 0-76-23-92.8-54.6l-166.8 41.8-2.4 0.2c-11.4 0-27.2-10-28.2-26.6l-66-204.2c-105.2-1.2-208.6-29.2-292.4-79.4-25 15.6-49.6 23.2-75 23.2-67.2 0-122-54.6-122-122 0-42 20.2-79.4 56.2-99.4v-25.4c0-87.2 47-163.2 135.2-220 83-57.4 195.8-89 317.6-89s237.8 31.6 320.8 89c87.2 60.4 138.4 138.6 138.4 220v26c26 22.8 52.8 63.6 52.8 105.2-0.2 67.2-58 121.8-125.4 121.8zM962 455.4c0-11.4-6.4-27.6-17-39.6-12.6 33.4-36.4 65-74.6 99.4 7.6 3.2 16 5.4 26.4 5.4 38.4 0.2 65.2-26.8 65.2-65.2zM905.8 330.6c0-78-59-137.2-107.8-172.8-84.8-52.2-184.4-79.8-288.2-79.8-107.2 0-212.2 29-288 79.6-74.8 49.8-114.2 109.6-114.2 173s39.4 123.2 114.2 173c77 51.2 177 79.6 281.8 79.6 107.2 0 212.2-29 288-79.6 74.6-49.8 114.2-109.6 114.2-173zM150.4 517.6c-32.2-25.6-59.6-59.8-78.8-98.6-7.8 12.6-14 25-14 36.4 0 38.4 26.8 65.2 65.2 65.2 13 0.2 21 0 27.6-3zM800.2 773.6c0 26.2 20.4 46.6 46.6 46.6s46.6-20.4 46.6-46.6-20.4-46.6-46.6-46.6c-26.2 0.2-46.6 20.6-46.6 46.6z" />
205
-<glyph unicode="&#xe60f;" glyph-name="social-skype" data-tags="social-skype" d="M977.768 385.546c3.244 22.71 4.867 45.827 4.867 68.74 0 261.779-212.911 474.893-474.893 474.893-21.899 0-44.204-1.622-65.901-4.461-42.988 23.116-91.653 35.282-140.724 35.282-163.84 0-297.061-133.221-297.061-296.859 0-48.26 11.761-95.911 34.269-138.291-3.447-23.319-5.272-47.043-5.272-70.565 0-261.779 212.911-474.893 474.893-474.893 18.452 0 37.107 1.014 55.357 3.244 47.651-30.416 102.806-46.638 159.785-46.638 163.84 0 296.859 133.221 296.859 296.859 0 53.937-14.6 106.658-42.177 152.688zM884.898 71.046c-43.19-43.19-100.778-67.118-162.015-67.118-45.218 0-88.814 13.18-126.327 38.121l-16.83 11.152-20.074-2.636c-17.033-2.23-34.471-3.244-51.707-3.244-54.951 0-108.28 10.747-158.365 32.038-48.463 20.48-92.059 49.882-129.369 87.192s-66.712 80.906-87.192 129.369c-21.291 50.085-32.038 103.414-32.038 158.365 0 21.494 1.622 43.19 5.069 64.482l2.839 18.25-8.922 16.222c-18.25 33.457-27.983 71.376-27.983 109.903 0 61.237 23.724 118.622 67.118 162.015 43.19 43.19 100.778 67.118 162.015 67.118 39.135 0 77.865-10.139 111.728-29.199l16.222-9.125 18.452 2.636c19.872 3.042 40.352 4.461 60.426 4.461 54.951 0 108.28-10.747 158.365-32.038 48.463-20.48 92.059-49.882 129.369-87.192s66.712-80.906 87.192-129.369c21.291-50.085 32.038-103.414 32.038-158.365 0-21.088-1.622-42.379-4.867-63.265l-3.042-19.872 10.747-17.236c22.508-36.296 34.471-78.067 34.471-120.852-0.203-61.034-24.13-118.622-67.32-161.812zM578.712 498.49l-96.114 21.697c-52.315 11.761-78.676 29.808-78.676 54.546 0 17.641 7.3 32.038 21.697 42.988s34.877 16.425 61.034 16.425c30.821 0 55.965-6.489 75.026-19.669 5.678-3.65 17.844-15.613 36.499-35.688 12.166-12.977 25.347-19.669 39.338-19.669 14.397 0 26.969 4.055 37.107 12.166 10.341 8.111 15.411 19.263 15.411 33.255 0 32.241-21.291 60.223-63.873 83.948-40.149 22.508-84.15 33.66-132.005 33.66-55.154 0-100.981-11.761-137.48-35.080-42.582-27.577-63.873-67.32-63.873-119.027 0-70.97 41.163-117 123.488-137.885l129.774-32.849c32.646-8.314 49.071-25.955 49.071-52.518 0-17.844-7.908-32.849-23.724-45.421-17.236-13.991-40.149-21.088-68.537-21.088-33.052 0-59.615 7.908-79.69 23.724-4.664 3.244-17.438 17.641-38.324 43.393-12.977 15.816-27.78 23.724-44.002 23.724-13.991 0-25.549-4.461-34.674-13.383s-13.586-20.277-13.586-34.269c0-31.835 17.033-59.818 51.099-83.948 39.541-28.996 92.87-43.393 159.379-43.393 67.118 0 118.825 15.208 155.324 45.624 34.471 27.983 51.707 65.901 51.707 113.552 0.608 76.648-43.393 125.11-131.396 145.185z" />
206
-<glyph unicode="&#xe610;" glyph-name="social-behance" data-tags="social-behance" d="M376.743 545.159c15.924 9.676 23.987 27.213 23.987 51.805 0 27.213-10.683 45.556-31.849 54.425-17.739 6.047-40.718 9.071-68.132 9.071h-152.592v-129.613h167.106c24.995 0 45.757 4.838 61.48 14.312zM360.214 596.964c0-9.272-1.613-15.32-4.636-17.134-9.272-5.644-22.778-8.466-40.517-8.466h-126.387v48.58h112.076c22.375 0 40.517-2.217 53.82-6.45 2.016-1.008 5.644-2.62 5.644-16.529zM374.929 429.254c-13.707 6.249-33.26 9.676-57.852 9.877h-168.92v-156.019h166.904c24.995 0 44.75 3.427 58.658 10.28 25.6 12.699 38.501 37.291 38.501 72.97 0.202 30.236-12.296 51.402-37.291 62.891zM188.674 398.614h128.403c24.592-0.202 36.283-4.031 41.121-6.249 7.257-3.427 13.707-7.861 13.707-26.003 0-28.825-10.885-34.066-16.126-36.687-3.83-1.814-15.118-6.047-40.718-6.047h-126.387v74.986zM848.227 507.263c-17.94 15.32-40.315 23.181-66.721 23.181-28.624 0-51.402-8.265-67.326-24.794-15.924-16.328-26.003-38.702-29.833-66.52l-0.202-1.814h194.52l-0.202 1.613c-2.217 30.035-12.296 53.014-30.236 68.334zM743.609 478.035c3.427 3.427 12.699 12.094 37.896 12.094 15.723 0 28.422-4.031 38.702-12.094h-76.598zM1026.62 455.861c-6.047 38.904-19.553 73.776-40.113 103.811-18.948 28.22-42.532 50.394-70.551 66.52v160.857h-268.498v-162.469c-16.328-9.877-31.244-21.569-45.153-35.477-31.647-31.849-52.409-72.769-62.69-121.953-7.458 10.885-16.328 20.762-26.205 29.43 1.411 1.613 2.419 2.822 3.427 4.031 23.584 28.422 35.477 65.109 35.477 109.254 0 42.129-11.288 79.219-33.663 110.261-36.485 49.789-96.554 75.792-178.394 77.203h-343.887v-651.087h323.326c31.446 0 61.48 2.822 88.894 8.668 30.639 6.45 57.65 18.545 80.428 36.082 20.157 15.118 36.888 33.865 50.192 55.836 5.241 8.265 9.877 16.932 13.707 26.003 13.304-32.454 32.655-59.263 58.457-80.025 49.991-40.315 108.447-60.674 173.757-60.674 79.42 0 142.715 24.995 188.069 74.381 30.035 31.849 47.169 64.907 51.2 98.369l2.62 22.576h2.822l0.605 38.299c1.008 37.493-0.403 67.931-3.83 90.104zM442.457 494.161l-3.225-1.613 3.427-1.209c28.825-10.482 50.797-27.213 65.512-49.991s22.173-50.797 22.173-83.049c0-33.461-8.466-63.899-25.398-90.709-10.683-17.739-24.189-32.655-40.113-44.75-17.94-13.707-39.71-23.383-64.101-28.422-24.794-5.241-51.805-7.861-80.63-7.861h-283.213v570.255h301.757c69.14-1.008 118.728-21.367 147.351-60.472 17.335-23.987 26.003-53.014 26.003-86.677 0-34.469-8.869-62.488-26.205-83.452-9.877-11.691-24.391-22.375-43.339-32.050zM781.506 659.25c-10.079 0-19.956-0.403-29.43-1.411h-64.101v88.693h187.666v-88.693h-64.101c-9.877 0.806-19.956 1.411-30.035 1.411zM681.524 365.757c1.814-42.935 16.932-73.373 45.153-90.709 17.134-10.683 37.896-16.126 61.883-16.126 25.6 0 46.564 6.652 62.488 19.754 8.668 7.055 16.328 16.731 22.778 28.825h110.463c-3.427-24.189-16.932-48.983-40.517-73.978-37.493-40.718-90.709-61.279-158.438-61.279-55.836 0-105.827 17.335-148.359 51.805-42.532 34.268-64.101 91.112-64.101 168.517 0 72.567 19.553 129.209 57.852 167.912 32.655 32.857 74.18 52.006 123.565 57.046h55.030c25.6-2.62 49.386-8.668 70.954-18.343 29.228-13.102 53.619-34.066 72.567-62.287 17.134-24.794 28.422-54.224 33.461-87.080 3.024-19.351 4.233-46.967 3.628-82.444h-308.409v-1.613zM825.65 310.123c-8.869-7.257-20.964-10.683-37.090-10.683-16.529 0-29.631 3.225-40.315 9.877-5.241 3.225-11.691 8.063-16.932 17.739h107.036c-4.031-7.66-8.265-13.304-12.699-16.932z" />
207
-<glyph unicode="&#xe611;" glyph-name="social-foursqare" data-tags="social-foursqare" d="M145 884.2c0.8 1.8 1.6 3.8 2.2 5.6 14.4 46.2 45.8 69.8 94.4 69.8 115.2 0.2 230.4 0 345.6 0 66 0 131.8 0 197.8 0 14.4 0 28.6-1.2 42.4-5.2 29.2-8.4 46.4-30.2 50-60.2 4.2-34.2-4.2-66.8-11-99.6-30.2-146.6-60.8-293.2-91.2-440-3.4-16-7.4-31.8-15-46.4-17.4-33.4-47.4-43.8-82.6-44-50.6-0.2-101.2-0.2-151.8 0-9.2 0-16.2-2.6-22.2-9.6-35.8-41.8-71.6-83.4-107.6-125.2-50.2-58.4-100-117.2-150.8-175.2-15.6-17.8-37-22-59.8-16.8-21 4.8-33 19.2-38.4 39.4-0.6 2-1.4 3.8-2 5.8 0 300.8 0 601.2 0 901.6zM231.2 35.8c1.4 2.6 2 4.2 3 5.4 32.2 40.4 64.4 80.6 96.8 121 36.6 45.6 73.2 91.2 109.4 137 15.6 19.6 34.2 29.8 60.2 29.2 57.6-1.2 115.4-0.4 173-0.2 27.8 0 39.4 10 45 37.2 8.6 42.6 17.6 85.4 26 128 5.6 28.4-8 44.6-36.6 44.6-62.2 0-124.4 1.8-186.4-0.6-51.8-1.8-77 21-74 74.6 2.2 40.8 21.4 61.6 62.4 61.8 79 0 158.2 0 237.2 0 24.6 0 36.4 9.4 41.4 33.4 9 42.6 17.8 85.2 26.6 128 6.2 30.6-6.8 46.6-37.8 46.6-169.4 0-338.8 0-508.4 0-30.4 0-41.4-11-41.4-41.8 0-263 0-526 0-789.2 0-4-1.2-8.6 3.6-15z" />
208
-<glyph unicode="&#xe612;" glyph-name="social-soundcloud" data-tags="social-soundcloud" d="M1021.8 382.2c0-88-71.4-159.4-159.4-159.4h-63.8c-17.6 0-31.8 14.2-31.8 31.8s14.2 31.8 31.8 31.8h63.8c52.8 0 95.6 42.8 95.6 95.6s-42.8 95.6-95.6 95.6h-0.4c-41.4 0-76.8 26.4-90 63.2 0 0.2-0.4 0.4-0.4 0.8-24.8 69.8-89 121-166 126.6-16.6-1-29.8-14.8-29.8-31.6v-381.8c0-17.6-14.2-31.8-31.8-31.8s-31.8 14.2-31.8 31.8v381.8c0 52.4 42.2 94.8 94.4 95.4 104-6 191.2-74.2 224.8-168.2 0.2-0.2 0.4-0.4 0.6-0.4 4.2-12.8 16.2-22 30.2-22h0.4c1.8 0 3.6-0.2 5.2-0.2 0.4 0 0.8 0 1 0 85-3.4 153-73.2 153-159v0zM416.4 222.8c-17.6 0-31.8 14.2-31.8 31.8v350.6c0 17.6 14.2 31.8 31.8 31.8s31.8-14.2 31.8-31.8v-350.6c0-17.4-14.2-31.8-31.8-31.8v0zM288.8 222.8c-17.6 0-31.8 14.2-31.8 31.8v366.6c0 17.6 14.2 31.8 31.8 31.8s31.8-14.2 31.8-31.8v-366.4c0.2-17.6-14.2-32-31.8-32v0zM161.4 222.8c-17.6 0-31.8 14.2-31.8 31.8v255c0 17.6 14.2 31.8 31.8 31.8s31.8-14.2 31.8-31.8v-255c0-17.4-14.2-31.8-31.8-31.8v0zM34 286.6c-17.6 0-31.8 14.2-31.8 31.8v127.4c0 17.6 14.2 31.8 31.8 31.8s31.8-14.2 31.8-31.8v-127.4c0-17.6-14.2-31.8-31.8-31.8v0zM671.2 286.6c17.6 0 31.8-14.2 31.8-31.8s-14.2-31.8-31.8-31.8-31.8 14.2-31.8 31.8 14.2 31.8 31.8 31.8v0z" />
209
-<glyph unicode="&#xe613;" glyph-name="social-spotify" data-tags="social-spotify" d="M417.534 649.254c154.872-4.207 274.082-22.039 384.676-78.137 15.627-8.014 34.461-19.434 40.671-33.86 5.81-13.424 2.404-41.473-7.413-48.485-13.824-10.018-41.673-14.826-56.099-7.413-113.8 58.904-235.013 77.737-360.634 72.728-50.288-2.004-100.777-11.42-150.264-21.037-32.257-6.411-58.904-2.805-68.32 30.454-10.218 35.262 14.826 53.294 44.879 58.904 67.519 12.021 135.839 21.237 172.503 26.847zM440.574 496.585c110.194-6.612 214.176-29.251 309.143-83.347 15.627-8.815 32.056-30.253 33.659-47.083 2.605-30.053-31.856-40.271-67.519-21.237-123.217 65.515-253.646 80.141-389.685 57.1-15.227-2.605-31.255-11.821-45.079-9.016-17.631 3.807-33.459 16.629-50.088 25.445 10.418 15.828 18.232 42.475 31.856 45.881 58.102 14.425 118.208 22.039 177.712 32.257zM420.139 343.516c115.002-1.803 199.951-19.434 277.888-63.512 20.236-11.42 44.077-26.647 24.443-51.29-7.814-9.817-39.67-11.019-53.694-3.406-100.577 53.694-207.164 60.306-316.957 46.482-18.232-2.204-36.464-10.418-53.895-8.615-16.629 1.803-32.257 13.023-48.285 20.035 11.019 13.424 20.236 36.063 33.659 38.868 53.294 11.821 107.99 17.23 136.841 21.438zM1024 447.9c0-141.248-50.088-262.061-150.064-362.036s-220.588-150.064-362.036-150.064c-141.248 0-262.061 50.088-362.036 150.064s-150.064 220.588-150.064 362.036c0 141.248 50.088 262.061 150.064 362.036 100.176 99.976 220.788 150.064 362.036 150.064s262.061-50.088 362.036-150.064c99.976-99.976 150.064-220.788 150.064-362.036zM959.887 447.9c0 124.018-43.677 229.604-131.030 316.957-87.153 87.354-192.939 131.030-316.957 131.030-123.818 0-229.604-43.677-316.957-131.030s-131.030-192.939-131.030-316.957 43.677-230.004 131.030-317.959c87.354-87.955 192.939-132.032 316.957-132.032s229.604 44.077 316.957 132.032c87.354 87.955 131.030 193.941 131.030 317.959z" />
210
-<glyph unicode="&#xe614;" glyph-name="social-stumbleupon" data-tags="social-stumbleupon" d="M777.2 59.4c-129.8 0-236.4 105.6-237.4 235.4v134c0 7.8 4 15 10.6 19.2s14.8 4.8 22 1.4l57.8-27 89.4 26.8c7 2 14.4 0.8 20.2-3.6s9.2-11.2 9.2-18.4v-134.8c0-15.4 12.6-28 28-28s28 12.6 28 28v137.4c0 6 2.4 11.8 6.6 16.2 4.2 4.2 10 6.6 16.2 6.6v0h164.2c12.6 0 22.8-10.2 22.8-22.8v-133.2c-0.2-130.8-106.8-237.2-237.6-237.2zM585.4 392.8v-98c1-104.6 87-189.8 191.8-189.8 105.8 0 191.8 86 191.8 191.8v110.2h-118.6v-114.6c0-40.6-33-73.6-73.6-73.6s-73.8 33-73.8 73.6v104.2l-68.4-20.4c-5.4-1.6-11.2-1.2-16.2 1.2l-33 15.4zM246.4 59.4c-131 0-237.6 106.4-237.6 237.4v133c0 12.6 10.2 22.8 22.8 22.8h164.2c12.6 0 22.8-10.2 22.8-22.8v-131.4c0-15.4 12.6-28 28-28s28 12.6 28 28v310c4.6 129.2 108.6 229.8 237 229.8 129 0 233-101.2 237-230.2v-68.6c0-10.2-6.6-19-16.4-22l-97.8-29.2c-5.4-1.6-11.2-1.2-16.2 1.2l-65.6 30.6c-8 3.8-13.2 11.8-13.2 20.8v59c0 15.4-12.6 28-28 28s-28-12.6-28-28l-0.2-306.2c-1.4-129.2-107.8-234.2-236.8-234.2zM54.6 407v-110.2c0-105.8 86-191.8 191.8-191.8 104.2 0 190 84.8 191.4 189l0.2 305.8c0 40.6 33 73.6 73.6 73.6s73.6-33 73.6-73.6v-44.4l44.6-20.8 73.2 21.8v50.8c-3.2 103.6-87.2 185.2-191.2 185.2-103.6 0-187.6-81.2-191.2-184.8v-309.2c0-40.6-33-73.6-73.6-73.6s-73.6 33-73.6 73.6v108.6h-118.8z" />
211
-</font></defs></svg>

二进制
platforms/android/app/src/main/assets/www/fonts/simple-line-icons/Simple-Line-Icons.ttf 查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/simple-line-icons/Simple-Line-Icons.woff 查看文件


二进制
platforms/android/app/src/main/assets/www/fonts/simple-line-icons/Simple-Line-Icons.woff2 查看文件


二进制
platforms/android/app/src/main/assets/www/images/full_image_1.jpg 查看文件


二进制
platforms/android/app/src/main/assets/www/images/full_image_2.jpg 查看文件


二进制
platforms/android/app/src/main/assets/www/images/project-1.jpg 查看文件


二进制
platforms/android/app/src/main/assets/www/images/project-2.jpg 查看文件


二进制
platforms/android/app/src/main/assets/www/images/project-3.jpg 查看文件


+ 0
- 0
platforms/android/app/src/main/assets/www/images/project-4.jpg 查看文件


部分文件因为文件数量过多而无法显示