├── .devcontainer ├── Dockerfile └── devcontainer.json ├── .env ├── .github └── workflows │ └── docker.yml ├── .gitignore ├── Cargo.toml ├── LICENSE ├── README-en.md ├── README.md ├── cos ├── layer.zip └── serverless.yml ├── layer └── serverless.yml ├── scf ├── bootstrap ├── config.json ├── scf.so └── serverless.yml ├── src ├── aiy_food_V1_labelmap.txt ├── lite-model_aiy_vision_classifier_food_V1_1.tflite └── main.rs └── website ├── content ├── fonts │ ├── ubuntu-bold-webfont.woff │ ├── ubuntu-bold-webfont.woff2 │ ├── ubuntu-bolditalic-webfont.woff │ ├── ubuntu-bolditalic-webfont.woff2 │ ├── ubuntu-italic-webfont.woff │ ├── ubuntu-italic-webfont.woff2 │ ├── ubuntu-light-webfont.woff │ ├── ubuntu-light-webfont.woff2 │ ├── ubuntu-lightitalic-webfont.woff │ ├── ubuntu-lightitalic-webfont.woff2 │ ├── ubuntu-medium-webfont.woff │ ├── ubuntu-medium-webfont.woff2 │ ├── ubuntu-mediumitalic-webfont.woff │ ├── ubuntu-mediumitalic-webfont.woff2 │ ├── ubuntu-regular-webfont.woff │ └── ubuntu-regular-webfont.woff2 ├── imgs │ ├── ai.png │ ├── hotdogBig.png │ ├── prize.png │ ├── rust-crab.png │ ├── rust-lang.png │ └── ss-serverless-wasm.png ├── index.css ├── index.html ├── jquery-3.5.1.min.js └── normalize.min.css └── serverless.yml /.devcontainer/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:20.04 2 | ARG DEBIAN_FRONTEND=noninteractive 3 | ENV RUSTUP_HOME=/usr/local/rustup \ 4 | CARGO_HOME=/usr/local/cargo \ 5 | PATH=/usr/local/cargo/bin:$PATH 6 | RUN apt-get update \ 7 | && apt-get install -y tzdata \ 8 | && apt-get -y upgrade && apt-get install -y build-essential curl wget git vim libboost-all-dev llvm-dev liblld-10-dev 9 | RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \ 10 | && /usr/local/cargo/bin/rustup override set 1.50.0 11 | RUN curl -sL https://deb.nodesource.com/setup_12.x | bash \ 12 | && apt-get install -y nodejs \ 13 | && npm install -y -g rustwasmc --unsafe-perm \ 14 | && npm install -g serverless 15 | 16 | # Switch back to dialog for any ad-hoc use of apt-get 17 | ENV DEBIAN_FRONTEND=dialog 18 | -------------------------------------------------------------------------------- /.devcontainer/devcontainer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Second State Tencent Cloud Serverless", 3 | "dockerFile": "Dockerfile", 4 | 5 | // Set *default* container specific settings.json values on container create. 6 | "settings": { 7 | "terminal.integrated.shell.linux": "/bin/bash", 8 | "lldb.executable": "/usr/bin/lldb" 9 | }, 10 | 11 | // Add the IDs of extensions you want installed when the container is created. 12 | "extensions": [ 13 | "rust-lang.rust", 14 | "bungcip.better-toml", 15 | "vadimcn.vscode-lldb", 16 | "dbaeumer.vscode-eslint" 17 | ], 18 | 19 | "forwardPorts": [3000] 20 | 21 | // Use 'postCreateCommand' to run commands after the container is created. 22 | // "postCreateCommand": "yarn install", 23 | 24 | // Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root. 25 | // "remoteUser": "node" 26 | } 27 | -------------------------------------------------------------------------------- /.env: -------------------------------------------------------------------------------- 1 | SERVERLESS_PLATFORM_VENDOR=tencent 2 | GLOBAL_ACCELERATOR_NA=true 3 | region=ap-hongkong 4 | -------------------------------------------------------------------------------- /.github/workflows/docker.yml: -------------------------------------------------------------------------------- 1 | name: docker 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | schedule: 11 | - cron: "0 0 * * *" 12 | 13 | jobs: 14 | build-docker-images: 15 | name: build-docker-images 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: Checkout code 19 | uses: actions/checkout@v2 20 | - name: "Rebuild secondstate/tencent-tensorflow-scf:latest" 21 | uses: docker/build-push-action@v1 22 | with: 23 | dockerfile: .devcontainer/Dockerfile 24 | username: ${{ secrets.DOCKER_USERNAME }} 25 | password: ${{ secrets.DOCKER_ACCESS_TOKEN }} 26 | repository: secondstate/tencent-tensorflow-scf 27 | tags: latest 28 | add_git_labels: true 29 | always_pull: true 30 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Generated by Cargo 2 | # will have compiled files and executables 3 | /target/ 4 | 5 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries 6 | # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html 7 | Cargo.lock 8 | 9 | # These are backup files generated by rustfmt 10 | **/*.rs.bk 11 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "scf" 3 | version = "0.1.0" 4 | authors = ["Michael Yuan "] 5 | edition = "2018" 6 | 7 | [dependencies] 8 | wasm-bindgen = "=0.2.61" 9 | ssvm_tensorflow_interface = "^0.1.3" 10 | base64 = "0.12.3" 11 | serde = { version = "1.0", features = ["derive"] } 12 | serde_json = "=1.0.44" 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README-en.md: -------------------------------------------------------------------------------- 1 | [中文](README.md) | [Screencast](https://youtu.be/Thoi7XrIKvE) | [Live demo!](https://sls-website-ap-beijing-7jlzqqj-1302315972.cos-website.ap-beijing.myqcloud.com/) | [Coding tutorial](https://www.secondstate.io/articles/tencent-tensorflow/) 2 | 3 | # Quick start 4 | 5 | Clone this repo. From the repo's root directory, you can pull our pre-configured dev Docker image and log into it. 6 | 7 | ``` 8 | $ git clone https://github.com/second-state/tencent-tensorflow-scf 9 | $ cd tencent-tensorflow-scf 10 | 11 | $ docker pull secondstate/tencent-tensorflow-scf 12 | $ docker run --rm -it -v $(pwd):/app secondstate/tencent-tensorflow-scf 13 | (docker) $ 14 | ``` 15 | 16 | > You do not have to use our Docker image. To build on your own computer or container, make sure that you have installed the [Serverless Framework](https://www.serverless.com/framework/docs/providers/tencent/guide/installation/), [Rust](https://www.rust-lang.org/tools/install), and [rustwasmc](https://www.secondstate.io/articles/rustwasmc/). 17 | 18 | Run the following command inside the Docker container to build and deploy the entire application. 19 | 20 | ``` 21 | (docker) $ cd /app 22 | (docker) $ sls deploy 23 | ... ... 24 | website: https://sls-website-ap-hongkong-kfdilz-1302315972.cos-website.ap-hongkong.myqcloud.com 25 | vendorMessage: null 26 | 27 | 63s › tencent-tensorflow-scf › "deploy" ran for 3 apps successfully. 28 | ``` 29 | 30 | Load the website URL in any web browser and start to use this function to identify objects in photos. 31 | 32 | > GitHub could be very slow behind the Great Chinese Firewall. Clone from Gitee if you are in mainland China. `git clone https://gitee.com/secondstate/tencent-tensorflow-scf.git` 33 | 34 | # Build your own Tensorflow cloud function 35 | 36 | Fork this repo and use the `Code | Open with Codespaces` button to launch Github Codespaces IDE in your browser. It may take a few minutes to start the first time. 37 | 38 | ## Low code development 39 | 40 | Once the Codespaaces IDE starts, you can make simple changes to the source code to customize it for your own applications. [See a coding tutorial](https://www.secondstate.io/articles/tencent-tensorflow/) 41 | 42 | * Make changes to the Tensorflow model and data pre-processing and post-processing logic in `src/lib.rs` file. 43 | * Make changes to the front end UI in the `website/content/index.html` file. 44 | 45 | ## Build 46 | 47 | Open a `Terminal` windon in the Codespaces IDE, and run the following command to build your cloud function. 48 | 49 | ``` 50 | $ rustwasmc build --enable-aot 51 | ``` 52 | 53 | ## Deploy 54 | 55 | In the `Terminal` window, run the following commands to deploy the Tensorflow cloud function to the Tencent Cloud. 56 | 57 | ``` 58 | $ cp pkg/scf.so scf/ 59 | 60 | $ sls deploy 61 | ... ... 62 | website: https://sls-website-ap-hongkong-kfdilz-1302315972.cos-website.ap-hongkong.myqcloud.com 63 | ``` 64 | 65 | Load the deployed URL in any web browser and have fun! 66 | 67 | # Develop on your own computer 68 | 69 | If you cannot or do not wish to use Github Codespaces, you can install the `rustwasmc` and serverless framework toolchains on your own computer (or Docker image) to build and deploy Tensorflow serverless functions. 70 | 71 | [Install the rustwasmc tool](https://www.secondstate.io/articles/rustwasmc/) 72 | 73 | Install the Serverless Framework via the NPM. 74 | 75 | ``` 76 | $ npm install -g serverless 77 | ``` 78 | 79 | That's it. You can now follow the Codespaces' build and deploy instructions above. 80 | 81 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [English](README-en.md) | [视频演示](https://www.bilibili.com/video/BV1Zh411f7uu/) | [Live demo!](https://sls-website-ap-beijing-7jlzqqj-1302315972.cos-website.ap-beijing.myqcloud.com/) | [教程](https://juejin.cn/post/6913861424015998989) 2 | 3 | # 快速开始 4 | 5 | Clone 这个 repo。从 repo 的根目录,您可以拉取我们预先配置的 dev Docker image 并登录进去。请见[国内的 Docker hub 镜像](https://yeasy.gitbook.io/docker_practice/install/mirror)。 6 | 7 | ``` 8 | $ git clone https://gitee.com/secondstate/tencent-tensorflow-scf 9 | $ cd tencent-tensorflow-scf 10 | 11 | $ docker pull secondstate/tencent-tensorflow-scf 12 | $ docker run --rm -it -v $(pwd):/app secondstate/tencent-tensorflow-scf 13 | (docker) $ 14 | ``` 15 | 16 | > 你不一定要使用我们的 Docker image。要在您自己的计算机或容器上构建,请确保您已经安装了[Serverless 框架](https://www.serverless.com/framework/docs/providers/tencent/guide/installation/), [Rust](https://www.rust-lang.org/tools/install), 和[rustwasmc](https://www.secondstate.io/articles/rustwasmc/). 17 | 18 | 在 Docker 容器中运行以下命令,以构建和部署整个应用程序。 19 | 20 | ``` 21 | (docker) $ cd /app 22 | (docker) $ sls deploy 23 | ... ... 24 | website: https://sls-website-ap-hongkong-kfdilz-1302315972.cos-website.ap-hongkong.myqcloud.com 25 | vendorMessage: null 26 | 27 | 63s › tencent-tensorflow-scf › "deploy" ran for 3 apps successfully. 28 | ``` 29 | 30 | 在浏览器中加载网站 URL,就开始使用函数来识别照片中的对象啦。 31 | 32 | > 在中国大陆,如果 GitHub 很慢,可以用我们在 Gitee 的镜像。`git clone https://gitee.com/secondstate/tencent-tensorflow-scf.git` 33 | 34 | # 创建你自己的 Tensorflow 云函数 35 | 36 | Fork 这个 repo,使用 `Code | Open with Codespaces` 按钮来在浏览器中打开 Github Codespaces IDE 。第一次启动时,需要花费几分钟。 37 | 38 | ## 低代码开发 39 | 40 | 一旦 Codespaces IDE 启动了, 你就可以根据自己的应用程序需求来对源代码进行修改,自定义函数。 [查看教程](https://juejin.cn/post/6913861424015998989) 41 | 42 | * 在 `src/lib.rs` 文件中更改 TensorFlow 模型以及数据预处理和后处理逻辑。 43 | * 在 `website/content/index.html` 文件中对前端UI进行更改。 44 | 45 | ## 创建 46 | 47 | 在 Codespaces 打开 `Terminal` 窗口, 然后运行下面的命令行来创建云函数。 48 | 49 | ``` 50 | $ rustwasmc build --enable-aot 51 | ``` 52 | 53 | ## 部署 54 | 55 | 在 `Terminal` 窗口,运行下面的命令行将 TensorFlow 云函数部署到腾讯云上。 56 | 57 | ``` 58 | $ cp pkg/scf.so scf/ 59 | 60 | $ sls deploy 61 | ... ... 62 | website: https://sls-website-ap-hongkong-kfdilz-1302315972.cos-website.ap-hongkong.myqcloud.com 63 | ``` 64 | 65 | 在浏览器内加载部署好的 URL。 Have fun! 66 | 67 | # 在本地机器上部署 68 | 69 | 如果你不能或不想使用 Github Codespaces,那可以在自己的计算机(或Docker映像)上安装 rustwasmc 和 serverless framework 工具链来构建和部署 Tensorflow serverless 函数。 70 | [安装 rustwasmc 工具](https://www.secondstate.io/articles/rustwasmc/) 71 | 72 | 通过 NPM 安装 Serverless Framework。 73 | 74 | ``` 75 | $ npm install -g serverless 76 | ``` 77 | 78 | 准备工作已经做完了,现在你可以参照上文提到的 Codespaces 的创建和部署教程来创建自己的云函数。 79 | 80 | -------------------------------------------------------------------------------- /cos/layer.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/cos/layer.zip -------------------------------------------------------------------------------- /cos/serverless.yml: -------------------------------------------------------------------------------- 1 | org: secondstate 2 | app: AIaaS-template 3 | stage: prod 4 | 5 | component: cos 6 | name: tf-cos 7 | 8 | inputs: 9 | region: ${env:region} 10 | src: ./ 11 | bucket: tensorflow-dep-${env:region} 12 | -------------------------------------------------------------------------------- /layer/serverless.yml: -------------------------------------------------------------------------------- 1 | org: secondstate 2 | app: AIaaS-template 3 | stage: prod 4 | 5 | component: layer 6 | name: tf-layer 7 | 8 | inputs: 9 | region: ${env:region} 10 | src: 11 | bucket: ${output:${stage}:${app}:tf-cos.bucket} 12 | object: layer.zip 13 | runtimes: 14 | - CustomRuntime 15 | -------------------------------------------------------------------------------- /scf/bootstrap: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -euo pipefail 4 | 5 | # Initialization - load function handler 6 | # source ./"$(echo $_HANDLER | cut -d. -f1).sh" 7 | 8 | # Info custom runtime ready 9 | curl -d " " -X POST -s "http://$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/init/ready" 10 | 11 | # Processing 12 | while true 13 | do 14 | HEADERS="$(mktemp)" 15 | # Get an event. The HTTP request will block until one is received 16 | EVENT_DATA=$(curl -sS -LD "$HEADERS" -X GET -s "http://$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/invocation/next") 17 | 18 | # Execute the handler function from the script 19 | # RESPONSE=$($(echo "$_HANDLER" | cut -d. -f2) <<< "$EVENT_DATA") 20 | RESPONSE=$(LD_LIBRARY_PATH=/opt /opt/ssvm-tensorflow "$_HANDLER" <<< "$EVENT_DATA") 21 | 22 | # Send the response 23 | curl -X POST -s "http://$SCF_RUNTIME_API:$SCF_RUNTIME_API_PORT/runtime/invocation/response" -d "$RESPONSE" 24 | done 25 | -------------------------------------------------------------------------------- /scf/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "serverless-cloud-function-application": { 3 | "application":{ 4 | "Chinese":{ 5 | "name": "WebAssembly函数示例", 6 | "description": "本示例展示如何在CustomRuntime类型函数中使用Rust写的WebAssembly函数。", 7 | "attention": "无", 8 | "readme": { 9 | "file": "", 10 | "content": "请参见: https://github.com/second-state/ssvm-tencent-starter/blob/master/README-zh.md" 11 | }, 12 | "license": { 13 | "file": "", 14 | "content": "公开" 15 | }, 16 | "author": { 17 | "name": "Second State | 第二形科技" 18 | } 19 | }, 20 | "English":{ 21 | "name": "rust_webassembly_demo", 22 | "description": "This example shows how to use WebAssembly functions written in Rust in CustomRuntime", 23 | "attention": "No", 24 | "readme": { 25 | "file": "", // readme file 26 | "content": "Please checkout: https://github.com/second-state/ssvm-tencent-starter/blob/master/README.md" //content of readme 27 | }, 28 | "license": { 29 | "file": "", // license file 30 | "content": "Open" //content of license 31 | }, 32 | "author": { 33 | "name": "Second State" // author 34 | } 35 | }, 36 | "input_parameters":{ 37 | "event":"", 38 | "context":"" 39 | }, 40 | "output_parameters":{ 41 | }, 42 | "download_address":"https://github.com/second-state/ssvm-tencent-starter", //Demo's git download url. demo的git下载链接 43 | "tags":[ 44 | "CustomRuntime", "Rust", "WebAssembly" 45 | // The tags only support English and can be multiple, we suggest you to use keywords such as runtime, trigger, environment and so on. 46 | // 标签统一为英文,可编写多个,建议使用runtime、触发器、场景等关键字,用户可以通过该关键字搜索。前台需要展示,请认真填写,不支持中文 47 | ], 48 | "version": "1.0.0" 49 | // Version number, which identifies the demo version status. 50 | // Demo will not to update to the page if the version number unmodified. 51 | //版本号,通过版本号标识 demo 升级情况,未修改版本号会导致 demo 不更新至页面 52 | }, 53 | "functions": { 54 | "name": "WebAssemblyDemo", // Function name which only be in English. 函数名称,只支持英文 55 | "description": "Rust and WebAssembly demo function. Rust and WebAssembly 模版函数", 56 | "handler":"hello_bg.wasm", 57 | "memorySize": 128, // Running memory. 运行配置内存 58 | "timeout": 3, // Running timeout. 运行超时时间 59 | "runtime": "CustomRuntime", // Runtime which users can search demo by this keyword. 运行环境,用户可以通过该关键字搜索["Python2.7", "Python3.6", "Nodejs6.10", "Java8", "LuaCDN", "NodejsCDN", "Php5", "Php7", "Nodejs8.9", "Go1", "CustomRuntime"] 60 | "Environment":{ 61 | }, // Optional, used to define environment variables. 可选,用于定义环境变量 62 | "Events":{ 63 | }, // Optional, used define the event source that triggers this function. 可选,用于定义触发此函数的事件源 64 | "VpcConfig":{ 65 | }, // Optional, used configure cloud function's private network. 可选, 用于配置云函数访问 VPC 私有网络。 66 | "codeObject": { 67 | "codeFile": [ 68 | "bootstrap", 69 | "ssvm", 70 | "hello_bg.wasm" 71 | ], 72 | "CodeUri":[ // Code download url which should be same as 'download_address'. 代码下载地址,和download_address保持一致 73 | "https://github.com/second-state/ssvm-tencent-starter" 74 | ] 75 | } 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /scf/scf.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/scf/scf.so -------------------------------------------------------------------------------- /scf/serverless.yml: -------------------------------------------------------------------------------- 1 | org: secondstate 2 | app: AIaaS-template 3 | stage: prod 4 | 5 | component: scf 6 | name: tf-scf 7 | 8 | inputs: 9 | namespace: default 10 | enableRoleAuth: false 11 | src: ./ 12 | handler: scf.so 13 | runtime: CustomRuntime 14 | region: ${env:region} 15 | memorySize: 512 16 | timeout: 60 17 | initTimeout: 10 18 | publicAccess: true 19 | layers: 20 | - name: ${output:${stage}:${app}:tf-layer.name} 21 | version: ${output:${stage}:${app}:tf-layer.version} 22 | eip: false 23 | events: 24 | - apigw: 25 | parameters: 26 | serviceName: apigw_tf 27 | protocols: 28 | - https 29 | environment: release 30 | endpoints: 31 | - path: / 32 | method: POST 33 | enableCORS: true 34 | serviceTimeout: 60 35 | -------------------------------------------------------------------------------- /src/aiy_food_V1_labelmap.txt: -------------------------------------------------------------------------------- 1 | __background__ 2 | Chaudin 3 | Bambalouni 4 | Ghoriba 5 | Mango sticky rice 6 | Jianbing 7 | Aguachile 8 | Carrozza 9 | Miyan kuka 10 | Efo riro 11 | Ayam masak merah 12 | Chiffon pie 13 | /g/11b8_rxx4d 14 | Riso patate e cozze 15 | Bazin 16 | Black bottom pie 17 | Palóc soup 18 | Sailor sandwich 19 | Tuwo shinkafa 20 | Carne a la tampiqueña 21 | Pastel azteca 22 | Fujian red wine chicken 23 | Boeber 24 | Lady Baltimore cake 25 | Yam khai dao 26 | Texas Tommy 27 | Har cheong gai 28 | Kolokythopita 29 | Karydopita 30 | Rinflajš 31 | Hainanese curry rice 32 | Sonoran hot dog 33 | /g/11cfty6q3 34 | Afghani burger 35 | Teochew porridge 36 | Minestra di ceci 37 | Pastrami on rye 38 | Roast beef sandwich 39 | Chahan 40 | Ekuru 41 | Sciusceddu 42 | Breakfast burrito 43 | /g/11dyjj24g 44 | Sausage Stroganoff 45 | Roti jala 46 | Pirao 47 | Casatiello 48 | Khanom tan 49 | Muamba chicken 50 | Dobradinha 51 | Bruckfleisch 52 | Molote 53 | Spongata 54 | Funge 55 | /g/1212ghsj 56 | Köttbullar 57 | Ka'ak 58 | Papet vaudois 59 | /g/12148tdg 60 | Prosciutto di Norcia 61 | Malloreddus 62 | /g/1214g6v_ 63 | Pannenkoek 64 | Dirty macaroni 65 | /g/12175t2y 66 | Garlic butter shrimp 67 | Fricasse 68 | Stracciatella 69 | /g/121b74wr 70 | Sartù 71 | Matelote 72 | Baodu 73 | Mattentaart 74 | Cartellate 75 | Gyeran-ppang 76 | Torta Pasqualina 77 | Caltaboș 78 | Khanom mo kaeng 79 | Suimono 80 | Dimlama 81 | Tavë Kosi 82 | /g/121p63r3 83 | /g/121slhcd 84 | Kalach 85 | Jambon persillé 86 | Pork Bones 87 | Pozharsky cutlet 88 | Roccocò 89 | Feijão de óleo de palma 90 | Calulu 91 | Bey's Soup 92 | /g/1226mnbh 93 | Thịt kho tàu 94 | Bon bon chicken 95 | Zoque 96 | Bint al-sahn 97 | Tempoyak 98 | Puran poli 99 | /g/122m40vc 100 | Chueo-tang 101 | Naem 102 | /g/122qyvy7 103 | /g/122rd60t 104 | Pizokel 105 | /g/122vxtxs 106 | Schiacciata 107 | Daheen 108 | Chapssal-tteok 109 | /g/123267k_ 110 | Crescentina modenese 111 | Pansotti 112 | Fried eggplant 113 | Portuguese seafood rice 114 | Tripes à la mode de Caen 115 | /g/12353lp9 116 | Brenebon 117 | Gnocco fritto 118 | /g/12384pzv 119 | Tahu tek-tek 120 | Bibikkan 121 | Squid tongseng 122 | /g/12fgs6199 123 | Bundevara 124 | Sop saudara 125 | /g/155q8w2m 126 | Erbazzone 127 | Kisra 128 | Meat from tiblica 129 | /g/1hc0hhj4r 130 | Yufka 131 | Pisarei e faśö 132 | /g/1pznmr_ch 133 | Pampushka 134 | Makowiec 135 | Saleeg 136 | /m/0100fwt6 137 | Jókai bean soup 138 | Bookbinder soup 139 | Selat solo 140 | Kutsinta 141 | Sago soup 142 | Vinegret 143 | Shrimp and grits 144 | Sirop de Liège 145 | Woku 146 | Muhallebi 147 | Gepuk 148 | Fouée 149 | Octopus 150 | Koba 151 | Bò lúc lắc 152 | Squid lū'au 153 | Shrimp Louie 154 | Black pudding 155 | Cherry kebab 156 | Pitsi-pitsî 157 | Sabich salad 158 | Mie kocok 159 | Maraca pie 160 | Banga 161 | Baccalà alla lucana 162 | Nasi tumpang 163 | Gratin dauphinois 164 | Arroz chaufa 165 | Kuih 166 | Ayam goreng 167 | Chongos zamoranos 168 | /m/011c708 169 | Mămăligă 170 | Candied almonds 171 | Lasagne 172 | Pecel Lele 173 | Lettuce soup 174 | Acquacotta 175 | Pork blood soup 176 | /m/011sq8kg 177 | Buridda 178 | Maccu 179 | Turkey Devonshire 180 | Ginestrata 181 | Garmugia 182 | Meringue 183 | Peanut butter and jelly sandwich 184 | Couque de Dinant 185 | Omo tuo 186 | Thapthim krop 187 | Pie tee 188 | Sutarfeni 189 | Raclette 190 | Wotou 191 | Punugulu 192 | Succotash 193 | Chim chum 194 | Wachipa 195 | Boat noodles 196 | Tantuni 197 | Shab Deg 198 | Chả giò 199 | Ciabatta Bacon Cheeseburger 200 | Mie kangkung 201 | Tuwo masara 202 | Kokonte 203 | Akple 204 | /m/012vypzp 205 | Kwareżimal 206 | Bento 207 | Osechi 208 | Okonomiyaki 209 | Miso soup 210 | Dango 211 | Onigiri 212 | Hiyayakko 213 | Tempura 214 | Mochi 215 | Peppersoup 216 | Caldo de queso 217 | Dodo ikire 218 | Uirō 219 | Hong dou tang 220 | Kakigōri 221 | Khichu 222 | Bolo de arroz 223 | Chips and dip 224 | Murgh musallam 225 | Utica greens 226 | Zaalouk 227 | Mutton curry 228 | Mughlai paratha 229 | Tuo Zaafi 230 | Bánh bột lọc 231 | /m/013f387h 232 | Cheeseburger 233 | Jelly bean 234 | Apple pie 235 | Udon 236 | Falafel 237 | Agedashi dōfu 238 | Dashi 239 | Tortell 240 | Omelette 241 | Crème brûlée 242 | Cucumber soup 243 | French toast 244 | Tripe 245 | Pepperoni 246 | Salami 247 | Kimchi 248 | Knödel 249 | Takoyaki 250 | Halva 251 | Pigs in a blanket 252 | Spanakopita 253 | Pumpkin pie 254 | Jambalaya 255 | Club sandwich 256 | Churro 257 | Turducken 258 | Welsh rarebit 259 | Hot dog 260 | Oyakodon 261 | Meatball 262 | Waldorf salad 263 | Potato salad 264 | Satay 265 | Pemmican 266 | Mämmi 267 | Fideuà 268 | Waffle 269 | Pancake 270 | Quiche 271 | Borscht 272 | Bratwurst 273 | Foie gras 274 | Burrito 275 | Goulash 276 | Spotted dick 277 | Coq au vin 278 | Ratatouille 279 | Cornbread 280 | Souvlaki 281 | Chow mein 282 | Roast beef 283 | Peking duck 284 | Fried chicken 285 | Croquembouche 286 | Tahini 287 | Gumbo 288 | Fajita 289 | Chicken fried steak 290 | Sukiyaki 291 | Scrapple 292 | Chili con carne 293 | Monte Cristo sandwich 294 | Kielbasa 295 | Polenta 296 | Reuben sandwich 297 | S'more 298 | Andouille 299 | Beignet 300 | Crêpe 301 | Gulai 302 | Breakfast sausage 303 | Chorizo 304 | Gyro 305 | Nachos 306 | Larb 307 | Couscous 308 | Meze 309 | Cheesesteak 310 | Frozen yogurt 311 | Injera 312 | Muesli 313 | Meatloaf 314 | Fuet 315 | Nattō 316 | Banana split 317 | Pączki 318 | Pound cake 319 | Fuqi feipian 320 | Nasi lemak 321 | Flan 322 | Pad thai 323 | Yakitori 324 | Amanattō 325 | Tom kha kai 326 | Lokma 327 | Mooncake 328 | Idli 329 | Spätzle 330 | Nopalito 331 | Sincronizada 332 | Žganci 333 | Totopo 334 | Folar 335 | Cherry pie 336 | Umeboshi 337 | Patty 338 | Saltah 339 | Khinkali 340 | Shkedei marak 341 | Tekkadon 342 | Chadachadi 343 | Kaipen 344 | Draw soup 345 | Shahan ful 346 | Shiro 347 | Ga'at 348 | Skordalia 349 | Budae jjigae 350 | Anju 351 | Fried Coke 352 | Lemang 353 | Basundi 354 | Brown Betty 355 | Khabees 356 | Kottu 357 | Isterband 358 | Ciauscolo 359 | Khatkhate 360 | Pan de muerto 361 | Caponata 362 | /m/0267f9w 363 | Sabaayad 364 | Miyeok-guk 365 | Imoni 366 | Pitha 367 | Kedgeree 368 | Bife a cavalo 369 | Yaki udon 370 | She-crab soup 371 | Koozh 372 | Keşkek 373 | Cabidela 374 | Gerber sandwich 375 | Zagorski Štrukli 376 | Himbasha 377 | Sataraš 378 | Kakuni 379 | Enormous Omelet Sandwich 380 | Turrón 381 | Tsukudani 382 | Hawaiian haystack 383 | Kateh 384 | Stoemp 385 | Pajeon 386 | Ġbejna 387 | Kaya toast 388 | Fit-fit 389 | Kitcha 390 | Thalipeeth 391 | Figgy pudding 392 | Cachupa 393 | Cherries jubilee 394 | Crappit heid 395 | Mince and tatties 396 | Anadama bread 397 | Carbonara 398 | Kladdkaka 399 | Shakshouka 400 | Chicken Vesuvio 401 | Jibarito 402 | Chicken Divan 403 | Motsunabe 404 | Sonofabitch stew 405 | Corn pudding 406 | Johnny Marzetti 407 | Mostarda 408 | Maafe 409 | Churma 410 | Chole bhature 411 | Dobos torte 412 | Carne de porco à alentejana 413 | Khao soi 414 | Kissel 415 | Cottage loaf 416 | Silver needle noodles 417 | Shrimp DeJonghe 418 | Kiritanpo 419 | Bean pie 420 | Churchkhela 421 | Yahni 422 | Gringas 423 | Annin tofu 424 | Jiaozi 425 | Breakfast sandwich 426 | Tanghulu 427 | Black sesame soup 428 | Gougère 429 | Namul 430 | Kosambari 431 | Ma'amoul 432 | Caldo de pollo 433 | Loukaniko 434 | Doberge cake 435 | Nasi campur 436 | Snack cake 437 | Taiyaki 438 | Karnıyarık 439 | Pierogi 440 | Macaroni and cheese 441 | Huevos motuleños 442 | Chislic 443 | Corn dog 444 | Shawarma 445 | Zongzi 446 | Dumpling 447 | Syrniki 448 | King cake 449 | Soufflé 450 | Gyūdon 451 | Chicken nugget 452 | Bulgogi 453 | Eggs Benedict 454 | Hot dry noodles 455 | Mashed potato 456 | Anpan 457 | Quesadilla 458 | Youtiao 459 | Congee 460 | Sekihan 461 | Semla 462 | Arctic roll 463 | Castella 464 | Hanabiramochi 465 | Falukorv 466 | Ketupat 467 | Rendang 468 | Chocolate brownie 469 | Mapo doufu 470 | Chinese noodles 471 | Empanada 472 | Fried rice 473 | Chicago-style pizza 474 | Cuban sandwich 475 | Tarte Tatin 476 | Yakisoba 477 | Dagwood sandwich 478 | Cheesecake 479 | Samosa 480 | Devil's food cake 481 | Shashlik 482 | Horseshoe sandwich 483 | City chicken 484 | Key lime pie 485 | Potato skins 486 | Haejang-guk 487 | Burmese tofu 488 | Shumai 489 | Sour cherry soup 490 | Gigandes plaki 491 | Majboos 492 | Chicken curry 493 | Shrimp Creole 494 | Pork tenderloin sandwich 495 | Dampfnudel 496 | Finnan haddie 497 | Kenkey 498 | Pincho 499 | Gundruk 500 | Chilorio 501 | Koulourakia 502 | Bryndzové halušky 503 | Imagawayaki 504 | Vasilopita 505 | Strapačky 506 | Po' boy 507 | Capirotada 508 | Beef Manhattan 509 | Sandwich loaf 510 | Jian dui 511 | Almond biscuit 512 | West Slavic fermented cereal soups 513 | Fried plantain 514 | Stuffed peppers 515 | Piperade 516 | Rogan josh 517 | Fabada asturiana 518 | Potato wedges 519 | Calisson 520 | Prawn ball 521 | Kushikatsu 522 | Lo mai chi 523 | Manchet 524 | Leek soup 525 | Vanillerostbraten 526 | Hangtown fry 527 | Cabbie claw 528 | Chitranna 529 | Ragi mudde 530 | Denver sandwich 531 | Laverbread 532 | Elote 533 | Kulolo 534 | Oxtail soup 535 | Pantua 536 | Corn relish 537 | Pogača 538 | Qubani-ka-Meetha 539 | Boondi 540 | Arrosticini 541 | Panelle 542 | Santula 543 | Tofu skin roll 544 | Crispy fried chicken 545 | Steamed meatball 546 | Lobio 547 | Suman 548 | Hōtō 549 | Matbukha 550 | /m/02rgjs1 551 | Açorda 552 | Makdous 553 | Soto 554 | Frangollo 555 | Patty melt 556 | Taro dumpling 557 | Entomatada 558 | Bánh cuốn 559 | Corunda 560 | Zhaliang 561 | Cassoulet 562 | Debrecener 563 | Scampi 564 | Pilaf 565 | Sambar 566 | Century egg 567 | Escargot 568 | Cong you bing 569 | Beef noodle soup 570 | Magiritsa 571 | Gugelhupf 572 | Sachima 573 | White rice 574 | Maultasche 575 | American chop suey 576 | Fish slice 577 | Sea cucumber 578 | Beef ball 579 | Siu yuk 580 | Seafood birdsnest 581 | White cut chicken 582 | /m/02vwryj 583 | Satsivi 584 | Malpua 585 | Chhena gaja 586 | Flying Jacob 587 | Steak de Burgo 588 | Crab Louie 589 | Butter chicken 590 | Amok trey 591 | Menemen 592 | Piadina 593 | Orange cuttlefish 594 | Fudge 595 | Cottage Pudding 596 | Meatcake 597 | Buttermilk pie 598 | Kalamay 599 | Puto 600 | Dal makhani 601 | Mixiote 602 | Bagel dog 603 | Bún riêu 604 | Feijoada 605 | Pho 606 | Milk toast 607 | Liver and onions 608 | Iced bun 609 | Sheer khurma 610 | Yi mein 611 | Shrimp roe noodles 612 | Lai fun 613 | Oil noodles 614 | Kal-guksu 615 | Youmian 616 | Avgolemono 617 | Pork roll 618 | Tart 619 | Leberkäse 620 | Kalakukko 621 | Mustamakkara 622 | Baba ghanoush 623 | Karelian pasty 624 | Shortcake 625 | Profiterole 626 | Moussaka 627 | Dulce de leche 628 | Blaa 629 | Risotto 630 | Funnel cake 631 | Fried dough 632 | Consommé 633 | Clam chowder 634 | Tartiflette 635 | Red curry 636 | Tandoori chicken 637 | Gazpacho 638 | Prosciutto 639 | Boerewors 640 | Baked potato 641 | Bouillabaisse 642 | Kralan 643 | Chireta 644 | Bakewell tart 645 | Grits 646 | Shaved ice 647 | Choco pie 648 | Cumian 649 | Jokbal 650 | Grillades 651 | Hotteok 652 | Ezogelin soup 653 | Knedle 654 | Masgouf 655 | Sope 656 | Coconut rice 657 | Bakarkhani 658 | Asida 659 | Dirt cake 660 | Sel roti 661 | Kalakand 662 | Ghevar 663 | Sussex pond pudding 664 | Lontong 665 | Bánh bèo 666 | Pringá 667 | Bull roast 668 | Stuffed ham 669 | Lablabi 670 | Gooey butter cake 671 | Carciofi alla giudia 672 | Yin si juan 673 | Babi panggang 674 | Chao hong guo 675 | Fun guo 676 | Khira sagara 677 | Coconut bar 678 | Sundae 679 | Tuna fish sandwich 680 | Zhangcha duck 681 | Marry girl cake 682 | Frijoles charros 683 | Rosca de reyes 684 | Happy Faces 685 | Deviled crab 686 | Sundubu-jjigae 687 | Sinseollo 688 | Dongchimi 689 | Nabak-kimchi 690 | Dhondas 691 | Soan papdi 692 | Baek-kimchi 693 | Chicken riggies 694 | Afelia 695 | Gulyásleves 696 | Marie biscuit 697 | Café liégeois 698 | Chè 699 | Pootharekulu 700 | Escalope 701 | Rajma 702 | Beshbarmak 703 | Torta Tre Monti 704 | French dip 705 | Pumpkin-coconut custard 706 | Rose hip soup 707 | Veggie burger 708 | Steak tartare 709 | Bologna sausage 710 | Pâté 711 | Bibimbap 712 | Shahi paneer 713 | Fufu 714 | Pyttipanna 715 | Chicken sandwich 716 | Ghari 717 | Michigan salad 718 | Cabinet pudding 719 | American fried rice 720 | Korovai 721 | Churrasco 722 | Pasulj 723 | Mitraillette 724 | Salată de boeuf 725 | Rice pudding 726 | Rösti 727 | Naryn 728 | Kaldereta 729 | Makroudh 730 | Kachumbari 731 | Tsukemono 732 | Cheese fries 733 | Slatko 734 | Qatayef 735 | Passatelli 736 | Sweet potato soup 737 | Shchi 738 | Kulfi 739 | Dolma 740 | Kai yang 741 | Shark fin soup 742 | Pozole 743 | Pakora 744 | Chantilly cake 745 | Krówki 746 | Russian tea cake 747 | Ox-tongue pastry 748 | Sachertorte 749 | Palitaw 750 | Jolpan 751 | Mantou 752 | Finger steaks 753 | Steak sandwich 754 | Talo 755 | Erkuai 756 | Mixian 757 | St. Louis-style pizza 758 | Moambe 759 | Upma 760 | Panjiri 761 | Eggs Sardou 762 | Shanghai fried noodles 763 | Quarkkäulchen 764 | Cupcake 765 | Snickerdoodle 766 | Farl 767 | Coleslaw 768 | Calas 769 | Beef Stroganoff 770 | Shimotsukare 771 | Squab 772 | Basbousa 773 | Watalappam 774 | Tepsi baytinijan 775 | Kuli-kuli 776 | Shabu-shabu 777 | Sundae 778 | Fried brain sandwich 779 | Rollmops 780 | Higashi 781 | Panna cotta 782 | Aloo gobi 783 | Aspic 784 | Obatzda 785 | Gulab jamun 786 | Tuna casserole 787 | Ribollita 788 | Chomchom 789 | Rassolnik 790 | Jeongol 791 | Cantonese seafood soup 792 | Eggplant Salad 793 | Kürtőskalács 794 | Pölsa 795 | Lobster roll 796 | Sloppy joe 797 | Schnitzel 798 | Bacalhau 799 | Sfenj 800 | Menudo 801 | Gujia 802 | Liver soup 803 | Panocha 804 | Chakapuli 805 | Sklandrausis 806 | Liver pâté 807 | Rullepølse 808 | Frikadeller 809 | Frikandel 810 | Cinnamon roll 811 | Scotch pie 812 | Hot wiener 813 | Wodzionka 814 | Greek salad 815 | Raita 816 | Dong'an chicken 817 | Boortsog 818 | Coca 819 | Champon 820 | Tabbouleh 821 | Korokke 822 | Chile relleno 823 | Brandade 824 | Hoppang 825 | Gozinaki 826 | Lazarakia 827 | Puff Puff 828 | Fatteh 829 | Speculaas 830 | Karasumi 831 | Brandy snaps 832 | Trdelník 833 | Cocido madrileño 834 | Red velvet cake 835 | Kringle 836 | Quenelle 837 | Toasted ravioli 838 | Tajine 839 | Cranachan 840 | Rusk 841 | Mille-feuille 842 | Acorn noodle soup 843 | Gachas 844 | Jingisukan 845 | Thekua 846 | Ghugni 847 | Tarama 848 | Italian beef 849 | Challah 850 | Fried ice cream 851 | Onion ring 852 | Smoked meat 853 | Dahi vada 854 | Mother-in-law 855 | Blondie 856 | Guk 857 | Hiyashi chūka 858 | Sweet shells 859 | Salisbury steak 860 | Poffertjes 861 | Eggs Neptune 862 | Galbi-jjim 863 | Agwi-jjim 864 | Ladob 865 | Instant-boiled mutton 866 | Cincalok 867 | Jook-sing noodles 868 | Potbrood 869 | Burkinabe cuisine 870 | Taralli 871 | Carbonade flamande 872 | Xôi 873 | Sauerbraten 874 | Spiedie 875 | Gimbap 876 | Czernina 877 | Kroppkaka 878 | Buddha's delight 879 | Pain au chocolat 880 | Goetta 881 | German chocolate cake 882 | Melt sandwich 883 | Popiah 884 | Haleem 885 | Hornazo 886 | Janchi-guksu 887 | Kipper 888 | Bossam 889 | Arbroath smokie 890 | Bologna sandwich 891 | Cobbler 892 | Kouign-amann 893 | Char kway teow 894 | Rostbrätel 895 | Doenjang-jjigae 896 | Tharid 897 | Hainanese chicken rice 898 | Bak kut teh 899 | Cabbage roll 900 | Runza 901 | Bananas Foster 902 | Kozhukkatta 903 | Kūčiukai 904 | Smørrebrød 905 | Kutia 906 | Deviled egg 907 | Buchteln 908 | Apple strudel 909 | Wonton 910 | Chess pie 911 | Pirozhki 912 | Douzhi 913 | Macaroni soup 914 | Crossing-the-bridge noodles 915 | Lechazo 916 | Rolled oyster 917 | Asam pedas 918 | Mi krop 919 | Patoleo 920 | Rigó Jancsi 921 | Ollada 922 | Garbure 923 | Sabudana Khichadi 924 | Potée 925 | Phanaeng curry 926 | Madeleine 927 | Mashed pumpkin 928 | Suet pudding 929 | Bombay mix 930 | Namagashi 931 | Struffoli 932 | Dak-galbi 933 | Chuchvara 934 | Misal 935 | Patatnik 936 | Yuxiang 937 | Frozen banana 938 | Psarosoupa 939 | Mekitsa 940 | Sanna 941 | Qazı 942 | Sorbetes 943 | Potatoes O'Brien 944 | Tom yum 945 | Balushahi 946 | Arroz a la cubana 947 | Jalebi 948 | Sopaipilla 949 | Ukha 950 | Svíčková 951 | Túrós csusza 952 | Pinnekjøtt 953 | Salty liquorice 954 | Lemon ice box pie 955 | Knickerbocker glory 956 | Zhajiangmian 957 | Cobb salad 958 | Misua 959 | Shoofly pie 960 | Bhakri 961 | Apple cake 962 | Orange chicken 963 | Jamón serrano 964 | Bundt cake 965 | Bara brith 966 | Hot pot 967 | Kung Pao chicken 968 | Mulukhiyah 969 | Piti 970 | Double ka meetha 971 | Choila 972 | Moustalevria 973 | Arizona cheese crisp 974 | Rice Krispies Treats 975 | Liangpi 976 | Prinskorv 977 | Salmorejo 978 | Chicken Française 979 | Fläskkorv 980 | Glorified rice 981 | /m/04zzsvg 982 | Stinky tofu 983 | Muffuletta 984 | Soy sauce chicken 985 | Chicken fingers 986 | Pecan pie 987 | Eba 988 | Parfait 989 | Ndolé 990 | Cheese sandwich 991 | Carne de vinha d'alhos 992 | Bob Andy pie 993 | Cincinnati chili 994 | Frico 995 | Tapioca pudding 996 | Minestrone 997 | Boxty 998 | Naengmyeon 999 | Seven-layer salad 1000 | /m/0553tg 1001 | Cawl 1002 | Chocolate pudding 1003 | Hotdish 1004 | Ciccioli 1005 | Douhua 1006 | Berliner 1007 | Fried fish 1008 | Apple crisp 1009 | Boudin 1010 | Yusheng 1011 | Babka 1012 | Pizzoccheri 1013 | Welsh cake 1014 | Parker House roll 1015 | Tripe soup 1016 | Chimichanga 1017 | Jucy Lucy 1018 | Dodger Dog 1019 | Pastiera 1020 | Huarache 1021 | Solkadhi 1022 | Schupfnudel 1023 | Waldorf pudding 1024 | Harees 1025 | Ash reshteh 1026 | Celery Victor 1027 | Diples 1028 | Kompot 1029 | French onion soup 1030 | Tres leches cake 1031 | Torta caprese 1032 | Black Forest gateau 1033 | Pâté aux pommes de terre 1034 | Lâpa 1035 | Bündner Nusstorte 1036 | Hachee 1037 | Spaghetti aglio e olio 1038 | Whoopie pie 1039 | Ais kacang 1040 | Chermoula 1041 | Gado-gado 1042 | Merguez 1043 | Snickers salad 1044 | Giouvetsi 1045 | Kharcho 1046 | Chicken fried bacon 1047 | Dessert bar 1048 | Coulibiac 1049 | Thieboudienne 1050 | Rabri 1051 | Sapin-sapin 1052 | Sealed crustless sandwich 1053 | Carne asada 1054 | Coyotas 1055 | Chocolate-covered bacon 1056 | Stroopwafel 1057 | Gravlax 1058 | Pot pie 1059 | Ghormeh sabzi 1060 | Surf and turf 1061 | Brunswick stew 1062 | Mititei 1063 | Fluffernutter 1064 | Khaja 1065 | Stottie cake 1066 | London broil 1067 | Fasolada 1068 | Strudel 1069 | Øllebrød 1070 | Tamago kake gohan 1071 | Hot water corn bread 1072 | Philippine adobo 1073 | Hulatang 1074 | Dyrlægens natmad 1075 | Chistorra 1076 | Polkagris 1077 | Galbi-tang 1078 | Mrouzia 1079 | Gopchang-jeongol 1080 | Miang kham 1081 | Clams casino 1082 | Nanbanzuke 1083 | Dripping cake 1084 | Cookie salad 1085 | Usal 1086 | Mandu-guk 1087 | Smalahove 1088 | Kokis 1089 | Ori-tang 1090 | Pakhala 1091 | Cream pie 1092 | Butajiru 1093 | New England boiled dinner 1094 | Chhena jalebi 1095 | Pastitsio 1096 | Panucho 1097 | Chhena kheeri 1098 | Kifli 1099 | Solyanka 1100 | Sadhya 1101 | Cullen skink 1102 | Havregrynskugle 1103 | Harira 1104 | Cornish game hen 1105 | Beef on weck 1106 | Tompouce 1107 | Caldo de siete mares 1108 | Millionbøf 1109 | Chicago-style hot dog 1110 | Risalamande 1111 | Alinazik kebab 1112 | Medisterpølse 1113 | Sarson da saag 1114 | Liangfen 1115 | Pistolette 1116 | Steamed clams 1117 | Ulam 1118 | Kheer 1119 | Tlacoyo 1120 | Tarator 1121 | /m/061ptq 1122 | /m/062p8x 1123 | Cochinita pibil 1124 | Buddha Jumps Over the Wall 1125 | Sfouf 1126 | Ham and cheese sandwich 1127 | """Peanut butter" 1128 | """Bacon" 1129 | Chicken karahi 1130 | Maple bacon donut 1131 | Litti 1132 | Nam Khao 1133 | Nam tok 1134 | Baozi 1135 | Kibbeh 1136 | Kushari 1137 | Jiuniang 1138 | /m/06603bl 1139 | Machher Jhol 1140 | Fahsa 1141 | Mysore pak 1142 | Chalupa 1143 | Swiss roll 1144 | Balkenbrij 1145 | Tortas de aceite 1146 | Popover 1147 | Falooda 1148 | Macaroni salad 1149 | Barbacoa 1150 | Hushpuppy 1151 | Luther Burger 1152 | Ragout 1153 | Bánh bao 1154 | Moronga 1155 | Hayashi rice 1156 | Zürcher Geschnetzeltes 1157 | Éclair 1158 | Colcannon 1159 | Bear claw 1160 | Francesinha 1161 | Wat 1162 | Loco moco 1163 | Hot milk cake 1164 | Hoe 1165 | Gordita 1166 | Macaron 1167 | Pepperoni roll 1168 | Rasgulla 1169 | Angel wings 1170 | Huevos rancheros 1171 | Caprese salad 1172 | Kombdi vade 1173 | Yong tau foo 1174 | Chai tow kway 1175 | Machaca 1176 | Ugali 1177 | Arròs negre 1178 | Kimchi fried rice 1179 | Frybread 1180 | Halo-halo 1181 | Shiokara 1182 | Janssons frestelse 1183 | Hot Brown 1184 | Torta 1185 | Ćevapi 1186 | Salt water taffy 1187 | Çılbır 1188 | Murtabak 1189 | Tahu goreng 1190 | Soto ayam 1191 | Mee siam 1192 | Submarine sandwich 1193 | Halušky 1194 | Kimchi-jjigae 1195 | Fish ball 1196 | Blodpalt 1197 | Lebanon bologna 1198 | Okroshka 1199 | Linzer torte 1200 | Shrikhand 1201 | Yakiniku 1202 | Huevos divorciados 1203 | Nihari 1204 | Sautéed reindeer 1205 | Hasty pudding 1206 | Mission burrito 1207 | Sweet and sour pork 1208 | Rødgrød 1209 | Booyah 1210 | Bienenstich 1211 | Dressed herring 1212 | New York-style pizza 1213 | Bistek 1214 | Sinigang 1215 | Fios de ovos 1216 | Vitello tonnato 1217 | Bisque 1218 | /m/06w9wv4 1219 | Modak 1220 | New Haven-style pizza 1221 | California-style pizza 1222 | Wrap 1223 | Puri 1224 | Jamón 1225 | Khash 1226 | Beef bourguignon 1227 | Truffade 1228 | Bò nướng lá lốt 1229 | Ful medames 1230 | Aligot 1231 | Kolach 1232 | Guaiwei 1233 | Kesme 1234 | Funeral potatoes 1235 | Sushi 1236 | Arancini 1237 | Creamed corn 1238 | Mozzarella sticks 1239 | American goulash 1240 | Gofio 1241 | Soup alla Canavese 1242 | Red beans and rice 1243 | Rössypottu 1244 | Fläskpannkaka 1245 | Hyderabadi biryani 1246 | Baeckeoffe 1247 | Eton mess 1248 | Khachapuri 1249 | Banoffee pie 1250 | Ants climbing a tree 1251 | Dandan noodles 1252 | Suanla chaoshou 1253 | Samgye-tang 1254 | Spam musubi 1255 | Bridie 1256 | Kaju katli 1257 | Chocolate-covered potato chips 1258 | Enne gai 1259 | Ruske kape 1260 | Spaghetti 1261 | Grass jelly 1262 | Salt potatoes 1263 | Katsudon 1264 | Pasanda 1265 | Banitsa 1266 | Flammekueche 1267 | Twice-cooked pork 1268 | Kare-kare 1269 | Laobing 1270 | Banmian 1271 | Honey cake 1272 | Swiss wing 1273 | Michigan hot dog 1274 | Tong sui 1275 | Taco 1276 | Sosatie 1277 | Pap 1278 | Umngqusho 1279 | Malva pudding 1280 | Vichyssoise 1281 | Zōni 1282 | Maxwell Street Polish 1283 | Vetkoek 1284 | Mealie bread 1285 | Chakalaka 1286 | Frikkadel 1287 | /m/07fr1x 1288 | Tteokguk 1289 | Coney Island hot dog 1290 | Tirokafteri 1291 | Fesikh 1292 | Boston cream pie 1293 | Buttermilk koldskål 1294 | White boiled shrimp 1295 | Bagnun 1296 | Buntil 1297 | /m/07l949 1298 | Pisto 1299 | Dhokla 1300 | Al pastor 1301 | St. Paul sandwich 1302 | Melonpan 1303 | Haupia 1304 | Lángos 1305 | Étouffée 1306 | Galaktoboureko 1307 | Börek 1308 | Suya 1309 | Rye bread 1310 | Escudella i carn d'olla 1311 | Gari 1312 | Tilkut 1313 | Botok 1314 | Tatws Pum Munud 1315 | Char siu 1316 | Burgoo 1317 | Cacık 1318 | Barfi 1319 | Mulligan stew 1320 | Biangbiang noodles 1321 | Banana pudding 1322 | Crab cake 1323 | Chinese sausage 1324 | Veal 1325 | Curry bread 1326 | Pastry heart 1327 | Crème caramel 1328 | Panada 1329 | Pie à la Mode 1330 | Bonus Jack 1331 | Princess cake 1332 | Harihari-nabe 1333 | Hot chicken 1334 | Chhena Jhili 1335 | Grape pie 1336 | Chicken bog 1337 | Sausage gravy 1338 | Derby pie 1339 | Ice cream cake 1340 | Swiss steak 1341 | /m/083tx9 1342 | Stack cake 1343 | Lobster Newberg 1344 | Nikujaga 1345 | Manti 1346 | Parmigiana 1347 | Palatschinke 1348 | Gujeolpan 1349 | Rajas con crema 1350 | Mak-guksu 1351 | Tetrazzini 1352 | Squid 1353 | Palak paneer 1354 | Krumkake 1355 | Bolani 1356 | Pork and beans 1357 | Nian gao 1358 | Oysters Rockefeller 1359 | Tavče gravče 1360 | Bakkwa 1361 | Xacuti 1362 | Sarapatel 1363 | Taquito 1364 | Egg drop soup 1365 | Shaobing 1366 | Chawanmushi 1367 | Nshima/Nsima 1368 | Pollock roe 1369 | Slinger 1370 | Japchae 1371 | St. Honoré cake 1372 | Barm cake 1373 | Tulumba 1374 | Xiaolongbao 1375 | Delmonico steak 1376 | Stromboli 1377 | Kanafeh 1378 | Hamdog 1379 | Garri 1380 | Kofta 1381 | Chana masala 1382 | Salo 1383 | Lung fung soup 1384 | Dirty rice 1385 | Urnebes 1386 | Andouillette 1387 | Landjäger 1388 | Fisherman's soup 1389 | Romeritos 1390 | Lane cake 1391 | Pork jelly 1392 | Idiyappam 1393 | Smörgåstårta 1394 | Smažený sýr 1395 | Arroz con pollo 1396 | /m/08xmsn 1397 | Petit gâteau 1398 | Tea egg 1399 | Cocada amarela 1400 | Japanese curry 1401 | Qeema 1402 | Unagi 1403 | Hoppin' John 1404 | Gyūhi 1405 | Clafoutis 1406 | Green curry 1407 | Gỏi cuốn 1408 | Chilli crab 1409 | Lo mai gai 1410 | Lo mein 1411 | Puttu 1412 | Fried pie 1413 | Spanish rice 1414 | Nuea phat phrik 1415 | Jeow bong 1416 | Massaman curry 1417 | Ostkaka 1418 | Guilinggao 1419 | Spettekaka 1420 | Cudighi 1421 | Saltimbocca 1422 | Sfogliatella 1423 | Beef chow fun 1424 | Chow mein sandwich 1425 | Carnitas 1426 | Chinese steamed eggs 1427 | Oyster omelette 1428 | Garden salad 1429 | Salade niçoise 1430 | Dal bhat 1431 | Biscuits and gravy 1432 | Omurice 1433 | Pao cai 1434 | Nasi liwet 1435 | Thai suki 1436 | Moo shu pork 1437 | Corn crab soup 1438 | Fabes con almejas 1439 | Golden Opulence Sundae 1440 | Ketoprak 1441 | Mala Mogodu 1442 | Tekwan 1443 | Vatrushka 1444 | Yin Yang fish 1445 | Boston cream doughnut 1446 | Ramen 1447 | Home fries 1448 | Mustacciuoli 1449 | Clam cake 1450 | Sarma 1451 | Shahe fen 1452 | Charleston red rice 1453 | Fish head curry 1454 | Podvarak 1455 | Pihtije 1456 | Popara 1457 | Kačamak 1458 | Seolleongtang 1459 | Gołąbki 1460 | Szaloncukor 1461 | Kalduny 1462 | Zrazy 1463 | Panettone 1464 | Ambelopoulia 1465 | Persimmon pudding 1466 | Floating island 1467 | Zeeuwse bolus 1468 | Ambuyat 1469 | Smulpaj 1470 | Moravian spice cookies 1471 | Mee pok 1472 | Jjigae 1473 | Pizza bagel 1474 | Tteok 1475 | Brændende kærlighed 1476 | Beaten biscuit 1477 | Æbleflæsk 1478 | Chicken paprikash 1479 | Tangyuan 1480 | Tuna pot 1481 | Burnt ends 1482 | Jamón ibérico 1483 | Rakfisk 1484 | Zarangollo 1485 | Túró Rudi 1486 | Flummery 1487 | Cecina 1488 | Galinha à portuguesa 1489 | Ankimo 1490 | Galinha à africana 1491 | Cha siu bao 1492 | Fugu chiri 1493 | Assidat Zgougou 1494 | Oxtail stew 1495 | Laping 1496 | Chaku 1497 | Caldillo de perro 1498 | Sopa de Gato 1499 | Keledoş 1500 | Mücver 1501 | Brotzeit 1502 | Shekerbura 1503 | Oeufs en meurette 1504 | Pappa al pomodoro 1505 | Teurgoule 1506 | Bánh xèo 1507 | Musakhan 1508 | Maqluba 1509 | Bob chorba 1510 | Rum baba 1511 | Veda bread 1512 | Fried shrimp 1513 | Pastilla 1514 | Strawberry delight 1515 | Cheese dream 1516 | Frejon 1517 | Gyeran-jjim 1518 | Revithia 1519 | Nasi bogana 1520 | Torta de gazpacho 1521 | Double Down 1522 | Seri Muka 1523 | Obi non 1524 | Garganelli 1525 | Kig ha farz 1526 | Mississippi mud pie 1527 | Eve's pudding 1528 | Amala 1529 | Okinawa soba 1530 | Lamian 1531 | Soki 1532 | Chicken Maryland 1533 | Chanpurū 1534 | Mlinci 1535 | Smyrna meatballs 1536 | Tavern sandwich 1537 | Yangzhou fried rice 1538 | Qutab 1539 | Dum Aloo 1540 | Queijo do Pico 1541 | Cocada 1542 | Calf's liver and bacon 1543 | Moules-frites 1544 | Anarsa 1545 | Tlayuda 1546 | Šakotis 1547 | Jollof rice 1548 | Moin moin 1549 | Jam roly-poly 1550 | Hochzeitssuppe 1551 | Mucenici 1552 | Ema datshi 1553 | Ngo hiang 1554 | Jello salad 1555 | Claypot chicken rice 1556 | Maeun-tang 1557 | Cifantuan 1558 | Rhubarb pie 1559 | Olla podrida 1560 | Har gow 1561 | Sayur lodeh 1562 | Memela 1563 | Wenchang chicken 1564 | Galinhada 1565 | Lecsó 1566 | Gypsy tart 1567 | Bougatsa 1568 | Germknödel 1569 | Haystack 1570 | Yule log 1571 | Butter cookie 1572 | Chicken à la King 1573 | Méchoui 1574 | Croquette 1575 | Shami kebab 1576 | Chicken and waffles 1577 | Poke 1578 | Punsch-roll 1579 | Turtle soup 1580 | Kansar 1581 | Glamorgan sausage 1582 | Mango pudding 1583 | Bánh canh 1584 | Caparrones 1585 | Zopf 1586 | Bath bun 1587 | Chelsea bun 1588 | London bun 1589 | Saffron bun 1590 | Chakhchoukha 1591 | Angel food cake 1592 | Lalab 1593 | Suckling pig 1594 | Barmbrack 1595 | Kotlet schabowy 1596 | Pastel de nata 1597 | Shave ice 1598 | Tipsy cake 1599 | Creamed eggs on toast 1600 | Kerak telor 1601 | Ogok-bap 1602 | Mortadella 1603 | Nut roll 1604 | Fried green tomatoes 1605 | Beondegi 1606 | Tsoureki 1607 | Tiropita 1608 | Pljeskavica 1609 | Karađorđeva šnicla 1610 | Kokoretsi 1611 | Skilpadjies 1612 | Corn chowder 1613 | Tarhana 1614 | Tufahije 1615 | Birria 1616 | Veal Orloff 1617 | Fattoush 1618 | Pane carasau 1619 | Rab cake 1620 | Buffalo burger 1621 | Treacle tart 1622 | Hamburger 1623 | Stamppot 1624 | Kopytka 1625 | Khai yat sai 1626 | Minchee 1627 | Kinema 1628 | Sgabeo 1629 | Chili dog 1630 | Spaghetti alle vongole 1631 | Bavarian cream 1632 | Bhaji 1633 | Kachori 1634 | Chowder 1635 | Scotch broth 1636 | Pea soup 1637 | Kitfo 1638 | Gored gored 1639 | Bánh chưng 1640 | Bún bò Huế 1641 | Bò 7 món 1642 | Cơm tấm 1643 | Ambrosia 1644 | Rönttönen 1645 | Balchão 1646 | Gibassier 1647 | Bacalhau à Zé do Pipo 1648 | Pane di Altamura 1649 | Mykyrokka 1650 | Paska 1651 | Blackberry pie 1652 | Mince pie 1653 | Corn cookie 1654 | Francesinha poveira 1655 | Picadillo 1656 | Runeberg torte 1657 | Khakhra 1658 | Ohn no khao swè 1659 | Sultsina 1660 | /m/0crv0m 1661 | Paella 1662 | Espetada 1663 | Pathiri 1664 | Horumonyaki 1665 | Khubz 1666 | Ciorbă 1667 | Kimchi-buchimgae 1668 | Sesame chicken 1669 | Thukpa 1670 | Chwinamul 1671 | Kabuni 1672 | Jhunka 1673 | Jolada rotti 1674 | Spoonbread 1675 | Kulich 1676 | Phat khing 1677 | Namasu 1678 | Wonton noodles 1679 | Johnnycake 1680 | Panellets 1681 | Manjū 1682 | Mandi 1683 | Fortune cookie 1684 | Noppe 1685 | Slavink 1686 | Cockle bread 1687 | Caruru 1688 | Chả lụa 1689 | Pan bagnat 1690 | Sardenara 1691 | Enchilada 1692 | Sausage sandwich 1693 | Pistachio pudding 1694 | Chikki 1695 | Champorado 1696 | Coconut cake 1697 | Kaassoufflé 1698 | Carne pizzaiola 1699 | Khauk swè thoke 1700 | Gamja-tang 1701 | Kadhi 1702 | Green bean casserole 1703 | Apple dumpling 1704 | Cozonac 1705 | Pissaladière 1706 | Phat si-io 1707 | Drunken noodles 1708 | Jing Jiang Rou Si 1709 | Enduri Pitha 1710 | Kakara pitha 1711 | Tarta de Santiago 1712 | /m/0dn9nd 1713 | Sheftalia 1714 | Soybean sprout 1715 | Italian hot dog 1716 | Makchang 1717 | Meeshay 1718 | Bacalhau com natas 1719 | Mazurek 1720 | Nan gyi thohk 1721 | Ajapsandali 1722 | Carac 1723 | Mont di 1724 | Geng 1725 | Vispipuuro 1726 | Bakso 1727 | Canjica 1728 | Fougasse 1729 | Fool's Gold Loaf 1730 | Blueberry pie 1731 | Pickled cucumber 1732 | Ogbono soup 1733 | Champ 1734 | Oysters en brochette 1735 | Paskha 1736 | Shish taouk 1737 | Acarajé 1738 | Ras malai 1739 | San-nakji 1740 | Bungeo-ppang 1741 | Skilandis 1742 | Gosh-e Fil 1743 | Nasi dagang 1744 | Gheimeh 1745 | Fesenjān 1746 | Bacalhau à Gomes de Sá 1747 | Fårikål 1748 | Bedfordshire clanger 1749 | Tonkatsu 1750 | Thai fried rice 1751 | Manakish 1752 | Schweinshaxe 1753 | Chorba 1754 | Oliebol 1755 | Ropa vieja 1756 | Natchitoches meat pie 1757 | Icebox cake 1758 | Sorrel soup 1759 | Lahoh 1760 | Bolillo 1761 | Mollete 1762 | Caldeirada 1763 | Ogi 1764 | Watergate salad 1765 | Yaksik 1766 | Half-smoke 1767 | Dakos 1768 | Sweet potato pie 1769 | Cappon magro 1770 | Serundeng 1771 | Rijstevlaai 1772 | Ajoblanco 1773 | Yaka mein 1774 | Jujeh kabab 1775 | Soy egg 1776 | Shuizhu 1777 | Puliyogare 1778 | Sago 1779 | Laulau 1780 | Curtido 1781 | Tapai 1782 | Press cake 1783 | Cuchifritos 1784 | Vlaai 1785 | Malvern pudding 1786 | Baklava 1787 | Cheese dog 1788 | Luchi 1789 | Cowboy beans 1790 | Sandesh 1791 | Steak Diane 1792 | Lobster stew 1793 | Finikia 1794 | Bibingka 1795 | Tafelspitz 1796 | Ploye 1797 | Sayur asem 1798 | Trinxat 1799 | Nikuman 1800 | Cozido à portuguesa 1801 | Bacalhau à Brás 1802 | Tomato compote 1803 | Sesame seed candy 1804 | Dhebra 1805 | Kaeng pa 1806 | Mas riha 1807 | Zosui 1808 | Yassa 1809 | Pambazo 1810 | Imarti 1811 | Bacalhau com todos 1812 | Black pepper crab 1813 | Queso flameado 1814 | Black and white cookie 1815 | Red braised pork belly 1816 | Krofne 1817 | Uštipci 1818 | Rožata 1819 | Punjena paprika 1820 | Fusi 1821 | Maneštra 1822 | Kroštule 1823 | Fritule 1824 | Protein bar 1825 | Cordon bleu 1826 | Pirog 1827 | Pachi Pulusu 1828 | Frigărui 1829 | Chhena poda 1830 | Poornalu 1831 | Ponganalu 1832 | Bing 1833 | Flaouna 1834 | Chakodi 1835 | Aloo paratha 1836 | Konro 1837 | Cemita 1838 | Asinan 1839 | Broa 1840 | Trifle 1841 | Rat na 1842 | Borlengo 1843 | Gazpachuelo 1844 | Esterházy torte 1845 | Magenbrot 1846 | Detroit-style pizza 1847 | Fuling jiabing 1848 | Lakhamari 1849 | Mućkalica 1850 | Sukhdi 1851 | Kilishi 1852 | Baji 1853 | Peanut butter cookie 1854 | Rabbit pie 1855 | Paling in 't groen 1856 | Chataamari 1857 | Lawar 1858 | Arisa Pitha 1859 | Empal gentong 1860 | Carne asada fries 1861 | Takikomi gohan 1862 | Kamameshi 1863 | Pasta salad 1864 | Fasole cu cârnați 1865 | Zelnik 1866 | Plăcintă 1867 | Tongseng 1868 | Soto mie 1869 | Sarburma 1870 | Lutefisk 1871 | Khichdi 1872 | Briouat 1873 | Chili burger 1874 | Bolo de mel 1875 | Clootie 1876 | Seswaa 1877 | Tahu sumedang 1878 | Pichelsteiner 1879 | Bread soup 1880 | Scotcheroos 1881 | Kartoffelkäse 1882 | Schuxen 1883 | Caramel 1884 | Zwetschgenkuchen 1885 | Alloco 1886 | Vangibath 1887 | Torricado 1888 | Phat phrik khing 1889 | Tomato and egg soup 1890 | /m/0h65ym4 1891 | Spanakorizo 1892 | Ostropel 1893 | Tamale 1894 | Seattle-style hot dog 1895 | Ammonia cookie 1896 | Boston baked beans 1897 | Amandine 1898 | Duck blood and vermicelli soup 1899 | Azerbaijani pakhlava 1900 | Bakwan 1901 | Wallenbergare 1902 | Pastry 1903 | Melomakarono 1904 | Cocido lebaniego 1905 | Koi 1906 | Stir-fried tomato and scrambled eggs 1907 | Flæskesteg 1908 | Beggar's Chicken 1909 | /m/0hzpvf0 1910 | Konkonte 1911 | Stuffed squash 1912 | Kaeng som 1913 | Kentucky jam cake 1914 | Murături 1915 | Tochitură 1916 | Urap 1917 | Cornulețe 1918 | Quad City-style pizza 1919 | Paneer tikka 1920 | Ciorbă de perișoare 1921 | /m/0j66841 1922 | Shaker lemon pie 1923 | Doodhpak 1924 | Ceviche 1925 | Cabbage soup 1926 | Nasi timbel 1927 | Pa amb tomàquet 1928 | Escalivada 1929 | Međimurska gibanica 1930 | Khanom chan 1931 | Ohaw 1932 | Baghrir 1933 | Hummingbird cake 1934 | Neapolitan pizza 1935 | Doughnut 1936 | Hummus 1937 | Nimono 1938 | Chocolate chip cookie 1939 | Bún ốc 1940 | Cheese straw 1941 | Sausage 1942 | Frogeye salad 1943 | Senate bean soup 1944 | Botifarra 1945 | Leberknödel 1946 | Laziji 1947 | Quzi 1948 | Chazuke 1949 | Sandwich 1950 | BLT 1951 | Chikhirtma 1952 | Pico de gallo 1953 | Oden 1954 | Tostada 1955 | Chilaquiles 1956 | Cocido montañés 1957 | Lontong Cap Go Meh 1958 | Porra antequerana 1959 | Kedjenou 1960 | Tourin 1961 | Attiéké 1962 | Dak-bokkeum-tang 1963 | Žemlovka 1964 | Dovga 1965 | Rice and gravy 1966 | Sai ua 1967 | Nam ngiao 1968 | Kaeng khae 1969 | Kaeng tai pla 1970 | Dim sum 1971 | Tahri 1972 | Bolo do caco 1973 | Buffalo wing 1974 | Pustakari 1975 | Pieds paquets 1976 | Tinginys 1977 | Sunnundallu 1978 | Lapskaus 1979 | Caldo tlalpeño 1980 | Milho frito 1981 | Kalu dodol 1982 | Poppyseed muffin 1983 | Peanut soup 1984 | Tarte à la Bouillie 1985 | Caldo gallego 1986 | Samay Baji 1987 | Limburger sandwich 1988 | Huachinango a la Veracruzana 1989 | Sambal stingray 1990 | Kuluban 1991 | Modjeska 1992 | Pan dulce 1993 | Florina pepper 1994 | Oysters Bienville 1995 | Cronut 1996 | Duck rice 1997 | Sulu köfte 1998 | Toyga soup 1999 | Majjige huli 2000 | Ikan goreng 2001 | Lekor 2002 | Ciulama 2003 | Ayam bakar 2004 | Hinava 2005 | Waakye 2006 | Salbute 2007 | Kuchmachi 2008 | Kibinai 2009 | Lobiani 2010 | Chanakhi 2011 | Baghali ghatogh 2012 | Pkhali 2013 | Poc Chuc 2014 | Bionico 2015 | Bamischijf 2016 | Racuchy 2017 | Kuurdak 2018 | Hokkien fried rice 2019 | Mu kratha 2020 | Thong yip 2021 | Zuppa toscana 2022 | Dhindo 2023 | Thiakry 2024 | Kondowole -------------------------------------------------------------------------------- /src/lite-model_aiy_vision_classifier_food_V1_1.tflite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/src/lite-model_aiy_vision_classifier_food_V1_1.tflite -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use std::io::{self, Read}; 2 | use ssvm_tensorflow_interface; 3 | use serde::Deserialize; 4 | 5 | fn main() { 6 | let model_data: &[u8] = include_bytes!("lite-model_aiy_vision_classifier_food_V1_1.tflite"); 7 | let labels = include_str!("aiy_food_V1_labelmap.txt"); 8 | 9 | let mut buffer = String::new(); 10 | io::stdin().read_to_string(&mut buffer).expect("Error reading from STDIN"); 11 | let obj: FaasInput = serde_json::from_str(&buffer).unwrap(); 12 | // println!("{} {}", &(obj.body)[..5], obj.body.len()); 13 | let img_buf = base64::decode_config(&(obj.body), base64::STANDARD).unwrap(); 14 | // println!("Image buf size is {}", img_buf.len()); 15 | 16 | let flat_img = ssvm_tensorflow_interface::load_jpg_image_to_rgb8(&img_buf, 192, 192); 17 | 18 | let mut session = ssvm_tensorflow_interface::Session::new(&model_data, ssvm_tensorflow_interface::ModelType::TensorFlowLite); 19 | session.add_input("input", &flat_img, &[1, 192, 192, 3]) 20 | .run(); 21 | let res_vec: Vec = session.get_output("MobilenetV1/Predictions/Softmax"); 22 | 23 | let mut i = 0; 24 | let mut max_index: i32 = -1; 25 | let mut max_value: u8 = 0; 26 | while i < res_vec.len() { 27 | let cur = res_vec[i]; 28 | if cur > max_value { 29 | max_value = cur; 30 | max_index = i as i32; 31 | } 32 | i += 1; 33 | } 34 | // println!("{} : {}", max_index, max_value as f32 / 255.0); 35 | 36 | /* 37 | let mut confidence = "could be"; 38 | if max_value > 200 { 39 | confidence = "is very likely"; 40 | } else if max_value > 125 { 41 | confidence = "is likely"; 42 | } else if max_value > 50 { 43 | confidence = "could be"; 44 | } 45 | */ 46 | let mut confidence = "可能有"; 47 | if max_value > 200 { 48 | confidence = "非常可能有"; 49 | } else if max_value > 125 { 50 | confidence = "很可能有"; 51 | } else if max_value > 50 { 52 | confidence = "可能有"; 53 | } 54 | 55 | let mut label_lines = labels.lines(); 56 | for _i in 0..max_index { 57 | label_lines.next(); 58 | } 59 | 60 | let class_name = label_lines.next().unwrap().to_string(); 61 | if max_value > 50 && max_index != 0 { 62 | // println!("It {} a {} in the picture", confidence.to_string(), class_name, class_name); 63 | println!("上传的图片里面{} {}", confidence.to_string(), class_name, class_name); 64 | } else { 65 | // println!("It does not appears to be any food item in the picture."); 66 | println!("上传的图片里面没有检测到食品"); 67 | } 68 | // println!("{} : {}", label_lines.next().unwrap().to_string(), confidence.to_string()); 69 | } 70 | 71 | #[derive(Deserialize, Debug)] 72 | struct FaasInput { 73 | body: String 74 | } 75 | -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-bold-webfont.woff -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-bold-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-bold-webfont.woff2 -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-bolditalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-bolditalic-webfont.woff -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-bolditalic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-bolditalic-webfont.woff2 -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-italic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-italic-webfont.woff -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-italic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-italic-webfont.woff2 -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-light-webfont.woff -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-light-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-light-webfont.woff2 -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-lightitalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-lightitalic-webfont.woff -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-lightitalic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-lightitalic-webfont.woff2 -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-medium-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-medium-webfont.woff -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-medium-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-medium-webfont.woff2 -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-mediumitalic-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-mediumitalic-webfont.woff -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-mediumitalic-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-mediumitalic-webfont.woff2 -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-regular-webfont.woff -------------------------------------------------------------------------------- /website/content/fonts/ubuntu-regular-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/fonts/ubuntu-regular-webfont.woff2 -------------------------------------------------------------------------------- /website/content/imgs/ai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/imgs/ai.png -------------------------------------------------------------------------------- /website/content/imgs/hotdogBig.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/imgs/hotdogBig.png -------------------------------------------------------------------------------- /website/content/imgs/prize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/imgs/prize.png -------------------------------------------------------------------------------- /website/content/imgs/rust-crab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/imgs/rust-crab.png -------------------------------------------------------------------------------- /website/content/imgs/rust-lang.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/imgs/rust-lang.png -------------------------------------------------------------------------------- /website/content/imgs/ss-serverless-wasm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/second-state/tencent-tensorflow-scf/49428f1ab91a0ea7716921e4b61e7b4e514ca34f/website/content/imgs/ss-serverless-wasm.png -------------------------------------------------------------------------------- /website/content/index.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'ubuntu'; 3 | src: url('fonts/ubuntu-bold-webfont.woff2') format('woff2'), 4 | url('fonts/ubuntu-bold-webfont.woff') format('woff'); 5 | font-weight: 700; 6 | font-style: normal; 7 | } 8 | 9 | @font-face { 10 | font-family: 'ubuntu'; 11 | src: url('fonts/ubuntu-bolditalic-webfont.woff2') format('woff2'), 12 | url('fonts/ubuntu-bolditalic-webfont.woff') format('woff'); 13 | font-weight: 700; 14 | font-style: italic; 15 | } 16 | 17 | @font-face { 18 | font-family: 'ubuntu'; 19 | src: url('fonts/ubuntu-italic-webfont.woff2') format('woff2'), 20 | url('fonts/ubuntu-italic-webfont.woff') format('woff'); 21 | font-weight: 400; 22 | font-style: italic; 23 | } 24 | 25 | @font-face { 26 | font-family: 'ubuntu'; 27 | src: url('fonts/ubuntu-light-webfont.woff2') format('woff2'), 28 | url('fonts/ubuntu-light-webfont.woff') format('woff'); 29 | font-weight: 300; 30 | font-style: normal; 31 | } 32 | 33 | @font-face { 34 | font-family: 'ubuntu'; 35 | src: url('fonts/ubuntu-lightitalic-webfont.woff2') format('woff2'), 36 | url('fonts/ubuntu-lightitalic-webfont.woff') format('woff'); 37 | font-weight: 300; 38 | font-style: italic; 39 | } 40 | 41 | @font-face { 42 | font-family: 'ubuntu'; 43 | src: url('fonts/ubuntu-medium-webfont.woff2') format('woff2'), 44 | url('fonts/ubuntu-medium-webfont.woff') format('woff'); 45 | font-weight: 500; 46 | font-style: normal; 47 | } 48 | 49 | @font-face { 50 | font-family: 'ubuntu'; 51 | src: url('fonts/ubuntu-mediumitalic-webfont.woff2') format('woff2'), 52 | url('fonts/ubuntu-mediumitalic-webfont.woff') format('woff'); 53 | font-weight: 500; 54 | font-style: italic; 55 | } 56 | 57 | @font-face { 58 | font-family: 'ubuntu'; 59 | src: url('fonts/ubuntu-regular-webfont.woff2') format('woff2'), 60 | url('fonts/ubuntu-regular-webfont.woff') format('woff'); 61 | font-weight: 400; 62 | font-style: normal; 63 | } 64 | 65 | html * { 66 | box-sizing: border-box; 67 | } 68 | 69 | body { 70 | font-family: ubuntu, Arial, Helvetica, sans-serif; 71 | font-weight: 400; 72 | font-size: 18px; 73 | line-height: 1.5; 74 | background-color: #f0f0f0; 75 | color: #454545; 76 | } 77 | 78 | h1, h2, h3, h4, h5 { 79 | font-weight: 400; 80 | margin: 0; 81 | } 82 | 83 | p { 84 | margin: 0; 85 | } 86 | 87 | ul { 88 | padding: 0; 89 | margin: 0; 90 | list-style: none; 91 | text-align: left; 92 | } 93 | 94 | li { 95 | margin-top: 10px; 96 | } 97 | 98 | a.btn { 99 | line-height: 36px; 100 | display: inline-block; 101 | padding: 0 10px; 102 | color: #454545 !important; 103 | text-decoration: none; 104 | background-color: #fff; 105 | border-radius: 4px; 106 | outline: none; 107 | } 108 | 109 | button { 110 | height: 36px; 111 | padding: 0 10px; 112 | border: 0; 113 | border-radius: 4px; 114 | outline: none; 115 | cursor: pointer; 116 | background-color: #fff; 117 | color: #454545; 118 | } 119 | 120 | button.master { 121 | background-color: #c6ff55; 122 | } 123 | 124 | button.master:disabled { 125 | background-color: #ddff9a; 126 | color: #999; 127 | } 128 | 129 | section { 130 | padding: 60px 20px; 131 | display: flex; 132 | flex-direction: column; 133 | align-items: center; 134 | text-align: center; 135 | position: relative; 136 | } 137 | 138 | section.even { 139 | background-image: url('./imgs/rust-lang.png'); 140 | background-repeat: no-repeat; 141 | background-position: center -104px; 142 | } 143 | 144 | section.odd { 145 | background-image: linear-gradient(#213359, #009aaa); 146 | color: #fff; 147 | } 148 | 149 | section.odd a { 150 | color: #fff; 151 | } 152 | 153 | section.first-screen { 154 | justify-content: space-around; 155 | } 156 | 157 | header { 158 | position: absolute; 159 | top: -30px; 160 | width: 650px; 161 | left: 50%; 162 | margin-left: -325px; 163 | display: flex; 164 | justify-content: space-between; 165 | align-items: center; 166 | } 167 | 168 | .ss-github { 169 | display: block; 170 | width: 32px; 171 | height: 32px; 172 | margin-right: 20px; 173 | background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='octicon octicon-mark-github v-align-middle' height='32' viewBox='0 0 16 16' version='1.1' width='32' aria-hidden='true'%3E%3Cpath fill='%23fff' fill-rule='evenodd' d='M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z'%3E%3C/path%3E%3C/svg%3E"); 174 | } 175 | 176 | .ss-serverless { 177 | display: block; 178 | width: 128px; 179 | height: 128px; 180 | background-image: url("data:image/svg+xml,%0A%3Csvg id='图层_1' data-name='图层 1' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 566.93 566.93'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill:%232ea7e0;%7D.cls-2%7Bfill:%23036eb8;%7D.cls-3%7Bfill:none;%7D.cls-4%7Bfill:%23fff;%7D%3C/style%3E%3C/defs%3E%3Cpolygon class='cls-1' points='425.35 275.96 461.18 265.92 468.76 253.08 477.76 253.08 483.24 255.66 484.44 254.34 486.42 254.34 488.13 252.62 487.02 251.5 473.69 238.18 478.26 229.16 477.27 229.16 474.4 232.33 476 229.16 475.06 229.16 465.06 239.17 465.06 243.2 457.55 256.61 407.9 251.02 361.93 273.37 278.73 280.21 366.16 280.21 394.38 271.96 413.31 298.49 413.31 322.65 449.45 346.36 418.51 321.15 425.35 275.96'/%3E%3Cpolygon class='cls-2' points='430.19 281.74 447.88 274.42 447.88 282.96 438.28 292.92 451.06 285.02 454.02 271.88 462.72 268.29 468.76 253.08 461.18 265.92 425.35 275.96 418.51 321.15 449.45 346.36 421.8 320.69 430.19 281.74'/%3E%3Cpath class='cls-3' d='M239.61,232.59a3.32,3.32,0,0,0-3.32-3.32H231v6.65h5.29A3.32,3.32,0,0,0,239.61,232.59Z'/%3E%3Cpath class='cls-3' d='M155.45,232.59a3.32,3.32,0,0,0-3.32-3.32h-5.29v6.65h5.29A3.32,3.32,0,0,0,155.45,232.59Z'/%3E%3Cpolygon class='cls-4' points='179.87 240.73 175.35 220.57 166.72 220.57 175.55 259.98 184.18 259.98 193.01 220.57 184.38 220.57 179.87 240.73'/%3E%3Cpath class='cls-4' d='M96.3,235.92H90.83a3.32,3.32,0,1,1,0-6.64h10.69v-8.71H90.83a12,12,0,0,0,0,24.06H96.3a3.33,3.33,0,1,1,0,6.65H82.17l2,8.7H96.3a12,12,0,0,0,0-24.06Z'/%3E%3Cpath class='cls-4' d='M320.69,235.92h-5.48a3.32,3.32,0,1,1,0-6.64H325.9v-8.71H315.21a12,12,0,1,0,0,24.06h5.48a3.33,3.33,0,0,1,0,6.65H306.55l1.95,8.7h12.19a12,12,0,0,0,0-24.06Z'/%3E%3Cpath class='cls-4' d='M164.16,232.59a12,12,0,0,0-12-12H138V260h8.84V244.62h5.24L155.52,260h8.64L160,241.63A12,12,0,0,0,164.16,232.59Zm-17.32-3.32h5.29a3.33,3.33,0,0,1,0,6.65h-5.29Z'/%3E%3Cpolygon class='cls-4' points='112.75 220.57 112.75 259.98 112.75 259.98 130.21 259.98 130.21 251.14 121.59 251.14 121.59 244.7 130.21 244.7 130.21 235.85 121.59 235.85 121.59 229.41 130.21 229.41 130.21 220.57 112.75 220.57 112.75 220.57'/%3E%3Cpolygon class='cls-4' points='281.29 220.57 281.29 259.98 281.29 259.98 298.75 259.98 298.75 251.14 290.13 251.14 290.13 244.7 298.75 244.7 298.75 235.85 290.13 235.85 290.13 229.41 298.75 229.41 298.75 220.57 281.29 220.57 281.29 220.57'/%3E%3Cpolygon class='cls-4' points='196.91 220.57 196.91 259.98 196.91 259.98 214.37 259.98 214.37 251.14 205.75 251.14 205.75 244.7 214.37 244.7 214.37 235.85 205.75 235.85 205.75 229.41 214.37 229.41 214.37 220.57 196.91 220.57 196.91 220.57'/%3E%3Cpolygon class='cls-4' points='264.95 220.57 256.11 220.57 256.11 220.57 256.11 259.98 256.11 259.98 273.57 259.98 273.57 251.14 264.95 251.14 264.95 220.57'/%3E%3Cpath class='cls-4' d='M248.32,232.59a12,12,0,0,0-12-12H222.16V260H231V244.62h5.24L239.68,260h8.64l-4.12-18.35A12,12,0,0,0,248.32,232.59ZM231,229.27h5.29a3.33,3.33,0,0,1,0,6.65H231Z'/%3E%3Cpath class='cls-4' d='M350.77,235.92h-5.48a3.32,3.32,0,1,1,0-6.64H356v-8.71h-10.7a12,12,0,0,0,0,24.06h5.48a3.33,3.33,0,1,1,0,6.65H336.64l1.95,8.7h12.18a12,12,0,1,0,0-24.06Z'/%3E%3Cpath class='cls-4' d='M241.37,300.52a3.13,3.13,0,0,1-1.43-.29,2.2,2.2,0,0,1-.88-.73h0v.63a.17.17,0,0,1-.18.19h-2.18a.17.17,0,0,1-.18-.19v-12a.16.16,0,0,1,.18-.18h2.18a.16.16,0,0,1,.18.18v4.2h0a2.31,2.31,0,0,1,.88-.74,3.28,3.28,0,0,1,1.43-.28,3.22,3.22,0,0,1,1.87.53,3,3,0,0,1,1.11,1.58,6.61,6.61,0,0,1,.24,1.07,14.34,14.34,0,0,1,0,2.83,6.5,6.5,0,0,1-.24,1.08,3,3,0,0,1-1.11,1.57A3.15,3.15,0,0,1,241.37,300.52Zm-.82-2.15a1.3,1.3,0,0,0,1.37-.94,2.46,2.46,0,0,0,.12-.59,10.6,10.6,0,0,0,0-1.84,2.46,2.46,0,0,0-.12-.59,1.28,1.28,0,0,0-1.37-.94,1.26,1.26,0,0,0-1.34.94,3,3,0,0,0-.13.59c0,.23,0,.53,0,.92s0,.69,0,.92a3,3,0,0,0,.13.59A1.27,1.27,0,0,0,240.55,298.37Z'/%3E%3Cpath class='cls-4' d='M246.91,303.59c-.12,0-.18-.06-.18-.19v-1.78a.16.16,0,0,1,.18-.18h.38a1.25,1.25,0,0,0,.76-.21,1.37,1.37,0,0,0,.44-.7l.24-.65-3.27-8.18c0-.12,0-.18.14-.18h2.33a.22.22,0,0,1,.22.18l1.76,5.09h0l1.63-5.09a.22.22,0,0,1,.22-.18h2.25c.14,0,.18.06.15.18l-3.56,9.36a7.84,7.84,0,0,1-.57,1.22,3.26,3.26,0,0,1-.67.78,2.18,2.18,0,0,1-.82.41,4.1,4.1,0,0,1-1.05.12Z'/%3E%3Cpath class='cls-4' d='M264.07,300.52a7.46,7.46,0,0,1-1.43-.14,8.48,8.48,0,0,1-1.32-.36,7,7,0,0,1-1.13-.54,5.39,5.39,0,0,1-.89-.65.21.21,0,0,1,0-.31l1.38-1.58c.07-.1.16-.11.27,0a7.66,7.66,0,0,0,1.44.88,4.08,4.08,0,0,0,1.79.39,2.37,2.37,0,0,0,1.5-.41,1.28,1.28,0,0,0,.52-1.06,1.1,1.1,0,0,0-.4-.89,3,3,0,0,0-1.51-.49l-.65-.09a5.33,5.33,0,0,1-2.9-1.16,3.25,3.25,0,0,1-1-2.55A3.7,3.7,0,0,1,260,290a3.27,3.27,0,0,1,.88-1.19,4,4,0,0,1,1.38-.77,5.73,5.73,0,0,1,1.81-.27,7.43,7.43,0,0,1,2.33.35,6.08,6.08,0,0,1,1.87.94q.17.1,0,.27l-1.1,1.66a.18.18,0,0,1-.26,0,6.22,6.22,0,0,0-1.41-.71,4.42,4.42,0,0,0-1.46-.23,1.77,1.77,0,0,0-1.24.38,1.25,1.25,0,0,0-.41,1,1.08,1.08,0,0,0,.42.87,3.11,3.11,0,0,0,1.5.49l.66.09a5.2,5.2,0,0,1,2.9,1.16,3.32,3.32,0,0,1,1,2.59,4,4,0,0,1-.31,1.55,3.38,3.38,0,0,1-.92,1.24,4.39,4.39,0,0,1-1.52.8A6.69,6.69,0,0,1,264.07,300.52Z'/%3E%3Cpath class='cls-4' d='M274.44,300.52a4.46,4.46,0,0,1-2.51-.66,3.41,3.41,0,0,1-1.38-1.85,5.76,5.76,0,0,1-.23-.91,7.91,7.91,0,0,1-.08-1.18,8.05,8.05,0,0,1,.08-1.19,5,5,0,0,1,.21-.92,3.31,3.31,0,0,1,1.38-1.84,4.82,4.82,0,0,1,4.85,0,3.44,3.44,0,0,1,1.35,1.81c.05.15.09.3.13.47s.06.34.09.55,0,.45.05.72,0,.59,0,1c0,.12-.07.18-.2.18h-5.32a.1.1,0,0,0-.11.11,1.53,1.53,0,0,0,.11.49,1.5,1.5,0,0,0,.65.87,2.13,2.13,0,0,0,1.16.29,2.91,2.91,0,0,0,1.15-.21,2.53,2.53,0,0,0,.87-.57c.11-.08.19-.08.26,0l1.19,1.13c.1.08.11.17,0,.25a4.62,4.62,0,0,1-1.58,1.08A5.62,5.62,0,0,1,274.44,300.52Zm1.34-5.53a.1.1,0,0,0,.11-.11,3.49,3.49,0,0,0,0-.35c0-.1,0-.2-.07-.3a1.26,1.26,0,0,0-.53-.71,1.72,1.72,0,0,0-.94-.25,1.69,1.69,0,0,0-.94.25,1.31,1.31,0,0,0-.53.71c0,.1-.05.2-.07.3a3.49,3.49,0,0,0,0,.35.1.1,0,0,0,.11.11Z'/%3E%3Cpath class='cls-4' d='M283.89,300.52a4.38,4.38,0,0,1-2.4-.63,3.33,3.33,0,0,1-1.4-1.86,3.92,3.92,0,0,1-.21-.91,12,12,0,0,1,0-2.4,3.92,3.92,0,0,1,.21-.91,3.33,3.33,0,0,1,1.4-1.86,4.38,4.38,0,0,1,2.4-.63,4.25,4.25,0,0,1,2,.46,3.56,3.56,0,0,1,1.32,1.19.19.19,0,0,1,0,.26l-1.58,1a.19.19,0,0,1-.28,0,1.84,1.84,0,0,0-.61-.58,1.57,1.57,0,0,0-.79-.18,1.5,1.5,0,0,0-.86.23,1.29,1.29,0,0,0-.5.71,3.37,3.37,0,0,0-.13.62c0,.23,0,.52,0,.89s0,.66,0,.89a3.56,3.56,0,0,0,.13.62,1.29,1.29,0,0,0,.5.71,1.77,1.77,0,0,0,1.65.05,2,2,0,0,0,.61-.58.19.19,0,0,1,.28,0l1.58,1a.17.17,0,0,1,0,.25,3.48,3.48,0,0,1-1.32,1.19A4.13,4.13,0,0,1,283.89,300.52Z'/%3E%3Cpath class='cls-4' d='M292.34,300.52a4.5,4.5,0,0,1-2.42-.64,3.22,3.22,0,0,1-1.4-1.84,6,6,0,0,1-.22-1,7.88,7.88,0,0,1-.07-1.15,8,8,0,0,1,.07-1.16,6.48,6.48,0,0,1,.22-1,3.2,3.2,0,0,1,1.4-1.83,4.88,4.88,0,0,1,4.83,0,3.2,3.2,0,0,1,1.4,1.83,6.48,6.48,0,0,1,.22,1,8,8,0,0,1,.07,1.16,7.88,7.88,0,0,1-.07,1.15,6,6,0,0,1-.22,1,3.22,3.22,0,0,1-1.4,1.84A4.49,4.49,0,0,1,292.34,300.52Zm0-2.15a1.29,1.29,0,0,0,1.36-.94,4.7,4.7,0,0,0,.13-.63c0-.21,0-.51,0-.88s0-.67,0-.88a4.7,4.7,0,0,0-.13-.63,1.46,1.46,0,0,0-2.73,0,3.5,3.5,0,0,0-.12.63,6.73,6.73,0,0,0,0,.88,6.83,6.83,0,0,0,0,.88,3.5,3.5,0,0,0,.12.63A1.3,1.3,0,0,0,292.34,298.37Z'/%3E%3Cpath class='cls-4' d='M303.76,300.32a.17.17,0,0,1-.18-.19v-5.05a1.88,1.88,0,0,0-.33-1.16,1.23,1.23,0,0,0-1-.44,1.27,1.27,0,0,0-1,.44,1.77,1.77,0,0,0-.36,1.16v5.05a.17.17,0,0,1-.18.19h-2.18a.17.17,0,0,1-.18-.19V291.7a.16.16,0,0,1,.18-.18h2.18a.16.16,0,0,1,.18.18v.62h0a2.46,2.46,0,0,1,.86-.71,3.07,3.07,0,0,1,1.41-.29,3.3,3.3,0,0,1,1.29.24,2.45,2.45,0,0,1,.94.67,2.86,2.86,0,0,1,.58,1,4.57,4.57,0,0,1,.19,1.32v5.54a.17.17,0,0,1-.19.19Z'/%3E%3Cpath class='cls-4' d='M313.7,300.32a.17.17,0,0,1-.18-.19v-.63h0a2.11,2.11,0,0,1-.87.73,3.58,3.58,0,0,1-3.3-.25,3,3,0,0,1-1.11-1.57,6.5,6.5,0,0,1-.24-1.08,14.34,14.34,0,0,1,0-2.83,6.61,6.61,0,0,1,.24-1.07,3,3,0,0,1,1.11-1.58,3.2,3.2,0,0,1,1.87-.53,3.28,3.28,0,0,1,1.43.28,2.2,2.2,0,0,1,.87.74h0v-4.2a.16.16,0,0,1,.18-.18h2.18c.13,0,.19.06.19.18v12a.17.17,0,0,1-.19.19ZM312,298.37a1.29,1.29,0,0,0,1.35-.94,3,3,0,0,0,.13-.59c0-.23,0-.53,0-.92s0-.69,0-.92a3,3,0,0,0-.13-.59,1.45,1.45,0,0,0-2.71,0,3,3,0,0,0-.13.59c0,.23,0,.53,0,.92s0,.69,0,.92a3,3,0,0,0,.13.59A1.29,1.29,0,0,0,312,298.37Z'/%3E%3Cpath class='cls-4' d='M326.84,300.52a7.62,7.62,0,0,1-1.43-.14,8.66,8.66,0,0,1-1.31-.36,7.07,7.07,0,0,1-1.14-.54,5.29,5.29,0,0,1-.88-.65.21.21,0,0,1,0-.31l1.38-1.58a.17.17,0,0,1,.28,0,7.56,7.56,0,0,0,1.43.88,4.13,4.13,0,0,0,1.8.39,2.41,2.41,0,0,0,1.5-.41,1.31,1.31,0,0,0,.52-1.06,1.13,1.13,0,0,0-.4-.89,3,3,0,0,0-1.51-.49l-.66-.09a5.3,5.3,0,0,1-2.89-1.16,3.22,3.22,0,0,1-1-2.55,3.7,3.7,0,0,1,.31-1.55,3.17,3.17,0,0,1,.88-1.19,4,4,0,0,1,1.38-.77,5.69,5.69,0,0,1,1.81-.27,7.32,7.32,0,0,1,2.32.35,6,6,0,0,1,1.87.94c.11.07.12.16,0,.27L330,291a.17.17,0,0,1-.25,0,6.66,6.66,0,0,0-1.41-.71,4.51,4.51,0,0,0-1.46-.23,1.75,1.75,0,0,0-1.24.38,1.23,1.23,0,0,0-.42,1,1.06,1.06,0,0,0,.43.87,3,3,0,0,0,1.5.49l.65.09a5.21,5.21,0,0,1,2.91,1.16,3.35,3.35,0,0,1,1,2.59,3.83,3.83,0,0,1-.31,1.55,3.27,3.27,0,0,1-.92,1.24,4.34,4.34,0,0,1-1.51.8A6.76,6.76,0,0,1,326.84,300.52Z'/%3E%3Cpath class='cls-4' d='M336.43,300.42a2.8,2.8,0,0,1-2.16-.7,3.29,3.29,0,0,1-.63-2.22v-4a.1.1,0,0,0-.11-.11H333a.16.16,0,0,1-.18-.18V291.7a.16.16,0,0,1,.18-.18h.55a.1.1,0,0,0,.11-.11v-2.36a.16.16,0,0,1,.18-.18H336a.16.16,0,0,1,.18.18v2.36a.1.1,0,0,0,.11.11h1.13a.16.16,0,0,1,.18.18v1.51a.16.16,0,0,1-.18.18h-1.13a.1.1,0,0,0-.11.11v3.89a1,1,0,0,0,.18.68.82.82,0,0,0,.62.19h.44a.16.16,0,0,1,.18.18v1.8a.16.16,0,0,1-.18.18Z'/%3E%3Cpath class='cls-4' d='M344.63,300.32a.17.17,0,0,1-.18-.19v-.58h0a2.38,2.38,0,0,1-.93.7,3.54,3.54,0,0,1-1.49.27,4.15,4.15,0,0,1-1.12-.16,2.57,2.57,0,0,1-.93-.48,2.35,2.35,0,0,1-.64-.84,2.81,2.81,0,0,1-.23-1.21,2.41,2.41,0,0,1,1-2.15,4.58,4.58,0,0,1,2.64-.69h1.56a.1.1,0,0,0,.11-.11v-.32a1.06,1.06,0,0,0-.37-.91,2.44,2.44,0,0,0-1.43-.29,3.65,3.65,0,0,0-1.16.16,2.72,2.72,0,0,0-.8.4c-.1.07-.18.06-.24,0l-.81-1.43a.17.17,0,0,1,0-.26,4.56,4.56,0,0,1,1.37-.63,6.7,6.7,0,0,1,1.9-.24,7.88,7.88,0,0,1,1.82.19,3.1,3.1,0,0,1,1.21.58,2.3,2.3,0,0,1,.67,1,4.33,4.33,0,0,1,.21,1.42v5.63a.17.17,0,0,1-.19.19Zm-1.86-1.71c1.1,0,1.64-.41,1.64-1.22v-.6a.1.1,0,0,0-.11-.11h-1.23c-1.05,0-1.57.33-1.57,1S341.93,298.61,342.77,298.61Z'/%3E%3Cpath class='cls-4' d='M352,300.42a2.79,2.79,0,0,1-2.16-.7,3.23,3.23,0,0,1-.64-2.22v-4a.1.1,0,0,0-.11-.11h-.54a.16.16,0,0,1-.18-.18V291.7a.16.16,0,0,1,.18-.18h.54a.1.1,0,0,0,.11-.11v-2.36a.16.16,0,0,1,.18-.18h2.17a.16.16,0,0,1,.18.18v2.36a.1.1,0,0,0,.11.11H353a.17.17,0,0,1,.19.18v1.51a.17.17,0,0,1-.19.18h-1.12a.1.1,0,0,0-.11.11v3.89a1,1,0,0,0,.18.68.82.82,0,0,0,.62.19H353a.17.17,0,0,1,.19.18v1.8a.17.17,0,0,1-.19.18Z'/%3E%3Cpath class='cls-4' d='M358.84,300.52a4.44,4.44,0,0,1-2.51-.66A3.32,3.32,0,0,1,355,298a5.76,5.76,0,0,1-.23-.91,7.91,7.91,0,0,1-.08-1.18,8.19,8.19,0,0,1,.07-1.19,5,5,0,0,1,.22-.92A3.29,3.29,0,0,1,356.3,292a4.31,4.31,0,0,1,2.41-.65,4.23,4.23,0,0,1,2.44.66,3.41,3.41,0,0,1,1.36,1.81,3.23,3.23,0,0,1,.12.47,3.71,3.71,0,0,1,.09.55,7,7,0,0,1,.06.72c0,.27,0,.59,0,1,0,.12-.07.18-.2.18h-5.33a.1.1,0,0,0-.11.11,1.85,1.85,0,0,0,.11.49,1.47,1.47,0,0,0,.66.87,2.1,2.1,0,0,0,1.16.29,2.91,2.91,0,0,0,1.15-.21,2.73,2.73,0,0,0,.87-.57c.11-.08.19-.08.25,0l1.2,1.13a.15.15,0,0,1,0,.25,4.62,4.62,0,0,1-1.58,1.08A5.62,5.62,0,0,1,358.84,300.52Zm1.34-5.53a.1.1,0,0,0,.11-.11,1.83,1.83,0,0,0,0-.35l-.06-.3a1.33,1.33,0,0,0-.54-.71,1.87,1.87,0,0,0-1.87,0,1.26,1.26,0,0,0-.53.71c0,.1-.05.2-.07.3a1.83,1.83,0,0,0,0,.35.1.1,0,0,0,.11.11Z'/%3E%3Cpolygon class='cls-4' points='208.38 287.76 199.75 287.76 203.89 306.22 190.72 287.76 182.09 287.76 190.92 327.16 199.55 327.16 195.41 308.71 208.59 327.16 217.22 327.16 213.08 308.71 226.25 327.16 231.14 327.16 236.5 327.16 208.38 287.76'/%3E%3Cpolygon class='cls-4' points='114.13 287.76 109.61 307.91 105.09 287.76 96.46 287.76 91.95 307.91 87.43 287.76 78.8 287.76 87.63 327.16 96.26 327.16 100.78 307.01 105.3 327.16 113.92 327.16 122.76 287.76 114.13 287.76'/%3E%3Cpolygon class='cls-4' points='131.59 287.76 122.76 327.16 131.39 327.16 135.9 307.01 140.42 327.16 149.05 327.16 140.22 287.76 131.59 287.76'/%3E%3Cpath class='cls-4' d='M170.06,303.11h-5.47a3.33,3.33,0,1,1,0-6.65h10.69v-8.7H164.59a12,12,0,1,0,0,24.05h5.47a3.33,3.33,0,1,1,0,6.65H155.93l1.95,8.7h12.18a12,12,0,1,0,0-24.05Z'/%3E%3C/svg%3E"); 181 | } 182 | 183 | section.game img { 184 | margin-top: 50px; 185 | } 186 | 187 | .banner { 188 | flex-grow: 8; 189 | display: flex; 190 | flex-direction: column; 191 | justify-content: center; 192 | text-align: center; 193 | } 194 | 195 | h1 { 196 | margin-bottom: 10px; 197 | opacity: 0; 198 | font-size: 30px; 199 | } 200 | 201 | h2 { 202 | font-size: 26px; 203 | margin-bottom: 10px; 204 | } 205 | 206 | .sub-title { 207 | opacity: 0; 208 | } 209 | 210 | .explanation { 211 | color: #a7a7a7; 212 | margin-bottom: 20px; 213 | } 214 | 215 | .lottery-prize { 216 | margin-top: 20px; 217 | } 218 | 219 | #lottery_email { 220 | display: block; 221 | margin: -20px 0 20px; 222 | border: 0; 223 | border-radius: 4px; 224 | width: 200px; 225 | background-color: #fff; 226 | line-height: 30px; 227 | text-align: center; 228 | box-shadow: 0px 0px 6px 0px #afafaf; 229 | outline: none; 230 | } 231 | 232 | section.game .explanation { 233 | color: #b3b3b3; 234 | } 235 | 236 | .actions { 237 | margin-top: 20px; 238 | } 239 | 240 | #select_file { 241 | display: none; 242 | } 243 | 244 | .note { 245 | margin-top: 30px; 246 | font-size: 0.8em; 247 | } 248 | 249 | .note a { 250 | text-decoration: underline; 251 | } 252 | 253 | .loves { 254 | flex-grow: 1; 255 | text-align: center; 256 | opacity: 0; 257 | } 258 | 259 | .external { 260 | opacity: 0; 261 | font-size: 0.8em; 262 | } 263 | 264 | .show h1, .show .sub-title, .show .loves, .show .external { 265 | opacity: 1; 266 | } 267 | .first-screen.show { 268 | } 269 | 270 | li .prize { 271 | color: #a7a7a7; 272 | } 273 | 274 | .loves a { 275 | color: #fff; 276 | text-decoration: none; 277 | } 278 | .loves .heart { 279 | padding: 0 10px; 280 | } 281 | 282 | .external2 { 283 | font-size: 0.8em; 284 | margin-top: 20px; 285 | } 286 | 287 | #msg { 288 | margin-top: 10px; 289 | } 290 | 291 | section.footer { 292 | padding: 20px 20px; 293 | background-color: #213359; 294 | background-image: none; 295 | } 296 | 297 | section.footer .footer-content { 298 | display: flex; 299 | flex-direction: row; 300 | justify-content: space-between; 301 | align-items: flex-start; 302 | width: 650px; 303 | } 304 | 305 | section.footer img { 306 | width: 60px; 307 | } 308 | 309 | section.footer .links { 310 | display: flex; 311 | flex-direction: column; 312 | align-items: flex-end; 313 | } 314 | 315 | section.footer .links a { 316 | margin-bottom: 10px; 317 | font-size: 0.8em; 318 | } 319 | 320 | .second-state { 321 | padding: 7px 0 7px 55px; 322 | background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 255.59 322.04'%3E%3Cdefs%3E%3Cstyle%3E.cls-1%7Bfill:%23ffffff;%7D%3C/style%3E%3C/defs%3E%3Cpath class='cls-1' d='M116.65,44.1c43.17-30.24,83.22-29.19,122-28.18,5.52.15,11.23.3,16.83.35L255.59.73c-5.47,0-11.12-.2-16.58-.34-41.24-1.08-83.91-2.2-131.28,31C81,50.12,61.05,78.46,50.17,113.31,42,139.48,41.73,160,41.73,160.88l15.54.14C57.27,160.26,58.77,84.64,116.65,44.1Z'/%3E%3Cpath class='cls-1' d='M131.17,61.77c-43.54,30.63-50,75.28-50,99.17H96.67c0-20.88,5.65-59.87,43.44-86.47,31.34-22,68.9-21.12,102-20.31,4.62.12,9,.22,13.29.27l.16-15.54c-4.2,0-8.51-.15-13.07-.26C208.75,37.8,166.7,36.76,131.17,61.77Z'/%3E%3Cpath class='cls-1' d='M154,93.61c-29.55,20.79-34,51.06-34,67.29h0c0,13.2-3.56,37.84-27.4,54.62-20.2,14.21-60.18,13.35-84.06,12.84-3.05-.07-5.87-.13-8.4-.15L0,243.75c2.48,0,5.24.08,8.22.14,5,.11,10.71.24,16.78.24,25.12,0,56.94-2.09,76.56-15.9,29.56-20.8,34-51.06,34-67.29h0c0-13.2,3.56-37.85,27.41-54.63,20.19-14.2,60.16-13.34,84-12.83,3.05.07,5.87.12,8.4.15l.16-15.54c-2.48,0-5.24-.08-8.22-.15C221.58,77.39,178.41,76.46,154,93.61Z'/%3E%3Cpath class='cls-1' d='M139,277.74C95.78,308,55.73,306.93,17,305.92c-5.53-.15-11.24-.3-16.84-.35L0,321.11c5.47.05,11.12.2,16.58.34,7.36.19,14.77.39,22.24.39,34.39,0,70.13-4.11,109-31.37,26.77-18.76,46.68-47.09,57.56-81.94,8.17-26.17,8.44-46.71,8.44-47.57l-15.54-.14C198.33,161.58,196.83,237.2,139,277.74Z'/%3E%3Cpath class='cls-1' d='M32.67,283.53c29.59,0,62.84-3.1,91.76-23.46,43.54-30.63,50-75.28,50-99.17H158.93c0,20.87-5.64,59.87-43.44,86.46-31.34,22.05-68.9,21.13-102,20.32-4.62-.12-9-.23-13.29-.27L0,283c4.2,0,8.51.15,13.07.26C19.35,283.37,25.91,283.53,32.67,283.53Z'/%3E%3C/svg%3E"); 323 | background-repeat: no-repeat; 324 | background-position: left center; 325 | background-size: contain; 326 | } 327 | 328 | .rust-conf { 329 | padding: 7px 0 7px 63px; 330 | background-image: url("data:image/svg+xml,%0A%3Csvg width='300' height='300' viewBox='0 0 300 300' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M148.8 6.07415C149.346 5.17168 150.654 5.17169 151.2 6.07415L157.651 16.7511C157.751 16.9166 157.857 17.0771 157.97 17.2322L158.705 18.2468L159.954 18.34C161.961 18.4895 163.955 18.6839 165.935 18.922L167.18 19.0717L168.097 18.2177C168.233 18.091 168.365 17.9579 168.492 17.8187L176.902 8.60558C177.613 7.82683 178.897 8.0822 179.255 9.0737L183.499 20.804C183.558 20.967 183.623 21.1269 183.693 21.2835L184.212 22.4392L185.433 22.7784C187.382 23.3199 189.312 23.9051 191.224 24.5327L192.427 24.9279L193.5 24.2543C193.644 24.1641 193.785 24.068 193.924 23.9661L203.97 16.5707C204.819 15.9456 206.028 16.4466 206.186 17.489L208.061 29.822C208.087 29.9969 208.12 30.1699 208.16 30.3408L208.444 31.5702L209.57 32.1404C211.368 33.0508 213.142 34.0012 214.891 34.9904L215.989 35.6115L217.17 35.1667C217.338 35.1036 217.504 35.0337 217.668 34.9569L228.963 29.6635C229.918 29.216 231.007 29.9433 230.958 30.9966L230.391 43.4581C230.382 43.6519 230.381 43.8448 230.388 44.0363L230.436 45.2853L231.42 46.0567C232.994 47.2917 234.539 48.5616 236.055 49.8654L237.003 50.6805L238.237 50.4849C238.429 50.4545 238.62 50.4158 238.811 50.3687L250.923 47.3807C251.946 47.1281 252.872 48.0537 252.619 49.0774L249.631 61.1887C249.584 61.3796 249.546 61.5711 249.515 61.7625L249.319 62.9972L250.135 63.9449C251.438 65.4606 252.708 67.0061 253.943 68.5805L254.715 69.564L255.964 69.6116C256.155 69.6189 256.348 69.6182 256.542 69.6094L269.003 69.0415C270.057 68.9935 270.784 70.0819 270.337 71.0367L265.043 82.3323C264.966 82.4964 264.896 82.6622 264.833 82.8293L264.388 84.0104L265.01 85.109C265.999 86.8583 266.949 88.6324 267.86 90.4301L268.43 91.5559L269.659 91.8401C269.83 91.8796 270.003 91.9127 270.178 91.9393L282.511 93.8135C283.553 93.9719 284.054 95.1813 283.429 96.0304L276.034 106.076C275.932 106.214 275.836 106.356 275.746 106.5L275.072 107.573L275.467 108.776C276.095 110.688 276.68 112.618 277.222 114.567L277.561 115.788L278.717 116.307C278.873 116.377 279.033 116.442 279.196 116.501L290.926 120.745C291.918 121.103 292.173 122.387 291.394 123.098L282.181 131.508C282.042 131.635 281.909 131.767 281.782 131.903L280.928 132.82L281.078 134.065C281.316 136.045 281.51 138.039 281.66 140.046L281.753 141.295L282.768 142.03C282.923 142.143 283.083 142.249 283.249 142.349L293.926 148.8C294.828 149.345 294.828 150.654 293.926 151.2L283.249 157.651C283.083 157.751 282.923 157.857 282.768 157.97L281.753 158.705L281.66 159.954C281.51 161.961 281.316 163.955 281.078 165.935L280.928 167.18L281.782 168.097C281.909 168.233 282.042 168.365 282.181 168.492L291.394 176.902C292.173 177.613 291.918 178.897 290.926 179.255L279.196 183.499C279.164 183.511 279.132 183.523 279.1 183.535L279.06 183.55L279.012 183.569C278.964 183.588 278.916 183.607 278.869 183.627C278.846 183.637 278.822 183.647 278.798 183.657L278.762 183.673L278.715 183.694L277.561 184.213L277.222 185.433C276.68 187.382 276.095 189.312 275.467 191.224L275.072 192.427L275.746 193.5C275.836 193.644 275.932 193.786 276.034 193.924L283.429 203.97C284.054 204.819 283.553 206.028 282.511 206.186L270.178 208.061C270.074 208.076 269.971 208.094 269.869 208.115C269.799 208.129 269.729 208.144 269.659 208.16L268.43 208.444L267.86 209.57C266.949 211.368 265.999 213.142 265.01 214.891L264.388 215.99L264.833 217.171C264.896 217.338 264.966 217.504 265.043 217.668L270.337 228.963C270.784 229.918 270.057 231.007 269.003 230.958L256.542 230.391C256.348 230.382 256.155 230.381 255.964 230.388L254.715 230.436L253.943 231.42C252.708 232.994 251.438 234.539 250.135 236.055L249.319 237.003L249.515 238.237C249.546 238.429 249.584 238.62 249.631 238.811L252.619 250.923C252.872 251.946 251.946 252.872 250.923 252.619L238.811 249.631C238.62 249.584 238.429 249.545 238.237 249.515L237.003 249.319L236.055 250.135C234.539 251.438 232.994 252.708 231.42 253.943L230.436 254.715L230.388 255.964C230.381 256.155 230.382 256.348 230.391 256.542L230.958 269.003C231.007 270.057 229.918 270.784 228.963 270.337L217.668 265.043C217.504 264.966 217.338 264.896 217.171 264.833L215.99 264.388L214.891 265.01C213.142 265.999 211.368 266.949 209.57 267.86L208.444 268.43L208.16 269.659C208.139 269.751 208.119 269.843 208.102 269.935C208.087 270.016 208.073 270.097 208.061 270.178L206.186 282.511C206.028 283.553 204.819 284.054 203.97 283.429L193.923 276.034C193.786 275.932 193.644 275.836 193.5 275.746L192.427 275.072L191.224 275.467C189.312 276.095 187.382 276.68 185.433 277.222L184.212 277.561L183.693 278.716C183.68 278.746 183.667 278.777 183.653 278.808C183.644 278.828 183.636 278.849 183.627 278.87C183.582 278.977 183.539 279.086 183.499 279.196L179.255 290.926C178.897 291.918 177.613 292.173 176.902 291.394L168.492 282.181C168.365 282.042 168.233 281.909 168.097 281.782L167.18 280.928L165.935 281.078C163.955 281.316 161.961 281.51 159.954 281.66L158.705 281.753L157.97 282.768C157.857 282.923 157.751 283.083 157.651 283.249L151.2 293.926C150.654 294.828 149.346 294.828 148.8 293.926L142.349 283.249C142.249 283.083 142.142 282.923 142.03 282.768L141.295 281.753L140.046 281.66C138.039 281.51 136.045 281.316 134.065 281.078L132.82 280.928L131.903 281.782C131.767 281.909 131.635 282.042 131.508 282.181L123.098 291.394C122.387 292.173 121.103 291.918 120.745 290.926L116.501 279.196C116.442 279.033 116.377 278.873 116.307 278.717L115.788 277.561L114.567 277.222C112.618 276.68 110.688 276.095 108.776 275.467L107.573 275.072L106.5 275.746C106.356 275.836 106.214 275.932 106.076 276.034L96.0304 283.429C95.1813 284.054 93.9719 283.553 93.8135 282.511L91.9393 270.178C91.9127 270.003 91.8796 269.83 91.8401 269.659L91.5559 268.43L90.4301 267.86C88.6324 266.949 86.8583 265.999 85.109 265.01L84.0104 264.388L82.8293 264.833C82.6623 264.896 82.4963 264.966 82.3321 265.043L71.0367 270.337C70.0819 270.784 68.9935 270.057 69.0415 269.003L69.6094 256.542C69.6182 256.348 69.6189 256.155 69.6116 255.964L69.564 254.715L68.5805 253.943C67.0062 252.708 65.4606 251.438 63.9449 250.135L62.9972 249.319L61.7626 249.515C61.5711 249.546 61.3796 249.584 61.1887 249.631L49.0774 252.619C48.0537 252.872 47.1281 251.946 47.3807 250.923L50.3687 238.811C50.4158 238.62 50.4545 238.429 50.4849 238.237L50.6805 237.003L49.8654 236.055C48.5616 234.539 47.2917 232.994 46.0567 231.42L45.2853 230.436L44.0363 230.388C43.8448 230.381 43.6519 230.382 43.458 230.391L30.9966 230.958C29.9433 231.007 29.216 229.918 29.6635 228.963L34.9569 217.668C35.0337 217.504 35.1037 217.338 35.1667 217.17L35.6115 215.989L34.9904 214.891C34.0012 213.142 33.0508 211.368 32.1404 209.57L31.5702 208.444L30.3408 208.16C30.1702 208.12 29.9972 208.087 29.822 208.061L17.489 206.186C16.4466 206.028 15.9456 204.819 16.5707 203.97L23.9661 193.924C24.068 193.785 24.1641 193.644 24.2543 193.5L24.9279 192.427L24.5327 191.224C23.9051 189.312 23.3199 187.382 22.7784 185.433L22.4392 184.212L21.2835 183.693C21.1269 183.623 20.9669 183.558 20.804 183.499L9.0737 179.255C8.0822 178.897 7.82683 177.613 8.60558 176.902L17.8188 168.492C17.9579 168.365 18.0909 168.233 18.2179 168.097L19.0717 167.179L18.9221 165.935C18.6839 163.955 18.4895 161.961 18.34 159.954L18.2468 158.705L17.2322 157.97C17.0772 157.857 16.9166 157.751 16.751 157.651L6.07415 151.2C5.17169 150.654 5.17168 149.345 6.07415 148.8L16.751 142.349C16.9169 142.249 17.0773 142.143 17.2321 142.03L18.2468 141.295L18.34 140.046C18.4895 138.039 18.6839 136.045 18.9221 134.065L19.0717 132.82L18.2178 131.903C18.091 131.767 17.958 131.635 17.8187 131.508L8.60558 123.098C7.82683 122.387 8.0822 121.103 9.07371 120.745L20.804 116.501C20.9671 116.441 21.127 116.377 21.2833 116.307L22.4391 115.788L22.7784 114.567C23.3199 112.618 23.9051 110.688 24.5327 108.776L24.9279 107.573L24.2544 106.5C24.1641 106.356 24.0679 106.215 23.9661 106.076L16.5707 96.0304C15.9456 95.1813 16.4465 93.9719 17.489 93.8135L29.8218 91.9393C29.9969 91.9127 30.17 91.8796 30.3408 91.8401L31.5702 91.5559L32.1404 90.4301C33.0508 88.6324 34.0012 86.8583 34.9904 85.109L35.6115 84.0105L35.1667 82.8295C35.1037 82.6621 35.0337 82.4962 34.9569 82.3323L29.6635 71.0367C29.216 70.0819 29.9433 68.9935 30.9966 69.0415L43.4581 69.6094C43.652 69.6182 43.8448 69.6189 44.0361 69.6116L45.2852 69.564L46.0567 68.5805C47.2917 67.0062 48.5616 65.4606 49.8654 63.9449L50.6805 62.9973L50.4849 61.7627C50.4545 61.571 50.4158 61.3796 50.3687 61.1887L47.3807 49.0774C47.1281 48.0537 48.0537 47.1281 49.0774 47.3807L61.1887 50.3687C61.3796 50.4158 61.571 50.4545 61.7627 50.4849L62.9973 50.6805L63.9449 49.8654C65.4606 48.5616 67.0062 47.2917 68.5805 46.0567L69.564 45.2852L69.6116 44.0361C69.6189 43.8448 69.6182 43.652 69.6094 43.4581L69.0415 30.9966C68.9935 29.9433 70.0819 29.216 71.0367 29.6635L82.3323 34.9569C82.4963 35.0338 82.6621 35.1037 82.8295 35.1667L84.0105 35.6115L85.109 34.9904C86.8583 34.0012 88.6324 33.0508 90.4301 32.1404L91.5559 31.5702L91.8401 30.3408C91.8796 30.17 91.9127 29.997 91.9393 29.8218L93.8135 17.489C93.9719 16.4465 95.1813 15.9456 96.0304 16.5707L106.076 23.9661C106.215 24.068 106.356 24.1641 106.5 24.2544L107.573 24.9279L108.776 24.5327C110.688 23.9051 112.618 23.3199 114.567 22.7784L115.788 22.4391L116.307 21.2833C116.377 21.127 116.442 20.9671 116.501 20.804L120.745 9.07371C121.103 8.0822 122.387 7.82684 123.098 8.60558L131.508 17.8188C131.635 17.9579 131.767 18.091 131.903 18.2178L132.82 19.0717L134.065 18.922C136.045 18.6839 138.039 18.4895 140.046 18.34L141.295 18.2468L142.03 17.2321C142.143 17.0773 142.249 16.9169 142.349 16.751L148.8 6.07415ZM155.819 3.28297C153.174 -1.09433 146.825 -1.09432 144.181 3.28297L138.269 13.067C137.104 13.1654 135.944 13.2784 134.788 13.4058L127.084 4.9668C123.636 1.18959 117.409 2.42823 115.669 7.23738L111.792 17.9551C110.658 18.2827 109.529 18.6245 108.408 18.9803L99.2302 12.2242C95.1116 9.19221 89.2459 11.6219 88.4775 16.6781L86.7638 27.955C85.7209 28.4964 84.6858 29.0508 83.6588 29.618L73.327 24.7762C68.696 22.606 63.417 26.1333 63.6498 31.2423L64.1703 42.6652C63.2622 43.3923 62.3635 44.1306 61.4745 44.8801L50.3703 42.1405C45.4049 40.9155 40.9155 45.4049 42.1405 50.3703L44.8801 61.4745C44.1307 62.3635 43.3923 63.2622 42.6652 64.1703L31.2423 63.6498C26.1333 63.417 22.606 68.696 24.7762 73.327L29.618 83.6588C29.0508 84.6858 28.4964 85.7209 27.955 86.7638L16.6781 88.4775C11.6219 89.2458 9.19222 95.1115 12.2242 99.2302L18.9803 108.408C18.6245 109.529 18.2827 110.658 17.9551 111.792L7.23738 115.669C2.42822 117.409 1.1896 123.636 4.9668 127.084L13.4058 134.788C13.2784 135.944 13.1654 137.104 13.067 138.269L3.28297 144.181C-1.09432 146.825 -1.09433 153.174 3.28297 155.819L13.067 161.731C13.1654 162.895 13.2784 164.056 13.4058 165.212L4.96679 172.916C1.1896 176.364 2.42822 182.591 7.23738 184.331L17.9551 188.208C18.2827 189.342 18.6245 190.471 18.9803 191.592L12.2242 200.77C9.19223 204.888 11.6219 210.754 16.6781 211.523L27.955 213.236C28.4964 214.279 29.0508 215.314 29.618 216.341L24.7762 226.673C22.606 231.304 26.1333 236.583 31.2423 236.35L42.6652 235.83C43.3923 236.738 44.1307 237.636 44.8801 238.526L42.1405 249.63C40.9155 254.595 45.4049 259.084 50.3703 257.859L61.4745 255.12C62.3635 255.869 63.2622 256.608 64.1703 257.335L63.6498 268.758C63.417 273.867 68.696 277.394 73.327 275.224L83.6588 270.382C84.6858 270.949 85.7209 271.504 86.7638 272.045L88.4775 283.322C89.2459 288.378 95.1116 290.808 99.2302 287.776L108.408 281.02C109.529 281.375 110.658 281.717 111.792 282.045L115.669 292.763C117.409 297.572 123.636 298.81 127.084 295.033L134.788 286.594C135.944 286.722 137.104 286.835 138.269 286.933L144.181 296.717C146.825 301.094 153.174 301.094 155.819 296.717L161.731 286.933C162.896 286.835 164.056 286.722 165.212 286.594L172.916 295.033C176.364 298.81 182.591 297.572 184.331 292.763L188.208 282.045C189.342 281.717 190.471 281.375 191.592 281.02L200.77 287.776C204.888 290.808 210.754 288.378 211.523 283.322L213.236 272.045C214.279 271.504 215.314 270.949 216.341 270.382L226.673 275.224C231.304 277.394 236.583 273.867 236.35 268.758L235.83 257.335C236.738 256.608 237.636 255.869 238.526 255.12L249.63 257.859C254.595 259.084 259.085 254.595 257.859 249.63L255.12 238.526C255.869 237.636 256.608 236.738 257.335 235.83L268.758 236.35C273.867 236.583 277.394 231.304 275.224 226.673L270.382 216.341C270.949 215.314 271.504 214.279 272.045 213.236L283.322 211.523C288.378 210.754 290.808 204.888 287.776 200.77L281.02 191.592C281.375 190.471 281.717 189.342 282.045 188.208L292.763 184.331C297.572 182.591 298.81 176.364 295.033 172.916L286.594 165.212C286.722 164.056 286.835 162.896 286.933 161.731L296.717 155.819C301.094 153.174 301.094 146.825 296.717 144.181L286.933 138.269C286.835 137.104 286.722 135.944 286.594 134.788L295.033 127.084C298.81 123.636 297.572 117.409 292.763 115.669L282.045 111.792C281.717 110.658 281.375 109.529 281.02 108.408L287.776 99.2302C290.808 95.1116 288.378 89.2458 283.322 88.4775L272.045 86.7638C271.504 85.7209 270.949 84.6858 270.382 83.6588L275.224 73.327C277.394 68.696 273.867 63.417 268.758 63.6498L257.335 64.1703C256.608 63.2622 255.869 62.3635 255.12 61.4745L257.859 50.3703C259.085 45.4049 254.595 40.9155 249.63 42.1405L238.526 44.8801C237.636 44.1307 236.738 43.3923 235.83 42.6652L236.35 31.2423C236.583 26.1333 231.304 22.606 226.673 24.7762L216.341 29.618C215.314 29.0508 214.279 28.4964 213.236 27.955L211.523 16.6781C210.754 11.6219 204.888 9.19223 200.77 12.2242L191.592 18.9803C190.471 18.6245 189.342 18.2827 188.208 17.9551L184.331 7.23738C182.591 2.42822 176.364 1.1896 172.916 4.9668L165.212 13.4058C164.056 13.2784 162.896 13.1654 161.731 13.067L155.819 3.28297ZM168.125 39.2088L169.507 39.4511C204.339 45.5561 233.634 67.7143 249.496 98.0089L250.111 99.1828L241.398 118.151C240.13 120.912 241.34 124.179 244.102 125.447L261.001 133.209L261.201 134.678C261.885 139.689 262.239 144.804 262.239 150C262.239 177.53 252.324 202.749 235.875 222.274L235.873 222.273L235.818 222.34C235.775 222.393 235.732 222.446 235.688 222.499C235.624 222.577 235.56 222.655 235.496 222.732C235.445 222.793 235.394 222.854 235.343 222.914C234.075 224.417 232.701 225.828 231.231 227.135C222.133 236.719 209.263 242.7 195 242.7C186.653 242.7 178.776 240.65 171.854 237.024C171.814 237.003 171.775 236.982 171.737 236.96C171.706 236.941 171.676 236.923 171.646 236.903C165.225 233.428 157.851 231.45 150 231.45C142.49 231.45 135.418 233.26 129.198 236.458C122.027 240.436 113.774 242.7 105.001 242.7C90.7384 242.7 77.869 236.719 68.7708 227.136C67.6019 226.096 66.4931 224.991 65.4501 223.826C65.0967 223.431 64.7508 223.029 64.4127 222.621C64.3684 222.567 64.3265 222.512 64.2869 222.457L64.282 222.46C47.7391 202.909 37.7615 177.617 37.7615 150C37.7615 145.155 38.0686 140.381 38.6647 135.695L38.8336 134.368L57.4044 123.646C60.036 122.127 60.9377 118.762 59.4183 116.13L49.7687 99.4164L50.4554 98.1019C66.2925 67.7858 95.5751 45.6006 130.403 39.4669L131.786 39.2233L146.058 53.4948C148.206 55.6435 151.69 55.6435 153.839 53.4948L168.125 39.2088ZM212.25 231.05C209.603 231.68 206.841 232.013 204 232.013C195.364 232.013 187.454 228.934 181.298 223.81C181.132 223.672 180.954 223.556 180.769 223.464C180.03 222.864 179.274 222.284 178.5 221.727V211.607L212.25 196.096V231.05ZM217.5 229.358V187.905L209.202 191.719L207.757 181.125H235.5V214.08C234.463 215.461 233.393 216.817 232.292 218.145C232.1 218.284 231.923 218.45 231.767 218.642L231.756 218.656L231.458 219.024L231.452 219.031L231.367 219.134L231.318 219.193L231.275 219.245C231.236 219.291 231.197 219.338 231.158 219.384C230.274 220.432 229.331 221.428 228.333 222.367C228.221 222.456 228.115 222.554 228.015 222.662C224.955 225.473 221.402 227.753 217.5 229.358ZM240.75 206.415C250.95 190.043 256.841 170.711 256.841 150C256.841 145.554 256.57 141.173 256.043 136.872L241.849 130.352C236.379 127.84 233.981 121.368 236.494 115.898L244.095 99.3478C229.07 71.495 202.041 51.0776 169.949 45.0175L157.656 57.3112C156.312 58.655 154.704 59.5745 153 60.0698V81.8383L161.009 95.96L169.5 118.51V216.601C170.779 217.159 172.03 217.77 173.25 218.432V208.242L182.25 204.106V135.062C182.25 125.685 186.249 116.754 193.244 110.508C193.971 109.859 194.913 109.499 195.889 109.499H205.953C206.985 109.323 208.071 109.556 208.959 110.197C217.62 116.452 222.75 126.485 222.75 137.168V175.875H240.75V206.415ZM217.5 175.875H201.743L204.216 194.01L195.75 197.901V137.168C195.75 128.48 199.779 120.301 206.625 115.006C213.471 120.301 217.5 128.48 217.5 137.168V175.875ZM190.5 200.314V137.168C190.5 128.794 193.653 120.818 199.187 114.749H196.383C190.725 119.981 187.5 127.342 187.5 135.062V201.693L190.5 200.314ZM164.25 214.663V121.613H136.5V214.441C140.788 213.21 145.318 212.55 150 212.55C154.956 212.55 159.741 213.289 164.25 214.663ZM131.25 216.281V118.51L139.741 95.96L147.75 81.8383V60.2808C145.731 59.8671 143.807 58.8773 142.241 57.3112L129.964 45.0339C97.93 51.1107 70.9496 71.4953 55.932 99.297L64.0925 113.431C67.1023 118.644 65.3161 125.31 60.103 128.32L43.859 137.699C43.3965 141.734 43.1588 145.839 43.1588 150C43.1588 174.042 51.0975 196.226 64.5 214.08V158.625V150.75V148.125H67.125H68.8033V141.75V139.125H71.4283H73.5369V121.5H78.7869V139.125H80.8955H83.5205V141.75V148.125H85.1988H87.8238V150.75V155.25H95.6248V150.75V148.125H98.2498H99.9281V141.75V139.125H102.553H104.662V121.5H109.912V139.125H112.02H114.645V141.75V148.125H116.324H118.949V150.75V158.497V203.906L126.75 207.492V218.432C128.207 217.641 129.708 216.923 131.25 216.281ZM121.5 221.727V210.857L87.75 195.346V196.5V231.05C90.3975 231.68 93.16 232.013 96.0005 232.013C104.188 232.013 111.721 229.245 117.727 224.594C117.783 224.55 117.839 224.506 117.895 224.462C117.965 224.407 118.035 224.353 118.104 224.297C118.264 224.17 118.433 224.064 118.609 223.978L118.639 223.952C119.564 223.176 120.518 222.434 121.5 221.727ZM82.5 229.357V196.5V187.155V166.875H100.875V195.6L113.699 201.494V158.497V153.375H112.02H109.395V150.75V144.375H107.287H105.178V150.75V153.375H102.553H100.875V157.875V160.5H98.25H85.1988H82.5738V157.875V153.375H80.8955H78.2705V150.75V144.375H76.1619H74.0533V150.75V153.375H71.4283H69.75V158.625V220.418C73.2616 224.27 77.6067 227.345 82.5 229.357ZM150 217.95C160.513 217.95 170.147 221.683 177.66 227.897C177.669 227.906 177.678 227.915 177.688 227.924C177.697 227.932 177.706 227.94 177.715 227.949C177.741 227.972 177.768 227.995 177.795 228.018C183.619 232.865 190.81 236.129 198.702 237.148C197.482 237.249 196.247 237.3 195 237.3C187.66 237.3 180.741 235.527 174.641 232.387C167.35 228.35 158.942 226.05 150 226.05C141.746 226.05 133.947 228.009 127.062 231.486C126.966 231.526 126.872 231.572 126.779 231.624L126.702 231.667L126.649 231.697C126.245 231.905 125.844 232.119 125.447 232.338C125.433 232.345 125.42 232.353 125.406 232.361C125.394 232.368 125.383 232.374 125.371 232.381C119.269 235.525 112.346 237.3 105.001 237.3C103.754 237.3 102.519 237.249 101.298 237.148C108.689 236.194 115.466 233.27 121.08 228.922C121.226 228.809 121.37 228.695 121.515 228.58C121.621 228.496 121.719 228.405 121.81 228.308C121.913 228.243 122.013 228.17 122.109 228.09C129.655 221.76 139.379 217.95 150 217.95ZM144.303 34.4821C144.303 31.3771 146.82 28.8599 149.925 28.8599C153.03 28.8599 155.547 31.3771 155.547 34.4821C155.547 37.5872 153.03 40.1043 149.925 40.1043C146.82 40.1043 144.303 37.5872 144.303 34.4821ZM149.925 23.6125C143.922 23.6125 139.055 28.479 139.055 34.4821C139.055 40.4852 143.922 45.3517 149.925 45.3517C155.928 45.3517 160.795 40.4852 160.795 34.4821C160.795 28.479 155.928 23.6125 149.925 23.6125ZM35.6063 116.192C35.6063 113.087 38.1234 110.57 41.2285 110.57C44.3335 110.57 46.8506 113.087 46.8506 116.192C46.8506 119.297 44.3335 121.814 41.2285 121.814C38.1234 121.814 35.6063 119.297 35.6063 116.192ZM41.2285 105.322C35.2254 105.322 30.3589 110.189 30.3589 116.192C30.3589 122.195 35.2254 127.061 41.2285 127.061C47.2315 127.061 52.098 122.195 52.098 116.192C52.098 110.189 47.2315 105.322 41.2285 105.322ZM261.619 110.57C258.514 110.57 255.997 113.087 255.997 116.192C255.997 119.297 258.514 121.814 261.619 121.814C264.724 121.814 267.242 119.297 267.242 116.192C267.242 113.087 264.724 110.57 261.619 110.57ZM250.75 116.192C250.75 110.189 255.616 105.322 261.619 105.322C267.622 105.322 272.489 110.189 272.489 116.192C272.489 122.195 267.622 127.061 261.619 127.061C255.616 127.061 250.75 122.195 250.75 116.192ZM163.082 116.363L156.808 99.7018H143.942L137.668 116.363H163.082ZM150.375 87.8517L146.632 94.4518H154.118L150.375 87.8517ZM95.625 193.187L87.75 189.568V172.125H95.625V193.187ZM201.375 139.875H211.875V134.625H201.375V139.875ZM211.875 151.125H201.375V145.875H211.875V151.125ZM201.375 162.375H211.875V157.125H201.375V162.375ZM142.125 132.75V202.5H147.375V132.75H142.125ZM153.375 202.5V132.75H158.625V202.5H153.375Z' fill='white'/%3E%3C/svg%3E%0A"); 331 | background-repeat: no-repeat; 332 | background-position: left center; 333 | background-size: contain; 334 | } 335 | 336 | .handshake { 337 | padding: 0 10px; 338 | } 339 | 340 | @media only screen and (max-width: 650px) { 341 | body { 342 | font-size: 16px; 343 | } 344 | h1 { 345 | display: flex; 346 | flex-direction: column; 347 | align-items: center; 348 | font-size: 24px; 349 | } 350 | section.footer .footer-content { 351 | width: 100%; 352 | } 353 | 354 | header { 355 | left: 0; 356 | right: 0; 357 | width: 100%; 358 | margin-left: 0; 359 | } 360 | } 361 | -------------------------------------------------------------------------------- /website/content/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | AI 推理的云函数 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 |
17 | 18 | 19 |
20 | 21 |

AI 推理 Serverless 应用

22 | 23 |
24 |
让 Serverless 云函数看看你吃了什么?
25 |
26 |
27 | 28 |
29 |
30 |
31 | 32 | 33 | 34 |
35 |
36 |

请上传一张图片,并进行识别

37 |

如果没有照片,可以使用我们提供的 hotdog 图片

38 |
39 |
40 | 41 |
42 | 43 |
44 | 45 |
46 |
47 | Second State 48 | ❤️ 49 | 腾讯云 Serverless 50 | ❤️ 51 | WebAssembly 52 |
53 |
54 | 55 |
56 |
57 | 58 | 74 | 75 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /website/content/jquery-3.5.1.min.js: -------------------------------------------------------------------------------- 1 | /*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ 2 | !function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0