diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7e90c86..99afec6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,7 +2,6 @@ name: release # Only on tags on: - pull_request: push: tags: - "*" @@ -32,3 +31,36 @@ jobs: args: release --clean env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + doc: + runs-on: ubuntu-latest + permissions: + contents: write # To push a branch + pages: write # To push to a GitHub Pages site + id-token: write # To update the deployment status + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install latest mdbook + run: | + tag=$(curl 'https://api.github.com/repos/rust-lang/mdbook/releases/latest' | jq -r '.tag_name') + url="https://github.com/rust-lang/mdbook/releases/download/${tag}/mdbook-${tag}-x86_64-unknown-linux-gnu.tar.gz" + mkdir mdbook + curl -sSL $url | tar -xz --directory=./mdbook + echo `pwd`/mdbook >> $GITHUB_PATH + - name: Build Book + run: | + # This assumes your book is in the root of your repository. + # Just add a `cd` here if you need to change to another directory. + mdbook build -d ../dist/docs docs/ + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + # Upload entire repository + path: 'dist/docs' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/Makefile b/Makefile index 0025a33..a14ab80 100644 --- a/Makefile +++ b/Makefile @@ -13,10 +13,19 @@ all: build # Build the Go project .PHONY: build -build: ## Build the Go project +build-go: ## Build the Go project @mkdir -p $(BUILD_DIR) go build -o $(BUILD_DIR)/$(BINARY_NAME) ./cmd/ayo +# Build the Documentation +.PHONY: build-docs +build-docs: ## Build the Documentation + mdbook build -d ../$(BUILD_DIR)/docs docs/ + +# Build the project +.PHONY: build +build: build-go build-docs ## Build the project + # Run the Go project .PHONY: run run: build ## Build and run the Go project diff --git a/cmd/ayo/chat.go b/cmd/ayo/chat.go index 259c87a..0506765 100644 --- a/cmd/ayo/chat.go +++ b/cmd/ayo/chat.go @@ -17,8 +17,8 @@ type Chat struct { func (c *Chat) Run(ctx context.Context, cli *CLI) error { log := log.FromContext(ctx).With("caller", logPackagePrefix+"Chat:Run") - log.Debug("loading tools", "dir", cli.ToolDir) - tools, err := tool.LoadTools(cli.ToolDir) + log.Debug("loading tools", "dir", cli.Toolbox) + tools, err := tool.LoadTools(cli.Toolbox) if err != nil { return err } diff --git a/cmd/ayo/main.go b/cmd/ayo/main.go index 93917ad..f5d9e24 100644 --- a/cmd/ayo/main.go +++ b/cmd/ayo/main.go @@ -13,7 +13,7 @@ const logPackagePrefix = "main::" type CLI struct { Verbose bool `help:"Enable verbose mode." short:"v" default:"false"` LogFormat string `help:"Log format to use." enum:"json,pretty,logfmt" default:"pretty"` - ToolDir string `help:"The directory to load tools from" default:"~/.config/ayo/tools" type:"existingdir"` + Toolbox string `help:"The directory to load tools from" default:"~/.config/ayo/toolbox" type:"existingdir" env:"AYO_TOOLBOX"` //nolint: lll Chat Chat `cmd:"" help:"Send a message to the chatbot" default:"withargs"` } diff --git a/docs/book.toml b/docs/book.toml new file mode 100644 index 0000000..9c1c8d3 --- /dev/null +++ b/docs/book.toml @@ -0,0 +1,13 @@ +[book] +authors = ["banst"] +language = "en" +multilingual = false +src = "src" +title = "ayo" + +[build] +extra-watch-dirs = ["plugins/whichlang"] + +[output.html] +additional-css = ["plugins/whichlang/whichlang.css", "devicon.css"] +additional-js = ["plugins/whichlang/whichlang.js"] diff --git a/docs/devicon.css b/docs/devicon.css new file mode 100644 index 0000000..e0b3d53 --- /dev/null +++ b/docs/devicon.css @@ -0,0 +1 @@ +@font-face{font-family:"devicon";src:url("fonts/devicon.ttf?iehcku") format("truetype"),url("fonts/devicon.woff?iehcku") format("woff"),url("fonts/devicon.svg?iehcku#devicon") format("svg");font-weight:normal;font-style:normal;font-display:block}[class^=devicon-],[class*=" devicon-"]{font-family:"devicon" !important;speak:never;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.devicon-aarch64-line:before,.devicon-aarch64-line-wordmark:before{content:""}.devicon-aarch64-plain:before,.devicon-aarch64-plain-wordmark:before{content:""}.devicon-adonisjs-original:before,.devicon-adonisjs-plain:before{content:""}.devicon-adonisjs-original-wordmark:before,.devicon-adonisjs-plain-wordmark:before{content:""}.devicon-aftereffects-plain:before{content:""}.devicon-akka-plain:before{content:""}.devicon-akka-plain-wordmark:before{content:""}.devicon-algolia-original:before{content:""}.devicon-algolia-original-wordmark:before{content:""}.devicon-alpinejs-original:before,.devicon-alpinejs-plain:before{content:""}.devicon-alpinejs-original-wordmark:before,.devicon-alpinejs-plain-wordmark:before{content:""}.devicon-amazonwebservices-line-wordmark:before,.devicon-amazonwebservices-line:before{content:""}.devicon-amazonwebservices-plain-wordmark:before,.devicon-amazonwebservices-plain:before{content:""}.devicon-anaconda-original:before,.devicon-anaconda-plain:before{content:""}.devicon-anaconda-original-wordmark:before,.devicon-anaconda-plain-wordmark:before{content:""}.devicon-android-plain:before{content:""}.devicon-android-plain-wordmark:before{content:""}.devicon-androidstudio-plain:before{content:""}.devicon-androidstudio-plain-wordmark:before{content:""}.devicon-angularjs-plain:before{content:""}.devicon-angularjs-plain-wordmark:before{content:""}.devicon-angularmaterial-plain:before{content:""}.devicon-angular-plain:before{content:""}.devicon-angular-plain-wordmark:before{content:""}.devicon-ansible-plain:before{content:""}.devicon-ansible-plain-wordmark:before{content:""}.devicon-antdesign-plain:before{content:""}.devicon-antdesign-plain-wordmark:before{content:""}.devicon-apacheairflow-plain:before{content:""}.devicon-apacheairflow-plain-wordmark:before{content:""}.devicon-apachekafka-original:before,.devicon-apachekafka-plain:before{content:""}.devicon-apachekafka-original-wordmark:before,.devicon-apachekafka-plain-wordmark:before{content:""}.devicon-apache-line:before{content:""}.devicon-apache-line-wordmark:before{content:""}.devicon-apache-plain:before{content:""}.devicon-apache-plain-wordmark:before{content:""}.devicon-apachespark-original:before,.devicon-apachespark-plain:before{content:""}.devicon-apachespark-plain-wordmark:before{content:""}.devicon-apl-plain:before{content:""}.devicon-appcelerator-original:before,.devicon-appcelerator-plain:before{content:""}.devicon-appcelerator-plain-wordmark:before{content:""}.devicon-apple-original:before,.devicon-apple-plain:before{content:""}.devicon-appwrite-plain:before,.devicon-appwrite-original:before{content:""}.devicon-appwrite-plain-wordmark:before,.devicon-appwrite-original-wordmark:before{content:""}.devicon-archlinux-plain:before{content:""}.devicon-archlinux-plain-wordmark:before{content:""}.devicon-arduino-plain:before{content:""}.devicon-arduino-plain-wordmark:before{content:""}.devicon-argocd-plain:before{content:""}.devicon-argocd-plain-wordmark:before{content:""}.devicon-astro-plain:before{content:""}.devicon-astro-plain-wordmark:before{content:""}.devicon-atom-original:before,.devicon-atom-plain:before{content:""}.devicon-atom-original-wordmark:before,.devicon-atom-plain-wordmark:before{content:""}.devicon-awk-plain-wordmark:before,.devicon-awk-plain:before{content:""}.devicon-axios-plain:before{content:""}.devicon-axios-plain-wordmark:before{content:""}.devicon-azuredevops-plain:before{content:""}.devicon-azure-plain:before{content:""}.devicon-azure-plain-wordmark:before{content:""}.devicon-azuresqldatabase-plain:before{content:""}.devicon-babel-plain:before,.devicon-babel-original:before{content:""}.devicon-backbonejs-plain:before{content:""}.devicon-backbonejs-plain-wordmark:before{content:""}.devicon-ballerina-line:before{content:""}.devicon-ballerina-line-wordmark:before{content:""}.devicon-ballerina-original:before,.devicon-ballerina-plain:before{content:""}.devicon-ballerina-original-wordmark:before,.devicon-ballerina-plain-wordmark:before{content:""}.devicon-bamboo-original:before,.devicon-bamboo-plain:before{content:""}.devicon-bamboo-original-wordmark:before,.devicon-bamboo-plain-wordmark:before{content:""}.devicon-bash-plain:before{content:""}.devicon-beats-plain:before{content:""}.devicon-behance-plain:before{content:""}.devicon-behance-plain-wordmark:before{content:""}.devicon-bitbucket-original:before,.devicon-bitbucket-plain:before{content:""}.devicon-bitbucket-original-wordmark:before,.devicon-bitbucket-plain-wordmark:before{content:""}.devicon-blazor-line:before{content:""}.devicon-blazor-original:before,.devicon-blazor-plain:before{content:""}.devicon-blender-original:before{content:""}.devicon-blender-original-wordmark:before{content:""}.devicon-bootstrap-plain:before{content:""}.devicon-bootstrap-plain-wordmark:before{content:""}.devicon-bower-line:before{content:""}.devicon-bower-line-wordmark:before{content:""}.devicon-bower-plain:before{content:""}.devicon-bower-plain-wordmark:before{content:""}.devicon-browserstack-line:before{content:""}.devicon-browserstack-line-wordmark:before{content:""}.devicon-browserstack-plain:before{content:""}.devicon-browserstack-plain-wordmark:before{content:""}.devicon-bulma-plain:before{content:""}.devicon-bun-line:before{content:""}.devicon-bun-plain:before{content:""}.devicon-cairo-plain:before{content:""}.devicon-cairo-plain-wordmark:before{content:""}.devicon-cakephp-plain:before{content:""}.devicon-cakephp-plain-wordmark:before{content:""}.devicon-canva-original:before,.devicon-canva-plain:before{content:""}.devicon-capacitor-plain:before{content:""}.devicon-capacitor-plain-wordmark:before{content:""}.devicon-carbon-original:before,.devicon-carbon-plain:before{content:""}.devicon-cassandra-plain:before{content:""}.devicon-cassandra-plain-wordmark:before{content:""}.devicon-centos-plain:before{content:""}.devicon-centos-plain-wordmark:before{content:""}.devicon-ceylon-plain:before{content:""}.devicon-ceylon-plain-wordmark:before{content:""}.devicon-chrome-plain:before{content:""}.devicon-chrome-plain-wordmark:before{content:""}.devicon-circleci-plain:before{content:""}.devicon-circleci-plain-wordmark:before{content:""}.devicon-clarity-plain:before{content:""}.devicon-clarity-plain-wordmark:before{content:""}.devicon-c-line:before,.devicon-c-line-wordmark:before{content:""}.devicon-clion-plain:before{content:""}.devicon-clion-plain-wordmark:before{content:""}.devicon-clojure-line:before,.devicon-clojure-plain:before{content:""}.devicon-clojurescript-plain:before{content:""}.devicon-cloudflare-plain:before{content:""}.devicon-cloudflare-plain-wordmark:before{content:""}.devicon-cloudflareworkers-plain:before{content:""}.devicon-cloudflareworkers-plain-wordmark:before{content:""}.devicon-cmake-plain:before{content:""}.devicon-cmake-plain-wordmark:before{content:""}.devicon-codeac-original:before{content:""}.devicon-codecov-plain:before{content:""}.devicon-codeigniter-plain:before{content:""}.devicon-codeigniter-plain-wordmark:before{content:""}.devicon-codepen-line:before{content:""}.devicon-codepen-line-wordmark:before{content:""}.devicon-codepen-original:before,.devicon-codepen-plain:before{content:""}.devicon-codepen-original-wordmark:before,.devicon-codepen-plain-wordmark:before{content:""}.devicon-coffeescript-original:before,.devicon-coffeescript-plain:before{content:""}.devicon-coffeescript-original-wordmark:before,.devicon-coffeescript-plain-wordmark:before{content:""}.devicon-composer-line:before,.devicon-composer-plain:before{content:""}.devicon-composer-line-wordmark:before,.devicon-composer-plain-wordmark:before{content:""}.devicon-confluence-line:before{content:""}.devicon-confluence-line-wordmark:before{content:""}.devicon-confluence-plain:before{content:""}.devicon-confluence-plain-wordmark:before{content:""}.devicon-consul-original:before,.devicon-consul-plain:before{content:""}.devicon-consul-plain-wordmark:before{content:""}.devicon-contao-original:before{content:""}.devicon-contao-original-wordmark:before{content:""}.devicon-corejs-original:before,.devicon-corejs-plain:before{content:""}.devicon-corejs-original-wordmark:before,.devicon-corejs-plain-wordmark:before{content:""}.devicon-cosmosdb-plain:before{content:""}.devicon-cosmosdb-plain-wordmark:before{content:""}.devicon-couchbase-original:before,.devicon-couchbase-plain:before{content:""}.devicon-couchbase-plain-wordmark:before{content:""}.devicon-couchdb-plain:before{content:""}.devicon-couchdb-plain-wordmark:before{content:""}.devicon-c-plain:before,.devicon-c-plain-wordmark:before{content:""}.devicon-cplusplus-line:before,.devicon-cplusplus-line-wordmark:before{content:""}.devicon-cplusplus-plain:before,.devicon-cplusplus-plain-wordmark:before{content:""}.devicon-crystal-line:before{content:""}.devicon-crystal-line-wordmark:before{content:""}.devicon-crystal-original:before,.devicon-crystal-plain:before{content:""}.devicon-crystal-original-wordmark:before,.devicon-crystal-plain-wordmark:before{content:""}.devicon-csharp-line:before,.devicon-csharp-line-wordmark:before{content:""}.devicon-csharp-plain:before,.devicon-csharp-plain-wordmark:before{content:""}.devicon-css3-plain:before{content:""}.devicon-css3-plain-wordmark:before{content:""}.devicon-cucumber-plain:before{content:""}.devicon-cucumber-plain-wordmark:before{content:""}.devicon-cypressio-line:before{content:""}.devicon-cypressio-line-wordmark:before{content:""}.devicon-cypressio-plain:before{content:""}.devicon-cypressio-plain-wordmark:before{content:""}.devicon-d3js-plain:before{content:""}.devicon-dart-plain:before{content:""}.devicon-dart-plain-wordmark:before{content:""}.devicon-datagrip-plain:before{content:""}.devicon-datagrip-plain-wordmark:before{content:""}.devicon-dataspell-plain:before{content:""}.devicon-dataspell-plain-wordmark:before{content:""}.devicon-dbeaver-plain:before{content:""}.devicon-debian-plain:before{content:""}.devicon-debian-plain-wordmark:before{content:""}.devicon-denojs-original:before,.devicon-denojs-plain:before{content:""}.devicon-denojs-original-wordmark:before,.devicon-denojs-plain-wordmark:before{content:""}.devicon-devicon-line:before{content:""}.devicon-devicon-line-wordmark:before{content:""}.devicon-devicon-plain:before{content:""}.devicon-devicon-plain-wordmark:before{content:""}.devicon-digitalocean-original:before,.devicon-digitalocean-plain:before{content:""}.devicon-digitalocean-original-wordmark:before,.devicon-digitalocean-plain-wordmark:before{content:""}.devicon-discordjs-plain:before{content:""}.devicon-discordjs-plain-wordmark:before{content:""}.devicon-django-plain:before{content:""}.devicon-django-plain-wordmark:before{content:""}.devicon-djangorest-line:before{content:""}.devicon-djangorest-line-wordmark:before{content:""}.devicon-djangorest-plain:before{content:""}.devicon-djangorest-plain-wordmark:before{content:""}.devicon-docker-plain:before{content:""}.devicon-docker-plain-wordmark:before{content:""}.devicon-doctrine-line:before{content:""}.devicon-doctrine-line-wordmark:before{content:""}.devicon-doctrine-plain:before{content:""}.devicon-doctrine-plain-wordmark:before{content:""}.devicon-dotnetcore-plain:before{content:""}.devicon-dot-net-plain:before{content:""}.devicon-dot-net-plain-wordmark:before{content:""}.devicon-dreamweaver-line:before{content:""}.devicon-dreamweaver-plain:before{content:""}.devicon-dropwizard-plain:before{content:""}.devicon-drupal-plain:before{content:""}.devicon-drupal-plain-wordmark:before{content:""}.devicon-dynamodb-plain:before{content:""}.devicon-eclipse-plain:before{content:""}.devicon-eclipse-plain-wordmark:before{content:""}.devicon-ecto-original:before,.devicon-ecto-plain:before{content:""}.devicon-ecto-plain-wordmark:before{content:""}.devicon-elasticsearch-plain:before{content:""}.devicon-elasticsearch-plain-wordmark:before{content:""}.devicon-electron-original:before{content:""}.devicon-electron-original-wordmark:before{content:""}.devicon-eleventy-plain:before{content:""}.devicon-elixir-plain:before{content:""}.devicon-elixir-plain-wordmark:before{content:""}.devicon-elm-plain:before{content:""}.devicon-elm-plain-wordmark:before{content:""}.devicon-emacs-original:before{content:""}.devicon-embeddedc-plain:before{content:""}.devicon-embeddedc-plain-wordmark:before{content:""}.devicon-ember-original-wordmark:before,.devicon-ember-plain-wordmark:before{content:""}.devicon-ember-plain:before{content:""}.devicon-envoy-plain:before{content:""}.devicon-envoy-plain-wordmark:before{content:""}.devicon-erlang-plain:before{content:""}.devicon-erlang-plain-wordmark:before{content:""}.devicon-eslint-line:before{content:""}.devicon-eslint-line-wordmark:before{content:""}.devicon-eslint-plain:before{content:""}.devicon-eslint-plain-wordmark:before{content:""}.devicon-express-original:before{content:""}.devicon-express-original-wordmark:before{content:""}.devicon-facebook-plain:before,.devicon-facebook-original:before{content:""}.devicon-fastapi-plain:before{content:""}.devicon-fastapi-plain-wordmark:before{content:""}.devicon-fastify-plain:before{content:""}.devicon-fastify-plain-wordmark:before{content:""}.devicon-faunadb-line:before{content:""}.devicon-faunadb-line-wordmark:before{content:""}.devicon-faunadb-original:before,.devicon-faunadb-plain:before{content:""}.devicon-faunadb-original-wordmark:before,.devicon-faunadb-plain-wordmark:before{content:""}.devicon-feathersjs-original:before{content:""}.devicon-fedora-plain:before{content:""}.devicon-figma-plain:before{content:""}.devicon-filezilla-line:before{content:""}.devicon-filezilla-line-wordmark:before{content:""}.devicon-filezilla-plain:before{content:""}.devicon-filezilla-plain-wordmark:before{content:""}.devicon-firebase-line:before{content:""}.devicon-firebase-line-wordmark:before{content:""}.devicon-firebase-plain:before{content:""}.devicon-firebase-plain-wordmark:before{content:""}.devicon-firefox-plain:before{content:""}.devicon-firefox-plain-wordmark:before{content:""}.devicon-flask-original:before,.devicon-flask-plain:before{content:""}.devicon-flask-original-wordmark:before,.devicon-flask-plain-wordmark:before{content:""}.devicon-flutter-plain:before{content:""}.devicon-fortran-original:before{content:""}.devicon-foundation-plain:before{content:""}.devicon-foundation-plain-wordmark:before{content:""}.devicon-framermotion-original:before,.devicon-framermotion-plain:before{content:""}.devicon-framermotion-original-wordmark:before,.devicon-framermotion-plain-wordmark:before{content:""}.devicon-framework7-original:before,.devicon-framework7-plain:before{content:""}.devicon-framework7-original-wordmark:before,.devicon-framework7-plain-wordmark:before{content:""}.devicon-fsharp-plain:before{content:""}.devicon-gatling-line:before{content:""}.devicon-gatling-line-wordmark:before{content:""}.devicon-gatling-original:before,.devicon-gatling-plain:before{content:""}.devicon-gatling-plain-wordmark:before{content:""}.devicon-gatsby-original:before,.devicon-gatsby-plain:before{content:""}.devicon-gatsby-plain-wordmark:before{content:""}.devicon-gazebo-plain:before{content:""}.devicon-gazebo-plain-wordmark:before{content:""}.devicon-gcc-line:before,.devicon-gcc-line-wordmark:before{content:""}.devicon-gcc-plain:before,.devicon-gcc-plain-wordmark:before{content:""}.devicon-gentoo-line:before{content:""}.devicon-gentoo-line-wordmark:before{content:""}.devicon-gentoo-plain:before{content:""}.devicon-gentoo-plain-wordmark:before{content:""}.devicon-ghost-original:before{content:""}.devicon-ghost-original-wordmark:before{content:""}.devicon-gimp-line:before{content:""}.devicon-gimp-line-wordmark:before{content:""}.devicon-gimp-plain:before{content:""}.devicon-gimp-plain-wordmark:before{content:""}.devicon-gitbook-line:before{content:""}.devicon-gitbook-line-wordmark:before{content:""}.devicon-gitbook-original:before,.devicon-gitbook-plain:before{content:""}.devicon-gitbook-original-wordmark:before,.devicon-gitbook-plain-wordmark:before{content:""}.devicon-githubactions-plain:before{content:""}.devicon-githubcodespaces-plain:before{content:""}.devicon-github-original:before,.devicon-github-plain:before{content:""}.devicon-github-original-wordmark:before{content:""}.devicon-gitlab-plain:before{content:""}.devicon-gitlab-plain-wordmark:before{content:""}.devicon-git-plain:before{content:""}.devicon-git-plain-wordmark:before{content:""}.devicon-gitpod-plain:before{content:""}.devicon-gitpod-plain-wordmark:before{content:""}.devicon-gitter-plain:before{content:""}.devicon-gitter-plain-wordmark:before{content:""}.devicon-godot-plain:before{content:""}.devicon-godot-plain-wordmark:before{content:""}.devicon-goland-plain:before{content:""}.devicon-goland-plain-wordmark:before{content:""}.devicon-go-line:before{content:""}.devicon-googlecloud-plain:before{content:""}.devicon-googlecloud-plain-wordmark:before{content:""}.devicon-google-plain:before,.devicon-google-original:before{content:""}.devicon-google-plain-wordmark:before,.devicon-google-original-wordmark:before{content:""}.devicon-go-original-wordmark:before,.devicon-go-plain-wordmark:before{content:""}.devicon-go-plain:before{content:""}.devicon-gradle-original:before,.devicon-gradle-plain:before{content:""}.devicon-gradle-original-wordmark:before,.devicon-gradle-plain-wordmark:before{content:""}.devicon-grafana-line:before{content:""}.devicon-grafana-line-wordmark:before{content:""}.devicon-grafana-plain:before{content:""}.devicon-grafana-plain-wordmark:before{content:""}.devicon-grails-plain:before{content:""}.devicon-graphql-plain:before{content:""}.devicon-graphql-plain-wordmark:before{content:""}.devicon-groovy-plain:before{content:""}.devicon-grpc-plain:before{content:""}.devicon-grunt-line:before{content:""}.devicon-grunt-line-wordmark:before{content:""}.devicon-grunt-plain:before{content:""}.devicon-grunt-plain-wordmark:before{content:""}.devicon-gulp-plain:before{content:""}.devicon-hadoop-plain:before,.devicon-hadoop-line:before{content:""}.devicon-hadoop-plain-wordmark:before,.devicon-hadoop-line-wordmark:before{content:""}.devicon-handlebars-line:before{content:""}.devicon-handlebars-line-wordmark:before{content:""}.devicon-handlebars-original:before,.devicon-handlebars-plain:before{content:""}.devicon-handlebars-original-wordmark:before,.devicon-handlebars-plain-wordmark:before{content:""}.devicon-hardhat-plain:before{content:""}.devicon-hardhat-plain-wordmark:before{content:""}.devicon-harvester-original:before,.devicon-harvester-plain:before{content:""}.devicon-harvester-plain-wordmark:before{content:""}.devicon-haskell-plain:before{content:""}.devicon-haskell-plain-wordmark:before{content:""}.devicon-haxe-plain:before{content:""}.devicon-helm-line:before{content:""}.devicon-helm-original:before,.devicon-helm-plain:before{content:""}.devicon-heroku-original:before,.devicon-heroku-line:before{content:""}.devicon-heroku-original-wordmark:before,.devicon-heroku-line-wordmark:before{content:""}.devicon-heroku-plain:before{content:""}.devicon-heroku-plain-wordmark:before{content:""}.devicon-hibernate-plain:before{content:""}.devicon-hibernate-plain-wordmark:before{content:""}.devicon-homebrew-line:before{content:""}.devicon-homebrew-line-wordmark:before{content:""}.devicon-homebrew-plain:before{content:""}.devicon-homebrew-plain-wordmark:before{content:""}.devicon-html5-plain:before{content:""}.devicon-html5-plain-wordmark:before{content:""}.devicon-hugo-plain:before{content:""}.devicon-hugo-plain-wordmark:before{content:""}.devicon-ie10-original:before,.devicon-ie10-plain:before{content:""}.devicon-ifttt-original:before,.devicon-ifttt-plain:before{content:""}.devicon-illustrator-line:before{content:""}.devicon-illustrator-plain:before{content:""}.devicon-influxdb-original:before,.devicon-influxdb-plain:before{content:""}.devicon-influxdb-original-wordmark:before,.devicon-influxdb-plain-wordmark:before{content:""}.devicon-inkscape-plain:before{content:""}.devicon-inkscape-plain-wordmark:before{content:""}.devicon-insomnia-plain:before{content:""}.devicon-insomnia-plain-wordmark:before{content:""}.devicon-intellij-plain:before{content:""}.devicon-intellij-plain-wordmark:before{content:""}.devicon-ionic-original:before{content:""}.devicon-ionic-original-wordmark:before{content:""}.devicon-jaegertracing-plain:before{content:""}.devicon-jaegertracing-plain-wordmark:before{content:""}.devicon-jamstack-original:before,.devicon-jamstack-plain:before{content:""}.devicon-jamstack-plain-wordmark:before{content:""}.devicon-jasmine-original:before,.devicon-jasmine-plain:before{content:""}.devicon-jasmine-original-wordmark:before,.devicon-jasmine-plain-wordmark:before{content:""}.devicon-java-plain:before{content:""}.devicon-java-plain-wordmark:before{content:""}.devicon-javascript-plain:before{content:""}.devicon-jeet-plain:before{content:""}.devicon-jeet-plain-wordmark:before{content:""}.devicon-jekyll-plain:before{content:""}.devicon-jekyll-plain-wordmark:before{content:""}.devicon-jenkins-line:before{content:""}.devicon-jenkins-plain:before{content:""}.devicon-jest-plain:before{content:""}.devicon-jetbrains-plain:before{content:""}.devicon-jetpackcompose-line:before{content:""}.devicon-jetpackcompose-line-wordmark:before{content:""}.devicon-jetpackcompose-plain:before{content:""}.devicon-jetpackcompose-plain-wordmark:before{content:""}.devicon-jiraalign-plain:before{content:""}.devicon-jiraalign-plain-wordmark:before{content:""}.devicon-jira-plain:before{content:""}.devicon-jira-plain-wordmark:before{content:""}.devicon-jquery-plain:before{content:""}.devicon-jquery-plain-wordmark:before{content:""}.devicon-json-plain:before{content:""}.devicon-jule-original:before,.devicon-jule-plain:before{content:""}.devicon-jule-original-wordmark:before,.devicon-jule-plain-wordmark:before{content:""}.devicon-julia-plain:before{content:""}.devicon-julia-plain-wordmark:before{content:""}.devicon-junit-line:before{content:""}.devicon-junit-line-wordmark:before{content:""}.devicon-junit-plain:before{content:""}.devicon-junit-plain-wordmark:before{content:""}.devicon-jupyter-plain:before{content:""}.devicon-jupyter-plain-wordmark:before{content:""}.devicon-k3os-line:before{content:""}.devicon-k3os-line-wordmark:before{content:""}.devicon-k3os-original:before,.devicon-k3os-plain:before{content:""}.devicon-k3os-plain-wordmark:before{content:""}.devicon-k3s-original:before,.devicon-k3s-plain:before{content:""}.devicon-k3s-plain-wordmark:before{content:""}.devicon-k6-original:before,.devicon-k6-plain:before{content:""}.devicon-kaggle-original:before,.devicon-kaggle-plain:before{content:""}.devicon-kaggle-original-wordmark:before,.devicon-kaggle-plain-wordmark:before{content:""}.devicon-karatelabs-plain:before{content:""}.devicon-karatelabs-plain-wordmark:before{content:""}.devicon-karma-plain:before{content:""}.devicon-kdeneon-plain:before{content:""}.devicon-keras-line:before{content:""}.devicon-keras-line-wordmark:before{content:""}.devicon-keras-plain:before{content:""}.devicon-keras-plain-wordmark:before{content:""}.devicon-kibana-plain:before{content:""}.devicon-kibana-plain-wordmark:before{content:""}.devicon-knexjs-original:before,.devicon-knexjs-plain:before{content:""}.devicon-knexjs-plain-wordmark:before{content:""}.devicon-knockout-plain-wordmark:before{content:""}.devicon-kotlin-plain:before{content:""}.devicon-kotlin-plain-wordmark:before{content:""}.devicon-krakenjs-plain:before{content:""}.devicon-krakenjs-plain-wordmark:before{content:""}.devicon-ktor-plain:before{content:""}.devicon-ktor-plain-wordmark:before{content:""}.devicon-kubernetes-line:before{content:""}.devicon-kubernetes-line-wordmark:before{content:""}.devicon-kubernetes-plain:before{content:""}.devicon-kubernetes-plain-wordmark:before{content:""}.devicon-labview-plain:before{content:""}.devicon-labview-plain-wordmark:before{content:""}.devicon-laravel-line:before{content:""}.devicon-laravel-line-wordmark:before{content:""}.devicon-laravel-original:before,.devicon-laravel-plain:before{content:""}.devicon-laravel-original-wordmark:before,.devicon-laravel-plain-wordmark:before{content:""}.devicon-latex-original:before,.devicon-latex-plain:before{content:""}.devicon-less-plain-wordmark:before{content:""}.devicon-linkedin-plain:before{content:""}.devicon-linkedin-plain-wordmark:before{content:""}.devicon-linux-plain:before{content:""}.devicon-liquibase-original:before,.devicon-liquibase-plain:before{content:""}.devicon-liquibase-original-wordmark:before,.devicon-liquibase-plain-wordmark:before{content:""}.devicon-livewire-plain:before{content:""}.devicon-livewire-plain-wordmark:before{content:""}.devicon-llvm-plain:before{content:""}.devicon-lodash-plain:before{content:""}.devicon-logstash-plain:before{content:""}.devicon-logstash-plain-wordmark:before{content:""}.devicon-lua-line:before,.devicon-lua-line-wordmark:before{content:""}.devicon-lua-plain:before,.devicon-lua-plain-wordmark:before{content:""}.devicon-lumen-original:before,.devicon-lumen-plain:before{content:""}.devicon-magento-line:before{content:""}.devicon-magento-line-wordmark:before{content:""}.devicon-magento-original:before,.devicon-magento-plain:before{content:""}.devicon-magento-plain-wordmark:before{content:""}.devicon-mariadb-original:before,.devicon-mariadb-plain:before{content:""}.devicon-mariadb-original-wordmark:before,.devicon-mariadb-plain-wordmark:before{content:""}.devicon-markdown-original:before,.devicon-markdown-plain:before{content:""}.devicon-materializecss-plain:before{content:""}.devicon-materialui-plain:before{content:""}.devicon-matlab-line:before{content:""}.devicon-matlab-plain:before{content:""}.devicon-matplotlib-plain:before{content:""}.devicon-matplotlib-plain-wordmark:before{content:""}.devicon-maven-plain:before{content:""}.devicon-maven-plain-wordmark:before{content:""}.devicon-maya-plain:before{content:""}.devicon-maya-plain-wordmark:before{content:""}.devicon-meteor-plain:before{content:""}.devicon-meteor-plain-wordmark:before{content:""}.devicon-microsoftsqlserver-line:before{content:""}.devicon-microsoftsqlserver-line-wordmark:before{content:""}.devicon-microsoftsqlserver-plain:before{content:""}.devicon-microsoftsqlserver-plain-wordmark:before{content:""}.devicon-minitab-plain:before{content:""}.devicon-mithril-line:before{content:""}.devicon-mithril-original:before,.devicon-mithril-plain:before{content:""}.devicon-mobx-plain:before{content:""}.devicon-mocha-plain:before{content:""}.devicon-modx-plain:before{content:""}.devicon-modx-plain-wordmark:before{content:""}.devicon-moleculer-original:before,.devicon-moleculer-plain:before{content:""}.devicon-moleculer-original-wordmark:before,.devicon-moleculer-plain-wordmark:before{content:""}.devicon-mongodb-plain:before{content:""}.devicon-mongodb-plain-wordmark:before{content:""}.devicon-mongoose-original:before{content:""}.devicon-mongoose-original-wordmark:before{content:""}.devicon-moodle-plain:before{content:""}.devicon-moodle-plain-wordmark:before{content:""}.devicon-msdos-line:before{content:""}.devicon-msdos-plain:before{content:""}.devicon-mysql-original:before,.devicon-mysql-plain:before{content:""}.devicon-mysql-plain-wordmark:before{content:""}.devicon-nano-plain:before{content:""}.devicon-nano-plain-wordmark:before{content:""}.devicon-neo4j-plain:before{content:""}.devicon-neo4j-plain-wordmark:before{content:""}.devicon-neovim-line:before{content:""}.devicon-neovim-line-wordmark:before{content:""}.devicon-neovim-plain:before{content:""}.devicon-neovim-plain-wordmark:before{content:""}.devicon-nestjs-line:before{content:""}.devicon-nestjs-line-wordmark:before{content:""}.devicon-nestjs-original:before,.devicon-nestjs-plain:before{content:""}.devicon-nestjs-original-wordmark:before,.devicon-nestjs-plain-wordmark:before{content:""}.devicon-netlify-plain:before{content:""}.devicon-netlify-plain-wordmark:before{content:""}.devicon-networkx-line:before{content:""}.devicon-networkx-line-wordmark:before{content:""}.devicon-networkx-plain:before{content:""}.devicon-networkx-plain-wordmark:before{content:""}.devicon-nextjs-line:before{content:""}.devicon-nextjs-line-wordmark:before{content:""}.devicon-nextjs-original-wordmark:before,.devicon-nextjs-plain-wordmark:before{content:""}.devicon-nextjs-plain:before{content:""}.devicon-nginx-original:before,.devicon-nginx-original-wordmark:before,.devicon-nginx-plain:before,.devicon-nginx-plain-wordmark:before{content:""}.devicon-ngrx-plain:before{content:""}.devicon-nhibernate-line:before{content:""}.devicon-nhibernate-line-wordmark:before{content:""}.devicon-nhibernate-plain:before{content:""}.devicon-nhibernate-plain-wordmark:before{content:""}.devicon-nimble-plain:before{content:""}.devicon-nim-line:before{content:""}.devicon-nim-line-wordmark:before{content:""}.devicon-nim-plain:before{content:""}.devicon-nim-plain-wordmark:before{content:""}.devicon-nixos-plain:before{content:""}.devicon-nixos-plain-wordmark:before{content:""}.devicon-nodejs-line:before{content:""}.devicon-nodejs-line-wordmark:before{content:""}.devicon-nodejs-plain:before{content:""}.devicon-nodejs-plain-wordmark:before{content:""}.devicon-nodemon-line:before{content:""}.devicon-nodemon-plain:before{content:""}.devicon-nodewebkit-line:before{content:""}.devicon-nodewebkit-line-wordmark:before{content:""}.devicon-nodewebkit-plain:before{content:""}.devicon-nodewebkit-plain-wordmark:before{content:""}.devicon-nomad-original:before,.devicon-nomad-plain:before{content:""}.devicon-nomad-plain-wordmark:before{content:""}.devicon-norg-plain:before{content:""}.devicon-notion-line:before{content:""}.devicon-notion-plain:before{content:""}.devicon-npm-original-wordmark:before{content:""}.devicon-nuget-original:before{content:""}.devicon-nuget-original-wordmark:before{content:""}.devicon-numpy-line:before{content:""}.devicon-numpy-line-wordmark:before{content:""}.devicon-numpy-plain:before{content:""}.devicon-numpy-plain-wordmark:before{content:""}.devicon-nuxtjs-plain:before{content:""}.devicon-nuxtjs-plain-wordmark:before{content:""}.devicon-oauth-plain:before,.devicon-oauth-plain-wordmark:before{content:""}.devicon-objectivec-plain:before{content:""}.devicon-ocaml-plain:before{content:""}.devicon-ocaml-plain-wordmark:before{content:""}.devicon-ohmyzsh-plain:before{content:""}.devicon-okta-plain:before{content:""}.devicon-okta-plain-wordmark:before{content:""}.devicon-openal-plain:before{content:""}.devicon-openapi-line:before{content:""}.devicon-openapi-line-wordmark:before{content:""}.devicon-openapi-plain:before{content:""}.devicon-openapi-plain-wordmark:before{content:""}.devicon-opencl-line:before,.devicon-opencl-line-wordmark:before{content:""}.devicon-opencl-plain:before,.devicon-opencl-plain-wordmark:before{content:""}.devicon-opencv-plain:before{content:""}.devicon-opencv-plain-wordmark:before{content:""}.devicon-opengl-plain:before{content:""}.devicon-openstack-original:before,.devicon-openstack-plain:before{content:""}.devicon-openstack-plain-wordmark:before{content:""}.devicon-opensuse-original:before,.devicon-opensuse-plain:before{content:""}.devicon-opensuse-original-wordmark:before,.devicon-opensuse-plain-wordmark:before{content:""}.devicon-opentelemetry-plain:before{content:""}.devicon-opentelemetry-plain-wordmark:before{content:""}.devicon-opera-plain:before{content:""}.devicon-opera-plain-wordmark:before{content:""}.devicon-oracle-original:before,.devicon-oracle-plain:before{content:""}.devicon-ory-original:before,.devicon-ory-plain:before{content:""}.devicon-ory-original-wordmark:before,.devicon-ory-plain-wordmark:before{content:""}.devicon-p5js-original:before,.devicon-p5js-plain:before,.devicon-p5js-original-wordmark:before,.devicon-p5js-plain-wordmark:before{content:""}.devicon-packer-line:before{content:""}.devicon-packer-line-wordmark:before{content:""}.devicon-packer-plain:before{content:""}.devicon-packer-plain-wordmark:before{content:""}.devicon-pandas-line:before{content:""}.devicon-pandas-line-wordmark:before{content:""}.devicon-pandas-plain:before{content:""}.devicon-pandas-plain-wordmark:before{content:""}.devicon-perl-plain:before{content:""}.devicon-pfsense-original:before,.devicon-pfsense-plain:before{content:""}.devicon-pfsense-original-wordmark:before,.devicon-pfsense-plain-wordmark:before{content:""}.devicon-phalcon-plain:before{content:""}.devicon-phoenix-original:before,.devicon-phoenix-plain:before{content:""}.devicon-phoenix-plain-wordmark:before{content:""}.devicon-photonengine-plain:before,.devicon-photonengine-plain-wordmark:before{content:""}.devicon-photoshop-line:before{content:""}.devicon-photoshop-plain:before{content:""}.devicon-php-plain:before{content:""}.devicon-phpstorm-plain:before{content:""}.devicon-phpstorm-plain-wordmark:before{content:""}.devicon-playwright-plain:before{content:""}.devicon-plotly-plain:before{content:""}.devicon-plotly-plain-wordmark:before{content:""}.devicon-pnpm-plain:before{content:""}.devicon-pnpm-plain-wordmark:before{content:""}.devicon-podman-plain:before{content:""}.devicon-podman-plain-wordmark:before{content:""}.devicon-poetry-plain:before{content:""}.devicon-polygon-plain:before{content:""}.devicon-polygon-plain-wordmark:before{content:""}.devicon-portainer-original:before,.devicon-portainer-plain:before{content:""}.devicon-portainer-original-wordmark:before,.devicon-portainer-plain-wordmark:before{content:""}.devicon-postcss-original:before,.devicon-postcss-plain:before{content:""}.devicon-postcss-plain-wordmark:before{content:""}.devicon-postgresql-plain:before{content:""}.devicon-postgresql-plain-wordmark:before{content:""}.devicon-postman-plain:before{content:""}.devicon-postman-plain-wordmark:before{content:""}.devicon-powershell-plain:before{content:""}.devicon-premierepro-plain:before{content:""}.devicon-prisma-original:before,.devicon-prisma-plain:before{content:""}.devicon-prisma-original-wordmark:before,.devicon-prisma-plain-wordmark:before{content:""}.devicon-processing-plain:before{content:""}.devicon-processing-plain-wordmark:before{content:""}.devicon-prolog-plain:before{content:""}.devicon-prolog-plain-wordmark:before{content:""}.devicon-prometheus-line:before{content:""}.devicon-prometheus-line-wordmark:before{content:""}.devicon-prometheus-original:before,.devicon-prometheus-plain:before{content:""}.devicon-prometheus-plain-wordmark:before{content:""}.devicon-protractor-line:before{content:""}.devicon-protractor-line-wordmark:before{content:""}.devicon-protractor-plain:before{content:""}.devicon-protractor-plain-wordmark:before{content:""}.devicon-pulsar-original:before,.devicon-pulsar-plain:before{content:""}.devicon-pulsar-original-wordmark:before,.devicon-pulsar-plain-wordmark:before{content:""}.devicon-pulumi-plain:before{content:""}.devicon-pulumi-plain-wordmark:before{content:""}.devicon-puppeteer-plain:before,.devicon-puppeteer-plain-wordmark:before{content:""}.devicon-purescript-original:before{content:""}.devicon-purescript-original-wordmark:before{content:""}.devicon-putty-plain:before{content:""}.devicon-pycharm-plain:before{content:""}.devicon-pycharm-plain-wordmark:before{content:""}.devicon-pypi-plain:before{content:""}.devicon-pypi-plain-wordmark:before{content:""}.devicon-pyscript-plain-wordmark:before{content:""}.devicon-pytest-plain:before{content:""}.devicon-pytest-plain-wordmark:before{content:""}.devicon-python-plain:before{content:""}.devicon-python-plain-wordmark:before{content:""}.devicon-pytorch-original:before,.devicon-pytorch-plain:before{content:""}.devicon-pytorch-plain-wordmark:before{content:""}.devicon-qodana-plain:before{content:""}.devicon-qodana-plain-wordmark:before{content:""}.devicon-qt-original:before,.devicon-qt-plain:before{content:""}.devicon-quarkus-plain:before{content:""}.devicon-quarkus-plain-wordmark:before{content:""}.devicon-quasar-plain:before{content:""}.devicon-quasar-plain-wordmark:before{content:""}.devicon-qwik-plain:before{content:""}.devicon-qwik-plain-wordmark:before{content:""}.devicon-rabbitmq-original:before,.devicon-rabbitmq-plain:before{content:""}.devicon-rabbitmq-plain-wordmark:before{content:""}.devicon-rails-plain:before{content:""}.devicon-rails-plain-wordmark:before{content:""}.devicon-railway-line:before{content:""}.devicon-railway-line-wordmark:before{content:""}.devicon-railway-original:before,.devicon-railway-plain:before{content:""}.devicon-railway-original-wordmark:before,.devicon-railway-plain-wordmark:before{content:""}.devicon-rancher-line:before{content:""}.devicon-rancher-line-wordmark:before{content:""}.devicon-rancher-original:before,.devicon-rancher-plain:before{content:""}.devicon-rancher-plain-wordmark:before{content:""}.devicon-raspberrypi-line:before{content:""}.devicon-raspberrypi-line-wordmark:before{content:""}.devicon-raspberrypi-plain:before{content:""}.devicon-raspberrypi-plain-wordmark:before{content:""}.devicon-reach-plain:before{content:""}.devicon-reactbootstrap-original:before,.devicon-reactbootstrap-plain:before{content:""}.devicon-reactnavigation-original:before,.devicon-reactnavigation-plain:before{content:""}.devicon-react-original:before,.devicon-react-plain:before{content:""}.devicon-react-original-wordmark:before,.devicon-react-plain-wordmark:before{content:""}.devicon-reactrouter-plain:before{content:""}.devicon-reactrouter-plain-wordmark:before{content:""}.devicon-readthedocs-line:before{content:""}.devicon-readthedocs-original:before,.devicon-readthedocs-plain:before{content:""}.devicon-readthedocs-original-wordmark:before,.devicon-readthedocs-plain-wordmark:before{content:""}.devicon-realm-plain:before{content:""}.devicon-realm-plain-wordmark:before{content:""}.devicon-rect-plain:before{content:""}.devicon-redhat-plain:before{content:""}.devicon-redhat-plain-wordmark:before{content:""}.devicon-redis-plain:before{content:""}.devicon-redis-plain-wordmark:before{content:""}.devicon-redux-original:before,.devicon-redux-plain:before{content:""}.devicon-renpy-plain:before{content:""}.devicon-replit-original:before,.devicon-replit-plain:before{content:""}.devicon-replit-plain-wordmark:before{content:""}.devicon-rider-plain:before{content:""}.devicon-rider-plain-wordmark:before{content:""}.devicon-r-line:before{content:""}.devicon-rocksdb-line:before{content:""}.devicon-rocksdb-plain:before{content:""}.devicon-rockylinux-original:before,.devicon-rockylinux-plain:before{content:""}.devicon-rockylinux-plain-wordmark:before{content:""}.devicon-rollup-line:before{content:""}.devicon-rollup-line-wordmark:before{content:""}.devicon-rollup-plain:before{content:""}.devicon-rollup-plain-wordmark:before{content:""}.devicon-ros-original:before{content:""}.devicon-ros-original-wordmark:before{content:""}.devicon-r-plain:before{content:""}.devicon-rspec-line:before{content:""}.devicon-rspec-line-wordmark:before{content:""}.devicon-rspec-plain:before{content:""}.devicon-rspec-plain-wordmark:before{content:""}.devicon-rstudio-plain:before{content:""}.devicon-rubymine-plain:before{content:""}.devicon-rubymine-plain-wordmark:before{content:""}.devicon-ruby-plain:before{content:""}.devicon-ruby-plain-wordmark:before{content:""}.devicon-rust-line:before{content:""}.devicon-rust-original:before,.devicon-rust-plain:before{content:""}.devicon-rxjs-plain:before{content:""}.devicon-safari-line:before{content:""}.devicon-safari-line-wordmark:before{content:""}.devicon-safari-plain:before{content:""}.devicon-safari-plain-wordmark:before{content:""}.devicon-salesforce-plain:before{content:""}.devicon-sanity-plain:before{content:""}.devicon-sass-original:before,.devicon-sass-plain:before{content:""}.devicon-scala-plain:before{content:""}.devicon-scala-plain-wordmark:before{content:""}.devicon-scalingo-line:before{content:""}.devicon-scalingo-line-wordmark:before{content:""}.devicon-scalingo-plain:before{content:""}.devicon-scalingo-plain-wordmark:before{content:""}.devicon-scikitlearn-line:before,.devicon-scikitlearn-line-wordmark:before{content:""}.devicon-scikitlearn-plain:before,.devicon-scikitlearn-plain-wordmark:before{content:""}.devicon-sdl-plain:before{content:""}.devicon-selenium-original:before,.devicon-selenium-plain:before{content:""}.devicon-sema-original:before,.devicon-sema-plain:before{content:""}.devicon-sema-original-wordmark:before,.devicon-sema-plain-wordmark:before{content:""}.devicon-sentry-original:before,.devicon-sentry-plain:before{content:""}.devicon-sentry-original-wordmark:before,.devicon-sentry-plain-wordmark:before{content:""}.devicon-sequelize-plain:before{content:""}.devicon-sequelize-plain-wordmark:before{content:""}.devicon-shopware-original:before{content:""}.devicon-shopware-original-wordmark:before{content:""}.devicon-shotgrid-original-wordmark:before,.devicon-shotgrid-plain-wordmark:before{content:""}.devicon-shotgrid-plain:before{content:""}.devicon-sketch-line:before{content:""}.devicon-sketch-line-wordmark:before{content:""}.devicon-sketch-plain:before{content:""}.devicon-sketch-plain-wordmark:before{content:""}.devicon-slack-plain:before{content:""}.devicon-slack-plain-wordmark:before{content:""}.devicon-socketio-original:before,.devicon-socketio-plain:before{content:""}.devicon-socketio-original-wordmark:before,.devicon-socketio-plain-wordmark:before{content:""}.devicon-solidity-plain:before{content:""}.devicon-solidjs-plain:before{content:""}.devicon-solidjs-plain-wordmark:before{content:""}.devicon-sonarqube-line:before{content:""}.devicon-sonarqube-line-wordmark:before{content:""}.devicon-sonarqube-original:before,.devicon-sonarqube-plain:before{content:""}.devicon-sonarqube-plain-wordmark:before{content:""}.devicon-sourcetree-original:before,.devicon-sourcetree-plain:before{content:""}.devicon-sourcetree-original-wordmark:before,.devicon-sourcetree-plain-wordmark:before{content:""}.devicon-spack-plain:before{content:""}.devicon-splunk-original-wordmark:before,.devicon-splunk-plain-wordmark:before{content:""}.devicon-spring-original:before,.devicon-spring-plain:before{content:""}.devicon-spring-original-wordmark:before,.devicon-spring-plain-wordmark:before{content:""}.devicon-spss-plain:before{content:""}.devicon-spyder-plain:before{content:""}.devicon-spyder-plain-wordmark:before{content:""}.devicon-sqlalchemy-plain:before{content:""}.devicon-sqlalchemy-plain-wordmark:before{content:""}.devicon-sqldeveloper-plain:before{content:""}.devicon-sqlite-plain:before{content:""}.devicon-sqlite-plain-wordmark:before{content:""}.devicon-ssh-original:before,.devicon-ssh-plain:before{content:""}.devicon-ssh-original-wordmark:before,.devicon-ssh-plain-wordmark:before{content:""}.devicon-stackoverflow-line:before{content:""}.devicon-stackoverflow-line-wordmark:before{content:""}.devicon-stackoverflow-plain:before{content:""}.devicon-stackoverflow-plain-wordmark:before{content:""}.devicon-stata-original-wordmark:before,.devicon-stata-plain-wordmark:before{content:""}.devicon-storybook-plain:before{content:""}.devicon-storybook-plain-wordmark:before{content:""}.devicon-streamlit-plain:before{content:""}.devicon-streamlit-plain-wordmark:before{content:""}.devicon-stylus-original:before{content:""}.devicon-subversion-original:before,.devicon-subversion-plain:before{content:""}.devicon-subversion-plain-wordmark:before{content:""}.devicon-supabase-plain:before{content:""}.devicon-supabase-plain-wordmark:before{content:""}.devicon-svelte-plain:before{content:""}.devicon-svelte-plain-wordmark:before{content:""}.devicon-swagger-plain:before{content:""}.devicon-swagger-plain-wordmark:before{content:""}.devicon-swift-plain:before{content:""}.devicon-swift-plain-wordmark:before{content:""}.devicon-swiper-original:before,.devicon-swiper-plain:before{content:""}.devicon-symfony-original:before,.devicon-symfony-plain:before{content:""}.devicon-symfony-original-wordmark:before,.devicon-symfony-plain-wordmark:before{content:""}.devicon-tailwindcss-original:before,.devicon-tailwindcss-plain:before{content:""}.devicon-tailwindcss-plain-wordmark:before{content:""}.devicon-tauri-plain:before{content:""}.devicon-tauri-plain-wordmark:before{content:""}.devicon-tensorflow-line:before{content:""}.devicon-tensorflow-line-wordmark:before{content:""}.devicon-tensorflow-original:before{content:""}.devicon-tensorflow-original-wordmark:before{content:""}.devicon-terraform-plain:before{content:""}.devicon-terraform-plain-wordmark:before{content:""}.devicon-tex-original:before,.devicon-tex-original-wordmark:before,.devicon-tex-plain:before,.devicon-tex-plain-wordmark:before{content:""}.devicon-thealgorithms-plain:before{content:""}.devicon-thealgorithms-plain-wordmark:before{content:""}.devicon-threedsmax-plain:before,.devicon-threedsmax-plain-wordmark:before{content:""}.devicon-threejs-original:before{content:""}.devicon-threejs-original-wordmark:before{content:""}.devicon-titaniumsdk-original:before,.devicon-titaniumsdk-plain:before{content:""}.devicon-tomcat-line:before{content:""}.devicon-tomcat-line-wordmark:before{content:""}.devicon-tortoisegit-line:before{content:""}.devicon-tortoisegit-plain:before{content:""}.devicon-towergit-plain:before{content:""}.devicon-towergit-plain-wordmark:before{content:""}.devicon-traefikmesh-line:before{content:""}.devicon-traefikmesh-line-wordmark:before{content:""}.devicon-traefikmesh-original:before,.devicon-traefikmesh-plain:before{content:""}.devicon-traefikmesh-plain-wordmark:before{content:""}.devicon-traefikproxy-line:before{content:""}.devicon-traefikproxy-line-wordmark:before{content:""}.devicon-traefikproxy-original:before,.devicon-traefikproxy-plain:before{content:""}.devicon-traefikproxy-plain-wordmark:before{content:""}.devicon-travis-line:before{content:""}.devicon-travis-line-wordmark:before{content:""}.devicon-travis-plain:before{content:""}.devicon-travis-plain-wordmark:before{content:""}.devicon-trello-line:before{content:""}.devicon-trello-line-wordmark:before{content:""}.devicon-trello-plain:before{content:""}.devicon-trello-plain-wordmark:before{content:""}.devicon-trpc-plain:before{content:""}.devicon-trpc-plain-wordmark:before{content:""}.devicon-twitter-original:before,.devicon-twitter-plain:before{content:""}.devicon-typescript-plain:before,.devicon-typescript-original:before{content:""}.devicon-typo3-line:before{content:""}.devicon-typo3-line-wordmark:before{content:""}.devicon-typo3-original:before,.devicon-typo3-plain:before{content:""}.devicon-typo3-plain-wordmark:before{content:""}.devicon-ubuntu-plain:before{content:""}.devicon-ubuntu-plain-wordmark:before{content:""}.devicon-unifiedmodelinglanguage-plain:before{content:""}.devicon-unifiedmodelinglanguage-plain-wordmark:before{content:""}.devicon-unity-line:before{content:""}.devicon-unity-line-wordmark:before{content:""}.devicon-unity-plain:before{content:""}.devicon-unity-plain-wordmark:before{content:""}.devicon-unix-original:before{content:""}.devicon-unrealengine-original:before,.devicon-unrealengine-plain:before{content:""}.devicon-unrealengine-original-wordmark:before,.devicon-unrealengine-plain-wordmark:before{content:""}.devicon-uwsgi-plain:before{content:""}.devicon-v8-plain:before,.devicon-v8-plain-wordmark:before{content:""}.devicon-vagrant-plain:before{content:""}.devicon-vagrant-plain-wordmark:before{content:""}.devicon-vala-plain:before{content:""}.devicon-vala-plain-wordmark:before{content:""}.devicon-vault-original:before,.devicon-vault-plain:before{content:""}.devicon-vault-plain-wordmark:before{content:""}.devicon-vercel-line:before{content:""}.devicon-vercel-line-wordmark:before{content:""}.devicon-vercel-original:before,.devicon-vercel-plain:before{content:""}.devicon-vercel-original-wordmark:before,.devicon-vercel-plain-wordmark:before{content:""}.devicon-vertx-line:before{content:""}.devicon-vertx-line-wordmark:before{content:""}.devicon-vertx-plain:before{content:""}.devicon-vertx-plain-wordmark:before{content:""}.devicon-vim-plain:before{content:""}.devicon-visualbasic-line:before{content:""}.devicon-visualbasic-plain:before{content:""}.devicon-visualstudio-line:before{content:""}.devicon-visualstudio-plain:before{content:""}.devicon-vitejs-plain:before{content:""}.devicon-vite-original:before,.devicon-vite-plain:before{content:""}.devicon-vite-original-wordmark:before,.devicon-vite-plain-wordmark:before{content:""}.devicon-vitess-plain:before{content:""}.devicon-vitess-plain-wordmark:before{content:""}.devicon-vitest-plain:before{content:""}.devicon-vscode-plain:before{content:""}.devicon-vscode-plain-wordmark:before{content:""}.devicon-vsphere-line:before{content:""}.devicon-vsphere-line-wordmark:before{content:""}.devicon-vsphere-plain:before{content:""}.devicon-vsphere-plain-wordmark:before{content:""}.devicon-vuejs-line:before{content:""}.devicon-vuejs-line-wordmark:before{content:""}.devicon-vuejs-plain:before{content:""}.devicon-vuejs-plain-wordmark:before{content:""}.devicon-vuestorefront-plain:before{content:""}.devicon-vuetify-line:before{content:""}.devicon-vuetify-plain:before{content:""}.devicon-vyper-plain:before{content:""}.devicon-vyper-plain-wordmark:before{content:""}.devicon-wasm-original:before,.devicon-wasm-plain:before{content:""}.devicon-wasm-plain-wordmark:before{content:""}.devicon-webflow-original:before{content:""}.devicon-weblate-plain:before{content:""}.devicon-weblate-plain-wordmark:before{content:""}.devicon-webpack-plain:before{content:""}.devicon-webpack-plain-wordmark:before{content:""}.devicon-webstorm-plain:before{content:""}.devicon-webstorm-plain-wordmark:before{content:""}.devicon-windows8-original:before,.devicon-windows8-plain:before{content:""}.devicon-windows8-original-wordmark:before,.devicon-windows8-plain-wordmark:before{content:""}.devicon-windows11-original:before,.devicon-windows11-plain:before{content:""}.devicon-windows11-original-wordmark:before,.devicon-windows11-plain-wordmark:before{content:""}.devicon-woocommerce-plain:before{content:""}.devicon-woocommerce-plain-wordmark:before{content:""}.devicon-wordpress-plain:before{content:""}.devicon-wordpress-plain-wordmark:before{content:""}.devicon-xamarin-original:before,.devicon-xamarin-plain:before{content:""}.devicon-xamarin-original-wordmark:before,.devicon-xamarin-plain-wordmark:before{content:""}.devicon-xcode-plain:before{content:""}.devicon-xd-line:before{content:""}.devicon-xd-plain:before{content:""}.devicon-xml-line:before,.devicon-xml-line-wordmark:before{content:""}.devicon-xml-plain:before,.devicon-xml-plain-wordmark:before{content:""}.devicon-yaml-plain:before,.devicon-yaml-plain-wordmark:before{content:""}.devicon-yarn-line:before{content:""}.devicon-yarn-line-wordmark:before{content:""}.devicon-yarn-original:before,.devicon-yarn-plain:before{content:""}.devicon-yarn-original-wordmark:before,.devicon-yarn-plain-wordmark:before{content:""}.devicon-yii-plain:before{content:""}.devicon-yii-plain-wordmark:before{content:""}.devicon-yugabytedb-plain:before{content:""}.devicon-yugabytedb-plain-wordmark:before{content:""}.devicon-yunohost-plain:before{content:""}.devicon-zend-line:before{content:""}.devicon-zend-line-wordmark:before{content:""}.devicon-zend-original:before,.devicon-zend-plain:before{content:""}.devicon-zend-original-wordmark:before,.devicon-zend-plain-wordmark:before{content:""}.devicon-zig-original:before,.devicon-zig-plain:before{content:""}.devicon-zig-plain-wordmark:before{content:""}.devicon-threedsmax-plain.colored,.devicon-threedsmax-original-wordmark.colored,.devicon-threedsmax-plain-wordmark.colored{color:#37a5cc}.devicon-aarch64-plain.colored,.devicon-aarch64-line.colored,.devicon-aarch64-original-wordmark.colored,.devicon-aarch64-plain-wordmark.colored,.devicon-aarch64-line-wordmark.colored{color:#16358c}.devicon-adonisjs-original.colored,.devicon-adonisjs-original-wordmark.colored,.devicon-adonisjs-plain.colored,.devicon-adonisjs-plain-wordmark.colored{color:#5a45ff}.devicon-aftereffects-plain.colored{color:#1f0740}.devicon-akka-plain.colored,.devicon-akka-plain-wordmark.colored{color:#15a9ce}.devicon-algolia-original.colored,.devicon-algolia-original-wordmark.colored{color:#003dff}.devicon-alpinejs-original.colored,.devicon-alpinejs-original-wordmark.colored,.devicon-alpinejs-plain.colored,.devicon-alpinejs-plain-wordmark.colored{color:#2d3441}.devicon-amazonwebservices-plain-wordmark.colored,.devicon-amazonwebservices-line-wordmark.colored,.devicon-amazonwebservices-original.colored,.devicon-amazonwebservices-plain.colored,.devicon-amazonwebservices-line.colored{color:#f90}.devicon-anaconda-original.colored,.devicon-anaconda-original-wordmark.colored,.devicon-anaconda-plain.colored,.devicon-anaconda-plain-wordmark.colored{color:#3eb049}.devicon-android-plain.colored,.devicon-android-plain-wordmark.colored{color:#a4c439}.devicon-androidstudio-plain.colored,.devicon-androidstudio-plain-wordmark.colored{color:#4285f4}.devicon-angular-plain.colored,.devicon-angular-plain-wordmark.colored{color:#fff}.devicon-angularjs-plain.colored,.devicon-angularjs-plain-wordmark.colored{color:#c4473a}.devicon-angularmaterial-plain.colored{color:#ffa726}.devicon-ansible-plain.colored,.devicon-ansible-plain-wordmark.colored{color:#1a1918}.devicon-antdesign-plain.colored,.devicon-antdesign-plain-wordmark.colored{color:#0073bb}.devicon-apache-plain.colored,.devicon-apache-plain-wordmark.colored,.devicon-apache-line.colored,.devicon-apache-line-wordmark.colored{color:#cb2533}.devicon-apacheairflow-plain.colored,.devicon-apacheairflow-plain-wordmark.colored{color:#017cee}.devicon-apachekafka-original.colored,.devicon-apachekafka-original-wordmark.colored,.devicon-apachekafka-plain.colored,.devicon-apachekafka-plain-wordmark.colored{color:#231f20}.devicon-apachespark-original.colored,.devicon-apachespark-plain-wordmark.colored,.devicon-apachespark-plain.colored{color:#e15919}.devicon-apl-plain.colored{color:#24a148}.devicon-appcelerator-original.colored,.devicon-appcelerator-plain-wordmark.colored,.devicon-appcelerator-plain.colored{color:#ac162c}.devicon-apple-original.colored,.devicon-apple-plain.colored{color:#000}.devicon-appwrite-plain.colored,.devicon-appwrite-plain-wordmark.colored,.devicon-appwrite-original.colored,.devicon-appwrite-original-wordmark.colored{color:#f02e65}.devicon-archlinux-plain.colored,.devicon-archlinux-plain-wordmark.colored{color:#1791cf}.devicon-arduino-plain.colored,.devicon-arduino-plain-wordmark.colored{color:#00979d}.devicon-argocd-plain.colored,.devicon-argocd-plain-wordmark.colored{color:#ef7b4d}.devicon-astro-plain.colored,.devicon-astro-plain-wordmark.colored{color:#ff5d01}.devicon-atom-original.colored,.devicon-atom-original-wordmark.colored,.devicon-atom-plain.colored,.devicon-atom-plain-wordmark.colored{color:#67595d}.devicon-awk-plain-wordmark.colored,.devicon-awk-original.colored,.devicon-awk-plain.colored{color:#0a094d}.devicon-axios-plain.colored,.devicon-axios-plain-wordmark.colored{color:#5a29e4}.devicon-azure-plain.colored,.devicon-azure-plain-wordmark.colored{color:#0089d6}.devicon-azuredevops-plain.colored{color:#0078d4}.devicon-azuresqldatabase-plain.colored{color:#005ba1}.devicon-babel-plain.colored,.devicon-babel-original.colored{color:#f9dc3e}.devicon-backbonejs-plain.colored,.devicon-backbonejs-plain-wordmark.colored{color:#002a41}.devicon-ballerina-original.colored,.devicon-ballerina-original-wordmark.colored,.devicon-ballerina-line.colored,.devicon-ballerina-line-wordmark.colored,.devicon-ballerina-plain.colored,.devicon-ballerina-plain-wordmark.colored{color:#46c0bc}.devicon-bamboo-original.colored,.devicon-bamboo-original-wordmark.colored,.devicon-bamboo-plain.colored,.devicon-bamboo-plain-wordmark.colored{color:#1068e2}.devicon-bash-plain.colored{color:#293138}.devicon-beats-plain.colored{color:#07c}.devicon-behance-plain.colored,.devicon-behance-plain-wordmark.colored{color:#0071e0}.devicon-bitbucket-original.colored,.devicon-bitbucket-original-wordmark.colored,.devicon-bitbucket-plain.colored,.devicon-bitbucket-plain-wordmark.colored{color:#205081}.devicon-blazor-original.colored,.devicon-blazor-line.colored,.devicon-blazor-plain.colored{color:#5c2d91}.devicon-blender-original.colored,.devicon-blender-original-wordmark.colored{color:#dc7b2e}.devicon-bootstrap-plain.colored,.devicon-bootstrap-plain-wordmark.colored{color:#712cf9}.devicon-bower-plain.colored,.devicon-bower-plain-wordmark.colored,.devicon-bower-line.colored,.devicon-bower-line-wordmark.colored{color:#ef5734}.devicon-browserstack-plain.colored,.devicon-browserstack-plain-wordmark.colored,.devicon-browserstack-line.colored,.devicon-browserstack-line-wordmark.colored{color:#0070f0}.devicon-bulma-plain.colored{color:#00d1b2}.devicon-bun-plain.colored,.devicon-bun-line.colored{color:#fbf0df}.devicon-c-plain.colored,.devicon-c-plain-wordmark.colored,.devicon-c-line.colored,.devicon-c-line-wordmark.colored,.devicon-c-plain-wordmark.colored,.devicon-c-line-wordmark.colored{color:#03599c}.devicon-cairo-plain.colored,.devicon-cairo-plain-wordmark.colored{color:#f39914}.devicon-cakephp-plain.colored,.devicon-cakephp-plain-wordmark.colored{color:#d43d44}.devicon-canva-original.colored,.devicon-canva-plain.colored{color:#00c4cc}.devicon-capacitor-plain.colored,.devicon-capacitor-plain-wordmark.colored{color:#53b9ff}.devicon-carbon-original.colored,.devicon-carbon-plain.colored{color:#000}.devicon-cassandra-plain.colored,.devicon-cassandra-plain-wordmark.colored{color:#1185b0}.devicon-centos-plain.colored,.devicon-centos-plain-wordmark.colored{color:#932178}.devicon-ceylon-plain.colored,.devicon-ceylon-plain-wordmark.colored{color:#ab710a}.devicon-chrome-plain.colored,.devicon-chrome-plain-wordmark.colored{color:#ce4e4e}.devicon-circleci-plain.colored,.devicon-circleci-plain-wordmark.colored{color:#343434}.devicon-clarity-plain.colored,.devicon-clarity-plain-wordmark.colored{color:#13171a}.devicon-clion-plain.colored,.devicon-clion-plain-wordmark.colored{color:#21d789}.devicon-clojure-line.colored,.devicon-clojure-plain.colored,.devicon-clojure-plain.colored{color:#5881d8}.devicon-clojurescript-plain.colored{color:#96ca4b}.devicon-cloudflare-plain.colored,.devicon-cloudflare-plain-wordmark.colored{color:#f38020}.devicon-cloudflareworkers-plain.colored,.devicon-cloudflareworkers-plain-wordmark.colored{color:#ea9344}.devicon-cmake-plain.colored,.devicon-cmake-plain-wordmark.colored{color:#0e8a16}.devicon-codeac-original.colored{color:#005096}.devicon-codecov-plain.colored{color:#e0225c}.devicon-codeigniter-plain.colored,.devicon-codeigniter-plain-wordmark.colored{color:#ee4323}.devicon-codepen-original.colored,.devicon-codepen-original-wordmark.colored,.devicon-codepen-line.colored,.devicon-codepen-line-wordmark.colored,.devicon-codepen-plain.colored,.devicon-codepen-plain-wordmark.colored{color:#000}.devicon-coffeescript-original.colored,.devicon-coffeescript-original-wordmark.colored,.devicon-coffeescript-plain.colored,.devicon-coffeescript-plain-wordmark.colored{color:#28334c}.devicon-composer-line.colored,.devicon-composer-line-wordmark.colored,.devicon-composer-plain.colored,.devicon-composer-plain-wordmark.colored{color:#000}.devicon-confluence-plain.colored,.devicon-confluence-plain-wordmark.colored,.devicon-confluence-line.colored,.devicon-confluence-line-wordmark.colored{color:#136be6}.devicon-consul-original.colored,.devicon-consul-plain-wordmark.colored,.devicon-consul-plain.colored{color:#e03875}.devicon-contao-original.colored,.devicon-contao-original-wordmark.colored{color:#f47c00}.devicon-corejs-original.colored,.devicon-corejs-original-wordmark.colored,.devicon-corejs-plain.colored,.devicon-corejs-plain-wordmark.colored{color:#000}.devicon-cosmosdb-plain.colored,.devicon-cosmosdb-plain-wordmark.colored{color:#59b3d8}.devicon-couchbase-original.colored,.devicon-couchbase-plain-wordmark.colored,.devicon-couchbase-plain.colored{color:#ea2328}.devicon-couchdb-plain.colored,.devicon-couchdb-plain-wordmark.colored{color:#e42528}.devicon-cplusplus-plain.colored,.devicon-cplusplus-line.colored,.devicon-cplusplus-plain-wordmark.colored,.devicon-cplusplus-line-wordmark.colored{color:#004482}.devicon-crystal-original.colored,.devicon-crystal-original-wordmark.colored,.devicon-crystal-line.colored,.devicon-crystal-line-wordmark.colored,.devicon-crystal-plain.colored,.devicon-crystal-plain-wordmark.colored{color:#000}.devicon-csharp-plain.colored,.devicon-csharp-plain-wordmark.colored,.devicon-csharp-line.colored,.devicon-csharp-line-wordmark.colored,.devicon-csharp-plain-wordmark.colored,.devicon-csharp-line-wordmark.colored{color:#68217a}.devicon-css3-plain.colored,.devicon-css3-plain-wordmark.colored{color:#3d8fc6}.devicon-cucumber-plain.colored,.devicon-cucumber-plain-wordmark.colored{color:#00a818}.devicon-cypressio-plain.colored,.devicon-cypressio-plain-wordmark.colored,.devicon-cypressio-line.colored,.devicon-cypressio-line-wordmark.colored{color:#1b1e2e}.devicon-d3js-plain.colored{color:#f7974e}.devicon-dart-plain.colored,.devicon-dart-plain-wordmark.colored{color:#00a8e1}.devicon-datagrip-plain.colored,.devicon-datagrip-plain-wordmark.colored{color:#21d789}.devicon-dataspell-plain.colored,.devicon-dataspell-plain-wordmark.colored{color:#087cfa}.devicon-dbeaver-plain.colored{color:#382a24}.devicon-debian-plain.colored,.devicon-debian-plain-wordmark.colored{color:#a80030}.devicon-denojs-original.colored,.devicon-denojs-original-wordmark.colored,.devicon-denojs-plain.colored,.devicon-denojs-plain-wordmark.colored{color:#000}.devicon-devicon-plain.colored,.devicon-devicon-plain-wordmark.colored,.devicon-devicon-line.colored,.devicon-devicon-line-wordmark.colored{color:#60be86}.devicon-digitalocean-original.colored,.devicon-digitalocean-original-wordmark.colored,.devicon-digitalocean-plain.colored,.devicon-digitalocean-plain-wordmark.colored{color:#0080ff}.devicon-discordjs-plain.colored,.devicon-discordjs-plain-wordmark.colored{color:#0c0c14}.devicon-django-plain.colored,.devicon-django-plain-wordmark.colored{color:#092e20}.devicon-djangorest-plain.colored,.devicon-djangorest-line.colored,.devicon-djangorest-plain-wordmark.colored,.devicon-djangorest-line-wordmark.colored{color:#a30000}.devicon-docker-plain.colored,.devicon-docker-plain-wordmark.colored{color:#019bc6}.devicon-doctrine-plain.colored,.devicon-doctrine-plain-wordmark.colored,.devicon-doctrine-line.colored,.devicon-doctrine-line-wordmark.colored{color:#f56d39}.devicon-dot-net-plain.colored,.devicon-dot-net-plain-wordmark.colored{color:#1384c8}.devicon-dotnetcore-plain.colored{color:#623697}.devicon-dreamweaver-plain.colored,.devicon-dreamweaver-line.colored{color:#470137}.devicon-dropwizard-plain.colored{color:#24265d}.devicon-drupal-plain.colored,.devicon-drupal-plain-wordmark.colored{color:#0073ba}.devicon-dynamodb-plain.colored{color:#527fff}.devicon-eclipse-plain-wordmark.colored,.devicon-eclipse-plain.colored{color:#2c2255}.devicon-ecto-original.colored,.devicon-ecto-plain-wordmark.colored,.devicon-ecto-plain.colored{color:#77bf43}.devicon-elasticsearch-plain-wordmark.colored,.devicon-elasticsearch-plain.colored{color:#00bfb3}.devicon-electron-original.colored,.devicon-electron-original-wordmark.colored{color:#47848f}.devicon-eleventy-plain.colored{color:#1f1f1f}.devicon-elixir-plain.colored,.devicon-elixir-plain-wordmark.colored{color:#380a4d}.devicon-elm-plain.colored,.devicon-elm-plain-wordmark.colored{color:#34495e}.devicon-emacs-original.colored{color:#421f5f}.devicon-embeddedc-plain.colored,.devicon-embeddedc-plain-wordmark.colored{color:#444}.devicon-ember-original-wordmark.colored,.devicon-ember-plain.colored,.devicon-ember-plain-wordmark.colored{color:#e04e39}.devicon-envoy-plain.colored,.devicon-envoy-plain-wordmark.colored{color:#e13eaf}.devicon-erlang-plain.colored,.devicon-erlang-plain-wordmark.colored{color:#a90533}.devicon-eslint-plain.colored,.devicon-eslint-plain-wordmark.colored,.devicon-eslint-line.colored,.devicon-eslint-line-wordmark.colored{color:#4b32c3}.devicon-express-original.colored,.devicon-express-original-wordmark.colored{color:#444}.devicon-facebook-plain.colored,.devicon-facebook-original.colored{color:#3d5a98}.devicon-fastapi-plain.colored,.devicon-fastapi-plain-wordmark.colored{color:#009688}.devicon-fastify-plain.colored,.devicon-fastify-plain-wordmark.colored{color:#000}.devicon-faunadb-original-wordmark.colored,.devicon-faunadb-original.colored,.devicon-faunadb-line.colored,.devicon-faunadb-line-wordmark.colored,.devicon-faunadb-plain.colored,.devicon-faunadb-plain-wordmark.colored{color:#3a1ab6}.devicon-feathersjs-original.colored{color:#333}.devicon-fedora-plain.colored{color:#294172}.devicon-figma-plain.colored{color:#f24e1e}.devicon-filezilla-plain.colored,.devicon-filezilla-plain-wordmark.colored,.devicon-filezilla-line.colored,.devicon-filezilla-line-wordmark.colored{color:#bb0001}.devicon-firebase-plain.colored,.devicon-firebase-plain-wordmark.colored,.devicon-firebase-line.colored,.devicon-firebase-line-wordmark.colored{color:#ffa000}.devicon-firefox-plain.colored,.devicon-firefox-plain-wordmark.colored{color:#dd732a}.devicon-flask-original.colored,.devicon-flask-original-wordmark.colored,.devicon-flask-plain.colored,.devicon-flask-plain-wordmark.colored{color:#010101}.devicon-flutter-plain.colored{color:#3fb6d3}.devicon-fortran-original.colored{color:#734f96}.devicon-foundation-plain.colored,.devicon-foundation-plain-wordmark.colored{color:#008cba}.devicon-framermotion-original.colored,.devicon-framermotion-original-wordmark.colored,.devicon-framermotion-plain.colored,.devicon-framermotion-plain-wordmark.colored{color:#000}.devicon-framework7-original.colored,.devicon-framework7-original-wordmark.colored,.devicon-framework7-plain.colored,.devicon-framework7-plain-wordmark.colored{color:#ee350f}.devicon-fsharp-plain.colored{color:#378bba}.devicon-gatling-original.colored,.devicon-gatling-plain-wordmark.colored,.devicon-gatling-line.colored,.devicon-gatling-line-wordmark.colored,.devicon-gatling-plain.colored{color:#f78557}.devicon-gatsby-original.colored,.devicon-gatsby-plain-wordmark.colored,.devicon-gatsby-plain.colored{color:#64328b}.devicon-gazebo-plain.colored,.devicon-gazebo-plain-wordmark.colored{color:#f58113}.devicon-gcc-plain.colored,.devicon-gcc-line.colored,.devicon-gcc-original-wordmark.colored,.devicon-gcc-plain-wordmark.colored,.devicon-gcc-line-wordmark.colored{color:#ffcfab}.devicon-gentoo-plain.colored,.devicon-gentoo-plain-wordmark.colored,.devicon-gentoo-line.colored,.devicon-gentoo-line-wordmark.colored{color:#9991d9}.devicon-ghost-original.colored,.devicon-ghost-original-wordmark.colored{color:#000}.devicon-gimp-plain.colored,.devicon-gimp-plain-wordmark.colored,.devicon-gimp-line.colored,.devicon-gimp-line-wordmark.colored{color:#716955}.devicon-git-plain.colored,.devicon-git-plain-wordmark.colored{color:#f34f29}.devicon-gitbook-original.colored,.devicon-gitbook-original-wordmark.colored,.devicon-gitbook-line.colored,.devicon-gitbook-line-wordmark.colored,.devicon-gitbook-plain.colored,.devicon-gitbook-plain-wordmark.colored{color:#346ddb}.devicon-github-original.colored,.devicon-github-original-wordmark.colored,.devicon-github-plain.colored{color:#181616}.devicon-githubactions-plain.colored{color:#2088ff}.devicon-githubcodespaces-plain.colored{color:#24292e}.devicon-gitlab-plain.colored,.devicon-gitlab-plain-wordmark.colored{color:#e24329}.devicon-gitpod-plain.colored,.devicon-gitpod-plain-wordmark.colored{color:#ffa132}.devicon-gitter-plain.colored,.devicon-gitter-plain-wordmark.colored{color:#000}.devicon-go-original-wordmark.colored,.devicon-go-plain.colored,.devicon-go-line.colored,.devicon-go-plain-wordmark.colored{color:#00acd7}.devicon-godot-plain.colored,.devicon-godot-plain-wordmark.colored{color:#478cbf}.devicon-goland-plain.colored,.devicon-goland-plain-wordmark.colored{color:#087cfa}.devicon-google-plain.colored,.devicon-google-plain-wordmark.colored,.devicon-google-original.colored,.devicon-google-original-wordmark.colored{color:#587dbd}.devicon-googlecloud-plain.colored,.devicon-googlecloud-plain-wordmark.colored{color:#557ebf}.devicon-gradle-original.colored,.devicon-gradle-original-wordmark.colored,.devicon-gradle-plain.colored,.devicon-gradle-plain-wordmark.colored{color:#02303a}.devicon-grafana-plain.colored,.devicon-grafana-plain-wordmark.colored,.devicon-grafana-line.colored,.devicon-grafana-line-wordmark.colored{color:#f7a525}.devicon-grails-plain.colored{color:#feb571}.devicon-graphql-plain.colored,.devicon-graphql-plain-wordmark.colored{color:#e434aa}.devicon-groovy-plain.colored{color:#619cbc}.devicon-grpc-plain.colored{color:#00b0ad}.devicon-grunt-plain.colored,.devicon-grunt-plain-wordmark.colored,.devicon-grunt-line.colored,.devicon-grunt-line-wordmark.colored{color:#fcaa1a}.devicon-gulp-plain.colored{color:#eb4a4b}.devicon-hadoop-plain.colored,.devicon-hadoop-plain-wordmark.colored,.devicon-hadoop-line.colored,.devicon-hadoop-line-wordmark.colored{color:#ff0}.devicon-handlebars-original.colored,.devicon-handlebars-original-wordmark.colored,.devicon-handlebars-line.colored,.devicon-handlebars-line-wordmark.colored,.devicon-handlebars-plain.colored,.devicon-handlebars-plain-wordmark.colored{color:#000}.devicon-hardhat-plain.colored,.devicon-hardhat-plain-wordmark.colored{color:#fff100}.devicon-harvester-original.colored,.devicon-harvester-plain-wordmark.colored,.devicon-harvester-plain.colored{color:#00a580}.devicon-haskell-plain.colored,.devicon-haskell-plain-wordmark.colored{color:#5e5185}.devicon-haxe-plain.colored{color:#ea8220}.devicon-helm-original.colored,.devicon-helm-line.colored,.devicon-helm-plain.colored{color:#0f1689}.devicon-heroku-original.colored,.devicon-heroku-original-wordmark.colored,.devicon-heroku-plain.colored,.devicon-heroku-plain-wordmark.colored,.devicon-heroku-line.colored,.devicon-heroku-line-wordmark.colored{color:#6762a6}.devicon-hibernate-plain.colored,.devicon-hibernate-plain-wordmark.colored{color:#bcae79}.devicon-homebrew-plain.colored,.devicon-homebrew-plain-wordmark.colored,.devicon-homebrew-line.colored,.devicon-homebrew-line-wordmark.colored{color:#fbb040}.devicon-html5-plain.colored,.devicon-html5-plain-wordmark.colored{color:#e54d26}.devicon-hugo-plain.colored,.devicon-hugo-plain-wordmark.colored{color:#ff4088}.devicon-ie10-original.colored,.devicon-ie10-plain.colored{color:#1ebbee}.devicon-ifttt-original.colored,.devicon-ifttt-plain.colored{color:#000}.devicon-illustrator-plain.colored,.devicon-illustrator-line.colored{color:#faa625}.devicon-influxdb-original.colored,.devicon-influxdb-original-wordmark.colored,.devicon-influxdb-plain.colored,.devicon-influxdb-plain-wordmark.colored{color:#020a47}.devicon-inkscape-plain.colored,.devicon-inkscape-plain-wordmark.colored{color:#000}.devicon-insomnia-plain.colored,.devicon-insomnia-plain-wordmark.colored{color:#4000bf}.devicon-intellij-plain.colored,.devicon-intellij-plain-wordmark.colored{color:#087cfa}.devicon-ionic-original.colored,.devicon-ionic-original-wordmark.colored{color:#4e8ef7}.devicon-jaegertracing-plain.colored,.devicon-jaegertracing-plain-wordmark.colored{color:#67cfe3}.devicon-jamstack-original.colored,.devicon-jamstack-plain-wordmark.colored,.devicon-jamstack-plain.colored{color:#f0047f}.devicon-jasmine-original.colored,.devicon-jasmine-original-wordmark.colored,.devicon-jasmine-plain.colored,.devicon-jasmine-plain-wordmark.colored{color:#8a4182}.devicon-java-plain.colored,.devicon-java-plain-wordmark.colored{color:#ea2d2e}.devicon-javascript-plain.colored{color:#f0db4f}.devicon-jeet-plain.colored,.devicon-jeet-plain-wordmark.colored{color:#ff664a}.devicon-jekyll-plain.colored,.devicon-jekyll-plain-wordmark.colored{color:#000}.devicon-jenkins-line.colored,.devicon-jenkins-plain.colored{color:#f0d6b7}.devicon-jest-plain.colored{color:#99425b}.devicon-jetbrains-plain.colored{color:#fdcc21}.devicon-jetpackcompose-plain-wordmark.colored,.devicon-jetpackcompose-plain.colored,.devicon-jetpackcompose-line.colored,.devicon-jetpackcompose-line-wordmark.colored{color:#4285f4}.devicon-jira-plain.colored,.devicon-jira-plain-wordmark.colored{color:#2684ff}.devicon-jiraalign-plain.colored,.devicon-jiraalign-plain-wordmark.colored{color:#2684ff}.devicon-jquery-plain.colored,.devicon-jquery-plain-wordmark.colored{color:#0769ad}.devicon-json-plain.colored{color:#505050}.devicon-jule-original.colored,.devicon-jule-original-wordmark.colored,.devicon-jule-plain.colored,.devicon-jule-plain-wordmark.colored{color:#5f7389}.devicon-julia-plain.colored,.devicon-julia-plain-wordmark.colored{color:#28a745}.devicon-junit-plain.colored,.devicon-junit-plain-wordmark.colored,.devicon-junit-line.colored,.devicon-junit-line-wordmark.colored{color:#dc514a}.devicon-jupyter-plain.colored,.devicon-jupyter-plain-wordmark.colored{color:#f37726}.devicon-k3os-original.colored,.devicon-k3os-plain-wordmark.colored,.devicon-k3os-line.colored,.devicon-k3os-line-wordmark.colored,.devicon-k3os-plain.colored{color:#fd824e}.devicon-k3s-original.colored,.devicon-k3s-plain-wordmark.colored,.devicon-k3s-plain.colored{color:#ffc519}.devicon-k6-original.colored,.devicon-k6-plain.colored{color:#7d64ff}.devicon-kaggle-original.colored,.devicon-kaggle-original-wordmark.colored,.devicon-kaggle-plain.colored,.devicon-kaggle-plain-wordmark.colored{color:#20beff}.devicon-karatelabs-plain.colored,.devicon-karatelabs-plain-wordmark.colored{color:#000}.devicon-karma-plain.colored{color:#56c5a8}.devicon-kdeneon-plain.colored{color:#21769a}.devicon-keras-plain.colored,.devicon-keras-plain-wordmark.colored,.devicon-keras-line.colored,.devicon-keras-line-wordmark.colored{color:#d00000}.devicon-kibana-plain.colored,.devicon-kibana-plain-wordmark.colored{color:#f04e98}.devicon-knexjs-original.colored,.devicon-knexjs-plain-wordmark.colored,.devicon-knexjs-plain.colored{color:#e16426}.devicon-knockout-plain-wordmark.colored{color:#e42e16}.devicon-kotlin-plain.colored,.devicon-kotlin-plain-wordmark.colored{color:#c711e1}.devicon-krakenjs-plain.colored,.devicon-krakenjs-plain-wordmark.colored{color:#0081c2}.devicon-ktor-plain.colored,.devicon-ktor-plain-wordmark.colored{color:#fc801d}.devicon-kubernetes-plain.colored,.devicon-kubernetes-plain-wordmark.colored,.devicon-kubernetes-line.colored,.devicon-kubernetes-line-wordmark.colored{color:#326ce5}.devicon-labview-plain.colored,.devicon-labview-plain-wordmark.colored{color:#fed500}.devicon-laravel-original.colored,.devicon-laravel-original-wordmark.colored,.devicon-laravel-line.colored,.devicon-laravel-line-wordmark.colored,.devicon-laravel-plain.colored,.devicon-laravel-plain-wordmark.colored{color:#f0513f}.devicon-latex-original.colored,.devicon-latex-plain.colored{color:#000}.devicon-less-plain-wordmark.colored{color:#2a4d80}.devicon-linkedin-plain.colored,.devicon-linkedin-plain-wordmark.colored{color:#0076b2}.devicon-linux-plain.colored{color:#000}.devicon-liquibase-original-wordmark.colored,.devicon-liquibase-original.colored,.devicon-liquibase-plain.colored,.devicon-liquibase-plain-wordmark.colored{color:#ff3c00}.devicon-livewire-plain-wordmark.colored,.devicon-livewire-plain.colored{color:#fb70a9}.devicon-llvm-plain.colored{color:#5a90b6}.devicon-lodash-plain.colored{color:#000}.devicon-logstash-plain-wordmark.colored,.devicon-logstash-plain.colored{color:#fec514}.devicon-lua-plain.colored,.devicon-lua-line.colored,.devicon-lua-original-wordmark.colored,.devicon-lua-plain-wordmark.colored,.devicon-lua-line-wordmark.colored{color:navy}.devicon-lumen-original.colored,.devicon-lumen-plain.colored{color:#e54537}.devicon-magento-original.colored,.devicon-magento-plain-wordmark.colored,.devicon-magento-line.colored,.devicon-magento-line-wordmark.colored,.devicon-magento-plain.colored{color:#f26322}.devicon-mariadb-original.colored,.devicon-mariadb-original-wordmark.colored,.devicon-mariadb-plain.colored,.devicon-mariadb-plain-wordmark.colored{color:#003545}.devicon-markdown-original.colored,.devicon-markdown-plain.colored{color:#000}.devicon-materializecss-plain.colored{color:#eb7077}.devicon-materialui-plain.colored{color:#1fa6ca}.devicon-matlab-plain.colored,.devicon-matlab-line.colored{color:#6dd0c7}.devicon-matplotlib-plain.colored,.devicon-matplotlib-plain-wordmark.colored{color:#11557c}.devicon-maven-plain.colored,.devicon-maven-plain-wordmark.colored{color:#e97826}.devicon-maya-plain.colored,.devicon-maya-plain-wordmark.colored{color:#149b9a}.devicon-meteor-plain.colored,.devicon-meteor-plain-wordmark.colored{color:#df5052}.devicon-microsoftsqlserver-plain.colored,.devicon-microsoftsqlserver-plain-wordmark.colored,.devicon-microsoftsqlserver-line.colored,.devicon-microsoftsqlserver-line-wordmark.colored{color:#ee352c}.devicon-minitab-plain.colored{color:#8dc63f}.devicon-mithril-original.colored,.devicon-mithril-line.colored,.devicon-mithril-plain.colored{color:#010002}.devicon-mobx-plain.colored{color:#e05e11}.devicon-mocha-plain.colored{color:#8d6748}.devicon-modx-plain.colored,.devicon-modx-plain-wordmark.colored{color:#00decc}.devicon-moleculer-original.colored,.devicon-moleculer-original-wordmark.colored,.devicon-moleculer-plain.colored,.devicon-moleculer-plain-wordmark.colored{color:#3cafce}.devicon-mongodb-plain.colored,.devicon-mongodb-plain-wordmark.colored{color:#4faa41}.devicon-mongoose-original.colored,.devicon-mongoose-original-wordmark.colored{color:#860000}.devicon-moodle-plain.colored,.devicon-moodle-plain-wordmark.colored{color:#f7931e}.devicon-msdos-plain.colored,.devicon-msdos-line.colored{color:#000}.devicon-mysql-original.colored,.devicon-mysql-plain-wordmark.colored,.devicon-mysql-plain.colored{color:#00618a}.devicon-nano-plain.colored,.devicon-nano-plain-wordmark.colored{color:#c8f}.devicon-neo4j-plain.colored,.devicon-neo4j-plain-wordmark.colored{color:#018bff}.devicon-neovim-plain.colored,.devicon-neovim-plain-wordmark.colored,.devicon-neovim-line.colored,.devicon-neovim-line-wordmark.colored{color:#5fb950}.devicon-nestjs-original.colored,.devicon-nestjs-original-wordmark.colored,.devicon-nestjs-line.colored,.devicon-nestjs-line-wordmark.colored,.devicon-nestjs-plain.colored,.devicon-nestjs-plain-wordmark.colored{color:#df234f}.devicon-netlify-plain.colored,.devicon-netlify-plain-wordmark.colored{color:#05bdba}.devicon-networkx-plain.colored,.devicon-networkx-plain-wordmark.colored,.devicon-networkx-line.colored,.devicon-networkx-line-wordmark.colored{color:#2c7fb8}.devicon-nextjs-original-wordmark.colored,.devicon-nextjs-plain.colored,.devicon-nextjs-line.colored,.devicon-nextjs-line-wordmark.colored,.devicon-nextjs-plain-wordmark.colored{color:#000}.devicon-nginx-original.colored,.devicon-nginx-original-wordmark.colored,.devicon-nginx-plain.colored,.devicon-nginx-plain-wordmark.colored{color:#090}.devicon-ngrx-plain.colored{color:#412846}.devicon-nhibernate-plain-wordmark.colored,.devicon-nhibernate-plain.colored,.devicon-nhibernate-line.colored,.devicon-nhibernate-line-wordmark.colored{color:#903a36}.devicon-nim-plain.colored,.devicon-nim-plain-wordmark.colored,.devicon-nim-line.colored,.devicon-nim-line-wordmark.colored{color:#ffe953}.devicon-nimble-plain.colored{color:#f7e941}.devicon-nixos-plain.colored,.devicon-nixos-plain-wordmark.colored{color:#5277c3}.devicon-nodejs-plain.colored,.devicon-nodejs-plain-wordmark.colored,.devicon-nodejs-line.colored,.devicon-nodejs-line-wordmark.colored{color:#5fa04e}.devicon-nodemon-plain.colored,.devicon-nodemon-line.colored{color:#76d04b}.devicon-nodewebkit-plain.colored,.devicon-nodewebkit-plain-wordmark.colored,.devicon-nodewebkit-line.colored,.devicon-nodewebkit-line-wordmark.colored{color:#3d3b47}.devicon-nomad-original.colored,.devicon-nomad-plain-wordmark.colored,.devicon-nomad-plain.colored{color:#00ca8e}.devicon-norg-plain.colored{color:#4878be}.devicon-notion-plain.colored,.devicon-notion-line.colored{color:#fff}.devicon-npm-original-wordmark.colored{color:#cb3837}.devicon-nuget-original.colored,.devicon-nuget-original-wordmark.colored{color:#004880}.devicon-numpy-plain.colored,.devicon-numpy-plain-wordmark.colored,.devicon-numpy-line.colored,.devicon-numpy-line-wordmark.colored{color:#4dabcf}.devicon-nuxtjs-plain.colored,.devicon-nuxtjs-plain-wordmark.colored{color:#00c48d}.devicon-oauth-plain.colored,.devicon-oauth-original-wordmark.colored,.devicon-oauth-plain-wordmark.colored{color:#000}.devicon-objectivec-plain.colored{color:#0b5a9d}.devicon-ocaml-plain.colored,.devicon-ocaml-plain-wordmark.colored{color:#f18803}.devicon-ohmyzsh-plain.colored{color:#000}.devicon-okta-plain.colored,.devicon-okta-plain-wordmark.colored{color:#0f82c2}.devicon-openal-plain.colored{color:#7e000d}.devicon-openapi-plain.colored,.devicon-openapi-plain-wordmark.colored,.devicon-openapi-line.colored,.devicon-openapi-line-wordmark.colored{color:#91d400}.devicon-opencl-plain.colored,.devicon-opencl-line.colored,.devicon-opencl-original-wordmark.colored,.devicon-opencl-plain-wordmark.colored,.devicon-opencl-line-wordmark.colored{color:#000}.devicon-opencv-plain.colored,.devicon-opencv-plain-wordmark.colored{color:#128dff}.devicon-opengl-plain.colored{color:#5586a4}.devicon-openstack-original.colored,.devicon-openstack-plain-wordmark.colored,.devicon-openstack-plain.colored{color:#ed1944}.devicon-opensuse-original.colored,.devicon-opensuse-original-wordmark.colored,.devicon-opensuse-plain.colored,.devicon-opensuse-plain-wordmark.colored{color:#73ba25}.devicon-opentelemetry-plain.colored,.devicon-opentelemetry-plain-wordmark.colored{color:#f5a800}.devicon-opera-plain.colored,.devicon-opera-plain-wordmark.colored{color:#f7192d}.devicon-oracle-original.colored,.devicon-oracle-plain.colored{color:#ea1b22}.devicon-ory-original.colored,.devicon-ory-original-wordmark.colored,.devicon-ory-plain.colored,.devicon-ory-plain-wordmark.colored{color:#5528ff}.devicon-p5js-original.colored,.devicon-p5js-plain.colored,.devicon-p5js-original-wordmark.colored,.devicon-p5js-plain-wordmark.colored{color:#ed225d}.devicon-packer-plain.colored,.devicon-packer-plain-wordmark.colored,.devicon-packer-line.colored,.devicon-packer-line-wordmark.colored{color:#1d94dd}.devicon-pandas-plain.colored,.devicon-pandas-plain-wordmark.colored,.devicon-pandas-line.colored,.devicon-pandas-line-wordmark.colored{color:#130754}.devicon-perl-plain.colored{color:#212177}.devicon-pfsense-original.colored,.devicon-pfsense-original-wordmark.colored,.devicon-pfsense-plain.colored,.devicon-pfsense-plain-wordmark.colored{color:#000}.devicon-phalcon-plain.colored{color:#76c39b}.devicon-phoenix-original.colored,.devicon-phoenix-plain-wordmark.colored,.devicon-phoenix-plain.colored{color:#fd4f00}.devicon-photonengine-plain.colored,.devicon-photonengine-original-wordmark.colored,.devicon-photonengine-plain-wordmark.colored{color:#004480}.devicon-photoshop-plain.colored,.devicon-photoshop-line.colored{color:#001e36}.devicon-php-plain.colored{color:#777bb3}.devicon-phpstorm-plain.colored,.devicon-phpstorm-plain-wordmark.colored{color:#b74af7}.devicon-playwright-plain.colored{color:#2ead33}.devicon-plotly-plain.colored,.devicon-plotly-plain-wordmark.colored{color:#3d4c73}.devicon-pnpm-plain.colored,.devicon-pnpm-plain-wordmark.colored{color:#f9ad00}.devicon-podman-plain.colored,.devicon-podman-plain-wordmark.colored{color:#892ca0}.devicon-poetry-plain.colored{color:#0080c5}.devicon-polygon-plain.colored,.devicon-polygon-plain-wordmark.colored{color:#7950dd}.devicon-portainer-original.colored,.devicon-portainer-original-wordmark.colored,.devicon-portainer-plain.colored,.devicon-portainer-plain-wordmark.colored{color:#3bbced}.devicon-postcss-original.colored,.devicon-postcss-plain-wordmark.colored,.devicon-postcss-plain.colored{color:#dd3a0a}.devicon-postgresql-plain.colored,.devicon-postgresql-plain-wordmark.colored{color:#336791}.devicon-postman-plain.colored,.devicon-postman-plain-wordmark.colored{color:#f37036}.devicon-powershell-plain.colored{color:#1e2a3a}.devicon-premierepro-plain.colored{color:#2a0634}.devicon-prisma-original.colored,.devicon-prisma-original-wordmark.colored,.devicon-prisma-plain.colored,.devicon-prisma-plain-wordmark.colored{color:#2d3748}.devicon-processing-plain.colored,.devicon-processing-plain-wordmark.colored{color:#000}.devicon-prolog-plain.colored,.devicon-prolog-plain-wordmark.colored{color:#f46c30}.devicon-prometheus-original.colored,.devicon-prometheus-plain-wordmark.colored,.devicon-prometheus-line.colored,.devicon-prometheus-line-wordmark.colored,.devicon-prometheus-plain.colored{color:#e75225}.devicon-protractor-plain.colored,.devicon-protractor-plain-wordmark.colored,.devicon-protractor-line.colored,.devicon-protractor-line-wordmark.colored{color:#d51c2f}.devicon-pulsar-original.colored,.devicon-pulsar-original-wordmark.colored,.devicon-pulsar-plain.colored,.devicon-pulsar-plain-wordmark.colored{color:#2c3e50}.devicon-pulumi-plain.colored,.devicon-pulumi-plain-wordmark.colored{color:#f6bf29}.devicon-puppeteer-plain.colored,.devicon-puppeteer-original-wordmark.colored,.devicon-puppeteer-plain-wordmark.colored{color:#00d8a2}.devicon-purescript-original.colored,.devicon-purescript-original-wordmark.colored{color:#14161a}.devicon-putty-plain.colored{color:#0000fc}.devicon-pycharm-plain.colored,.devicon-pycharm-plain-wordmark.colored{color:#21d789}.devicon-pypi-plain.colored,.devicon-pypi-plain-wordmark.colored{color:#3775a9}.devicon-pyscript-plain-wordmark.colored{color:#fda703}.devicon-pytest-plain.colored,.devicon-pytest-plain-wordmark.colored{color:#009fe3}.devicon-python-plain.colored,.devicon-python-plain-wordmark.colored{color:#ffd845}.devicon-pytorch-original.colored,.devicon-pytorch-plain-wordmark.colored,.devicon-pytorch-plain.colored{color:#ee4c2c}.devicon-qodana-plain.colored,.devicon-qodana-plain-wordmark.colored{color:#ff318c}.devicon-qt-original.colored,.devicon-qt-plain.colored{color:#41cd52}.devicon-quarkus-plain.colored,.devicon-quarkus-plain-wordmark.colored{color:#4695eb}.devicon-quasar-plain-wordmark.colored,.devicon-quasar-plain.colored{color:#00b4ff}.devicon-qwik-plain.colored,.devicon-qwik-plain-wordmark.colored{color:#18b6f6}.devicon-r-plain.colored,.devicon-r-line.colored{color:#1f65b7}.devicon-rabbitmq-original.colored,.devicon-rabbitmq-plain-wordmark.colored,.devicon-rabbitmq-plain.colored{color:#f60}.devicon-rails-plain.colored,.devicon-rails-plain-wordmark.colored{color:#c00}.devicon-railway-original.colored,.devicon-railway-original-wordmark.colored,.devicon-railway-line.colored,.devicon-railway-line-wordmark.colored,.devicon-railway-plain.colored,.devicon-railway-plain-wordmark.colored{color:#fff}.devicon-rancher-original.colored,.devicon-rancher-plain-wordmark.colored,.devicon-rancher-line.colored,.devicon-rancher-line-wordmark.colored,.devicon-rancher-plain.colored{color:#2453ff}.devicon-raspberrypi-plain.colored,.devicon-raspberrypi-plain-wordmark.colored,.devicon-raspberrypi-line.colored,.devicon-raspberrypi-line-wordmark.colored{color:#c51850}.devicon-reach-plain.colored{color:#6ac6e7}.devicon-react-original.colored,.devicon-react-original-wordmark.colored,.devicon-react-plain.colored,.devicon-react-plain-wordmark.colored{color:#61dafb}.devicon-reactbootstrap-original.colored,.devicon-reactbootstrap-plain.colored{color:#41e0fd}.devicon-reactnavigation-original.colored,.devicon-reactnavigation-plain.colored{color:#7b61c1}.devicon-readthedocs-original.colored,.devicon-readthedocs-original-wordmark.colored,.devicon-readthedocs-line.colored,.devicon-readthedocs-plain.colored,.devicon-readthedocs-plain-wordmark.colored{color:#32322a}.devicon-realm-plain.colored,.devicon-realm-plain-wordmark.colored{color:#6e60f9}.devicon-rect-plain.colored{color:#262626}.devicon-redhat-plain.colored,.devicon-redhat-plain-wordmark.colored{color:#e93442}.devicon-redis-plain.colored,.devicon-redis-plain-wordmark.colored{color:#d82c20}.devicon-redux-original.colored,.devicon-redux-plain.colored{color:#764abc}.devicon-renpy-plain.colored{color:#ff7f7f}.devicon-replit-original.colored,.devicon-replit-plain-wordmark.colored,.devicon-replit-plain.colored{color:#f26207}.devicon-rider-plain.colored,.devicon-rider-plain-wordmark.colored{color:#dd1265}.devicon-rocksdb-plain.colored,.devicon-rocksdb-line.colored{color:#ffbe00}.devicon-rockylinux-original.colored,.devicon-rockylinux-plain-wordmark.colored,.devicon-rockylinux-plain.colored{color:#10b982}.devicon-rollup-plain.colored,.devicon-rollup-plain-wordmark.colored,.devicon-rollup-line.colored,.devicon-rollup-line-wordmark.colored{color:#f33}.devicon-ros-original.colored,.devicon-ros-original-wordmark.colored{color:#21304c}.devicon-rspec-plain.colored,.devicon-rspec-plain-wordmark.colored,.devicon-rspec-line.colored,.devicon-rspec-line-wordmark.colored{color:#6de1fa}.devicon-rstudio-plain.colored{color:#75aadb}.devicon-ruby-plain.colored,.devicon-ruby-plain-wordmark.colored{color:#d91404}.devicon-rubymine-plain.colored,.devicon-rubymine-plain-wordmark.colored{color:#fc801d}.devicon-rust-original.colored,.devicon-rust-line.colored,.devicon-rust-plain.colored{color:#000}.devicon-rxjs-plain.colored{color:#df1c85}.devicon-safari-plain.colored,.devicon-safari-plain-wordmark.colored,.devicon-safari-line-wordmark.colored,.devicon-safari-line.colored{color:#1b88ca}.devicon-salesforce-plain.colored{color:#00a1e0}.devicon-sanity-plain.colored{color:#f03e2f}.devicon-sass-original.colored,.devicon-sass-plain.colored{color:#c69}.devicon-scala-plain.colored,.devicon-scala-plain-wordmark.colored{color:#de3423}.devicon-scalingo-plain.colored,.devicon-scalingo-plain-wordmark.colored,.devicon-scalingo-line.colored,.devicon-scalingo-line-wordmark.colored{color:#173aee}.devicon-scikitlearn-plain.colored,.devicon-scikitlearn-line.colored,.devicon-scikitlearn-original-wordmark.colored,.devicon-scikitlearn-plain-wordmark.colored,.devicon-scikitlearn-line-wordmark.colored{color:#f89939}.devicon-sdl-plain.colored{color:#173354}.devicon-selenium-original.colored,.devicon-selenium-plain.colored{color:#cf0a2c}.devicon-sema-original.colored,.devicon-sema-original-wordmark.colored,.devicon-sema-plain.colored,.devicon-sema-plain-wordmark.colored{color:#000}.devicon-sentry-original.colored,.devicon-sentry-original-wordmark.colored,.devicon-sentry-plain.colored,.devicon-sentry-plain-wordmark.colored{color:#362d59}.devicon-reactrouter-plain.colored,.devicon-reactrouter-plain-wordmark.colored{color:#f44250}.devicon-sequelize-plain.colored,.devicon-sequelize-plain-wordmark.colored{color:#3b4b72}.devicon-shopware-original.colored,.devicon-shopware-original-wordmark.colored{color:#179eff}.devicon-shotgrid-plain.colored,.devicon-shotgrid-original-wordmark.colored,.devicon-shotgrid-plain-wordmark.colored{color:#000}.devicon-sketch-plain.colored,.devicon-sketch-plain-wordmark.colored,.devicon-sketch-line.colored,.devicon-sketch-line-wordmark.colored{color:#fdad00}.devicon-slack-plain.colored,.devicon-slack-plain-wordmark.colored{color:#2d333a}.devicon-socketio-original.colored,.devicon-socketio-original-wordmark.colored,.devicon-socketio-plain.colored,.devicon-socketio-plain-wordmark.colored{color:#010101}.devicon-solidity-plain.colored{color:#383838}.devicon-solidjs-plain.colored,.devicon-solidjs-plain-wordmark.colored{color:#2c4f7c}.devicon-sonarqube-original.colored,.devicon-sonarqube-plain-wordmark.colored,.devicon-sonarqube-line.colored,.devicon-sonarqube-line-wordmark.colored,.devicon-sonarqube-plain.colored{color:#549dd0}.devicon-sourcetree-original.colored,.devicon-sourcetree-original-wordmark.colored,.devicon-sourcetree-plain.colored,.devicon-sourcetree-plain-wordmark.colored{color:#205081}.devicon-spack-plain.colored{color:#0f3a80}.devicon-splunk-original-wordmark.colored,.devicon-splunk-plain-wordmark.colored{color:#0c1724}.devicon-spring-original.colored,.devicon-spring-original-wordmark.colored,.devicon-spring-plain.colored,.devicon-spring-plain-wordmark.colored{color:#5fb832}.devicon-spss-plain.colored{color:#cc1e4c}.devicon-spyder-plain.colored,.devicon-spyder-plain-wordmark.colored{color:#8c0000}.devicon-sqlalchemy-plain.colored,.devicon-sqlalchemy-plain-wordmark.colored{color:#333}.devicon-sqldeveloper-plain.colored{color:#adadad}.devicon-sqlite-plain.colored,.devicon-sqlite-plain-wordmark.colored{color:#0f80cc}.devicon-ssh-original.colored,.devicon-ssh-original-wordmark.colored,.devicon-ssh-plain.colored,.devicon-ssh-plain-wordmark.colored{color:#231f20}.devicon-stackoverflow-plain.colored,.devicon-stackoverflow-plain-wordmark.colored,.devicon-stackoverflow-line.colored,.devicon-stackoverflow-line-wordmark.colored{color:#f58025}.devicon-stata-original-wordmark.colored,.devicon-stata-plain-wordmark.colored{color:#195f92}.devicon-storybook-plain.colored,.devicon-storybook-plain-wordmark.colored{color:#ff4785}.devicon-streamlit-plain.colored,.devicon-streamlit-plain-wordmark.colored{color:#7d353b}.devicon-stylus-original.colored{color:#333}.devicon-subversion-original.colored,.devicon-subversion-plain-wordmark.colored,.devicon-subversion-plain.colored{color:#809cc8}.devicon-supabase-plain.colored,.devicon-supabase-plain-wordmark.colored{color:#3ecf8e}.devicon-svelte-plain.colored,.devicon-svelte-plain-wordmark.colored{color:#ff3e00}.devicon-swagger-plain.colored,.devicon-swagger-plain-wordmark.colored{color:#85ea2d}.devicon-swift-plain.colored,.devicon-swift-plain-wordmark.colored{color:#f05138}.devicon-swiper-original.colored,.devicon-swiper-plain.colored{color:#0080ff}.devicon-symfony-original.colored,.devicon-symfony-original-wordmark.colored,.devicon-symfony-plain.colored,.devicon-symfony-plain-wordmark.colored{color:#1a171b}.devicon-tailwindcss-original.colored,.devicon-tailwindcss-plain-wordmark.colored,.devicon-tailwindcss-plain.colored{color:#38bdf8}.devicon-tauri-plain.colored,.devicon-tauri-plain-wordmark.colored{color:#ffc131}.devicon-tensorflow-original.colored,.devicon-tensorflow-original-wordmark.colored,.devicon-tensorflow-line.colored,.devicon-tensorflow-line-wordmark.colored{color:#ff6f00}.devicon-terraform-plain.colored,.devicon-terraform-plain-wordmark.colored{color:#5c4ee5}.devicon-tex-original.colored,.devicon-tex-original-wordmark.colored,.devicon-tex-plain.colored,.devicon-tex-plain-wordmark.colored{color:#000}.devicon-thealgorithms-plain.colored,.devicon-thealgorithms-plain-wordmark.colored{color:#00bcb4}.devicon-threejs-original.colored,.devicon-threejs-original-wordmark.colored{color:#000}.devicon-titaniumsdk-original.colored,.devicon-titaniumsdk-plain.colored{color:#bd222b}.devicon-tomcat-line.colored,.devicon-tomcat-line-wordmark.colored{color:#d1a41a}.devicon-tortoisegit-plain.colored,.devicon-tortoisegit-line.colored{color:#4b8eb4}.devicon-towergit-plain.colored,.devicon-towergit-plain-wordmark.colored{color:#d18900}.devicon-traefikmesh-original.colored,.devicon-traefikmesh-plain-wordmark.colored,.devicon-traefikmesh-line.colored,.devicon-traefikmesh-line-wordmark.colored,.devicon-traefikmesh-plain.colored{color:#9d0fb0}.devicon-traefikproxy-original.colored,.devicon-traefikproxy-plain-wordmark.colored,.devicon-traefikproxy-line.colored,.devicon-traefikproxy-line-wordmark.colored,.devicon-traefikproxy-plain.colored{color:#24a1c1}.devicon-travis-plain.colored,.devicon-travis-plain-wordmark.colored,.devicon-travis-line.colored,.devicon-travis-line-wordmark.colored{color:#2d3136}.devicon-trello-plain.colored,.devicon-trello-plain-wordmark.colored,.devicon-trello-line.colored,.devicon-trello-line-wordmark.colored{color:#0052cc}.devicon-trpc-plain.colored,.devicon-trpc-plain-wordmark.colored{color:#398ccb}.devicon-twitter-original.colored,.devicon-twitter-plain.colored{color:#000}.devicon-typescript-plain.colored,.devicon-typescript-original.colored{color:#007acc}.devicon-typo3-original.colored,.devicon-typo3-plain-wordmark.colored,.devicon-typo3-line.colored,.devicon-typo3-line-wordmark.colored,.devicon-typo3-plain.colored{color:#f49700}.devicon-ubuntu-plain.colored,.devicon-ubuntu-plain-wordmark.colored{color:#e95420}.devicon-unifiedmodelinglanguage-plain.colored,.devicon-unifiedmodelinglanguage-plain-wordmark.colored{color:#452e7f}.devicon-unity-plain.colored,.devicon-unity-plain-wordmark.colored,.devicon-unity-line.colored,.devicon-unity-line-wordmark.colored{color:#4d4d4d}.devicon-unix-original.colored{color:#4051b5}.devicon-unrealengine-original.colored,.devicon-unrealengine-original-wordmark.colored,.devicon-unrealengine-plain.colored,.devicon-unrealengine-plain-wordmark.colored{color:#000}.devicon-uwsgi-plain.colored{color:#bad05e}.devicon-v8-plain.colored,.devicon-v8-original-wordmark.colored,.devicon-v8-plain-wordmark.colored{color:#00c4cc}.devicon-vagrant-plain.colored,.devicon-vagrant-plain-wordmark.colored{color:#127eff}.devicon-vala-plain.colored,.devicon-vala-plain-wordmark.colored{color:#a56de2}.devicon-vault-original.colored,.devicon-vault-plain-wordmark.colored,.devicon-vault-plain.colored{color:#ffd814}.devicon-vercel-original.colored,.devicon-vercel-original-wordmark.colored,.devicon-vercel-line.colored,.devicon-vercel-line-wordmark.colored,.devicon-vercel-plain.colored,.devicon-vercel-plain-wordmark.colored{color:#000}.devicon-vertx-plain.colored,.devicon-vertx-plain-wordmark.colored,.devicon-vertx-line.colored,.devicon-vertx-line-wordmark.colored{color:#782a91}.devicon-vim-plain.colored{color:#179a33}.devicon-visualbasic-plain.colored,.devicon-visualbasic-line.colored{color:#004e8c}.devicon-visualstudio-plain.colored,.devicon-visualstudio-line.colored{color:#52218a}.devicon-vite-original.colored,.devicon-vite-original-wordmark.colored,.devicon-vite-plain.colored,.devicon-vite-plain-wordmark.colored{color:#006bff}.devicon-vitejs-plain.colored{color:#ffdd35}.devicon-vitess-plain.colored,.devicon-vitess-plain-wordmark.colored{color:#f16827}.devicon-vitest-plain.colored{color:#fcc72b}.devicon-vscode-plain.colored,.devicon-vscode-plain-wordmark.colored{color:#3c99d4}.devicon-vsphere-plain.colored,.devicon-vsphere-plain-wordmark.colored,.devicon-vsphere-line.colored,.devicon-vsphere-line-wordmark.colored{color:#0091da}.devicon-vuejs-plain.colored,.devicon-vuejs-plain-wordmark.colored,.devicon-vuejs-line.colored,.devicon-vuejs-line-wordmark.colored{color:#41b883}.devicon-vuestorefront-plain.colored{color:#5ecf7b}.devicon-vuetify-line.colored,.devicon-vuetify-plain.colored{color:#1697f6}.devicon-vyper-plain.colored,.devicon-vyper-plain-wordmark.colored{color:#000}.devicon-wasm-original.colored,.devicon-wasm-plain-wordmark.colored,.devicon-wasm-plain.colored{color:#654ff0}.devicon-webflow-original.colored{color:#4353ff}.devicon-weblate-plain.colored,.devicon-weblate-plain-wordmark.colored{color:#2eccaa}.devicon-webpack-plain.colored,.devicon-webpack-plain-wordmark.colored{color:#1c78c0}.devicon-webstorm-plain.colored,.devicon-webstorm-plain-wordmark.colored{color:#07c3f2}.devicon-windows11-original.colored,.devicon-windows11-original-wordmark.colored,.devicon-windows11-plain.colored,.devicon-windows11-plain-wordmark.colored{color:#0078d4}.devicon-windows8-original.colored,.devicon-windows8-original-wordmark.colored,.devicon-windows8-plain.colored,.devicon-windows8-plain-wordmark.colored{color:#00adef}.devicon-woocommerce-plain.colored,.devicon-woocommerce-plain-wordmark.colored{color:#7f54b3}.devicon-wordpress-plain.colored,.devicon-wordpress-plain-wordmark.colored{color:#494949}.devicon-xamarin-original.colored,.devicon-xamarin-original-wordmark.colored,.devicon-xamarin-plain.colored,.devicon-xamarin-plain-wordmark.colored{color:#3498db}.devicon-xcode-plain.colored{color:#069cec}.devicon-xd-plain.colored,.devicon-xd-line.colored{color:#470137}.devicon-xml-plain.colored,.devicon-xml-line.colored,.devicon-xml-original-wordmark.colored,.devicon-xml-plain-wordmark.colored,.devicon-xml-line-wordmark.colored{color:#005fad}.devicon-yaml-plain.colored,.devicon-yaml-original-wordmark.colored,.devicon-yaml-plain-wordmark.colored{color:#cb171e}.devicon-yarn-original.colored,.devicon-yarn-original-wordmark.colored,.devicon-yarn-line.colored,.devicon-yarn-line-wordmark.colored,.devicon-yarn-plain.colored,.devicon-yarn-plain-wordmark.colored{color:#2c8ebb}.devicon-yii-plain.colored,.devicon-yii-plain-wordmark.colored{color:#40b3d8}.devicon-yugabytedb-plain.colored,.devicon-yugabytedb-plain-wordmark.colored{color:#ff5f3b}.devicon-yunohost-plain.colored{color:#fff}.devicon-zend-original.colored,.devicon-zend-original-wordmark.colored,.devicon-zend-line.colored,.devicon-zend-line-wordmark.colored,.devicon-zend-plain.colored,.devicon-zend-plain-wordmark.colored{color:#68b604}.devicon-zig-original.colored,.devicon-zig-plain-wordmark.colored,.devicon-zig-plain.colored{color:#f7a41d} \ No newline at end of file diff --git a/docs/plugins/whichlang/whichlang.css b/docs/plugins/whichlang/whichlang.css new file mode 100644 index 0000000..2226380 --- /dev/null +++ b/docs/plugins/whichlang/whichlang.css @@ -0,0 +1,29 @@ +.wl-codeblockheader { + background-color: color-mix(in srgb, var(--bg), #777 20%); + color: var(--fg); + margin-bottom: -16px; + padding: .7rem; + display: flex; + justify-content: space-between; +} + +.wl-codeblockheader>span:not(.wl-icon) { + font-size: .8em; + font-family: "Open Sans", sans-serif; +} + +.wl-codeblockheader>span, +.wl-codeblockheader>.wl-langinfo>span { + padding: 0 9px; +} + +.wl-codeblockheader>span.wl-filepath { + text-align: right; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.wl-lang-name { + font-family: "Open Sans", sans-serif; +} \ No newline at end of file diff --git a/docs/plugins/whichlang/whichlang.js b/docs/plugins/whichlang/whichlang.js new file mode 100644 index 0000000..c91f700 --- /dev/null +++ b/docs/plugins/whichlang/whichlang.js @@ -0,0 +1,2414 @@ +(function dartProgram(){function copyProperties(a,b){var t=Object.keys(a) +for(var s=0;s=0)return true +if(typeof version=="function"&&version.length==0){var r=version() +if(/^\d+\.\d+\.\d+\.\d+$/.test(r))return true}}catch(q){}return false}() +function inherit(a,b){a.prototype.constructor=a +a.prototype["$i"+a.name]=a +if(b!=null){if(z){Object.setPrototypeOf(a.prototype,b.prototype) +return}var t=Object.create(b.prototype) +copyProperties(a.prototype,t) +a.prototype=t}}function inheritMany(a,b){for(var t=0;t>>6}, +c_(a){a=a+((a&67108863)<<3)&536870911 +a^=a>>>11 +return a+((a&16383)<<15)&536870911}, +cc(a){var t,s +for(t=$.w.length,s=0;s").q(d).h("ab<1,2>")) +return new A.U(a,b,c.h("@<0>").q(d).h("U<1,2>"))}, +di(){return new A.bs("No element")}, +bk:function bk(a){this.a=a}, +br:function br(){}, +f:function f(){}, +B:function B(){}, +F:function F(a,b,c){var _=this +_.a=a +_.b=b +_.c=0 +_.d=null +_.$ti=c}, +U:function U(a,b,c){this.a=a +this.b=b +this.$ti=c}, +ab:function ab(a,b,c){this.a=a +this.b=b +this.$ti=c}, +aj:function aj(a,b,c){var _=this +_.a=null +_.b=a +_.c=b +_.$ti=c}, +V:function V(a,b,c){this.a=a +this.b=b +this.$ti=c}, +d1(a){var t=v.mangledGlobalNames[a] +if(t!=null)return t +return"minified:"+a}, +es(a,b){var t +if(b!=null){t=b.x +if(t!=null)return t}return u.p.b(a)}, +j(a){var t +if(typeof a=="string")return a +if(typeof a=="number"){if(a!==0)return""+a}else if(!0===a)return"true" +else if(!1===a)return"false" +else if(a==null)return"null" +t=J.a8(a) +return t}, +aQ(a){var t,s=$.cs +if(s==null)s=$.cs=Symbol("identityHashCode") +t=a[s] +if(t==null){t=Math.random()*0x3fffffff|0 +a[s]=t}return t}, +bo(a){return A.ds(a)}, +ds(a){var t,s,r,q +if(a instanceof A.i)return A.p(A.a7(a),null) +t=J.a1(a) +if(t===B.r||t===B.u||u.o.b(a)){s=B.f(a) +if(s!=="Object"&&s!=="")return s +r=a.constructor +if(typeof r=="function"){q=r.name +if(typeof q=="string"&&q!=="Object"&&q!=="")return q}}return A.p(A.a7(a),null)}, +ct(a){if(a==null||typeof a=="number"||A.c6(a))return J.a8(a) +if(typeof a=="string")return JSON.stringify(a) +if(a instanceof A.Q)return a.i(0) +if(a instanceof A.X)return a.Y(!0) +return"Instance of '"+A.bo(a)+"'"}, +q(a,b){if(a==null)J.ay(a) +throw A.c(A.b5(a,b))}, +b5(a,b){var t,s="index" +if(!A.cS(b))return new A.a3(!0,b,s,null) +t=A.c4(J.ay(a)) +if(b<0||b>=t)return A.bV(b,t,a,s) +return new A.aR(null,null,!0,b,s,"Value not in range")}, +c(a){var t,s +if(a==null)a=new A.bv() +t=new Error() +t.dartException=a +s=A.eE +if("defineProperty" in Object){Object.defineProperty(t,"message",{get:s}) +t.name=""}else t.toString=s +return t}, +eE(){return J.a8(this.dartException)}, +b7(a){throw A.c(a)}, +eB(a){throw A.c(A.R(a))}, +cZ(a){if(a==null||typeof a!="object")return J.M(a) +else return A.aQ(a)}, +dh(a1){var t,s,r,q,p,o,n,m,l,k,j=a1.co,i=a1.iS,h=a1.iI,g=a1.nDA,f=a1.aI,e=a1.fs,d=a1.cs,c=e[0],b=d[0],a=j[c],a0=a1.fT +a0.toString +t=i?Object.create(new A.bt().constructor.prototype):Object.create(new A.aa(null,null).constructor.prototype) +t.$initialize=t.constructor +if(i)s=function static_tear_off(){this.$initialize()} +else s=function tear_off(a2,a3){this.$initialize(a2,a3)} +t.constructor=s +s.prototype=t +t.$_name=c +t.$_target=a +r=!i +if(r)q=A.cl(c,a,h,g) +else{t.$static_name=c +q=a}t.$S=A.dd(a0,i,h) +t[b]=q +for(p=q,o=1;o=0)return a.replace(/\$/g,"$$$$") +return a}, +ez(a,b,c,d){var t=b.V(a,d) +if(t==null)return a +return A.eA(a,t.b.index,t.ga_(),c)}, +ce(a,b,c,d){return d===0?a.replace(b.b,A.eh(c)):A.ez(a,b,c,d)}, +eA(a,b,c,d){return a.substring(0,b)+d+a.substring(c)}, +aq:function aq(a,b){this.a=a +this.b=b}, +Q:function Q(){}, +ba:function ba(){}, +bu:function bu(){}, +bt:function bt(){}, +aa:function aa(a,b){this.a=a +this.b=b}, +bA:function bA(a){this.a=a}, +bq:function bq(a){this.a=a}, +bz:function bz(a){this.a=a}, +ag:function ag(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +bl:function bl(a,b){this.a=a +this.b=b +this.c=null}, +ah:function ah(a,b){this.a=a +this.$ti=b}, +ai:function ai(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=null +_.$ti=c}, +bK:function bK(a){this.a=a}, +bL:function bL(a){this.a=a}, +bM:function bM(a){this.a=a}, +X:function X(){}, +a5:function a5(){}, +aM:function aM(a,b){var _=this +_.a=a +_.b=b +_.d=_.c=null}, +ao:function ao(a){this.b=a}, +by:function by(a,b,c){var _=this +_.a=a +_.b=b +_.c=c +_.d=null}, +cv(a,b){var t=b.c +return t==null?b.c=A.c3(a,b.y,!0):t}, +bZ(a,b){var t=b.c +return t==null?b.c=A.at(a,"cm",[b.y]):t}, +cw(a){var t=a.x +if(t===6||t===7||t===8)return A.cw(a.y) +return t===12||t===13}, +dv(a){return a.at}, +cX(a){return A.b0(v.typeUniverse,a,!1)}, +P(a,b,c,a0){var t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d=b.x +switch(d){case 5:case 1:case 2:case 3:case 4:return b +case 6:t=b.y +s=A.P(a,t,c,a0) +if(s===t)return b +return A.cK(a,s,!0) +case 7:t=b.y +s=A.P(a,t,c,a0) +if(s===t)return b +return A.c3(a,s,!0) +case 8:t=b.y +s=A.P(a,t,c,a0) +if(s===t)return b +return A.cJ(a,s,!0) +case 9:r=b.z +q=A.aw(a,r,c,a0) +if(q===r)return b +return A.at(a,b.y,q) +case 10:p=b.y +o=A.P(a,p,c,a0) +n=b.z +m=A.aw(a,n,c,a0) +if(o===p&&m===n)return b +return A.c1(a,o,m) +case 12:l=b.y +k=A.P(a,l,c,a0) +j=b.z +i=A.e9(a,j,c,a0) +if(k===l&&i===j)return b +return A.cI(a,k,i) +case 13:h=b.z +a0+=h.length +g=A.aw(a,h,c,a0) +p=b.y +o=A.P(a,p,c,a0) +if(g===h&&o===p)return b +return A.c2(a,o,g,!0) +case 14:f=b.y +if(f=q)return A.q(r,0) +t=A.av(v.typeUniverse,A.c7(r[0]),"@<0>") +for(s=1;s=0)q+=" "+s[r];++r}return q+"})"}, +cQ(a3,a4,a5){var t,s,r,q,p,o,n,m,l,k,j,i,h,g,f,e,d,c,b,a,a0,a1,a2=", " +if(a5!=null){t=a5.length +if(a4==null){a4=A.Z([],u.s) +s=null}else s=a4.length +r=a4.length +for(q=t;q>0;--q)B.a.k(a4,"T"+(r+q)) +for(p=u.X,o=u._,n="<",m="",q=0;q=0))return A.q(a4,k) +n=B.b.a8(n+m,a4[k]) +j=a5[q] +i=j.x +if(!(i===2||i===3||i===4||i===5||j===p))if(!(j===o))l=!1 +else l=!0 +else l=!0 +if(!l)n+=" extends "+A.p(j,a4)}n+=">"}else{n="" +s=null}p=a3.y +h=a3.z +g=h.a +f=g.length +e=h.b +d=e.length +c=h.c +b=c.length +a=A.p(p,a4) +for(a0="",a1="",q=0;q0){a0+=a1+"[" +for(a1="",q=0;q0){a0+=a1+"{" +for(a1="",q=0;q "+a}, +p(a,b){var t,s,r,q,p,o,n,m=a.x +if(m===5)return"erased" +if(m===2)return"dynamic" +if(m===3)return"void" +if(m===1)return"Never" +if(m===4)return"any" +if(m===6){t=A.p(a.y,b) +return t}if(m===7){s=a.y +t=A.p(s,b) +r=s.x +return(r===12||r===13?"("+t+")":t)+"?"}if(m===8)return"FutureOr<"+A.p(a.y,b)+">" +if(m===9){q=A.eb(a.y) +p=a.z +return p.length>0?q+("<"+A.cU(p,b)+">"):q}if(m===11)return A.e8(a,b) +if(m===12)return A.cQ(a,b,null) +if(m===13)return A.cQ(a.y,b,a.z) +if(m===14){o=a.y +n=b.length +o=n-1-o +if(!(o>=0&&o0)q+="<"+A.as(c)+">" +t=a.eC.get(q) +if(t!=null)return t +s=new A.y(null,null) +s.x=9 +s.y=b +s.z=c +if(c.length>0)s.c=c[0] +s.at=q +r=A.J(a,s) +a.eC.set(q,r) +return r}, +c1(a,b,c){var t,s,r,q,p,o +if(b.x===10){t=b.y +s=b.z.concat(c)}else{s=c +t=b}r=t.at+(";<"+A.as(s)+">") +q=a.eC.get(r) +if(q!=null)return q +p=new A.y(null,null) +p.x=10 +p.y=t +p.z=s +p.at=r +o=A.J(a,p) +a.eC.set(r,o) +return o}, +dI(a,b,c){var t,s,r="+"+(b+"("+A.as(c)+")"),q=a.eC.get(r) +if(q!=null)return q +t=new A.y(null,null) +t.x=11 +t.y=b +t.z=c +t.at=r +s=A.J(a,t) +a.eC.set(r,s) +return s}, +cI(a,b,c){var t,s,r,q,p,o=b.at,n=c.a,m=n.length,l=c.b,k=l.length,j=c.c,i=j.length,h="("+A.as(n) +if(k>0){t=m>0?",":"" +h+=t+"["+A.as(l)+"]"}if(i>0){t=m>0?",":"" +h+=t+"{"+A.dC(j)+"}"}s=o+(h+")") +r=a.eC.get(s) +if(r!=null)return r +q=new A.y(null,null) +q.x=12 +q.y=b +q.z=c +q.at=s +p=A.J(a,q) +a.eC.set(s,p) +return p}, +c2(a,b,c,d){var t,s=b.at+("<"+A.as(c)+">"),r=a.eC.get(s) +if(r!=null)return r +t=A.dE(a,b,c,s,d) +a.eC.set(s,t) +return t}, +dE(a,b,c,d,e){var t,s,r,q,p,o,n,m +if(e){t=c.length +s=A.bG(t) +for(r=0,q=0;q0){o=A.P(a,b,s,0) +n=A.aw(a,c,s,0) +return A.c2(a,o,n,c!==n)}}m=new A.y(null,null) +m.x=13 +m.y=b +m.z=c +m.at=d +return A.J(a,m)}, +cD(a,b,c,d){return{u:a,e:b,r:c,s:[],p:0,n:d}}, +cF(a){var t,s,r,q,p,o,n,m=a.r,l=a.s +for(t=m.length,s=0;s=48&&r<=57)s=A.dx(s+1,r,m,l) +else if((((r|32)>>>0)-97&65535)<26||r===95||r===36||r===124)s=A.cE(a,s,m,l,!1) +else if(r===46)s=A.cE(a,s,m,l,!0) +else{++s +switch(r){case 44:break +case 58:l.push(!1) +break +case 33:l.push(!0) +break +case 59:l.push(A.O(a.u,a.e,l.pop())) +break +case 94:l.push(A.dH(a.u,l.pop())) +break +case 35:l.push(A.au(a.u,5,"#")) +break +case 64:l.push(A.au(a.u,2,"@")) +break +case 126:l.push(A.au(a.u,3,"~")) +break +case 60:l.push(a.p) +a.p=l.length +break +case 62:A.dz(a,l) +break +case 38:A.dy(a,l) +break +case 42:q=a.u +l.push(A.cK(q,A.O(q,a.e,l.pop()),a.n)) +break +case 63:q=a.u +l.push(A.c3(q,A.O(q,a.e,l.pop()),a.n)) +break +case 47:q=a.u +l.push(A.cJ(q,A.O(q,a.e,l.pop()),a.n)) +break +case 40:l.push(-3) +l.push(a.p) +a.p=l.length +break +case 41:A.dw(a,l) +break +case 91:l.push(a.p) +a.p=l.length +break +case 93:p=l.splice(a.p) +A.cG(a.u,a.e,p) +a.p=l.pop() +l.push(p) +l.push(-1) +break +case 123:l.push(a.p) +a.p=l.length +break +case 125:p=l.splice(a.p) +A.dB(a.u,a.e,p) +a.p=l.pop() +l.push(p) +l.push(-2) +break +case 43:o=m.indexOf("(",s) +l.push(m.substring(s,o)) +l.push(-4) +l.push(a.p) +a.p=l.length +s=o+1 +break +default:throw"Bad character "+r}}}n=l.pop() +return A.O(a.u,a.e,n)}, +dx(a,b,c,d){var t,s,r=b-48 +for(t=c.length;a=48&&s<=57))break +r=r*10+(s-48)}d.push(r) +return a}, +cE(a,b,c,d,e){var t,s,r,q,p,o,n=b+1 +for(t=c.length;n>>0)-97&65535)<26||s===95||s===36||s===124))r=s>=48&&s<=57 +else r=!0 +if(!r)break}}q=c.substring(b,n) +if(e){t=a.u +p=a.e +if(p.x===10)p=p.y +o=A.dM(t,p.y)[q] +if(o==null)A.b7('No "'+q+'" in "'+A.dv(p)+'"') +d.push(A.av(t,p,o))}else d.push(q) +return n}, +dz(a,b){var t,s=a.u,r=A.cC(a,b),q=b.pop() +if(typeof q=="string")b.push(A.at(s,q,r)) +else{t=A.O(s,a.e,q) +switch(t.x){case 12:b.push(A.c2(s,t,r,a.n)) +break +default:b.push(A.c1(s,t,r)) +break}}}, +dw(a,b){var t,s,r,q,p,o=null,n=a.u,m=b.pop() +if(typeof m=="number")switch(m){case-1:t=b.pop() +s=o +break +case-2:s=b.pop() +t=o +break +default:b.push(m) +s=o +t=s +break}else{b.push(m) +s=o +t=s}r=A.cC(a,b) +m=b.pop() +switch(m){case-3:m=b.pop() +if(t==null)t=n.sEA +if(s==null)s=n.sEA +q=A.O(n,a.e,m) +p=new A.aW() +p.a=r +p.b=t +p.c=s +b.push(A.cI(n,q,p)) +return +case-4:b.push(A.dI(n,b.pop(),r)) +return +default:throw A.c(A.aC("Unexpected state under `()`: "+A.j(m)))}}, +dy(a,b){var t=b.pop() +if(0===t){b.push(A.au(a.u,1,"0&")) +return}if(1===t){b.push(A.au(a.u,4,"1&")) +return}throw A.c(A.aC("Unexpected extended operation "+A.j(t)))}, +cC(a,b){var t=b.splice(a.p) +A.cG(a.u,a.e,t) +a.p=b.pop() +return t}, +O(a,b,c){if(typeof c=="string")return A.at(a,c,a.sEA) +else if(typeof c=="number"){b.toString +return A.dA(a,b,c)}else return c}, +cG(a,b,c){var t,s=c.length +for(t=0;to)return!1 +n=o-p +m=t.b +l=s.b +k=m.length +j=l.length +if(p+k=e)return!1 +a0=g[c] +c+=3 +if(a0?new Array(r):v.typeUniverse.sEA +for(p=0;p0?new Array(a):v.typeUniverse.sEA}, +y:function y(a,b){var _=this +_.a=a +_.b=b +_.w=_.r=_.c=null +_.x=0 +_.at=_.as=_.Q=_.z=_.y=null}, +aW:function aW(){this.c=this.b=this.a=null}, +bF:function bF(a){this.a=a}, +bC:function bC(){}, +b_:function b_(a){this.a=a}, +dm(a,b){return new A.ag(a.h("@<0>").q(b).h("ag<1,2>"))}, +cq(a){return new A.an(a.h("an<0>"))}, +c0(){var t=Object.create(null) +t[""]=t +delete t[""] +return t}, +cB(a,b,c){var t=new A.W(a,b,c.h("W<0>")) +t.c=a.e +return t}, +cr(a){var t,s={} +if(A.cc(a))return"{...}" +t=new A.aU("") +try{B.a.k($.w,a) +t.a+="{" +s.a=!0 +a.v(0,new A.bn(s,t)) +t.a+="}"}finally{if(0>=$.w.length)return A.q($.w,-1) +$.w.pop()}s=t.a +return s.charCodeAt(0)==0?s:s}, +dp(a,b,c,d){var t,s,r +for(t=b.$ti,s=new A.F(b,b.gj(b),t.h("F")),t=t.h("B.E");s.l();){r=s.d +if(r==null)r=t.a(r) +a.E(0,c.$1(r),d.$1(r))}}, +an:function an(a){var _=this +_.a=0 +_.f=_.e=_.d=_.c=_.b=null +_.r=0 +_.$ti=a}, +aX:function aX(a){this.a=a +this.b=null}, +W:function W(a,b,c){var _=this +_.a=a +_.b=b +_.d=_.c=null +_.$ti=c}, +r:function r(){}, +n:function n(){}, +bm:function bm(a){this.a=a}, +bn:function bn(a,b){this.a=a +this.b=b}, +H:function H(){}, +ar:function ar(){}, +dn(a,b,c){var t,s=A.Z([],c.h("u<0>")) +for(t=J.b9(a);t.l();)B.a.k(s,c.a(t.gm())) +if(b)return s +return J.cn(s,c)}, +aS(a){return new A.aM(a,A.cp(a,!1,!0,!1,!1,!1))}, +cx(a,b,c){var t=J.b9(b) +if(!t.l())return a +if(c.length===0){do a+=A.j(t.gm()) +while(t.l())}else{a+=A.j(t.gm()) +for(;t.l();)a=a+c+A.j(t.gm())}return a}, +aF(a){if(typeof a=="number"||A.c6(a)||a==null)return J.a8(a) +if(typeof a=="string")return JSON.stringify(a) +return A.ct(a)}, +aC(a){return new A.aB(a)}, +da(a){return new A.a3(!1,null,null,a)}, +cg(a,b,c){return new A.a3(!0,a,b,c)}, +cu(a,b,c,d,e){return new A.aR(b,c,!0,a,d,"Invalid value")}, +dt(a,b,c){if(0>a||a>c)throw A.c(A.cu(a,0,c,"start",null)) +if(b!=null){if(a>b||b>c)throw A.c(A.cu(b,a,c,"end",null)) +return b}return c}, +bV(a,b,c,d){return new A.bi(b,!0,a,d,"Index out of range")}, +cz(a){return new A.bx(a)}, +cy(a){return new A.bw(a)}, +R(a){return new A.bc(a)}, +dj(a,b,c){var t,s +if(A.cc(a)){if(b==="("&&c===")")return"(...)" +return b+"..."+c}t=A.Z([],u.s) +B.a.k($.w,a) +try{A.e7(a,t)}finally{if(0>=$.w.length)return A.q($.w,-1) +$.w.pop()}s=A.cx(b,u.U.a(t),", ")+c +return s.charCodeAt(0)==0?s:s}, +bW(a,b,c){var t,s +if(A.cc(a))return b+"..."+c +t=new A.aU(b) +B.a.k($.w,a) +try{s=t +s.a=A.cx(s.a,a,", ")}finally{if(0>=$.w.length)return A.q($.w,-1) +$.w.pop()}t.a+=c +s=t.a +return s.charCodeAt(0)==0?s:s}, +e7(a,b){var t,s,r,q,p,o,n,m=a.gp(a),l=0,k=0 +while(!0){if(!(l<80||k<3))break +if(!m.l())return +t=A.j(m.gm()) +B.a.k(b,t) +l+=t.length+2;++k}if(!m.l()){if(k<=5)return +if(0>=b.length)return A.q(b,-1) +s=b.pop() +if(0>=b.length)return A.q(b,-1) +r=b.pop()}else{q=m.gm();++k +if(!m.l()){if(k<=4){B.a.k(b,A.j(q)) +return}s=A.j(q) +if(0>=b.length)return A.q(b,-1) +r=b.pop() +l+=s.length+2}else{p=m.gm();++k +for(;m.l();q=p,p=o){o=m.gm();++k +if(k>100){while(!0){if(!(l>75&&k>3))break +if(0>=b.length)return A.q(b,-1) +l-=b.pop().length+2;--k}B.a.k(b,"...") +return}}r=A.j(q) +s=A.j(p) +l+=s.length+r.length+4}}if(k>b.length+2){l+=5 +n="..."}else n=null +while(!0){if(!(l>80&&b.length>3))break +if(0>=b.length)return A.q(b,-1) +l-=b.pop().length+2 +if(n==null){l+=5 +n="..."}}if(n!=null)B.a.k(b,n) +B.a.k(b,r) +B.a.k(b,s)}, +dr(a,b,c,d){var t,s +if(B.c===c){t=B.d.gn(a) +b=J.M(b) +return A.c_(A.N(A.N($.bU(),t),b))}if(B.c===d){t=B.d.gn(a) +b=J.M(b) +c=J.M(c) +return A.c_(A.N(A.N(A.N($.bU(),t),b),c))}t=B.d.gn(a) +b=J.M(b) +c=J.M(c) +d=J.M(d) +s=$.bU() +return A.c_(A.N(A.N(A.N(A.N(s,t),b),c),d))}, +bB:function bB(){}, +bg:function bg(){}, +aB:function aB(a){this.a=a}, +bv:function bv(){}, +a3:function a3(a,b,c,d){var _=this +_.a=a +_.b=b +_.c=c +_.d=d}, +aR:function aR(a,b,c,d,e,f){var _=this +_.e=a +_.f=b +_.a=c +_.b=d +_.c=e +_.d=f}, +bi:function bi(a,b,c,d,e){var _=this +_.f=a +_.a=b +_.b=c +_.c=d +_.d=e}, +bx:function bx(a){this.a=a}, +bw:function bw(a){this.a=a}, +bs:function bs(a){this.a=a}, +bc:function bc(a){this.a=a}, +bh:function bh(a,b){this.a=a +this.b=b}, +e:function e(){}, +G:function G(a,b,c){this.a=a +this.b=b +this.$ti=c}, +al:function al(){}, +i:function i(){}, +aU:function aU(a){this.a=a}, +a:function a(){}, +az:function az(){}, +aA:function aA(){}, +A:function A(){}, +be:function be(){}, +bf:function bf(){}, +am:function am(a,b){this.a=a +this.$ti=b}, +k:function k(){}, +aG:function aG(){}, +aH:function aH(){}, +d:function d(){}, +ak:function ak(){}, +aT:function aT(){}, +ap:function ap(){}, +aV:function aV(a){this.a=a}, +D:function D(){}, +ac:function ac(a,b,c){var _=this +_.a=a +_.b=b +_.c=-1 +_.d=null +_.$ti=c}, +aY:function aY(){}, +aZ:function aZ(){}, +b1:function b1(){}, +b2:function b2(){}, +aE:function aE(){}, +bd:function bd(a){this.a=a}, +aD:function aD(a){this.a=a}, +b:function b(){}, +eu(a){var t=B.b.av(a,$.d4(),"") +if(a===t)return null +return t.toUpperCase()}, +ey(a,b){var t,s,r,q,p,o,n,m,l,k={} +if(!b.am())return +t=document +s=t.createElement("div") +J.a2(s).k(0,"wl-codeblockheader") +r=t.createElement("div") +J.a2(r).k(0,"wl-langinfo") +q=a.parentElement +if(q==null)return +q.before(s) +if(b.b!=null){k.a=null +p=b.c +p.toString +switch(p){case B.j:o=t.createElement("i") +k.a=o +J.a2(o).k(0,"wl-icon") +p=b.b +p.toString +B.a.v(p,new A.bT(k)) +r.appendChild(u.G.a(k.a)).toString +break +case B.i:n=t.createElement("img") +p=b.b +p.toString +n.setAttribute("src",u.K.a(B.a.gao(p))) +r.appendChild(n).toString +break}}if(b.a!=null){m=t.createElement("span") +J.a2(m).k(0,"wl-lang-name") +p=b.a +p.toString +p=t.createTextNode(p) +p.toString +m.appendChild(p).toString +r.appendChild(m).toString}p=r.hasChildNodes() +p.toString +if(p)s.appendChild(r).toString +if(b.d!=null){l=t.createElement("span") +J.a2(l).k(0,"wl-filepath") +p=b.d +p.toString +p=t.createTextNode(p) +p.toString +l.appendChild(p).toString +s.appendChild(l).toString}}, +ew(){var t,s,r,q,p=document +p.toString +t=u.h +A.ee(t,t,"T","querySelectorAll") +p=p.querySelectorAll("pre > code") +p.toString +s=u.V +r=s.h("@(r.E)").a(new A.bO()) +q=A.dm(t,u.j) +A.dp(q,new A.V(new A.am(p,s),r,s.h("V")),new A.bP(),new A.bQ()) +q.gan(q).v(0,new A.bR())}, +z:function z(){var _=this +_.d=_.c=_.b=_.a=null}, +bb:function bb(){}, +aI:function aI(a){this.b=a}, +bT:function bT(a){this.a=a}, +bO:function bO(){}, +bP:function bP(){}, +bQ:function bQ(){}, +bR:function bR(){}, +eD(a){return A.b7(new A.bk("Field '"+a+"' has been assigned during initialization."))}},J={ +cd(a,b,c,d){return{i:a,p:b,e:c,x:d}}, +bJ(a){var t,s,r,q,p,o=a[v.dispatchPropertyName] +if(o==null)if($.ca==null){A.ep() +o=a[v.dispatchPropertyName]}if(o!=null){t=o.p +if(!1===t)return o.i +if(!0===t)return a +s=Object.getPrototypeOf(a) +if(t===s)return o.i +if(o.e===s)throw A.c(A.cy("Return interceptor for "+A.j(t(a,o))))}r=a.constructor +if(r==null)q=null +else{p=$.bD +if(p==null)p=$.bD=v.getIsolateTag("_$dart_js") +q=r[p]}if(q!=null)return q +q=A.ev(a) +if(q!=null)return q +if(typeof a=="function")return B.t +t=Object.getPrototypeOf(a) +if(t==null)return B.k +if(t===Object.prototype)return B.k +if(typeof r=="function"){p=$.bD +if(p==null)p=$.bD=v.getIsolateTag("_$dart_js") +Object.defineProperty(r,p,{value:B.e,enumerable:false,writable:true,configurable:true}) +return B.e}return B.e}, +cn(a,b){a.fixed$length=Array +return a}, +co(a){if(a<256)switch(a){case 9:case 10:case 11:case 12:case 13:case 32:case 133:case 160:return!0 +default:return!1}switch(a){case 5760:case 8192:case 8193:case 8194:case 8195:case 8196:case 8197:case 8198:case 8199:case 8200:case 8201:case 8202:case 8232:case 8233:case 8239:case 8287:case 12288:case 65279:return!0 +default:return!1}}, +dk(a,b){var t,s +for(t=a.length;b0;b=t){t=b-1 +s=B.b.F(a,t) +if(s!==32&&s!==13&&!J.co(s))break}return b}, +a1(a){if(typeof a=="number"){if(Math.floor(a)==a)return J.ae.prototype +return J.aK.prototype}if(typeof a=="string")return J.S.prototype +if(a==null)return J.af.prototype +if(typeof a=="boolean")return J.aJ.prototype +if(a.constructor==Array)return J.u.prototype +if(typeof a!="object"){if(typeof a=="function")return J.E.prototype +return a}if(a instanceof A.i)return a +return J.bJ(a)}, +c9(a){if(typeof a=="string")return J.S.prototype +if(a==null)return a +if(a.constructor==Array)return J.u.prototype +if(typeof a!="object"){if(typeof a=="function")return J.E.prototype +return a}if(a instanceof A.i)return a +return J.bJ(a)}, +bI(a){if(a==null)return a +if(a.constructor==Array)return J.u.prototype +if(typeof a!="object"){if(typeof a=="function")return J.E.prototype +return a}if(a instanceof A.i)return a +return J.bJ(a)}, +ej(a){if(typeof a=="string")return J.S.prototype +if(a==null)return a +if(!(a instanceof A.i))return J.a4.prototype +return a}, +ek(a){if(a==null)return a +if(typeof a!="object"){if(typeof a=="function")return J.E.prototype +return a}if(a instanceof A.i)return a +return J.bJ(a)}, +b8(a,b){if(a==null)return b==null +if(typeof a!="object")return b!=null&&a===b +return J.a1(a).C(a,b)}, +d6(a,b){if(typeof b==="number")if(a.constructor==Array||A.es(a,a[v.dispatchPropertyName]))if(b>>>0===b&&b").q(c).h("V<1,2>"))}, +u(a,b){if(!(b0)return a[0] +throw A.c(A.di())}, +al(a,b){var t,s +A.Y(a).h("a_(1)").a(b) +t=a.length +for(s=0;s"))}, +gn(a){return A.aQ(a)}, +gj(a){return a.length}, +E(a,b,c){A.Y(a).c.a(c) +if(!!a.immutable$list)A.b7(A.cz("indexed set")) +if(!(b>=0&&b=q){s.sO(null) +return!1}s.sO(r[t]);++s.c +return!0}, +sO(a){this.d=this.$ti.h("1?").a(a)}, +$ix:1} +J.aL.prototype={ +i(a){if(a===0&&1/a<0)return"-0.0" +else return""+a}, +gn(a){var t,s,r,q,p=a|0 +if(a===p)return p&536870911 +t=Math.abs(a) +s=Math.log(t)/0.6931471805599453|0 +r=Math.pow(2,s) +q=t<1?t/r:r/t +return((q*9007199254740992|0)+(q*3542243181176521|0))*599197+s*1259&536870911}, +gA(a){return A.a0(u.H)}, +$ib6:1} +J.ae.prototype={ +gA(a){return A.a0(u.S)}, +$iI:1, +$icb:1} +J.aK.prototype={ +gA(a){return A.a0(u.i)}, +$iI:1} +J.S.prototype={ +F(a,b){if(b<0)throw A.c(A.b5(a,b)) +if(b>=a.length)A.b7(A.b5(a,b)) +return a.charCodeAt(b)}, +T(a,b){if(b>=a.length)throw A.c(A.b5(a,b)) +return a.charCodeAt(b)}, +a8(a,b){return a+b}, +av(a,b,c){u.E.a(b) +return A.ce(a,b,c,0)}, +a9(a,b,c){return a.substring(b,A.dt(b,c,a.length))}, +aw(a){var t,s,r,q=a.trim(),p=q.length +if(p===0)return q +if(this.T(q,0)===133){t=J.dk(q,1) +if(t===p)return""}else t=0 +s=p-1 +r=this.F(q,s)===133?J.dl(q,s):p +if(t===0&&r===p)return q +return q.substring(t,r)}, +i(a){return a}, +gn(a){var t,s,r +for(t=a.length,s=0,r=0;r>6}s=s+((s&67108863)<<3)&536870911 +s^=s>>11 +return s+((s&16383)<<15)&536870911}, +gA(a){return A.a0(u.N)}, +gj(a){return a.length}, +$iI:1, +$iaO:1, +$ih:1} +A.bk.prototype={ +i(a){return"LateInitializationError: "+this.a}} +A.br.prototype={} +A.f.prototype={} +A.B.prototype={ +gp(a){var t=this +return new A.F(t,t.gj(t),t.$ti.h("F"))}, +v(a,b){var t,s,r,q,p,o=this +o.$ti.h("~(B.E)").a(b) +t=o.a +s=J.c9(t) +r=s.gj(t) +for(q=o.b,p=0;p=p){s.sD(null) +return!1}s.sD(q.u(r,t));++s.c +return!0}, +sD(a){this.d=this.$ti.h("1?").a(a)}, +$ix:1} +A.U.prototype={ +gp(a){var t=A.m(this) +return new A.aj(J.b9(this.a),this.b,t.h("@<1>").q(t.z[1]).h("aj<1,2>"))}, +gj(a){return J.ay(this.a)}} +A.ab.prototype={$if:1} +A.aj.prototype={ +l(){var t=this,s=t.b +if(s.l()){t.sD(t.c.$1(s.gm())) +return!0}t.sD(null) +return!1}, +gm(){var t=this.a +return t==null?this.$ti.z[1].a(t):t}, +sD(a){this.a=this.$ti.h("2?").a(a)}, +$ix:1} +A.V.prototype={ +gj(a){return J.ay(this.a)}, +u(a,b){return this.b.$1(J.d7(this.a,b))}} +A.aq.prototype={ +ga6(){return this.a}, +ga7(){return this.b}, +$r:"+(1,2)", +$s:1} +A.Q.prototype={ +i(a){var t=this.constructor,s=t==null?null:t.name +return"Closure '"+A.d1(s==null?"unknown":s)+"'"}, +gaz(){return this}, +$C:"$1", +$R:1, +$D:null} +A.ba.prototype={$C:"$2",$R:2} +A.bu.prototype={} +A.bt.prototype={ +i(a){var t=this.$static_name +if(t==null)return"Closure of unknown static method" +return"Closure '"+A.d1(t)+"'"}} +A.aa.prototype={ +C(a,b){if(b==null)return!1 +if(this===b)return!0 +if(!(b instanceof A.aa))return!1 +return this.$_target===b.$_target&&this.a===b.a}, +gn(a){return(A.cZ(this.a)^A.aQ(this.$_target))>>>0}, +i(a){return"Closure '"+this.$_name+"' of "+("Instance of '"+A.bo(this.a)+"'")}} +A.bA.prototype={ +i(a){return"Reading static variable '"+this.a+"' during its initialization"}} +A.bq.prototype={ +i(a){return"RuntimeError: "+this.a}} +A.bz.prototype={ +i(a){return"Assertion failed: "+A.aF(this.a)}} +A.ag.prototype={ +gj(a){return this.a}, +gN(){return new A.ah(this,A.m(this).h("ah<1>"))}, +t(a,b){var t,s,r,q,p=null +if(typeof b=="string"){t=this.b +if(t==null)return p +s=t[b] +r=s==null?p:s.b +return r}else if(typeof b=="number"&&(b&0x3fffffff)===b){q=this.c +if(q==null)return p +s=q[b] +r=s==null?p:s.b +return r}else return this.aq(b)}, +aq(a){var t,s,r=this.d +if(r==null)return null +t=r[this.a0(a)] +s=this.a1(t,a) +if(s<0)return null +return t[s].b}, +E(a,b,c){var t,s,r=this,q=A.m(r) +q.c.a(b) +q.z[1].a(c) +if(typeof b=="string"){t=r.b +r.P(t==null?r.b=r.J():t,b,c)}else if(typeof b=="number"&&(b&0x3fffffff)===b){s=r.c +r.P(s==null?r.c=r.J():s,b,c)}else r.ar(b,c)}, +ar(a,b){var t,s,r,q,p=this,o=A.m(p) +o.c.a(a) +o.z[1].a(b) +t=p.d +if(t==null)t=p.d=p.J() +s=p.a0(a) +r=t[s] +if(r==null)t[s]=[p.G(a,b)] +else{q=p.a1(r,a) +if(q>=0)r[q].b=b +else r.push(p.G(a,b))}}, +v(a,b){var t,s,r=this +A.m(r).h("~(1,2)").a(b) +t=r.e +s=r.r +for(;t!=null;){b.$2(t.a,t.b) +if(s!==r.r)throw A.c(A.R(r)) +t=t.c}}, +P(a,b,c){var t,s=A.m(this) +s.c.a(b) +s.z[1].a(c) +t=a[b] +if(t==null)a[b]=this.G(b,c) +else t.b=c}, +G(a,b){var t=this,s=A.m(t),r=new A.bl(s.c.a(a),s.z[1].a(b)) +if(t.e==null)t.e=t.f=r +else t.f=t.f.c=r;++t.a +t.r=t.r+1&1073741823 +return r}, +a0(a){return J.M(a)&0x3fffffff}, +a1(a,b){var t,s +if(a==null)return-1 +t=a.length +for(s=0;s"]=t +delete t[""] +return t}} +A.bl.prototype={} +A.ah.prototype={ +gj(a){return this.a.a}, +gp(a){var t=this.a,s=new A.ai(t,t.r,this.$ti.h("ai<1>")) +s.c=t.e +return s}} +A.ai.prototype={ +gm(){return this.d}, +l(){var t,s=this,r=s.a +if(s.b!==r.r)throw A.c(A.R(r)) +t=s.c +if(t==null){s.sR(null) +return!1}else{s.sR(t.a) +s.c=t.c +return!0}}, +sR(a){this.d=this.$ti.h("1?").a(a)}, +$ix:1} +A.bK.prototype={ +$1(a){return this.a(a)}, +$S:0} +A.bL.prototype={ +$2(a,b){return this.a(a,b)}, +$S:1} +A.bM.prototype={ +$1(a){return this.a(A.b3(a))}, +$S:2} +A.X.prototype={ +i(a){return this.Y(!1)}, +Y(a){var t,s,r,q,p,o=this.ah(),n=this.W(),m=(a?""+"Record ":"")+"(" +for(t=o.length,s="",r=0;r0;){--r;--t +B.a.E(l,r,s[t])}}l=A.dn(l,!1,u.K) +l.fixed$length=Array +l.immutable$list=Array +return l}, +$ibp:1} +A.a5.prototype={ +W(){return[this.a,this.b]}, +C(a,b){if(b==null)return!1 +return b instanceof A.a5&&this.$s===b.$s&&J.b8(this.a,b.a)&&J.b8(this.b,b.b)}, +gn(a){return A.dr(this.$s,this.a,this.b,B.c)}} +A.aM.prototype={ +i(a){return"RegExp/"+this.a+"/"+this.b.flags}, +gaj(){var t=this,s=t.c +if(s!=null)return s +s=t.b +return t.c=A.cp(t.a,s.multiline,!s.ignoreCase,s.unicode,s.dotAll,!0)}, +ap(a){var t=this.b.exec(a) +if(t==null)return null +return new A.ao(t)}, +V(a,b){var t,s=this.gaj() +if(s==null)s=u.K.a(s) +s.lastIndex=b +t=s.exec(a) +if(t==null)return null +return new A.ao(t)}, +$iaO:1, +$idu:1} +A.ao.prototype={ +ga_(){var t=this.b +return t.index+t[0].length}, +a4(a){var t,s=this.b.groups +if(s!=null){t=s[a] +if(t!=null||a in s)return t}throw A.c(A.cg(a,"name","Not a capture group name"))}, +$ibY:1} +A.by.prototype={ +gm(){var t=this.d +return t==null?u.d.a(t):t}, +l(){var t,s,r,q,p,o=this,n=o.b +if(n==null)return!1 +t=o.c +s=n.length +if(t<=s){r=o.a +q=r.V(n,t) +if(q!=null){o.d=q +p=q.ga_() +if(q.b.index===p){if(r.b.unicode){t=o.c +r=t+1 +if(r=55296&&t<=56319){t=B.b.F(n,r) +t=t>=56320&&t<=57343}else t=!1}else t=!1}else t=!1 +p=(t?p+1:p)+1}o.c=p +return!0}}o.b=o.d=null +return!1}, +$ix:1} +A.y.prototype={ +h(a){return A.av(v.typeUniverse,this,a)}, +q(a){return A.cL(v.typeUniverse,this,a)}} +A.aW.prototype={} +A.bF.prototype={ +i(a){return A.p(this.a,null)}} +A.bC.prototype={ +i(a){return this.a}} +A.b_.prototype={} +A.an.prototype={ +gp(a){var t=this,s=new A.W(t,t.r,A.m(t).h("W<1>")) +s.c=t.e +return s}, +gj(a){return this.a}, +k(a,b){var t,s,r=this +A.m(r).c.a(b) +if(typeof b=="string"&&b!=="__proto__"){t=r.b +return r.S(t==null?r.b=A.c0():t,b)}else if(typeof b=="number"&&(b&1073741823)===b){s=r.c +return r.S(s==null?r.c=A.c0():s,b)}else return r.ad(b)}, +ad(a){var t,s,r,q=this +A.m(q).c.a(a) +t=q.d +if(t==null)t=q.d=A.c0() +s=q.af(a) +r=t[s] +if(r==null)t[s]=[q.K(a)] +else{if(q.ai(r,a)>=0)return!1 +r.push(q.K(a))}return!0}, +S(a,b){A.m(this).c.a(b) +if(u.M.a(a[b])!=null)return!1 +a[b]=this.K(b) +return!0}, +K(a){var t=this,s=new A.aX(A.m(t).c.a(a)) +if(t.e==null)t.e=t.f=s +else t.f=t.f.b=s;++t.a +t.r=t.r+1&1073741823 +return s}, +af(a){return J.M(a)&1073741823}, +ai(a,b){var t,s=a.length +for(t=0;t"))}, +u(a,b){return this.t(a,b)}, +i(a){return A.bW(a,"[","]")}, +$if:1, +$ie:1, +$iv:1} +A.n.prototype={ +v(a,b){var t,s,r,q=A.m(this) +q.h("~(n.K,n.V)").a(b) +for(t=J.b9(this.gN()),q=q.h("n.V");t.l();){s=t.gm() +r=this.t(0,s) +b.$2(s,r==null?q.a(r):r)}}, +gan(a){return J.d9(this.gN(),new A.bm(this),A.m(this).h("G"))}, +gj(a){return J.ay(this.gN())}, +i(a){return A.cr(this)}} +A.bm.prototype={ +$1(a){var t=this.a,s=A.m(t) +s.h("n.K").a(a) +t=t.t(0,a) +if(t==null)t=s.h("n.V").a(t) +return new A.G(a,t,s.h("@").q(s.h("n.V")).h("G<1,2>"))}, +$S(){return A.m(this.a).h("G(n.K)")}} +A.bn.prototype={ +$2(a,b){var t,s=this.a +if(!s.a)this.b.a+=", " +s.a=!1 +s=this.b +t=s.a+=A.j(a) +s.a=t+": " +s.a+=A.j(b)}, +$S:3} +A.H.prototype={ +i(a){return A.bW(this,"{","}")}, +M(a,b){var t,s,r,q,p=this.gp(this) +if(!p.l())return"" +t=p.d +s=J.a8(t==null?p.$ti.c.a(t):t) +if(!p.l())return s +t=p.$ti.c +if(b.length===0){r=s +do{q=p.d +r+=A.j(q==null?t.a(q):q)}while(p.l()) +t=r}else{r=s +do{q=p.d +r=r+b+A.j(q==null?t.a(q):q)}while(p.l()) +t=r}return t.charCodeAt(0)==0?t:t}, +$if:1, +$ie:1, +$iC:1} +A.ar.prototype={} +A.bB.prototype={ +i(a){return this.ag()}} +A.bg.prototype={} +A.aB.prototype={ +i(a){var t=this.a +if(t!=null)return"Assertion failed: "+A.aF(t) +return"Assertion failed"}} +A.bv.prototype={} +A.a3.prototype={ +gI(){return"Invalid argument"+(!this.a?"(s)":"")}, +gH(){return""}, +i(a){var t=this,s=t.c,r=s==null?"":" ("+s+")",q=t.d,p=q==null?"":": "+q,o=t.gI()+r+p +if(!t.a)return o +return o+t.gH()+": "+A.aF(t.gL())}, +gL(){return this.b}} +A.aR.prototype={ +gL(){return A.dO(this.b)}, +gI(){return"RangeError"}, +gH(){var t,s=this.e,r=this.f +if(s==null)t=r!=null?": Not less than or equal to "+A.j(r):"" +else if(r==null)t=": Not greater than or equal to "+A.j(s) +else if(r>s)t=": Not in inclusive range "+A.j(s)+".."+A.j(r) +else t=r78)r=B.b.a9(r,0,75)+"..." +return s+"\n"+r}} +A.e.prototype={ +a3(a,b,c){var t=A.m(this) +return A.dq(this,t.q(c).h("1(e.E)").a(b),t.h("e.E"),c)}, +v(a,b){var t +A.m(this).h("~(e.E)").a(b) +for(t=this.gp(this);t.l();)b.$1(t.gm())}, +gj(a){var t,s=this.gp(this) +for(t=0;s.l();)++t +return t}, +i(a){return A.dj(this,"(",")")}} +A.G.prototype={ +i(a){return"MapEntry("+A.j(this.a)+": "+A.j(this.b)+")"}} +A.al.prototype={ +gn(a){return A.i.prototype.gn.call(this,this)}, +i(a){return"null"}} +A.i.prototype={$ii:1, +C(a,b){return this===b}, +gn(a){return A.aQ(this)}, +i(a){return"Instance of '"+A.bo(this)+"'"}, +gA(a){return A.em(this)}, +toString(){return this.i(this)}} +A.aU.prototype={ +gj(a){return this.a.length}, +i(a){var t=this.a +return t.charCodeAt(0)==0?t:t}} +A.a.prototype={} +A.az.prototype={ +i(a){var t=String(a) +t.toString +return t}} +A.aA.prototype={ +i(a){var t=String(a) +t.toString +return t}} +A.A.prototype={ +gj(a){return a.length}} +A.be.prototype={ +i(a){var t=String(a) +t.toString +return t}} +A.bf.prototype={ +gj(a){var t=a.length +t.toString +return t}} +A.am.prototype={ +gj(a){return this.a.length}, +t(a,b){var t=this.a +if(!(b>=0&&b>>0!==b||b>=t +s.toString +if(s)throw A.c(A.bV(b,t,a,null)) +t=a[b] +t.toString +return t}, +u(a,b){if(!(b>>0!==b||b>=t +s.toString +if(s)throw A.c(A.bV(b,t,a,null)) +t=a[b] +t.toString +return t}, +u(a,b){if(!(b"))}} +A.ac.prototype={ +l(){var t=this,s=t.c+1,r=t.b +if(s)","a_(i?)","~(h)","+(k,z)(k)","k(@)","z(@)","~(G)"],interceptorsByTag:null,leafTags:null,arrayRti:Symbol("$ti"),rttc:{"2;":(a,b)=>c=>c instanceof A.aq&&a.b(c.a)&&b.b(c.b)}} +A.dK(v.typeUniverse,JSON.parse('{"aP":"T","a4":"T","E":"T","eG":"b","eN":"b","eH":"a","eQ":"a","eO":"d","eL":"d","eI":"A","eR":"A","eP":"k","aJ":{"a_":[],"I":[]},"af":{"I":[]},"u":{"v":["1"],"f":["1"],"e":["1"]},"bj":{"u":["1"],"v":["1"],"f":["1"],"e":["1"]},"a9":{"x":["1"]},"aL":{"b6":[]},"ae":{"cb":[],"b6":[],"I":[]},"aK":{"b6":[],"I":[]},"S":{"h":[],"aO":[],"I":[]},"f":{"e":["1"]},"B":{"f":["1"],"e":["1"]},"F":{"x":["1"]},"U":{"e":["2"],"e.E":"2"},"ab":{"U":["1","2"],"f":["2"],"e":["2"],"e.E":"2"},"aj":{"x":["2"]},"V":{"B":["2"],"f":["2"],"e":["2"],"e.E":"2","B.E":"2"},"aq":{"a5":[],"X":[],"bp":[]},"ag":{"n":["1","2"],"n.K":"1","n.V":"2"},"ah":{"f":["1"],"e":["1"],"e.E":"1"},"ai":{"x":["1"]},"X":{"bp":[]},"a5":{"X":[],"bp":[]},"aM":{"du":[],"aO":[]},"ao":{"bY":[]},"by":{"x":["bY"]},"an":{"H":["1"],"C":["1"],"f":["1"],"e":["1"]},"W":{"x":["1"]},"r":{"v":["1"],"f":["1"],"e":["1"]},"H":{"C":["1"],"f":["1"],"e":["1"]},"ar":{"H":["1"],"C":["1"],"f":["1"],"e":["1"]},"v":{"f":["1"],"e":["1"]},"C":{"f":["1"],"e":["1"]},"h":{"aO":[]},"k":{"d":[]},"a":{"k":[],"d":[]},"az":{"k":[],"d":[]},"aA":{"k":[],"d":[]},"A":{"d":[]},"am":{"r":["1"],"v":["1"],"f":["1"],"e":["1"],"r.E":"1"},"aH":{"k":[],"d":[]},"ak":{"r":["d"],"D":["d"],"v":["d"],"aN":["d"],"f":["d"],"e":["d"],"r.E":"d","D.E":"d"},"aT":{"k":[],"d":[]},"ap":{"r":["d"],"D":["d"],"v":["d"],"aN":["d"],"f":["d"],"e":["d"],"r.E":"d","D.E":"d"},"aV":{"H":["h"],"C":["h"],"f":["h"],"e":["h"]},"ac":{"x":["1"]},"aE":{"H":["h"],"C":["h"],"f":["h"],"e":["h"]},"aD":{"H":["h"],"C":["h"],"f":["h"],"e":["h"]},"b":{"k":[],"d":[]}}')) +A.dJ(v.typeUniverse,JSON.parse('{"f":1,"ar":1}')) +var u=(function rtii(){var t=A.cX +return{j:t("z"),O:t("f<@>"),h:t("k"),Z:t("eM"),U:t("e<@>"),f:t("u"),s:t("u"),b:t("u<@>"),T:t("af"),g:t("E"),p:t("aN<@>"),k:t("G"),G:t("d"),P:t("al"),K:t("i"),E:t("aO"),L:t("bp"),F:t("+()"),d:t("bY"),C:t("C"),N:t("h"),R:t("I"),o:t("a4"),V:t("am"),y:t("a_"),i:t("eg"),m:t("@(C)"),S:t("cb"),A:t("0&*"),_:t("i*"),Q:t("cm?"),v:t("v?"),X:t("i?"),M:t("aX?"),H:t("b6")}})();(function constants(){B.r=J.ad.prototype +B.a=J.u.prototype +B.d=J.ae.prototype +B.b=J.S.prototype +B.t=J.E.prototype +B.u=J.o.prototype +B.k=J.aP.prototype +B.e=J.a4.prototype +B.f=function getTagFallback(o) { + var s = Object.prototype.toString.call(o); + return s.substring(8, s.length - 1); +} +B.l=function() { + var toStringFunction = Object.prototype.toString; + function getTag(o) { + var s = toStringFunction.call(o); + return s.substring(8, s.length - 1); + } + function getUnknownTag(object, tag) { + if (/^HTML[A-Z].*Element$/.test(tag)) { + var name = toStringFunction.call(object); + if (name == "[object Object]") return null; + return "HTMLElement"; + } + } + function getUnknownTagGenericBrowser(object, tag) { + if (self.HTMLElement && object instanceof HTMLElement) return "HTMLElement"; + return getUnknownTag(object, tag); + } + function prototypeForTag(tag) { + if (typeof window == "undefined") return null; + if (typeof window[tag] == "undefined") return null; + var constructor = window[tag]; + if (typeof constructor != "function") return null; + return constructor.prototype; + } + function discriminator(tag) { return null; } + var isBrowser = typeof navigator == "object"; + return { + getTag: getTag, + getUnknownTag: isBrowser ? getUnknownTagGenericBrowser : getUnknownTag, + prototypeForTag: prototypeForTag, + discriminator: discriminator }; +} +B.q=function(getTagFallback) { + return function(hooks) { + if (typeof navigator != "object") return hooks; + var ua = navigator.userAgent; + if (ua.indexOf("DumpRenderTree") >= 0) return hooks; + if (ua.indexOf("Chrome") >= 0) { + function confirm(p) { + return typeof window == "object" && window[p] && window[p].name == p; + } + if (confirm("Window") && confirm("HTMLElement")) return hooks; + } + hooks.getTag = getTagFallback; + }; +} +B.m=function(hooks) { + if (typeof dartExperimentalFixupGetTag != "function") return hooks; + hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag); +} +B.n=function(hooks) { + var getTag = hooks.getTag; + var prototypeForTag = hooks.prototypeForTag; + function getTagFixed(o) { + var tag = getTag(o); + if (tag == "Document") { + if (!!o.xmlVersion) return "!Document"; + return "!HTMLDocument"; + } + return tag; + } + function prototypeForTagFixed(tag) { + if (tag == "Document") return null; + return prototypeForTag(tag); + } + hooks.getTag = getTagFixed; + hooks.prototypeForTag = prototypeForTagFixed; +} +B.p=function(hooks) { + var userAgent = typeof navigator == "object" ? navigator.userAgent : ""; + if (userAgent.indexOf("Firefox") == -1) return hooks; + var getTag = hooks.getTag; + var quickMap = { + "BeforeUnloadEvent": "Event", + "DataTransfer": "Clipboard", + "GeoGeolocation": "Geolocation", + "Location": "!Location", + "WorkerMessageEvent": "MessageEvent", + "XMLDocument": "!Document"}; + function getTagFirefox(o) { + var tag = getTag(o); + return quickMap[tag] || tag; + } + hooks.getTag = getTagFirefox; +} +B.o=function(hooks) { + var userAgent = typeof navigator == "object" ? navigator.userAgent : ""; + if (userAgent.indexOf("Trident/") == -1) return hooks; + var getTag = hooks.getTag; + var quickMap = { + "BeforeUnloadEvent": "Event", + "DataTransfer": "Clipboard", + "HTMLDDElement": "HTMLElement", + "HTMLDTElement": "HTMLElement", + "HTMLPhraseElement": "HTMLElement", + "Position": "Geoposition" + }; + function getTagIE(o) { + var tag = getTag(o); + var newTag = quickMap[tag]; + if (newTag) return newTag; + if (tag == "Object") { + if (window.DataView && (o instanceof window.DataView)) return "DataView"; + } + return tag; + } + function prototypeForTagIE(tag) { + var constructor = window[tag]; + if (constructor == null) return null; + return constructor.prototype; + } + hooks.getTag = getTagIE; + hooks.prototypeForTag = prototypeForTagIE; +} +B.h=function(hooks) { return hooks; } + +B.c=new A.br() +B.i=new A.aI("url") +B.j=new A.aI("classNames") +B.v=A.eF("i")})();(function staticFields(){$.bD=null +$.w=A.Z([],u.f) +$.cs=null +$.cj=null +$.ci=null +$.cY=null +$.cV=null +$.d0=null +$.bH=null +$.bN=null +$.ca=null +$.bE=A.Z([],A.cX("u?>"))})();(function lazyInitializers(){var t=hunkHelpers.lazyFinal +t($,"eK","d3",()=>A.el("_$dart_dartClosure")) +t($,"f1","bU",()=>A.cZ(B.v)) +t($,"eJ","d2",()=>A.aS("^\\S+$")) +t($,"f3","d4",()=>A.aS("^language-")) +t($,"f4","d5",()=>A.aS("(?.*?)=(?.*)"))})();(function nativeSupport(){!function(){var t=function(a){var n={} +n[a]=1 +return Object.keys(hunkHelpers.convertToFastObject(n))[0]} +v.getIsolateTag=function(a){return t("___dart_"+a+v.isolateTag)} +var s="___dart_isolate_tags_" +var r=Object[s]||(Object[s]=Object.create(null)) +var q="_ZxYxX" +for(var p=0;;p++){var o=t(q+"_"+p+"_") +if(!(o in r)){r[o]=1 +v.isolateTag=o +break}}v.dispatchPropertyName=v.getIsolateTag("dispatch_record")}() +hunkHelpers.setOrUpdateInterceptorsByTag({ApplicationCacheErrorEvent:J.o,DOMError:J.o,ErrorEvent:J.o,Event:J.o,InputEvent:J.o,SubmitEvent:J.o,MediaError:J.o,NavigatorUserMediaError:J.o,OverconstrainedError:J.o,PositionError:J.o,GeolocationPositionError:J.o,SensorErrorEvent:J.o,SpeechRecognitionError:J.o,HTMLAudioElement:A.a,HTMLBRElement:A.a,HTMLBaseElement:A.a,HTMLBodyElement:A.a,HTMLButtonElement:A.a,HTMLCanvasElement:A.a,HTMLContentElement:A.a,HTMLDListElement:A.a,HTMLDataElement:A.a,HTMLDataListElement:A.a,HTMLDetailsElement:A.a,HTMLDialogElement:A.a,HTMLDivElement:A.a,HTMLEmbedElement:A.a,HTMLFieldSetElement:A.a,HTMLHRElement:A.a,HTMLHeadElement:A.a,HTMLHeadingElement:A.a,HTMLHtmlElement:A.a,HTMLIFrameElement:A.a,HTMLImageElement:A.a,HTMLInputElement:A.a,HTMLLIElement:A.a,HTMLLabelElement:A.a,HTMLLegendElement:A.a,HTMLLinkElement:A.a,HTMLMapElement:A.a,HTMLMediaElement:A.a,HTMLMenuElement:A.a,HTMLMetaElement:A.a,HTMLMeterElement:A.a,HTMLModElement:A.a,HTMLOListElement:A.a,HTMLObjectElement:A.a,HTMLOptGroupElement:A.a,HTMLOptionElement:A.a,HTMLOutputElement:A.a,HTMLParagraphElement:A.a,HTMLParamElement:A.a,HTMLPictureElement:A.a,HTMLPreElement:A.a,HTMLProgressElement:A.a,HTMLQuoteElement:A.a,HTMLScriptElement:A.a,HTMLShadowElement:A.a,HTMLSlotElement:A.a,HTMLSourceElement:A.a,HTMLSpanElement:A.a,HTMLStyleElement:A.a,HTMLTableCaptionElement:A.a,HTMLTableCellElement:A.a,HTMLTableDataCellElement:A.a,HTMLTableHeaderCellElement:A.a,HTMLTableColElement:A.a,HTMLTableElement:A.a,HTMLTableRowElement:A.a,HTMLTableSectionElement:A.a,HTMLTemplateElement:A.a,HTMLTextAreaElement:A.a,HTMLTimeElement:A.a,HTMLTitleElement:A.a,HTMLTrackElement:A.a,HTMLUListElement:A.a,HTMLUnknownElement:A.a,HTMLVideoElement:A.a,HTMLDirectoryElement:A.a,HTMLFontElement:A.a,HTMLFrameElement:A.a,HTMLFrameSetElement:A.a,HTMLMarqueeElement:A.a,HTMLElement:A.a,HTMLAnchorElement:A.az,HTMLAreaElement:A.aA,CDATASection:A.A,CharacterData:A.A,Comment:A.A,ProcessingInstruction:A.A,Text:A.A,DOMException:A.be,DOMTokenList:A.bf,MathMLElement:A.k,Element:A.k,EventTarget:A.aG,HTMLFormElement:A.aH,Document:A.d,DocumentFragment:A.d,HTMLDocument:A.d,ShadowRoot:A.d,XMLDocument:A.d,Attr:A.d,DocumentType:A.d,Node:A.d,NodeList:A.ak,RadioNodeList:A.ak,HTMLSelectElement:A.aT,NamedNodeMap:A.ap,MozNamedAttrMap:A.ap,SVGAElement:A.b,SVGAnimateElement:A.b,SVGAnimateMotionElement:A.b,SVGAnimateTransformElement:A.b,SVGAnimationElement:A.b,SVGCircleElement:A.b,SVGClipPathElement:A.b,SVGDefsElement:A.b,SVGDescElement:A.b,SVGDiscardElement:A.b,SVGEllipseElement:A.b,SVGFEBlendElement:A.b,SVGFEColorMatrixElement:A.b,SVGFEComponentTransferElement:A.b,SVGFECompositeElement:A.b,SVGFEConvolveMatrixElement:A.b,SVGFEDiffuseLightingElement:A.b,SVGFEDisplacementMapElement:A.b,SVGFEDistantLightElement:A.b,SVGFEFloodElement:A.b,SVGFEFuncAElement:A.b,SVGFEFuncBElement:A.b,SVGFEFuncGElement:A.b,SVGFEFuncRElement:A.b,SVGFEGaussianBlurElement:A.b,SVGFEImageElement:A.b,SVGFEMergeElement:A.b,SVGFEMergeNodeElement:A.b,SVGFEMorphologyElement:A.b,SVGFEOffsetElement:A.b,SVGFEPointLightElement:A.b,SVGFESpecularLightingElement:A.b,SVGFESpotLightElement:A.b,SVGFETileElement:A.b,SVGFETurbulenceElement:A.b,SVGFilterElement:A.b,SVGForeignObjectElement:A.b,SVGGElement:A.b,SVGGeometryElement:A.b,SVGGraphicsElement:A.b,SVGImageElement:A.b,SVGLineElement:A.b,SVGLinearGradientElement:A.b,SVGMarkerElement:A.b,SVGMaskElement:A.b,SVGMetadataElement:A.b,SVGPathElement:A.b,SVGPatternElement:A.b,SVGPolygonElement:A.b,SVGPolylineElement:A.b,SVGRadialGradientElement:A.b,SVGRectElement:A.b,SVGScriptElement:A.b,SVGSetElement:A.b,SVGStopElement:A.b,SVGStyleElement:A.b,SVGElement:A.b,SVGSVGElement:A.b,SVGSwitchElement:A.b,SVGSymbolElement:A.b,SVGTSpanElement:A.b,SVGTextContentElement:A.b,SVGTextElement:A.b,SVGTextPathElement:A.b,SVGTextPositioningElement:A.b,SVGTitleElement:A.b,SVGUseElement:A.b,SVGViewElement:A.b,SVGGradientElement:A.b,SVGComponentTransferFunctionElement:A.b,SVGFEDropShadowElement:A.b,SVGMPathElement:A.b}) +hunkHelpers.setOrUpdateLeafTags({ApplicationCacheErrorEvent:true,DOMError:true,ErrorEvent:true,Event:true,InputEvent:true,SubmitEvent:true,MediaError:true,NavigatorUserMediaError:true,OverconstrainedError:true,PositionError:true,GeolocationPositionError:true,SensorErrorEvent:true,SpeechRecognitionError:true,HTMLAudioElement:true,HTMLBRElement:true,HTMLBaseElement:true,HTMLBodyElement:true,HTMLButtonElement:true,HTMLCanvasElement:true,HTMLContentElement:true,HTMLDListElement:true,HTMLDataElement:true,HTMLDataListElement:true,HTMLDetailsElement:true,HTMLDialogElement:true,HTMLDivElement:true,HTMLEmbedElement:true,HTMLFieldSetElement:true,HTMLHRElement:true,HTMLHeadElement:true,HTMLHeadingElement:true,HTMLHtmlElement:true,HTMLIFrameElement:true,HTMLImageElement:true,HTMLInputElement:true,HTMLLIElement:true,HTMLLabelElement:true,HTMLLegendElement:true,HTMLLinkElement:true,HTMLMapElement:true,HTMLMediaElement:true,HTMLMenuElement:true,HTMLMetaElement:true,HTMLMeterElement:true,HTMLModElement:true,HTMLOListElement:true,HTMLObjectElement:true,HTMLOptGroupElement:true,HTMLOptionElement:true,HTMLOutputElement:true,HTMLParagraphElement:true,HTMLParamElement:true,HTMLPictureElement:true,HTMLPreElement:true,HTMLProgressElement:true,HTMLQuoteElement:true,HTMLScriptElement:true,HTMLShadowElement:true,HTMLSlotElement:true,HTMLSourceElement:true,HTMLSpanElement:true,HTMLStyleElement:true,HTMLTableCaptionElement:true,HTMLTableCellElement:true,HTMLTableDataCellElement:true,HTMLTableHeaderCellElement:true,HTMLTableColElement:true,HTMLTableElement:true,HTMLTableRowElement:true,HTMLTableSectionElement:true,HTMLTemplateElement:true,HTMLTextAreaElement:true,HTMLTimeElement:true,HTMLTitleElement:true,HTMLTrackElement:true,HTMLUListElement:true,HTMLUnknownElement:true,HTMLVideoElement:true,HTMLDirectoryElement:true,HTMLFontElement:true,HTMLFrameElement:true,HTMLFrameSetElement:true,HTMLMarqueeElement:true,HTMLElement:false,HTMLAnchorElement:true,HTMLAreaElement:true,CDATASection:true,CharacterData:true,Comment:true,ProcessingInstruction:true,Text:true,DOMException:true,DOMTokenList:true,MathMLElement:true,Element:false,EventTarget:false,HTMLFormElement:true,Document:true,DocumentFragment:true,HTMLDocument:true,ShadowRoot:true,XMLDocument:true,Attr:true,DocumentType:true,Node:false,NodeList:true,RadioNodeList:true,HTMLSelectElement:true,NamedNodeMap:true,MozNamedAttrMap:true,SVGAElement:true,SVGAnimateElement:true,SVGAnimateMotionElement:true,SVGAnimateTransformElement:true,SVGAnimationElement:true,SVGCircleElement:true,SVGClipPathElement:true,SVGDefsElement:true,SVGDescElement:true,SVGDiscardElement:true,SVGEllipseElement:true,SVGFEBlendElement:true,SVGFEColorMatrixElement:true,SVGFEComponentTransferElement:true,SVGFECompositeElement:true,SVGFEConvolveMatrixElement:true,SVGFEDiffuseLightingElement:true,SVGFEDisplacementMapElement:true,SVGFEDistantLightElement:true,SVGFEFloodElement:true,SVGFEFuncAElement:true,SVGFEFuncBElement:true,SVGFEFuncGElement:true,SVGFEFuncRElement:true,SVGFEGaussianBlurElement:true,SVGFEImageElement:true,SVGFEMergeElement:true,SVGFEMergeNodeElement:true,SVGFEMorphologyElement:true,SVGFEOffsetElement:true,SVGFEPointLightElement:true,SVGFESpecularLightingElement:true,SVGFESpotLightElement:true,SVGFETileElement:true,SVGFETurbulenceElement:true,SVGFilterElement:true,SVGForeignObjectElement:true,SVGGElement:true,SVGGeometryElement:true,SVGGraphicsElement:true,SVGImageElement:true,SVGLineElement:true,SVGLinearGradientElement:true,SVGMarkerElement:true,SVGMaskElement:true,SVGMetadataElement:true,SVGPathElement:true,SVGPatternElement:true,SVGPolygonElement:true,SVGPolylineElement:true,SVGRadialGradientElement:true,SVGRectElement:true,SVGScriptElement:true,SVGSetElement:true,SVGStopElement:true,SVGStyleElement:true,SVGElement:true,SVGSVGElement:true,SVGSwitchElement:true,SVGSymbolElement:true,SVGTSpanElement:true,SVGTextContentElement:true,SVGTextElement:true,SVGTextPathElement:true,SVGTextPositioningElement:true,SVGTitleElement:true,SVGUseElement:true,SVGViewElement:true,SVGGradientElement:true,SVGComponentTransferFunctionElement:true,SVGFEDropShadowElement:true,SVGMPathElement:true})})() +convertAllToFastObject(w) +convertToFastObject($);(function(a){if(typeof document==="undefined"){a(null) +return}if(typeof document.currentScript!="undefined"){a(document.currentScript) +return}var t=document.scripts +function onLoad(b){for(var r=0;r + +Tool support is a recent addition to ollama, and not all models are compatible. Please visit the [models page](https://ollama.com/search?c=tools) to select a compatible model. + + + +## Install + +Visit the [latest release page](https://github.com/b4nst/ayo/releases/latest) and download the appropriate binary for your system. +Put the binary somewhere accessible in your PATH. + +## Add Tools + +Put a list of tools you want ayo to be able to use in the toolbox directory. +By default ayo will look into `~/.config/ayo/toolbox`. +More about tools in the [tools section](./usage/tools.md). + +## Run + +```shell,lang=shell,icon=.devicon-bash-plain +ayo explain my ~/.profile file +``` diff --git a/docs/src/usage/README.md b/docs/src/usage/README.md new file mode 100644 index 0000000..8f04b05 --- /dev/null +++ b/docs/src/usage/README.md @@ -0,0 +1 @@ +# Usage diff --git a/docs/src/usage/tools.md b/docs/src/usage/tools.md new file mode 100644 index 0000000..d3213eb --- /dev/null +++ b/docs/src/usage/tools.md @@ -0,0 +1,51 @@ +# 🧰 Tools + +Ayo can use all tools from its toolbox to take actions on your local system. + +## Toolbox + +The toolbox is a directory where ayo looks for tools to use. +By default, ayo will look into `~/.config/ayo/toolbox`. +You can change the toolbox location by setting the `AYO_TOOLBOX` environment variable. + +## Tool + +A tool is a JSON file that describes how ayo can use a command on your system. + +```json,lang=json,icon=.devicon-json-plain,filepath=~/.config/ayo/tools/cat.json +{ + "type": "function", + "function": { + "name": "cat", + "description": "Get the content of a file", + "parameters": { + "type": "object", + "properties": { + "file": { + "type": "string", + "description": "The file to read" + } + }, + "required": [ + "file" + ] + } + }, + "cmd": "cat", + "args": [ + "{{.file}}" + ] +} +``` + +Breaking down the JSON file: +- `type` is the type of tool. Currently, only `function` is supported. +- `function` describes the function which will be sent to the model. + - `name` is the name of the function. It **must** be unique in ayo's toolbox. + - `description` is a short description of the function. + - `parameters` describes the parameters of the function. + - `type` is the type of the parameters. Currently, only `object` is supported. + - `properties` describes the properties of the object. + - `required` is an array of required properties. +- `cmd` is the command to run. It will be executed using the `os/exec` package. +- `args` is an array of arguments to pass to the command. The arguments can be templated using Go's [text/template](https://pkg.go.dev/text/template) package. The template will be executed with the function's parameters values returned by the model. diff --git a/docs/theme/fonts/devicon.eot b/docs/theme/fonts/devicon.eot new file mode 100644 index 0000000..c579f05 Binary files /dev/null and b/docs/theme/fonts/devicon.eot differ diff --git a/docs/theme/fonts/devicon.svg b/docs/theme/fonts/devicon.svg new file mode 100644 index 0000000..11e6566 --- /dev/null +++ b/docs/theme/fonts/devicon.svg @@ -0,0 +1,975 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/theme/fonts/devicon.ttf b/docs/theme/fonts/devicon.ttf new file mode 100644 index 0000000..48e1886 Binary files /dev/null and b/docs/theme/fonts/devicon.ttf differ diff --git a/docs/theme/fonts/devicon.woff b/docs/theme/fonts/devicon.woff new file mode 100644 index 0000000..a5c2d9a Binary files /dev/null and b/docs/theme/fonts/devicon.woff differ