diff --git a/.appveyor-mac.yml b/.appveyor-mac.yml
deleted file mode 100644
index c20216e4e..000000000
--- a/.appveyor-mac.yml
+++ /dev/null
@@ -1,33 +0,0 @@
-version: 4.0.{build}
-branches:
- except:
- - gh-pages
- - ubuntu-ci
- - win-ci
- - wsl-ci
-skip_tags: true
-image: macos
-environment:
- APPVEYOR_SSH_KEY: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOgZaR7bVAJCsBs/yDlzNbHTvhicc1C7SeyEuVwN+Q0l
-#init:
-# - sh: curl -sflL 'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-ssh.sh' | bash -e -
-build_script:
-- sh: |
- uname -a
- curl https://download.visualstudio.microsoft.com/download/pr/62f78047-71de-460e-85ca-254f1fa848de/ecabeefdca2902f3f06819612cd9d45c/dotnet-sdk-6.0.100-osx-x64.tar.gz -o dotnet-sdk-6.0.100-osx-x64.tar.gz
- DOTNET_FILE=dotnet-sdk-6.0.100-osx-x64.tar.gz
- export DOTNET_ROOT=$(pwd)/dotnet
- mkdir -p "$DOTNET_ROOT" && tar zxf "$DOTNET_FILE" -C "$DOTNET_ROOT"
- export PATH=$PATH:$DOTNET_ROOT
- sudo rm -rf /usr/local/share/dotnet
- sudo mv dotnet /usr/local/share
- dotnet --version
-#- dotnet build src/SIPSorcery.sln --framework netcoreapp3.1
-test_script:
-# TODO: Track down why macos fails to determine the local interface for IPv6 destinations on approx. every second test run.
-# possibly to do with different vm configs but same thing is happening on both appveyor and GitHub Actions CI's.
-- dotnet test test/unit/SIPSorcery.UnitTests.csproj -c Release --framework net6.0
-#on_finish:
-# - sh: export APPVEYOR_SSH_BLOCK=true
-# - sh: curl -sflL 'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-ssh.sh' | bash -e -
-
diff --git a/.appveyor-ubuntu.yml b/.appveyor-ubuntu.yml
deleted file mode 100644
index 393951a01..000000000
--- a/.appveyor-ubuntu.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-version: 4.0.{build}
-branches:
- except:
- - gh-pages
- - mac-ci
- - win-ci
- - wsl-ci
-skip_tags: true
-image: ubuntu
-environment:
- APPVEYOR_SSH_KEY: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOgZaR7bVAJCsBs/yDlzNbHTvhicc1C7SeyEuVwN+Q0l
-init:
- - sh: curl -sflL 'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-ssh.sh' | bash -e -
-build_script:
-- uname -a
-- dotnet --version
-test_script:
-- dotnet test test/unit/SIPSorcery.UnitTests.csproj -c Release --framework netcoreapp3.1
-- dotnet test test/unit/SIPSorcery.UnitTests.csproj -c Release --framework net5
-- dotnet test test/unit/SIPSorcery.UnitTests.csproj -c Release --framework net6
-#on_finish:
-# - sh: export APPVEYOR_SSH_BLOCK=true
-# - sh: curl -sflL 'https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-ssh.sh' | bash -e -
\ No newline at end of file
diff --git a/.appveyor-wsl.yml b/.appveyor-wsl.yml
deleted file mode 100644
index 95a045fdd..000000000
--- a/.appveyor-wsl.yml
+++ /dev/null
@@ -1,21 +0,0 @@
-version: 4.0.{build}
-branches:
- except:
- - gh-pages
- - mac-ci
- - ubuntu-ci
- - win-ci
-skip_tags: true
-image: Visual Studio 2022
-build_script:
-# Install dotnet on WSL and then build and run tests.
-- cmd: |
- wsl pwd
- wsl whoami
- wsl wget https://packages.microsoft.com/config/ubuntu/21.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- wsl sudo dpkg -i packages-microsoft-prod.deb
- wsl sudo apt-get update -y
- wsl sudo apt-get install -y apt-transport-https
- wsl sudo apt-get update -y
- wsl sudo apt-get install -y dotnet-sdk-6.0
- wsl dotnet test test/unit/SIPSorcery.UnitTests.csproj -c Release --framework net6.0
diff --git a/.appveyor.yml b/.appveyor.yml
deleted file mode 100644
index b35df2859..000000000
--- a/.appveyor.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-version: 4.0.{build}
-branches:
- except:
- - gh-pages
- - mac-ci
- - ubuntu-ci
- - wsl-ci
-environment:
- access_token:
- # Token for github pages publishing.
- secure: vhHzssxBhg0t4JAiWZZ1r/RTzsbKcGn16cxj7uBoPVVEJSaLaJ+gOdaUdsfX2ooI
-image: Visual Studio 2022
-configuration: Release
-before_build:
-- cmd: nuget restore -DisableParallelProcessing src\SIPSorcery.sln
-build:
- project: src\SIPSorcery.sln
- publish_nuget: true
- publish_nuget_symbols: true
- use_snupkg_format: true
- verbosity: quiet
-after_build:
-- cmd: ECHO "after_build"
-#test:
-# assemblies:
-# only:
-# - SIPSorcery.UnitTests.dll
-# except:
-# - SIPSorcery.IntegrationTests.dll
-test_script:
- - dotnet test test/unit/SIPSorcery.UnitTests.csproj -c Release
-on_success:
- - ps: |
- if($env:APPVEYOR_REPO_BRANCH -eq "master" -and -Not $env:APPVEYOR_PULL_REQUEST_TITLE)
- {
- git config --global credential.helper store
- Add-Content "$HOME\.git-credentials" "https://$($env:access_token):x-oauth-basic@github.com`n" -NoNewline
- git config --global user.email "aaron@sipsorcery.com"
- git config --global user.name "Aaron Clauson"
- git fetch
- git checkout gh-pages -q
- git merge master
- choco install docfx -y
- & docfx docfx\docfx.json
- if ($lastexitcode -ne 0){
- throw [System.Exception] "docfx build failed with exit code $lastexitcode."
- }
- git status
- git add -A
- git commit -am "Appveyor CI updates"
- git push origin gh-pages -q
- }
-deploy:
-# Publish nuget package to nuget.org package repository.
- - provider: NuGet
- server: # If empty pushes to NuGet.org
- api_key:
- secure: aK5GHmF0JAaJZbd7x8g5G2b1qemnimHJMZ5rhQEexHsJJ2B0uVBh/W+KumXETBZz
- skip_symbols: false
- symbol_server: # If empty pushes symbols to SymbolSource.org
- artifact: /.*\.nupkg/
- on:
- APPVEYOR_REPO_TAG: true # deploy on tag push only
-# Publish nuget package to GitHub package repository.
- - provider: NuGet
- server: https://nuget.pkg.github.com/sipsorcery/index.json
- artifact: /.*(\.|\.s)nupkg/
- api_key:
- secure: E58r+OknoQn8+bsPRT6l3U2K4kfOpDiGCo1C75LkVg+R/RBHpY//J8UCXEfVvyRB
- skip_symbols: true # Symbols are already being pushed in the previous task.
- on:
- APPVEYOR_REPO_TAG: true # deploy on tag push only
diff --git a/.azure-pipelines/sipsorcery-core.yml b/.azure-pipelines/sipsorcery-core.yml
deleted file mode 100644
index 401f03c49..000000000
--- a/.azure-pipelines/sipsorcery-core.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-# .NET Desktop
-# Build and run tests for .NET Desktop or Windows classic desktop solutions.
-# Add steps that publish symbols, save build artifacts, and more:
-# https://docs.microsoft.com/azure/devops/pipelines/apps/windows/dot-net
-
-trigger:
-- master
-- fixtests
-
-# See for available images: https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/hosted?view=azure-devops&tabs=yaml
-#Reference: https://docs.microsoft.com/en-us/azure/devops/pipelines/get-started-multiplatform?view=azure-devops
-strategy:
- matrix:
- windows:
- imageName: 'windows-latest'
- linux:
- imageName: 'ubuntu-latest'
- mac:
- imageName: 'macOS-latest'
-
-pool:
- vmImage: $(imageName)
-
-variables:
- solution: 'src/SIPSorcery.sln'
- buildPlatform: 'Any CPU'
- buildConfiguration: 'Release'
-
-steps:
-
-# Install required version of .NET.
-- task: UseDotNet@2
- displayName: 'Use .NET6 sdk'
- inputs:
- packageType: sdk
- version: 6.x
- includePreviewVersions: true
- installationPath: $(Agent.ToolsDirectory)/dotnet
-
-#- task: NuGetToolInstaller@1
-
-#- task: NuGetCommand@2
-# inputs:
-# restoreSolution: '$(solution)'
-
-#Reference: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/visual-studio-build?view=azure-devops
-#- task: VSBuild@1
-# inputs:
-# solution: '$(solution)'
-# platform: '$(buildPlatform)'
-# configuration: '$(buildConfiguration)'
-
-# Reference: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/build/dotnet-core-cli?view=azure-devops
-- task: DotNetCoreCLI@2
- inputs:
- command: test
- projects: test/unit/SIPSorcery.UnitTests.csproj
- arguments: --framework net6.0
-#Reference: https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/test/vstest?view=azure-devops
-#- task: VSTest@2
-# inputs:
-# testSelector: 'testAssemblies'
-# testAssemblyVer2: '**\\SIPSorcery.UnitTests.dll'
-# platform: '$(buildPlatform)'
-# configuration: '$(buildConfiguration)'
-# testFiltercriteria: 'Category!=IPv6&Category!=transport&Category!=txintegration'
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 000000000..bdca33b44
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,25 @@
+**/.classpath
+**/.dockerignore
+**/.env
+**/.git
+**/.gitignore
+**/.project
+**/.settings
+**/.toolstarget
+**/.vs
+**/.vscode
+**/*.*proj.user
+**/*.dbmdl
+**/*.jfm
+**/azds.yaml
+**/bin
+**/charts
+**/docker-compose*
+**/Dockerfile*
+**/node_modules
+**/npm-debug.log
+**/obj
+**/secrets.dev.yaml
+**/values.dev.yaml
+LICENSE
+README.md
\ No newline at end of file
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
deleted file mode 100644
index b345f0a1b..000000000
--- a/.github/workflows/codeql-analysis.yml
+++ /dev/null
@@ -1,66 +0,0 @@
-# For most projects, this workflow file will not need changing; you simply need
-# to commit it to your repository.
-#
-# You may wish to alter this file to override the set of languages analyzed,
-# or to provide custom queries or build logic.
-name: "CodeQL"
-
-on:
- push:
- branches: [master, net6]
- pull_request:
- # The branches below must be a subset of the branches above
- branches: [master, net6]
- schedule:
- - cron: '0 14 * * 0'
-
-jobs:
- analyze:
- name: Analyze
- runs-on: ubuntu-latest
-
- strategy:
- fail-fast: false
- matrix:
- # Override automatic language detection by changing the below list
- # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python']
- language: ['csharp']
- # Learn more...
- # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v2
- with:
- # We must fetch at least the immediate parents so that if this is
- # a pull request then we can checkout the head.
- fetch-depth: 2
-
- # Initializes the CodeQL tools for scanning.
- - name: Initialize CodeQL
- uses: github/codeql-action/init@v1
- with:
- languages: ${{ matrix.language }}
- # If you wish to specify custom queries, you can do so here or in a config file.
- # By default, queries listed here will override any specified in a config file.
- # Prefix the list here with "+" to use these queries and those in the config file.
- # queries: ./path/to/local/query, your-org/your-repo/queries@main
-
- # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
- # If this step fails, then you should remove it and run the build manually (see below)
- - name: Autobuild
- uses: github/codeql-action/autobuild@v1
-
- # ℹ️ Command-line programs to run using the OS shell.
- # 📚 https://git.io/JvXDl
-
- # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
- # and modify them (or add more) to build your code if your project
- # uses a compiled language
-
- #- run: |
- # make bootstrap
- # make release
-
- - name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
\ No newline at end of file
diff --git a/.github/workflows/examples-core-win.yml b/.github/workflows/examples-core-win.yml
index 6a658bb67..08038ef02 100644
--- a/.github/workflows/examples-core-win.yml
+++ b/.github/workflows/examples-core-win.yml
@@ -1,4 +1,4 @@
-name: egs-win-x64
+name: examples-win-x64
on:
push:
@@ -9,17 +9,36 @@ jobs:
build:
runs-on: windows-2022
-
steps:
- - uses: actions/checkout@v1 # https://github.com/actions/checkout
- #- name: Setup .NET Core
- # uses: actions/setup-dotnet@v1 # https://github.com/actions/setup-dotnet
- # with:
- # dotnet-version: 3.1.100
- - name: Build with dotnet
- run: |
- dotnet build examples/sipexamples/sipexamples.sln --configuration Release
- dotnet build examples/webrtcexamples/webrtcexamples.sln --configuration Release
- dotnet build examples/icecmdline/icecmdline.sln --configuration Release
- dotnet build examples/sipcmdline/sipcmdline.sln --configuration Release
- dotnet build examples/stunserver/stunserver.sln --configuration Release
+
+ - name: Check out repository
+ uses: actions/checkout@v3
+
+ - name: Set up .NET
+ uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: '8.0.x'
+
+ - name: Build SIP Examples
+ run: |
+ dotnet build examples/sipexamples/sipexamples.sln
+
+ - name: Build WebRTC Examples
+ run: |
+ dotnet build examples/webrtcexamples/webrtcexamples.sln
+
+ - name: Build WebRTC Command Line Example
+ run: |
+ dotnet build examples/webrtccmdline/webrtccmdline.sln
+
+ - name: Build SIP Command Line Example
+ run: |
+ dotnet build examples/sipcmdline/sipcmdline.sln --configuration Release
+
+ - name: Build STUN Server Example
+ run: |
+ dotnet build examples/stunserver/stunserver.sln
+
+ - name: Build Soft Phone Example
+ run: |
+ dotnet build examples/softphone/sipsorcery.softphone.sln --configuration Release
diff --git a/.github/workflows/nuget.yml b/.github/workflows/nuget.yml
new file mode 100755
index 000000000..6c95868e0
--- /dev/null
+++ b/.github/workflows/nuget.yml
@@ -0,0 +1,47 @@
+name: Publish to Nuget
+
+on:
+ push:
+ tags:
+ - 'v*' # Triggers on tag pushes starting with 'v'
+
+jobs:
+ build-and-publish:
+ strategy:
+ matrix:
+ framework: ['net8.0']
+ runs-on: ubuntu-latest
+ steps:
+ # Checkout the repository
+ - uses: actions/checkout@v2
+
+ # Set up .NET SDK
+ - uses: actions/setup-dotnet@v2
+ with:
+ dotnet-version: '8.0.x'
+
+ # Restore dependencies
+ - name: Restore dependencies
+ run: dotnet restore src/SIPSorcery.csproj
+
+ # Build the project
+ - name: Build
+ run: dotnet build src/SIPSorcery.csproj -c Release --no-restore
+
+ # Run unit tests
+ - name: Unit tests
+ run: dotnet test test/unit/SIPSorcery.UnitTests.csproj --framework ${{ matrix.framework }} -c Release
+
+ # Pack the NuGet package
+ - name: Pack NuGet package
+ run: dotnet pack src/SIPSorcery.csproj -c Release -o ./artifacts
+
+ # Publish to NuGet
+ - name: Publish NuGet package
+ if: startsWith(github.ref, 'refs/tags/v') # Only run on tag pushes
+ env:
+ NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
+ run: |
+ dotnet nuget push ./artifacts/*.nupkg \
+ --source https://api.nuget.org/v3/index.json \
+ --api-key $NUGET_API_KEY
diff --git a/.github/workflows/sipsorcery-core-mac.yml b/.github/workflows/sipsorcery-core-mac.yml
index 97f3970b9..e19c7f15e 100644
--- a/.github/workflows/sipsorcery-core-mac.yml
+++ b/.github/workflows/sipsorcery-core-mac.yml
@@ -10,12 +10,12 @@ jobs:
build:
strategy:
matrix:
- framework: [ 'net6.0' ]
+ framework: [ 'net8.0' ]
runs-on: macos-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-dotnet@v1
with:
- dotnet-version: '6.0.x'
+ dotnet-version: '8.0.x'
- name: Unit tests
run: dotnet test test/unit/SIPSorcery.UnitTests.csproj --framework ${{ matrix.framework }} -c Release
\ No newline at end of file
diff --git a/.github/workflows/sipsorcery-core-ubuntu.yml b/.github/workflows/sipsorcery-core-ubuntu.yml
index 28c31a679..367d1cad3 100644
--- a/.github/workflows/sipsorcery-core-ubuntu.yml
+++ b/.github/workflows/sipsorcery-core-ubuntu.yml
@@ -4,18 +4,17 @@ on:
push:
branches:
- master
- - net6
jobs:
build:
strategy:
matrix:
- framework: [ 'net6.0' ]
+ framework: [ 'net8.0' ]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-dotnet@v1
with:
- dotnet-version: '6.0.x'
+ dotnet-version: '8.0.x'
- name: Unit tests
run: dotnet test test/unit/SIPSorcery.UnitTests.csproj --framework ${{ matrix.framework }} -c Release
diff --git a/.github/workflows/sipsorcery-core-win.yml b/.github/workflows/sipsorcery-core-win.yml
old mode 100644
new mode 100755
index 4e3c9ddcb..059fac76d
--- a/.github/workflows/sipsorcery-core-win.yml
+++ b/.github/workflows/sipsorcery-core-win.yml
@@ -17,4 +17,4 @@ jobs:
- name: Build
run: dotnet build src/SIPSorcery.sln -c Release --no-restore
- name: Test
- run: dotnet test test/unit/SIPSorcery.UnitTests.csproj -c Release --no-restore --verbosity normal
+ run: dotnet test test/unit/SIPSorcery.UnitTests.csproj -c Release --no-restore --verbosity normal -f net8.0
diff --git a/.gitignore b/.gitignore
index 944ab85e0..3ff192928 100644
--- a/.gitignore
+++ b/.gitignore
@@ -174,4 +174,9 @@ docfx/*
*.sdp
**/.ionide
.fake
-.ionide
\ No newline at end of file
+.ionide
+
+**/appsettings.Development.json
+**/btc-data
+**/lnd-data
+**/rtl-data
\ No newline at end of file
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 000000000..dc40ddfdd
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,5 @@
+
+
+ 8.0
+
+
\ No newline at end of file
diff --git a/Dockerfile-webrtccmdline b/Dockerfile-webrtccmdline
new file mode 100644
index 000000000..f003eb1d8
--- /dev/null
+++ b/Dockerfile-webrtccmdline
@@ -0,0 +1,24 @@
+# docker build -t webrtccmdline -f Dockerfile-webrtccmdline .
+# docker login
+# Either:
+# docker tag webrtccmdline:latest docker.io/azaclauson/webrtccmdline:latest
+# docker push azaclauson/webrtccmdline:latest
+# or:
+# az acr login --name sipsorcerycr
+# docker tag webrtccmdline:latest sipsorcerycr.azurecr.io/webrtccmdline:latest
+# docker push sipsorcerycr.azurecr.io/webrtccmdline:latest
+# To run a local container:
+# docker run -it --rm -p 8081:8081 -p 60042:60042/udp webrtccmdline --ws --stun stun:stun.l.google.com:19302
+
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+WORKDIR /src
+COPY . .
+WORKDIR /src/examples/webrtccmdline
+RUN dotnet publish "webrtccmdline.csproj" -c Release -o /app/publish
+
+FROM mcr.microsoft.com/dotnet/runtime:8.0 AS final
+WORKDIR /app
+EXPOSE 8080-8081
+EXPOSE 60042
+COPY --from=build /app/publish .
+ENTRYPOINT ["dotnet", "webrtccmdline.dll", "--port", "60042", "--ws", "--stun", "stun:stun.l.google.com:19302"]
diff --git a/README.md b/README.md
old mode 100644
new mode 100755
index 84fefd406..d3141aa62
--- a/README.md
+++ b/README.md
@@ -1,9 +1,7 @@
-| CI | win-x64 | linux-x64 | osx-x64 | Examples
(win-x64) | Softphone
(win-x64) |
-|-|-|-|-|-|-|
-| AppVeyor | [](https://ci.appveyor.com/project/sipsorcery/sipsorcery/branch/master) | [](https://ci.appveyor.com/project/sipsorcery/sipsorcery-5aavr/branch/master) | [](https://ci.appveyor.com/project/sipsorcery/sipsorcery-jyl3x/branch/master) | [](https://ci.appveyor.com/project/sipsorcery/sipsorcery-mre1o/branch/master) | [](https://ci.appveyor.com/project/sipsorcery/sipsorcery-0p6s4/branch/master) |
-| GitHub Actions |  |  |  |  | |
-| Azure DevOps | [](https://dev.azure.com/aaronrc/SIPSorcery/_build/latest?definitionId=3&branchName=master) | [](https://dev.azure.com/aaronrc/SIPSorcery/_build/latest?definitionId=3&branchName=master) | [](https://dev.azure.com/aaronrc/SIPSorcery/_build/latest?definitionId=3&branchName=master) | | |
-
+
+
+
+
## What Is It?
@@ -29,15 +27,13 @@ The diagram below is a high level overview of a Real-time audio and video call b
- [SIPSorceryMedia.Windows](https://github.com/sipsorcery-org/SIPSorceryMedia.Windows): An example of a Windows specific library that provides audio capture and playback.
- [SIPSorceryMedia.Encoders](https://github.com/sipsorcery-org/SIPSorceryMedia.Encoders): An example of a Windows specific wrapper for the [VP8](https://www.webmproject.org/) video codec.
- [SIPSorceryMedia.FFmpeg](https://github.com/sipsorcery-org/SIPSorceryMedia.FFmpeg): An example of a cross platform library that features audio and video codecs using PInvoke and [FFmpeg](https://ffmpeg.org/).
- - Others: **Contributions welcome**. Frequently requested are Xamarin Forms on Android/iOS and Unix (Linux and/or Mac). New implementations need to implement one or more of the Audio Sink/Source and/or Video Sink/Source interfaces from [SIPSorceryMedia.Abstractions](https://github.com/sipsorcery-org/SIPSorceryMedia.Abstractions/blob/master/src/MediaEndPoints.cs).
+ - [SIPSorceryMedia.SDL2](https://github.com/sipsorcery-org/SIPSorceryMedia.SDL2): An example of integrating the cross-platform [SDL2](https://www.libsdl.org/index.php) Simple Direct Media Layer library.
- - This library provides only a small number of audio and video codecs (G711 and G722). Additional codecs, particularly video ones, require C or C++ libraries. An effort is underway to port the [VP8](https://www.webmproject.org/) video codec to C# see [VP8.Net](https://github.com/sipsorcery-org/VP8.Net).
+ - This library provides only a small number of audio and video codecs (G711, G722 and G729). OPUS is available via [Concentus](https://github.com/lostromb/concentus). Additional codecs, particularly video ones, require C or C++ libraries. An effort is underway to port the [VP8](https://www.webmproject.org/) video codec to C# see [VP8.Net](https://github.com/sipsorcery-org/VP8.Net).
## Installation
-The library is compliant with .NET Standard 2.0 (encompassing .NET Core 2.0+), .NET Framework 4.6.1 (theoretically also encompassed by `netstandard2.0` but set as an explicit target due to compatibility issues between the two), .NET 5 and .NET 6. The demo applications mainly target .NET Core 3.1 with newer ones targeting .NET 5 or 6. The library is available via NuGet.
-
-For .NET Core and .NET 5 & 6:
+The library is should work with .NET Framework >= 4.6.1 and all .NET Core and .NET versions. The demo applications initially targetted .NET Core 3.1 and are updated to later .NET versions as time and interest permit. The library is available via NuGet.
````bash
dotnet add package SIPSorcery
@@ -53,30 +49,22 @@ Install-Package SIPSorcery
Class reference documentation and articles explaining common usage are available at [https://sipsorcery-org.github.io/sipsorcery/](https://sipsorcery-org.github.io/sipsorcery/).
-## Additional Resources
-
-A free SIP account for GitHub users that can be used for SIP and WebRTC testing is available at [sipsorcery.cloud](https://sipsorcery.cloud).
-
-For WebRTC testing the [webrtc-echoes](https://github.com/sipsorcery/webrtc-echoes) project has a number of basic WebRTC implementations in different libraries. It includes a set of [docker images](https://github.com/sipsorcery?tab=packages) which can be useful for testing during WebRTC application development.
-
## Getting Started VoIP
-**Note, the examples below have been updated for .NET 6. They can be made to work with .NET 5 and .NET Core but will require some adjustments to the instructions below.**
-
The simplest possible example to place an audio-only SIP call is shown below. This example relies on the Windows specific `SIPSorceryMedia.Windows` library to play the received audio and only works on Windows (due to lack of .NET audio device support on non-Windows platforms).
````bash
-dotnet new console --name SIPGetStarted --framework net6.0 --target-framework-override net6.0-windows10.0.22000
+dotnet new console --name SIPGetStarted --framework net8.0 --target-framework-override net8.0-windows10.0.17763.0
cd SIPGetStarted
dotnet add package SIPSorcery
-dotnet add package SIPSorceryMedia.Windows --prerelease
+dotnet add package SIPSorceryMedia.Windows
# Paste the code below into Program.cs.
dotnet run
# If successful you will hear a "Hello World" announcement.
````
````csharp
-string DESTINATION = "helloworld@sipsorcery.cloud";
+string DESTINATION = "music@iptel.org";
Console.WriteLine("SIP Get Started");
@@ -121,7 +109,7 @@ The example relies on the Windows specific `SIPSorceryMedia.Encoders` package, w
dotnet new console --name WebRTCGetStarted
cd WebRTCGetStarted
dotnet add package SIPSorcery
-dotnet add package SIPSorceryMedia.Encoders --prerelease
+dotnet add package SIPSorceryMedia.Encoders
# Paste the code below into Program.cs.
dotnet run
````
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 000000000..c7f9f0732
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,5 @@
+# Security Policy
+
+## Reporting a Vulnerability
+
+Please email admin@sipsorcery.com.
diff --git a/examples/AzureExamples/TextToPcm/Program.cs b/examples/AzureExamples/TextToPcm/Program.cs
old mode 100644
new mode 100755
index 62e6bf49a..715d38a34
--- a/examples/AzureExamples/TextToPcm/Program.cs
+++ b/examples/AzureExamples/TextToPcm/Program.cs
@@ -4,6 +4,13 @@
// Description: An example program to send text-to-speech requests to the
// Azure Cognitive Speech Services API and save the results to PCM files.
//
+// Update 4 Feb 2025: You need an "Azure AI services | Speech service" resource
+// for this demo. Once the resource is set up, you can get the subscription key
+// and region from the Overiew page on the Azure portal.
+//
+// References:
+// https://learn.microsoft.com/en-us/azure/ai-services/speech-service/overview
+//
// Notes:
// The audio format returned by the Azure Speech Service is:
// 16 bit signed PCM at 16KHz
@@ -20,6 +27,7 @@
//
// History:
// 03 Jun 2020 Aaron Clauson Created, Dublin, Ireland.
+// 04 Feb 2025 Aaron Clauson Checked still working with net9.0.
//
// License:
// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
@@ -31,65 +39,64 @@
using Microsoft.CognitiveServices.Speech;
using Microsoft.CognitiveServices.Speech.Audio;
-namespace demo
+namespace demo;
+
+class Program
{
- class Program
+ static async Task Main(string[] args)
{
- static async Task Main(string[] args)
- {
- Console.WriteLine("Text to PCM Console:");
+ Console.WriteLine("Text to PCM Console:");
- if (args == null || args.Length < 3)
- {
- Console.WriteLine("Usage: texttopcm ");
- Console.WriteLine("e.g. texttopcm cb965... westeurope \"Hello World\"");
- Console.WriteLine("e.g. dotnet run -- cb965... westeurope \"Hello World\"");
- }
- else
- {
- var speechConfig = SpeechConfig.FromSubscription(args[0], args[1]);
+ if (args == null || args.Length < 3)
+ {
+ Console.WriteLine("Usage: texttopcm ");
+ Console.WriteLine("e.g. texttopcm cb965... westeurope \"Hello World\"");
+ Console.WriteLine("e.g. dotnet run -- cb965... westeurope \"Hello World\"");
+ }
+ else
+ {
+ var speechConfig = SpeechConfig.FromSubscription(args[0], args[1]);
- string text = args[2];
+ string text = args[2];
- TextToSpeechStream ttsOutStream = new TextToSpeechStream();
- AudioConfig audioTtsConfig = AudioConfig.FromStreamOutput(ttsOutStream);
- SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer(speechConfig, audioTtsConfig);
+ TextToSpeechStream ttsOutStream = new TextToSpeechStream();
+ AudioConfig audioTtsConfig = AudioConfig.FromStreamOutput(ttsOutStream);
+ SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer(speechConfig, audioTtsConfig);
- using (var result = await speechSynthesizer.SpeakTextAsync(text))
+ using (var result = await speechSynthesizer.SpeakTextAsync(text))
+ {
+ if (result.Reason == ResultReason.SynthesizingAudioCompleted)
{
- if (result.Reason == ResultReason.SynthesizingAudioCompleted)
- {
- Console.WriteLine($"Speech synthesized to speaker for text [{text}]");
+ Console.WriteLine($"Speech synthesized to speaker for text [{text}]");
- var buffer = ttsOutStream.GetPcmBuffer();
- string saveFilename = DateTime.Now.Ticks.ToString() + ".pcm16k";
+ var buffer = ttsOutStream.GetPcmBuffer();
+ string saveFilename = DateTime.Now.Ticks.ToString() + ".pcm16k";
- using (StreamWriter sw = new StreamWriter(saveFilename))
- {
- for(int i=0; i
Exe
- netcoreapp3.1
+ net9.0
+ 12
-
-
-
-
-
+
+
+
+
diff --git a/examples/AzureExamples/TextToPcm/TextToSpeechStream.cs b/examples/AzureExamples/TextToPcm/TextToSpeechStream.cs
old mode 100644
new mode 100755
index eb9ebf5ed..14587fe0c
--- a/examples/AzureExamples/TextToPcm/TextToSpeechStream.cs
+++ b/examples/AzureExamples/TextToPcm/TextToSpeechStream.cs
@@ -19,82 +19,81 @@
using System.IO;
using Microsoft.CognitiveServices.Speech.Audio;
-namespace demo
+namespace demo;
+
+///
+/// This is the backing class for the Azure text-to-speech service call. It will
+/// have the results of the text-to-speech request pushed into its stream buffer which
+/// can be retrieved for subsequent operations such as sending via RTP.
+///
+public class TextToSpeechStream : PushAudioOutputStreamCallback
{
+ public MemoryStream _ms = new MemoryStream();
+ private int _posn = 0;
+
+ public TextToSpeechStream()
+ { }
+
///
- /// This is the backing class for the Azure text-to-speech service call. It will
- /// have the results of the text-to-speech request pushed into its stream buffer which
- /// can be retrieved for subsequent operations such as sending via RTP.
+ /// This gets called by the internals of the Azure text-to-speech SDK to write the resultant
+ /// PCM 16Khz 16 bit audio samples.
///
- public class TextToSpeechStream : PushAudioOutputStreamCallback
+ /// The data buffer containing the audio sample.
+ /// The number of bytes written from the supplied sample.
+ public override uint Write(byte[] dataBuffer)
{
- public MemoryStream _ms = new MemoryStream();
- private int _posn = 0;
+ //Console.WriteLine($"TextToSpeechAudioOutStream bytes written to output stream {dataBuffer.Length}.");
- public TextToSpeechStream()
- { }
+ _ms.Write(dataBuffer, 0, dataBuffer.Length);
+ _posn = _posn + dataBuffer.Length;
- ///
- /// This gets called by the internals of the Azure text-to-speech SDK to write the resultant
- /// PCM 16Khz 16 bit audio samples.
- ///
- /// The data buffer containing the audio sample.
- /// The number of bytes written from the supplied sample.
- public override uint Write(byte[] dataBuffer)
- {
- //Console.WriteLine($"TextToSpeechAudioOutStream bytes written to output stream {dataBuffer.Length}.");
+ return (uint)dataBuffer.Length;
+ }
- _ms.Write(dataBuffer, 0, dataBuffer.Length);
- _posn = _posn + dataBuffer.Length;
+ ///
+ /// Closes the stream.
+ ///
+ public override void Close()
+ {
+ _ms.Close();
+ base.Close();
+ }
- return (uint)dataBuffer.Length;
- }
+ ///
+ /// Get the current contents of the memory stream as a buffer of PCM samples.
+ /// The PCM samples are suitable to be fed into an audio codec as part of the
+ /// RTP send.
+ ///
+ public short[] GetPcmBuffer()
+ {
+ _ms.Position = 0;
+ byte[] buffer = _ms.GetBuffer();
+ short[] pcmBuffer = new short[_posn / 2];
- ///
- /// Closes the stream.
- ///
- public override void Close()
+ for (int i = 0; i < pcmBuffer.Length; i++)
{
- _ms.Close();
- base.Close();
+ pcmBuffer[i] = BitConverter.ToInt16(buffer, i * 2);
}
- ///
- /// Get the current contents of the memory stream as a buffer of PCM samples.
- /// The PCM samples are suitable to be fed into an audio codec as part of the
- /// RTP send.
- ///
- public short[] GetPcmBuffer()
- {
- _ms.Position = 0;
- byte[] buffer = _ms.GetBuffer();
- short[] pcmBuffer = new short[_posn / 2];
-
- for (int i = 0; i < pcmBuffer.Length; i++)
- {
- pcmBuffer[i] = BitConverter.ToInt16(buffer, i * 2);
- }
-
- return pcmBuffer;
- }
+ return pcmBuffer;
+ }
- ///
- /// Clear is intended to be called after the method to get the PCM buffer.
- /// It will reset the underlying memory buffer ready for the next text-to-speech operation.
- ///
- public void Clear()
- {
- _ms.SetLength(0);
- _posn = 0;
- }
+ ///
+ /// Clear is intended to be called after the method to get the PCM buffer.
+ /// It will reset the underlying memory buffer ready for the next text-to-speech operation.
+ ///
+ public void Clear()
+ {
+ _ms.SetLength(0);
+ _posn = 0;
+ }
- ///
- /// Used to check if there is data waiting to be copied.
- ///
- /// True if the stream is empty. False if there is some data available.
- public bool IsEmpty()
- {
- return _posn == 0;
- }
+ ///
+ /// Used to check if there is data waiting to be copied.
+ ///
+ /// True if the stream is empty. False if there is some data available.
+ public bool IsEmpty()
+ {
+ return _posn == 0;
}
}
diff --git a/examples/FSharpExamples/FSharpExamples.sln b/examples/FSharpExamples/FSharpExamples.sln
new file mode 100755
index 000000000..4a7e6e3fb
--- /dev/null
+++ b/examples/FSharpExamples/FSharpExamples.sln
@@ -0,0 +1,41 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.12.35527.113
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "WebRTCOpenAI", "WebRTCOpenAI\WebRTCOpenAI.fsproj", "{4D11ABA6-09D2-4A6F-A69F-E49B59697460}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenAI.Realtime", "..\OpenAIExamples\OpenAI.Realtime\OpenAI.Realtime.csproj", "{D12DE229-454C-4D98-B2C8-A6AE642E1414}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SIPSorcery", "..\..\src\SIPSorcery.csproj", "{7577DFB6-351B-4E70-986D-D9247218F990}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ Unsigned|Any CPU = Unsigned|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {4D11ABA6-09D2-4A6F-A69F-E49B59697460}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4D11ABA6-09D2-4A6F-A69F-E49B59697460}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4D11ABA6-09D2-4A6F-A69F-E49B59697460}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4D11ABA6-09D2-4A6F-A69F-E49B59697460}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4D11ABA6-09D2-4A6F-A69F-E49B59697460}.Unsigned|Any CPU.ActiveCfg = Debug|Any CPU
+ {4D11ABA6-09D2-4A6F-A69F-E49B59697460}.Unsigned|Any CPU.Build.0 = Debug|Any CPU
+ {D12DE229-454C-4D98-B2C8-A6AE642E1414}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D12DE229-454C-4D98-B2C8-A6AE642E1414}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D12DE229-454C-4D98-B2C8-A6AE642E1414}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D12DE229-454C-4D98-B2C8-A6AE642E1414}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D12DE229-454C-4D98-B2C8-A6AE642E1414}.Unsigned|Any CPU.ActiveCfg = Debug|Any CPU
+ {D12DE229-454C-4D98-B2C8-A6AE642E1414}.Unsigned|Any CPU.Build.0 = Debug|Any CPU
+ {7577DFB6-351B-4E70-986D-D9247218F990}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7577DFB6-351B-4E70-986D-D9247218F990}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7577DFB6-351B-4E70-986D-D9247218F990}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7577DFB6-351B-4E70-986D-D9247218F990}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7577DFB6-351B-4E70-986D-D9247218F990}.Unsigned|Any CPU.ActiveCfg = Debug|Any CPU
+ {7577DFB6-351B-4E70-986D-D9247218F990}.Unsigned|Any CPU.Build.0 = Debug|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/FSharpExamples/WebRTCOpenAI/AsyncResult.fs b/examples/FSharpExamples/WebRTCOpenAI/AsyncResult.fs
new file mode 100755
index 000000000..52017244c
--- /dev/null
+++ b/examples/FSharpExamples/WebRTCOpenAI/AsyncResult.fs
@@ -0,0 +1,50 @@
+module AsyncResult
+
+ // Define the AsyncResult type
+ type AsyncResult<'T, 'Error> = Async>
+
+ // Define the builder type for asyncResult computation expression
+ type AsyncResultBuilder() =
+ member _.Return(value: 'T) : AsyncResult<'T, 'Error> =
+ async { return Ok value }
+
+ member _.ReturnFrom(asyncResult: AsyncResult<'T, 'Error>) : AsyncResult<'T, 'Error> =
+ asyncResult
+
+ member _.Bind(asyncResult: AsyncResult<'T, 'Error>, f: 'T -> AsyncResult<'U, 'Error>) : AsyncResult<'U, 'Error> =
+ async {
+ match! asyncResult with
+ | Ok value -> return! f value
+ | Error error -> return Error error
+ }
+
+ member _.Zero() : AsyncResult =
+ async { return Ok () }
+
+ member _.Delay(f: unit -> AsyncResult<'T, 'Error>) : AsyncResult<'T, 'Error> =
+ async { return! f () }
+
+ member _.Combine(asyncResult1: AsyncResult, asyncResult2: AsyncResult<'T, 'Error>) : AsyncResult<'T, 'Error> =
+ async {
+ match! asyncResult1 with
+ | Ok () -> return! asyncResult2
+ | Error error -> return Error error
+ }
+
+ // Create an instance of the builder
+ let asyncResult = AsyncResultBuilder()
+
+ // Helper function to lift a Result into AsyncResult
+ let ofResult (result: Result<'T, 'Error>) : AsyncResult<'T, 'Error> =
+ async { return result }
+
+ // Helper function to lift an Async into AsyncResult
+ let ofAsync (asyncOp: Async<'T>) : AsyncResult<'T, 'Error> =
+ async {
+ let! result = asyncOp
+ return Ok result
+ }
+
+ // Helper function to lift an Async into AsyncResult
+ let ofAsyncResult (asyncResultOp: Async>) : AsyncResult<'T, 'Error> =
+ asyncResultOp
\ No newline at end of file
diff --git a/examples/FSharpExamples/WebRTCOpenAI/Program.fs b/examples/FSharpExamples/WebRTCOpenAI/Program.fs
new file mode 100755
index 000000000..4ff13b6a5
--- /dev/null
+++ b/examples/FSharpExamples/WebRTCOpenAI/Program.fs
@@ -0,0 +1,269 @@
+//-----------------------------------------------------------------------------
+// Filename: Program.fs
+//
+// Description: An example WebRTC application that can be used to interact with
+// OpenAI's real-time API https://platform.openai.com/docs/guides/realtime-webrtc.
+//
+// NOTE: As of 28 Jan 2025 this example does work to establish an audio stream and is
+// able to receive data channel messages. There is no echo cancellation feature in this
+// demo so if not provided by the OS then the AI will end up talking to itself.
+//
+// Usage:
+// set OPENAIKEY=your_openai_key
+// dotnet run %OPENAIKEY%
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 26 Jan 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+open AsyncResult
+open demo
+open Microsoft.Extensions.Logging
+open Microsoft.FSharp.Core
+open SIPSorcery.Media
+open SIPSorcery.Net
+open SIPSorceryMedia.Windows
+open System
+open System.Threading
+
+type LanguageExt.Option<'T> with
+ member this.ToFSharpOption() =
+ if this.IsSome then
+ Some this.Case
+ else
+ None
+
+let OPENAI_REALTIME_SESSIONS_URL = "https://api.openai.com/v1/realtime/sessions"
+let OPENAI_REALTIME_BASE_URL = "https://api.openai.com/v1/realtime"
+let OPENAI_MODEL = "gpt-4o-realtime-preview-2024-12-17"
+let OPENAI_VOICE = OpenAIVoicesEnum.shimmer
+let OPENAI_DATACHANNEL_NAME = "oai-events"
+
+/// Initialize the logger
+let logger =
+ let factory = LoggerFactory.Create(fun builder ->
+ builder
+ .SetMinimumLevel(LogLevel.Debug)
+ .AddConsole() |> ignore)
+ factory.CreateLogger("demo")
+
+/// Convert Either to F# Result by storing only error messages
+let eitherToFSharpResult (either: LanguageExt.Either) : Result =
+ either.Match(
+ (fun rightVal -> Ok rightVal),
+ (fun (leftVal : LanguageExt.Common.Error) -> Error leftVal.Message)
+ )
+
+/// Retrieve the OpenAI API key from the command line arguments.
+let getOpenAIKeyFromCmdLine (argv : string[]) : Result =
+ match argv |> Array.tryHead with
+ | Some key when not (String.IsNullOrWhiteSpace(key)) ->
+ Ok key
+ | _ ->
+ Error """
+❌ Please provide your OpenAI key as a command line argument.
+It's required to obtain a single-use ephemeral secret to establish the WebRTC connection.
+
+🔹 Recommended approach: Use an environment variable.
+ Example: set OPENAIKEY=
+ Then run: dotnet run %OPENAIKEY%
+"""
+
+/// Attempts to retrieve the OpenAI API ephemeral key. This is the key used to send the SDP offer and get the SDP answer.
+/// from the OpenAI REST server.
+let getEphemeralKey (url: string) (openAIKey: string) (model: string) (voice: OpenAIVoicesEnum) : Async> =
+ async {
+ let! eitherResult = OpenAIRealtimeRestClient.CreateEphemeralKeyAsync(url, openAIKey, model, voice) |> Async.AwaitTask
+
+ match eitherResult |> eitherToFSharpResult with
+ | Ok key ->
+ match key |> String.IsNullOrWhiteSpace with
+ | true ->
+ return Error "Failed to obtain ephemeral key: key was empty."
+ | false -> return Ok key
+ | Error error ->
+ return Error (sprintf "Failed to obtain ephemeral key: %s" error)
+ }
+
+/// Attempts to get the SDP answer from the OpenAI REST server.
+let getAnswerSdp (ephemeralKey: string) (url: string) (model: string) (offerSdp: string) : Async> =
+ async {
+ let! eitherResult = OpenAIRealtimeRestClient.GetOpenAIAnswerSdpAsync(ephemeralKey, url, model, offerSdp) |> Async.AwaitTask
+ return eitherResult |> eitherToFSharpResult
+ }
+
+/// Method to handle data channel messages.
+let OnDataChannelMessage (logger: ILogger) (dc: RTCDataChannel) (protocol: DataChannelPayloadProtocols) (data: byte[]) =
+ //let message = Encoding.UTF8.GetString(data)
+
+ // Parse the message into a base event type
+ let serverEventModel = OpenAIDataChannelManager.ParseDataChannelMessage(data).ToFSharpOption()
+
+ match serverEventModel with
+ | Some (:? OpenAIResponseAudioTranscriptDone as doneEvent) ->
+ logger.LogDebug $"Transcript done: {doneEvent.Transcript}"
+ | Some _ -> ()
+ | None ->
+ logger.LogWarning "Failed to parse the openai data channel message."
+
+/// Method to create the local peer connection instance and data channel.
+let createPeerConnection (logger: ILogger) (onConnectedSemaphore: SemaphoreSlim) : Async = async {
+ let pcConfig = RTCConfiguration(X_UseRtpFeedbackProfile = true)
+ let peerConnection = new RTCPeerConnection(pcConfig)
+ let! dataChannel = peerConnection.createDataChannel(OPENAI_DATACHANNEL_NAME) |> Async.AwaitTask
+
+ // Sink (speaker) only audio end point.
+ let windowsAudioEP = WindowsAudioEndPoint(AudioEncoder(includeOpus = true), -1, -1, false, false)
+ windowsAudioEP.RestrictFormats(fun x -> x.FormatName = "OPUS")
+ windowsAudioEP.add_OnAudioSinkError(fun err -> logger.LogWarning($"Audio sink error. {err}."))
+ windowsAudioEP.add_OnAudioSourceEncodedSample(fun duration sample -> peerConnection.SendAudio(duration, sample))
+
+ let audioTrack = MediaStreamTrack(windowsAudioEP.GetAudioSourceFormats(), MediaStreamStatusEnum.SendRecv)
+ peerConnection.addTrack(audioTrack)
+
+ peerConnection.add_OnAudioFormatsNegotiated(fun audioFormats ->
+ logger.LogDebug($"Audio format negotiated {audioFormats.Head().FormatName}.")
+ windowsAudioEP.SetAudioSinkFormat(audioFormats.Head())
+ windowsAudioEP.SetAudioSourceFormat(audioFormats.Head())
+ )
+
+ peerConnection.add_OnTimeout(fun mediaType -> logger.LogDebug($"Timeout on media {mediaType}."))
+ peerConnection.add_oniceconnectionstatechange(fun state -> logger.LogDebug($"ICE connection state changed to {state}."))
+ peerConnection.add_onconnectionstatechange(fun state ->
+ Async.Start(
+ async {
+ logger.LogDebug($"Peer connection state changed to {state}.")
+
+ match state with
+ | RTCPeerConnectionState.connected ->
+ do! windowsAudioEP.StartAudio() |> Async.AwaitTask
+ do! windowsAudioEP.StartAudioSink() |> Async.AwaitTask
+ | RTCPeerConnectionState.closed | RTCPeerConnectionState.failed ->
+ do! windowsAudioEP.CloseAudio() |> Async.AwaitTask
+ | _ -> ()
+ }
+ )
+ )
+
+ peerConnection.add_OnRtpPacketReceived(fun rep media rtpPkt ->
+ if media = SDPMediaTypesEnum.audio then
+ windowsAudioEP.GotAudioRtp(
+ rep,
+ rtpPkt.Header.SyncSource,
+ uint32 rtpPkt.Header.SequenceNumber,
+ rtpPkt.Header.Timestamp,
+ rtpPkt.Header.PayloadType,
+ rtpPkt.Header.MarkerBit = 1,
+ rtpPkt.Payload)
+ )
+
+ dataChannel.add_onopen(fun () ->
+ logger.LogDebug("OpenAI data channel opened.")
+ onConnectedSemaphore.Release() |> ignore
+ )
+
+ dataChannel.add_onclose(fun () -> logger.LogDebug($"OpenAI data channel {dataChannel.label} closed."))
+ dataChannel.add_onmessage(fun dc protocol data -> OnDataChannelMessage logger dc protocol data)
+
+ return peerConnection
+}
+
+/// Method to set the SDP answer on the peer connection.
+let setSdpAnswer (pc: RTCPeerConnection) answerSdp : Result =
+
+ let remoteDescriptionInit = RTCSessionDescriptionInit()
+ remoteDescriptionInit.``type`` <- RTCSdpType.answer
+ remoteDescriptionInit.sdp <- answerSdp
+ let setAnswerResult = pc.setRemoteDescription(remoteDescriptionInit)
+
+ if setAnswerResult = SetDescriptionResultEnum.OK then
+ printfn "SDP answer successfully set on peer connection."
+ Ok "Data channel connected successfully."
+ else
+ printfn "Failed to set the OpenAI SDP Answer."
+ Error "Failed to set the OpenAI SDP Answer."
+
+/// Method to send a response create message to the OpenAI data channel.
+/// Response create messages trigger the OpenAI API to generate an audio response.
+let sendResponseCreate (logger: ILogger) (dc: RTCDataChannel) (voice : OpenAIVoicesEnum) message =
+ let responseCreate =
+ OpenAIResponseCreate(
+ EventID = Guid.NewGuid().ToString(),
+ Response = OpenAIResponseCreateResponse(
+ Instructions = message,
+ Voice = voice.ToString()
+ )
+ )
+
+ logger.LogInformation($"Sending initial response create to first call data channel {dc.label}.");
+ logger.LogDebug(responseCreate.ToJson());
+
+ dc.send(responseCreate.ToJson());
+
+/// Method to wait for the user to press ctrl-c before exiting.
+let waitForCtrlCToExit () =
+ let exitMre = new ManualResetEvent(false)
+
+ let handler =
+ ConsoleCancelEventHandler(fun _ e ->
+ e.Cancel <- true
+ exitMre.Set() |> ignore
+ )
+
+ // Attach the event handler for Ctrl-C (CancelKeyPress)
+ Console.CancelKeyPress.AddHandler(handler)
+
+ // Wait until the ctrl-c signal is received
+ exitMre.WaitOne() |> ignore
+
+ exitMre.Dispose()
+
+[]
+let main argv =
+ printfn "F# WebRTC OpenAI Demo Program"
+
+ let workflow argv = asyncResult {
+ let! openAIKey = getOpenAIKeyFromCmdLine argv |> ofResult
+
+ printfn "STEP 1: Get ephemeral key from OpenAI."
+ let! ephemeralKey = getEphemeralKey OPENAI_REALTIME_SESSIONS_URL openAIKey OPENAI_MODEL OPENAI_VOICE |> ofAsyncResult
+
+ printfn "STEP 2: Create WebRTC PeerConnection & get local SDP offer."
+ let dcConnectedSemaphore = new SemaphoreSlim(0, 1)
+ let! pc = createPeerConnection logger dcConnectedSemaphore |> ofAsync
+ let offer = pc.createOffer();
+ pc.setLocalDescription(offer) |> ignore;
+
+ printfn "STEP 3: Send SDP offer to OpenAI."
+ let! answerSdp = getAnswerSdp ephemeralKey OPENAI_REALTIME_BASE_URL OPENAI_MODEL offer.sdp |> ofAsyncResult
+ printfn "SDP Answer:\n%s" answerSdp
+
+ printfn "STEP 4: Set remote SDP"
+ let! _ = setSdpAnswer pc answerSdp |> ofResult
+
+ printfn "STEP 5: Wait for data channel to connect."
+ do! dcConnectedSemaphore.WaitAsync() |> Async.AwaitTask |> ofAsync
+
+ printfn "STEP 6: Trigger the AI to start the conversation."
+ do sendResponseCreate logger (pc.DataChannels.Head()) OPENAI_VOICE "Introduce urself. Keep it short."
+
+ return "Workflow completed successfully."
+ }
+
+ let workflowResult = workflow argv |> Async.RunSynchronously
+
+ match workflowResult with
+ | Ok result ->
+ printfn "Success: %s" result
+ printfn "Use ctrl-c to exit."
+ do waitForCtrlCToExit()
+ 0
+ | Error error ->
+ printfn "Error: %s" error
+ -1
diff --git a/examples/FSharpExamples/WebRTCOpenAI/WebRTCOpenAI.fsproj b/examples/FSharpExamples/WebRTCOpenAI/WebRTCOpenAI.fsproj
new file mode 100755
index 000000000..488f76377
--- /dev/null
+++ b/examples/FSharpExamples/WebRTCOpenAI/WebRTCOpenAI.fsproj
@@ -0,0 +1,25 @@
+
+
+
+ Exe
+ net8.0-windows10.0.17763.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/BooleanStringConverter.cs b/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/BooleanStringConverter.cs
new file mode 100755
index 000000000..e7c267492
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/BooleanStringConverter.cs
@@ -0,0 +1,51 @@
+//-----------------------------------------------------------------------------
+// Filename: BooleanStringConverter.cs
+//
+// Description: Converter for deserialsing strings to booleans. This converter
+// is only required for System.Text.Json as Newtonsoft already supports this.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 09 Jun 2024 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// MIT.
+//-----------------------------------------------------------------------------
+
+using System.Text.Json.Serialization;
+using System.Text.Json;
+using System;
+
+namespace demo;
+
+public class BooleanAsStringConverter : JsonConverter
+{
+ public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ if (reader.TokenType == JsonTokenType.String)
+ {
+ var stringValue = reader.GetString();
+ if (bool.TryParse(stringValue, out bool boolValue))
+ {
+ return boolValue;
+ }
+ throw new JsonException($"Unable to convert \"{stringValue}\" to boolean.");
+ }
+ else if (reader.TokenType == JsonTokenType.True)
+ {
+ return true;
+ }
+ else if (reader.TokenType == JsonTokenType.False)
+ {
+ return false;
+ }
+ throw new JsonException($"Unexpected token parsing boolean. Expected String, True, or False, got {reader.TokenType}.");
+ }
+
+ public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options)
+ {
+ writer.WriteBooleanValue(value);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/JsonSerializationOptions.cs b/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/JsonSerializationOptions.cs
new file mode 100755
index 000000000..d3efe1a51
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/JsonSerializationOptions.cs
@@ -0,0 +1,38 @@
+
+using System.Text.Json.Serialization;
+using System.Text.Json;
+
+namespace demo;
+
+public class JsonOptions
+{
+ public static readonly JsonSerializerOptions Default;
+
+ static JsonOptions()
+ {
+ Default = new JsonSerializerOptions
+ {
+ PropertyNameCaseInsensitive = true,
+ DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
+ ReferenceHandler = ReferenceHandler.IgnoreCycles,
+ WriteIndented = true,
+ Converters =
+ {
+ // Allow enum values or member attribute values,e.g. [EnumMember(Value = "xxx")] to be deserialised from strings.
+ new JsonStringEnumMemberConverter(),
+
+ // Allows "true" and "false" strings to be deserialised to booleans.
+ new BooleanAsStringConverter(),
+
+ // Newtonsoft allows numeric values to be deserialised from strings.
+ // This is not the default behaviour in System.Text.Json so use a custom converter.
+ //new NumericConverter(),
+ //new NumericConverter(),
+ //new NumericConverter(),
+ //new NumericConverter(),
+ //new NumericConverter()
+ },
+ PropertyNamingPolicy = null // PacalCase by default.
+ };
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/JsonStringEnumMemberConverter.cs b/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/JsonStringEnumMemberConverter.cs
new file mode 100755
index 000000000..0bc96b380
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/JsonStringEnumMemberConverter.cs
@@ -0,0 +1,189 @@
+//-----------------------------------------------------------------------------
+// Filename: JsonStringEnumMemberConverter.cs
+//
+// Description: Converter for deserialsing strings to enums. Allows both the enum
+// value and the member attribute to be used as the string value. This converter
+// is only required for System.Text.Json as Newtonsoft already supports this.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 09 Jun 2024 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// MIT.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+using System.Runtime.Serialization;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+#nullable enable
+
+public class JsonStringEnumMemberConverter : JsonConverterFactory
+{
+ public override bool CanConvert(Type typeToConvert)
+ {
+ Type? underlyingType = Nullable.GetUnderlyingType(typeToConvert);
+ return typeToConvert.IsEnum || (underlyingType != null && underlyingType.IsEnum);
+ }
+
+ public override JsonConverter CreateConverter(Type typeToConvert, JsonSerializerOptions options)
+ {
+ Type? underlyingType = Nullable.GetUnderlyingType(typeToConvert);
+
+ if (underlyingType != null && underlyingType.IsEnum)
+ {
+ var converterType = typeof(NullableEnumMemberConverter<>).MakeGenericType(underlyingType);
+ var converter = (JsonConverter?)Activator.CreateInstance(converterType);
+ if (converter == null)
+ {
+ throw new InvalidOperationException($"Unable to create converter for {typeToConvert}");
+ }
+ return converter;
+ }
+ else if (typeToConvert.IsEnum)
+ {
+ var converterType = typeof(EnumMemberConverter<>).MakeGenericType(typeToConvert);
+ var converter = (JsonConverter?)Activator.CreateInstance(converterType);
+ if (converter == null)
+ {
+ throw new InvalidOperationException($"Unable to create converter for {typeToConvert}");
+ }
+ return converter;
+ }
+ throw new InvalidOperationException($"Unable to create converter for {typeToConvert}");
+ }
+
+ private class EnumMemberConverter : JsonConverter where T : struct, Enum
+ {
+ public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ if (reader.TokenType == JsonTokenType.String)
+ {
+ var enumText = reader.GetString();
+
+ if (string.IsNullOrEmpty(enumText))
+ {
+ throw new JsonException($"Unable to convert empty string to {typeof(T)}.");
+ }
+
+ // Check for EnumMember attribute values
+ foreach (var field in typeof(T).GetFields())
+ {
+ if (field.GetCustomAttribute() is EnumMemberAttribute attribute)
+ {
+ if (string.Equals(attribute.Value, enumText, StringComparison.OrdinalIgnoreCase))
+ {
+ return (T)(field.GetValue(null) ?? default(T));
+ }
+ }
+ else if (string.Equals(field.Name, enumText, StringComparison.OrdinalIgnoreCase))
+ {
+ return (T)(field.GetValue(null) ?? default(T));
+ }
+ }
+
+ // If not found, try parsing directly
+ if (Enum.TryParse(enumText, true, out T result))
+ {
+ return result;
+ }
+ }
+ else if (reader.TokenType == JsonTokenType.Number)
+ {
+ if (reader.TryGetInt32(out int intValue))
+ {
+ return (T)(object)intValue;
+ }
+ }
+
+ throw new JsonException($"Unable to convert \"{reader.GetString()}\" to enum \"{typeof(T)}\".");
+ }
+
+ public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
+ {
+ var field = typeof(T).GetField(value.ToString());
+ if (field?.GetCustomAttribute() is EnumMemberAttribute attribute)
+ {
+ writer.WriteStringValue(attribute.Value);
+ }
+ else
+ {
+ writer.WriteStringValue(value.ToString());
+ }
+ }
+ }
+
+ private class NullableEnumMemberConverter : JsonConverter where T : struct, Enum
+ {
+ public override T? Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ if (reader.TokenType == JsonTokenType.String)
+ {
+ var enumText = reader.GetString();
+
+ if (string.IsNullOrEmpty(enumText))
+ {
+ return null;
+ }
+
+ // Check for EnumMember attribute values
+ foreach (var field in typeof(T).GetFields())
+ {
+ if (field.GetCustomAttribute() is EnumMemberAttribute attribute)
+ {
+ if (string.Equals(attribute.Value, enumText, StringComparison.OrdinalIgnoreCase))
+ {
+ return (T)(field.GetValue(null) ?? default(T));
+ }
+ }
+ else if (string.Equals(field.Name, enumText, StringComparison.OrdinalIgnoreCase))
+ {
+ return (T)(field.GetValue(null) ?? default(T));
+ }
+ }
+
+ // If not found, try parsing directly
+ if (Enum.TryParse(enumText, true, out T result))
+ {
+ return result;
+ }
+ }
+ else if (reader.TokenType == JsonTokenType.Number)
+ {
+ if (reader.TryGetInt32(out int intValue))
+ {
+ return (T)(object)intValue;
+ }
+ }
+
+ return null;
+ }
+
+ public override void Write(Utf8JsonWriter writer, T? value, JsonSerializerOptions options)
+ {
+ if (value.HasValue)
+ {
+ var field = typeof(T).GetField(value.Value.ToString());
+ if (field?.GetCustomAttribute() is EnumMemberAttribute attribute)
+ {
+ writer.WriteStringValue(attribute.Value);
+ }
+ else
+ {
+ writer.WriteStringValue(value.Value.ToString());
+ }
+ }
+ else
+ {
+ writer.WriteNullValue();
+ }
+ }
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/NumericConverter.cs b/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/NumericConverter.cs
new file mode 100755
index 000000000..d336eed40
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/JsonConverters/NumericConverter.cs
@@ -0,0 +1,82 @@
+//-----------------------------------------------------------------------------
+// Filename: NumericConverter.cs
+//
+// Description: Converter for deserialsing strings numeric values. This converter
+// is only required for System.Text.Json as Newtonsoft already supports this.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 09 Jun 2024 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// MIT.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.ComponentModel;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class NumericConverter : JsonConverter where T : struct, IConvertible
+{
+ public override T Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ if (reader.TokenType == JsonTokenType.String)
+ {
+ var stringValue = reader.GetString();
+ if (string.IsNullOrEmpty(stringValue))
+ {
+ return default; // Handle empty strings as null/zero equivalent
+ }
+ try
+ {
+ return (T)(TypeDescriptor.GetConverter(typeof(T)).ConvertFromInvariantString(stringValue) ?? default(T));
+ }
+ catch (Exception ex)
+ {
+ throw new JsonException($"Unable to convert \"{stringValue}\" to {typeof(T)}.", ex);
+ }
+ }
+
+ if (reader.TokenType == JsonTokenType.Number)
+ {
+ if (typeof(T) == typeof(int))
+ return (T)(object)reader.GetInt32();
+ if (typeof(T) == typeof(long))
+ return (T)(object)reader.GetInt64();
+ if (typeof(T) == typeof(float))
+ return (T)(object)reader.GetSingle();
+ if (typeof(T) == typeof(double))
+ return (T)(object)reader.GetDouble();
+ if (typeof(T) == typeof(decimal))
+ return (T)(object)reader.GetDecimal();
+ }
+
+ if (reader.TokenType == JsonTokenType.Null)
+ {
+ return default; // Handle null values as default(T)
+ }
+
+ throw new JsonException($"Unexpected token type {reader.TokenType} when parsing {typeof(T)}.");
+ }
+
+ public override void Write(Utf8JsonWriter writer, T value, JsonSerializerOptions options)
+ {
+ if (typeof(T) == typeof(int))
+ writer.WriteNumberValue(Convert.ToInt32(value));
+ else if (typeof(T) == typeof(long))
+ writer.WriteNumberValue(Convert.ToInt64(value));
+ else if (typeof(T) == typeof(float))
+ writer.WriteNumberValue(Convert.ToSingle(value));
+ else if (typeof(T) == typeof(double))
+ writer.WriteNumberValue(Convert.ToDouble(value));
+ else if (typeof(T) == typeof(decimal))
+ writer.WriteNumberValue(Convert.ToDecimal(value));
+ else
+ writer.WriteStringValue(value.ToString());
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/OpenAI.Realtime.csproj b/examples/OpenAIExamples/OpenAI.Realtime/OpenAI.Realtime.csproj
new file mode 100755
index 000000000..62d1e4c5c
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/OpenAI.Realtime.csproj
@@ -0,0 +1,14 @@
+
+
+
+ net8.0
+ 12.0
+ enable
+
+
+
+
+
+
+
+
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/OpenAIDataChannelManager.cs b/examples/OpenAIExamples/OpenAI.Realtime/OpenAIDataChannelManager.cs
new file mode 100755
index 000000000..afb73f687
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/OpenAIDataChannelManager.cs
@@ -0,0 +1,66 @@
+//-----------------------------------------------------------------------------
+// Filename: OpenAIDataChannelManager.cs
+//
+// Description: Helper methods to manage communications with an OpenAI WebRTC
+// peer connection
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 23 Jan 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// MIT.
+//-----------------------------------------------------------------------------
+
+using LanguageExt;
+using System.Text.Json;
+using System.Text;
+
+namespace demo;
+
+public class OpenAIDataChannelManager
+{
+ public static Option ParseDataChannelMessage(byte[] data)
+ {
+ var message = Encoding.UTF8.GetString(data);
+
+ //logger.LogDebug($"Data channel message: {message}");
+
+ var serverEvent = JsonSerializer.Deserialize(message, JsonOptions.Default);
+
+ if (serverEvent != null)
+ {
+ //logger.LogInformation($"Server event ID {serverEvent.EventID} and type {serverEvent.Type}.");
+
+ return serverEvent.Type switch
+ {
+ OpenAIConversationItemCreated.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIInputAudioBufferCommitted.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIInputAudioBufferSpeechStarted.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIInputAudioBufferSpeechStopped.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIOuputAudioBufferAudioStarted.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIOuputAudioBufferAudioStopped.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIRateLimitsUpdated.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIResponseAudioDone.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIResponseAudioTranscriptDelta.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIResponseAudioTranscriptDone.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIResponseContentPartAdded.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIResponseContentPartDone.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIResponseCreated.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIResponseDone.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIResponseFunctionCallArgumentsDelta.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIResponseFunctionCallArgumentsDone.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIResponseOutputItemAdded.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAIResponseOutputItemDone.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAISessionCreated.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ OpenAISessionUpdated.TypeName => JsonSerializer.Deserialize(message, JsonOptions.Default),
+ _ => Option.None
+ };
+
+ }
+
+ return Option.None;
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/OpenAIRealtimeRestClient.cs b/examples/OpenAIExamples/OpenAI.Realtime/OpenAIRealtimeRestClient.cs
new file mode 100755
index 000000000..03e774600
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/OpenAIRealtimeRestClient.cs
@@ -0,0 +1,93 @@
+//-----------------------------------------------------------------------------
+// Filename: OpenAIRealtimeRestClient.cs
+//
+// Description: Used to send requests to the OpenAI Realtime REST server to
+// do the initial session set up and the SDP offer/answer exchange.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 23 Jan 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// MIT.
+//-----------------------------------------------------------------------------
+
+using LanguageExt;
+using System.Net.Http.Headers;
+using System.Net.Http;
+using System.Text.Json;
+using System.Text;
+using System.Threading.Tasks;
+using LanguageExt.Common;
+
+namespace demo;
+
+public class OpenAIRealtimeRestClient
+{
+ ///
+ /// Completes the steps required to get an ephemeral key from the OpenAI REST server. The ephemeral key is needed
+ /// to send an SDP offer, and get the SDP answer.
+ ///
+ public static async Task> CreateEphemeralKeyAsync(string sessionsUrl, string openAIToken, string model, OpenAIVoicesEnum voice)
+ => (await SendHttpPostAsync(
+ sessionsUrl,
+ openAIToken,
+ JsonSerializer.Serialize(
+ new OpenAISession
+ {
+ Model = model,
+ Voice = voice
+ }, JsonOptions.Default),
+ "application/json"))
+ .Bind(responseContent =>
+ JsonSerializer.Deserialize(responseContent)
+ .GetProperty("client_secret")
+ .GetProperty("value")
+ .GetString() ??
+ Prelude.Left(Error.New("Failed to get ephemeral secret."))
+ );
+
+ ///
+ /// Attempts to get the SDP answer from the OpenAI REST server. This is the way OpenAI does the signalling. The
+ /// ICE candidates will be returned in the SDP answer and are publicly accessible IP's.
+ ///
+ ///
+ /// See https://platform.openai.com/docs/guides/realtime-webrtc#creating-an-ephemeral-token.
+ ///
+ public static Task> GetOpenAIAnswerSdpAsync(string ephemeralKey, string openAIBaseUrl, string model, string offerSdp)
+ => SendHttpPostAsync(
+ $"{openAIBaseUrl}?model={model}",
+ ephemeralKey,
+ offerSdp,
+ "application/sdp");
+
+ ///
+ /// Helper method to send an HTTP POST request with the required headers.
+ ///
+ public static async Task> SendHttpPostAsync(
+ string url,
+ string token,
+ string body,
+ string contentType)
+ {
+ using var httpClient = new HttpClient();
+
+ httpClient.DefaultRequestHeaders.Clear();
+ httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
+
+ var content = new StringContent(body, Encoding.UTF8);
+ content.Headers.ContentType = new MediaTypeHeaderValue(contentType);
+
+ var response = await httpClient.PostAsync(url, content);
+
+ if (!response.IsSuccessStatusCode)
+ {
+ var errorBody = await response.Content.ReadAsStringAsync();
+ return Error.New($"HTTP POST to {url} failed: {response.StatusCode}. Error body: {errorBody}");
+ }
+
+ return await response.Content.ReadAsStringAsync();
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIAudioFormatsEnum.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIAudioFormatsEnum.cs
new file mode 100755
index 000000000..17447379f
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIAudioFormatsEnum.cs
@@ -0,0 +1,8 @@
+namespace demo;
+
+public enum OpenAIAudioFormatsEnum
+{
+ pcm16,
+ g711_ulaw,
+ g711_alaw
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIConversationAudioFormatsEnum.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIConversationAudioFormatsEnum.cs
new file mode 100755
index 000000000..7daf56240
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIConversationAudioFormatsEnum.cs
@@ -0,0 +1,13 @@
+namespace demo;
+
+public enum OpenAIConversationAudioFormatsEnum
+{
+ // "pcm16"
+ Pcm16,
+
+ // "g711_ulaw"
+ G711_Ulaw,
+
+ // "g711_alaw"
+ G711Alaw
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIConversationItemTypeEnum.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIConversationItemTypeEnum.cs
new file mode 100755
index 000000000..6212125ed
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIConversationItemTypeEnum.cs
@@ -0,0 +1,10 @@
+namespace demo;
+
+public enum OpenAIConversationConversationTypeEnum
+{
+ message,
+
+ function_call,
+
+ function_call_output
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIResponseStatusEnum.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIResponseStatusEnum.cs
new file mode 100755
index 000000000..a765460c9
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIResponseStatusEnum.cs
@@ -0,0 +1,9 @@
+namespace demo;
+
+public enum OpenAIResponseStatusEnum
+{
+ Completed,
+ Cancelled,
+ Failed,
+ Incomplete
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIToolChoiceEnum.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIToolChoiceEnum.cs
new file mode 100755
index 000000000..939a66166
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIToolChoiceEnum.cs
@@ -0,0 +1,8 @@
+namespace demo;
+
+public enum OpenAIToolChoiceEnum
+{
+ auto,
+ none,
+ required
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIToolKindEnum.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIToolKindEnum.cs
new file mode 100755
index 000000000..5ad663e03
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIToolKindEnum.cs
@@ -0,0 +1,6 @@
+namespace demo;
+
+public enum OpenAIToolKindEnum
+{
+ function
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIVoicesEnum.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIVoicesEnum.cs
new file mode 100755
index 000000000..ab4b72c25
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/Enums/OpenAIVoicesEnum.cs
@@ -0,0 +1,13 @@
+namespace demo;
+
+public enum OpenAIVoicesEnum
+{
+ alloy,
+ ash,
+ ballad,
+ coral,
+ echo,
+ sage,
+ shimmer,
+ verse
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIAudioBufferAudioCleared.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIAudioBufferAudioCleared.cs
new file mode 100755
index 000000000..2f459d47b
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIAudioBufferAudioCleared.cs
@@ -0,0 +1,22 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/input_audio_buffer
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIAudioBufferAudioCleared : OpenAIServerEventBase
+{
+ public const string TypeName = "output_audio_buffer.audio_cleared";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public string? ResponseID { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIConversationItemCreate.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIConversationItemCreate.cs
new file mode 100755
index 000000000..580cc5781
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIConversationItemCreate.cs
@@ -0,0 +1,71 @@
+// https://platform.openai.com/docs/api-reference/realtime-client-events/conversation/item
+
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIConversationItemCreate : OpenAIServerEventBase
+{
+ public const string TypeName = "conversation.item.create";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("previous_item_id")]
+ public string? PreviousItemID { get; set; }
+
+ [JsonPropertyName("item")]
+ public OpenAIConversationItem? Item { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
+
+public class OpenAIConversationItem
+{
+ [JsonPropertyName("id")]
+ public string? ID { get; set; }
+
+ [JsonPropertyName("type")]
+ public OpenAIConversationConversationTypeEnum Type { get; set; }
+
+ [JsonPropertyName("object")]
+ public string? Object { get; set; }
+
+ [JsonPropertyName("status")]
+ public string? Status { get; set; }
+
+ [JsonPropertyName("role")]
+ public string? Role { get; set; }
+
+ [JsonPropertyName("content")]
+ public List? Content { get; set; }
+
+ [JsonPropertyName("call_id")]
+ public string? CallID { get; set; }
+
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ [JsonPropertyName("arguments")]
+ public string? Arguments { get; set; }
+
+ [JsonPropertyName("output")]
+ public string? Output { get; set; }
+}
+
+public class OpenAIContentItem
+{
+ [JsonPropertyName("type")]
+ public string Type { get; set; } = default!;
+
+ [JsonPropertyName("transcript")]
+ public string Transcript { get; set; } = default!;
+
+ [JsonPropertyName("audio")]
+ public string Audio { get; set; } = default!;
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIConversationItemCreated.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIConversationItemCreated.cs
new file mode 100755
index 000000000..9e679cdab
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIConversationItemCreated.cs
@@ -0,0 +1,26 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/conversation/item/created
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIConversationItemCreated : OpenAIServerEventBase
+{
+ public const string TypeName = "conversation.item.created";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("previous_item_id")]
+ public string? PreviousItemID { get; set; }
+
+ [JsonPropertyName("item")]
+ public OpenAIConversationItem? Item { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
+
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAICreateSession.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAICreateSession.cs
new file mode 100755
index 000000000..35be79891
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAICreateSession.cs
@@ -0,0 +1,23 @@
+// https://platform.openai.com/docs/api-reference/realtime-sessions/create
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAICreateSession
+{
+ [JsonPropertyName("model")]
+ public required string Model { get; set; }
+
+ [JsonPropertyName("voice")]
+ public string? voice { get; set; }
+
+ //[JsonPropertyName("turn_detection")]
+ //public object TurnDetection { get; set; }
+
+ public string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIInputAudioBufferCommitted.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIInputAudioBufferCommitted.cs
new file mode 100755
index 000000000..2303adfa3
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIInputAudioBufferCommitted.cs
@@ -0,0 +1,25 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/input_audio_buffer
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIInputAudioBufferCommitted : OpenAIServerEventBase
+{
+ public const string TypeName = "input_audio_buffer.committed";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("item_id")]
+ public string? ItemID { get; set; }
+
+ [JsonPropertyName("previous_item_id")]
+ public string? PreviousItemID { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIInputAudioBufferSpeechStarted.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIInputAudioBufferSpeechStarted.cs
new file mode 100755
index 000000000..73cc3a950
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIInputAudioBufferSpeechStarted.cs
@@ -0,0 +1,25 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/input_audio_buffer/speech_started
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIInputAudioBufferSpeechStarted : OpenAIServerEventBase
+{
+ public const string TypeName = "input_audio_buffer.speech_started";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("audio_start_ms")]
+ public int AudioStartMilliseconds { get; set; }
+
+ [JsonPropertyName("item_id")]
+ public string? ItemID { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIInputAudioBufferSpeechStopped.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIInputAudioBufferSpeechStopped.cs
new file mode 100755
index 000000000..4150859b5
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIInputAudioBufferSpeechStopped.cs
@@ -0,0 +1,25 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/input_audio_buffer/speech_stopped
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIInputAudioBufferSpeechStopped : OpenAIServerEventBase
+{
+ public const string TypeName = "input_audio_buffer.speech_stopped";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("audio_end_ms")]
+ public int AUdioEndMilliseconds { get; set; }
+
+ [JsonPropertyName("item_id")]
+ public string? ItemID { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIOutputAudioBufferAudioStarted.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIOutputAudioBufferAudioStarted.cs
new file mode 100755
index 000000000..4f69aac39
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIOutputAudioBufferAudioStarted.cs
@@ -0,0 +1,22 @@
+// ??
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIOuputAudioBufferAudioStarted : OpenAIServerEventBase
+{
+ public const string TypeName = "output_audio_buffer.audio_started";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public string? ResponseID { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIOutputAudioBufferAudioStopped.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIOutputAudioBufferAudioStopped.cs
new file mode 100755
index 000000000..06a97d182
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIOutputAudioBufferAudioStopped.cs
@@ -0,0 +1,22 @@
+// ??
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIOuputAudioBufferAudioStopped : OpenAIServerEventBase
+{
+ public const string TypeName = "output_audio_buffer.audio_stopped";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public string? ResponseID { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIRateLimitsUpdated.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIRateLimitsUpdated.cs
new file mode 100755
index 000000000..7575790d7
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIRateLimitsUpdated.cs
@@ -0,0 +1,21 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/rate_limits
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIRateLimitsUpdated : OpenAIServerEventBase
+{
+ public const string TypeName = "rate_limits.updated";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ // TODO: Add rate limit fields.
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponse.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponse.cs
new file mode 100755
index 000000000..75a0236a0
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponse.cs
@@ -0,0 +1,25 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/done
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponse
+{
+ [JsonPropertyName("id")]
+ public required string ID { get; set; }
+
+ [JsonPropertyName("object")]
+ public required string @Object { get; set; }
+
+ [JsonPropertyName("status")]
+ public OpenAIResponseStatusEnum Status { get; set; }
+
+ // TODO.
+
+ public string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseAudioDone.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseAudioDone.cs
new file mode 100755
index 000000000..c34160732
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseAudioDone.cs
@@ -0,0 +1,31 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/content_part/done
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseAudioDone : OpenAIServerEventBase
+{
+ public const string TypeName = "response.audio.done";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public required string ResponseID { get; set; }
+
+ [JsonPropertyName("item_id")]
+ public required string ItemID { get; set; }
+
+ [JsonPropertyName("output_index")]
+ public int OutputIndex { get; set; }
+
+ [JsonPropertyName("content_index")]
+ public int ContentIndex { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseAudioTranscriptDelta.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseAudioTranscriptDelta.cs
new file mode 100755
index 000000000..1cb56b8cf
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseAudioTranscriptDelta.cs
@@ -0,0 +1,33 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/audio_transcript
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseAudioTranscriptDelta : OpenAIServerEventBase
+{
+ public const string TypeName = "response.audio_transcript.delta";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public string? ResponseID { get; set; }
+
+ [JsonPropertyName("item_id")]
+ public string? ItemID { get; set; }
+
+ [JsonPropertyName("output_index")]
+ public int OutputIndex { get; set; }
+
+ [JsonPropertyName("content_index")]
+ public int ContentIndex { get; set; }
+
+ public string? Delta{ get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseAudioTranscriptDone.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseAudioTranscriptDone.cs
new file mode 100755
index 000000000..337f22e4c
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseAudioTranscriptDone.cs
@@ -0,0 +1,33 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/audio_transcript/done
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseAudioTranscriptDone : OpenAIServerEventBase
+{
+ public const string TypeName = "response.audio_transcript.done";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public string? ResponseID { get; set; }
+
+ [JsonPropertyName("item_id")]
+ public string? ItemID { get; set; }
+
+ [JsonPropertyName("output_index")]
+ public int OutputIndex { get; set; }
+
+ [JsonPropertyName("content_index")]
+ public int ContentIndex { get; set; }
+
+ public string? Transcript{ get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseContentPartAdded.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseContentPartAdded.cs
new file mode 100755
index 000000000..18f2897c4
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseContentPartAdded.cs
@@ -0,0 +1,33 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/content_part
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseContentPartAdded : OpenAIServerEventBase
+{
+ public const string TypeName = "response.content_part.added";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public required string ResponseID { get; set; }
+
+ [JsonPropertyName("item_id")]
+ public required string ItemID { get; set; }
+
+ [JsonPropertyName("output_index")]
+ public int OutputIndex { get; set; }
+
+ [JsonPropertyName("content_index")]
+ public int ContentIndex { get; set; }
+
+ // TODO add part.
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseContentPartDone.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseContentPartDone.cs
new file mode 100755
index 000000000..fb3ab00a5
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseContentPartDone.cs
@@ -0,0 +1,33 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/content_part/done
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseContentPartDone : OpenAIServerEventBase
+{
+ public const string TypeName = "response.content_part.done";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public required string ResponseID { get; set; }
+
+ [JsonPropertyName("item_id")]
+ public required string ItemID { get; set; }
+
+ [JsonPropertyName("output_index")]
+ public int OutputIndex { get; set; }
+
+ [JsonPropertyName("content_index")]
+ public int ContentIndex { get; set; }
+
+ // TODO add part.
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseCreate.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseCreate.cs
new file mode 100755
index 000000000..be81ec04e
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseCreate.cs
@@ -0,0 +1,35 @@
+// https://platform.openai.com/docs/api-reference/realtime-client-events/response/create
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseCreate : OpenAIServerEventBase
+{
+ [JsonPropertyName("type")]
+ public override string Type => "response.create";
+
+ [JsonPropertyName("response")]
+ public required OpenAIResponseCreateResponse Response { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
+
+public class OpenAIResponseCreateResponse
+{
+ [JsonPropertyName("modalities")]
+ public string[] Modalities { get; set; } = new[] { "audio", "text" };
+
+ [JsonPropertyName("instructions")]
+ public string? Instructions { get; set; }
+
+ [JsonPropertyName("voice")]
+ public string? Voice { get; set; }
+
+ [JsonPropertyName("output_audio_format")]
+ public string OutputAudioFrmat { get; set; } = "pcm16";
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseCreated.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseCreated.cs
new file mode 100755
index 000000000..a71fb1347
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseCreated.cs
@@ -0,0 +1,22 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/created
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseCreated : OpenAIServerEventBase
+{
+ public const string TypeName = "response.created";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ // TODO - Add the properties for the response object
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
+
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseDone.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseDone.cs
new file mode 100755
index 000000000..ad2763796
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseDone.cs
@@ -0,0 +1,22 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/done
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseDone : OpenAIServerEventBase
+{
+ public const string TypeName = "response.done";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response")]
+ public required OpenAIResponse Response { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseFunctionCallArgumentsDelta.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseFunctionCallArgumentsDelta.cs
new file mode 100755
index 000000000..44a9813c1
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseFunctionCallArgumentsDelta.cs
@@ -0,0 +1,34 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/function_call_arguments/delta
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseFunctionCallArgumentsDelta : OpenAIServerEventBase
+{
+ public const string TypeName = "response.function_call_arguments.delta";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public string? ResponseID { get; set; }
+
+ [JsonPropertyName("item_id")]
+ public string? ItemID { get; set; }
+
+ [JsonPropertyName("output_index")]
+ public int OutputIndex { get; set; }
+
+ [JsonPropertyName("call_id")]
+ public string? CallID { get; set; }
+
+ [JsonPropertyName("delta")]
+ public string? Delta{ get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseFunctionCallArgumentsDone.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseFunctionCallArgumentsDone.cs
new file mode 100755
index 000000000..bff4f832d
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseFunctionCallArgumentsDone.cs
@@ -0,0 +1,111 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/function_call_arguments/done
+
+using System;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseFunctionCallArgumentsDone : OpenAIServerEventBase
+{
+ public const string TypeName = "response.function_call_arguments.done";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public string? ResponseID { get; set; }
+
+ [JsonPropertyName("item_id")]
+ public string? ItemID { get; set; }
+
+ [JsonPropertyName("output_index")]
+ public int OutputIndex { get; set; }
+
+ [JsonPropertyName("call_id")]
+ public string? CallID { get; set; }
+
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ [JsonPropertyName("arguments")]
+ [JsonConverter(typeof(JsonStringToElementConverter))]
+ public JsonElement Arguments { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+
+ public string ArgumentsToString()
+ {
+ string argumentsStr = string.Empty;
+
+ if (Arguments.ValueKind == JsonValueKind.Object)
+ {
+ foreach (JsonProperty property in Arguments.EnumerateObject())
+ {
+ argumentsStr += $"Argument Name: {property.Name}, Value: {property.Value}\n";
+ }
+ }
+
+ return argumentsStr;
+ }
+}
+
+public static class JsonElementExtensions
+{
+ ///
+ /// Attempts to retrieve the value of a named property from a JsonElement object.
+ /// Returns the property value as a string if found; otherwise, returns null.
+ ///
+ public static string? GetNamedArgumentValue(this JsonElement element, string propertyName)
+ {
+ // Ensure the JsonElement is an object.
+ if (element.ValueKind != JsonValueKind.Object)
+ {
+ return null;
+ }
+
+ // Try to get the property.
+ if (element.TryGetProperty(propertyName, out JsonElement propertyValue))
+ {
+ // If the property is a JSON string, return its string value.
+ if (propertyValue.ValueKind == JsonValueKind.String)
+ {
+ return propertyValue.GetString();
+ }
+ // For non-string types, return the raw JSON text.
+ return propertyValue.GetRawText();
+ }
+
+ // If property not found, return null.
+ return null;
+ }
+}
+
+public class JsonStringToElementConverter : JsonConverter
+{
+ public override JsonElement Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
+ {
+ // Expecting a JSON string containing JSON content
+ if (reader.TokenType == JsonTokenType.String)
+ {
+ string? jsonString = reader.GetString();
+ if (!string.IsNullOrEmpty(jsonString))
+ {
+ using var doc = JsonDocument.Parse(jsonString);
+ return doc.RootElement.Clone();
+ }
+ }
+ // Fallback empty object
+ using var emptyDoc = JsonDocument.Parse("{}");
+ return emptyDoc.RootElement.Clone();
+ }
+
+ public override void Write(Utf8JsonWriter writer, JsonElement value, JsonSerializerOptions options)
+ {
+ // Serialize the JsonElement back to a JSON string
+ writer.WriteStringValue(value.GetRawText());
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseOutputItemAdded.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseOutputItemAdded.cs
new file mode 100755
index 000000000..834686cfb
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseOutputItemAdded.cs
@@ -0,0 +1,27 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/output_item
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseOutputItemAdded : OpenAIServerEventBase
+{
+ public const string TypeName = "response.output_item.added";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public required string ResponseID { get; set; }
+
+ [JsonPropertyName("output_index")]
+ public int OutputIndex { get; set; }
+
+ // TODO add item..
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseOutputItemDone.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseOutputItemDone.cs
new file mode 100755
index 000000000..f0701ca76
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIResponseOutputItemDone.cs
@@ -0,0 +1,27 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/response/output_item/done
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIResponseOutputItemDone : OpenAIServerEventBase
+{
+ public const string TypeName = "response.output_item.done";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("response_id")]
+ public required string ResponseID { get; set; }
+
+ [JsonPropertyName("output_index")]
+ public int OutputIndex { get; set; }
+
+ // TODO add item..
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIServerEventBase.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIServerEventBase.cs
new file mode 100755
index 000000000..f9f5917d3
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIServerEventBase.cs
@@ -0,0 +1,18 @@
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIServerEventBase
+{
+ [JsonPropertyName("event_id")]
+ public string? EventID { get; set; }
+
+ [JsonPropertyName("type")]
+ public virtual string? Type { get; set; }
+
+ public virtual string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISession.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISession.cs
new file mode 100755
index 000000000..f64c51f04
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISession.cs
@@ -0,0 +1,42 @@
+// https://platform.openai.com/docs/api-reference/realtime-sessions/create
+
+using System.Collections.Generic;
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAISession
+{
+ [JsonPropertyName("modalities")]
+ public string[] Modalities { get; set; } = { "audio", "text" };
+
+ [JsonPropertyName("instructions")]
+ public string? Instructions { get; set; }
+
+ [JsonPropertyName("model")]
+ public string? Model { get; set; }
+
+ [JsonPropertyName("voice")]
+ public OpenAIVoicesEnum? Voice { get; set; }
+
+ [JsonPropertyName("input_audio_format")]
+ public OpenAIAudioFormatsEnum InputAudioFormat { get; set; } = OpenAIAudioFormatsEnum.pcm16;
+
+ [JsonPropertyName("output_audio_format")]
+ public OpenAIAudioFormatsEnum OutputAudioFormat { get; set; } = OpenAIAudioFormatsEnum.pcm16;
+
+ [JsonPropertyName("turn_detection")]
+ public OpenAITurnDetection? TurnDetection { get; set; }
+
+ [JsonPropertyName("tools")]
+ public List? Tools { get; set; }
+
+ [JsonPropertyName("tool_choice")]
+ public OpenAIToolChoiceEnum ToolChoice { get; set; } = OpenAIToolChoiceEnum.auto;
+
+ public string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISessionCreated.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISessionCreated.cs
new file mode 100755
index 000000000..0482816de
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISessionCreated.cs
@@ -0,0 +1,22 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/session/created
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAISessionCreated : OpenAIServerEventBase
+{
+ public const string TypeName = "session.created";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("session")]
+ public required OpenAISession Session { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISessionUpdate.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISessionUpdate.cs
new file mode 100755
index 000000000..001f141df
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISessionUpdate.cs
@@ -0,0 +1,22 @@
+// https://platform.openai.com/docs/api-reference/realtime-client-events/session/update
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAISessionUpdate : OpenAIServerEventBase
+{
+ public const string TypeName = "session.update";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("session")]
+ public required OpenAISession Session { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISessionUpdated.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISessionUpdated.cs
new file mode 100755
index 000000000..7fe142b09
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAISessionUpdated.cs
@@ -0,0 +1,22 @@
+// https://platform.openai.com/docs/api-reference/realtime-server-events/session/updated
+
+using System.Text.Json;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAISessionUpdated : OpenAIServerEventBase
+{
+ public const string TypeName = "session.updated";
+
+ [JsonPropertyName("type")]
+ public override string Type => TypeName;
+
+ [JsonPropertyName("session")]
+ public required OpenAISession Session { get; set; }
+
+ public override string ToJson()
+ {
+ return JsonSerializer.Serialize(this, JsonOptions.Default);
+ }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAITool.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAITool.cs
new file mode 100755
index 000000000..db1cf43ce
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAITool.cs
@@ -0,0 +1,20 @@
+// https://platform.openai.com/docs/api-reference/realtime-sessions/session_object#realtime-sessions/session_object-tools
+
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAITool
+{
+ [JsonPropertyName("type")]
+ public OpenAIToolKindEnum Type => OpenAIToolKindEnum.function;
+
+ [JsonPropertyName("name")]
+ public required string Name { get; set; }
+
+ [JsonPropertyName("description")]
+ public string? Description { get; set; }
+
+ [JsonPropertyName("parameters")]
+ public OpenAIToolParameters? Parameters { get; set; }
+}
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIToolParameters.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIToolParameters.cs
new file mode 100755
index 000000000..c9ed86d31
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAIToolParameters.cs
@@ -0,0 +1,70 @@
+// https://platform.openai.com/docs/api-reference/realtime-sessions/session_object#realtime-sessions/session_object-tools
+//
+// Example payload:
+//{
+// "event_id": "event_123",
+// "type": "session.update",
+// "session": {
+// "modalities": ["text", "audio"],
+// "instructions": "You are a helpful assistant.",
+// "voice": "sage",
+// "input_audio_format": "pcm16",
+// "output_audio_format": "pcm16",
+// "input_audio_transcription": {
+// "model": "whisper-1"
+// },
+// "turn_detection": {
+// "type": "server_vad",
+// "threshold": 0.5,
+// "prefix_padding_ms": 300,
+// "silence_duration_ms": 500,
+// "create_response": true
+// },
+// "tools": [
+// {
+// "type": "function",
+// "name": "get_weather",
+// "description": "Get the current weather...",
+// "parameters": {
+// "type": "object",
+// "properties": {
+// "location": { "type": "string" }
+// },
+// "required": ["location"]
+// }
+// }
+// ],
+// "tool_choice": "auto",
+// "temperature": 0.8,
+// "max_response_output_tokens": "inf"
+// }
+//}
+
+using System.Collections.Generic;
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAIToolParameters
+{
+ [JsonPropertyName("type")]
+ public string Type => "object";
+
+ [JsonPropertyName("properties")]
+ public OpenAIToolProperties? Properties { get; set; }
+
+ [JsonPropertyName("required")]
+ public List? Required { get; set; }
+}
+
+public class OpenAIToolProperties
+{
+ [JsonPropertyName("location")]
+ public required OpenAIToolLocation Location { get; set; }
+}
+
+public class OpenAIToolLocation
+{
+ [JsonPropertyName("type")]
+ public required string Type { get; set; }
+}
\ No newline at end of file
diff --git a/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAITurnDetection.cs b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAITurnDetection.cs
new file mode 100755
index 000000000..78b0597fc
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAI.Realtime/RealtimeModels/OpenAITurnDetection.cs
@@ -0,0 +1,23 @@
+// https://platform.openai.com/docs/api-reference/realtime-client-events/session/update
+
+using System.Text.Json.Serialization;
+
+namespace demo;
+
+public class OpenAITurnDetection
+{
+ [JsonPropertyName("type")]
+ public string Type => "server_vad";
+
+ [JsonPropertyName("threshold")]
+ public decimal Threshold { get; set; }
+
+ [JsonPropertyName("prefix_padding_ms")]
+ public int PrefixPaddingMilliseconds { get; set; }
+
+ [JsonPropertyName("silence_duration_ms")]
+ public int SilenceDurationMilliseconds { get; set; }
+
+ [JsonPropertyName("create_response")]
+ public bool CreateResponse { get; set; }
+}
diff --git a/examples/OpenAIExamples/OpenAIExamples.sln b/examples/OpenAIExamples/OpenAIExamples.sln
new file mode 100755
index 000000000..e139be0cf
--- /dev/null
+++ b/examples/OpenAIExamples/OpenAIExamples.sln
@@ -0,0 +1,46 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.12.35527.113
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SIPSorcery", "..\..\src\SIPSorcery.csproj", "{C127B959-BA3D-48A6-BA07-CEBDF046005D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebRTCOpenAILocalFunctions", "WebRTCOpenAILocalFunctions\WebRTCOpenAILocalFunctions.csproj", "{CD58E81B-8FF2-488E-A956-8DD2E068473F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebRTCOpenAIAliceAndBob", "WebRTCOpenAIAliceAndBob\WebRTCOpenAIAliceAndBob.csproj", "{1C295399-4394-42D2-9548-7CAA04A8F0A9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebRTCOpenAI", "WebRTCOpenAI\WebRTCOpenAI.csproj", "{DA4A4C46-7865-438B-AF4F-DB35920CE43F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenAI.Realtime", "OpenAI.Realtime\OpenAI.Realtime.csproj", "{91BEB869-8AF4-4F99-96A3-BAC667D5DE40}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {C127B959-BA3D-48A6-BA07-CEBDF046005D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C127B959-BA3D-48A6-BA07-CEBDF046005D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C127B959-BA3D-48A6-BA07-CEBDF046005D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C127B959-BA3D-48A6-BA07-CEBDF046005D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CD58E81B-8FF2-488E-A956-8DD2E068473F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {CD58E81B-8FF2-488E-A956-8DD2E068473F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CD58E81B-8FF2-488E-A956-8DD2E068473F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {CD58E81B-8FF2-488E-A956-8DD2E068473F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1C295399-4394-42D2-9548-7CAA04A8F0A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1C295399-4394-42D2-9548-7CAA04A8F0A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1C295399-4394-42D2-9548-7CAA04A8F0A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1C295399-4394-42D2-9548-7CAA04A8F0A9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DA4A4C46-7865-438B-AF4F-DB35920CE43F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DA4A4C46-7865-438B-AF4F-DB35920CE43F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DA4A4C46-7865-438B-AF4F-DB35920CE43F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DA4A4C46-7865-438B-AF4F-DB35920CE43F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {91BEB869-8AF4-4F99-96A3-BAC667D5DE40}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {91BEB869-8AF4-4F99-96A3-BAC667D5DE40}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {91BEB869-8AF4-4F99-96A3-BAC667D5DE40}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {91BEB869-8AF4-4F99-96A3-BAC667D5DE40}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/OpenAIExamples/README.md b/examples/OpenAIExamples/README.md
new file mode 100644
index 000000000..37f8cd7a5
--- /dev/null
+++ b/examples/OpenAIExamples/README.md
@@ -0,0 +1,9 @@
+## OpenAI Realtime WebRTC Integration Examples
+
+The examples in this folder demonstrate integrations with [OpenAI's Realtime WebRTC endpoint](https://platform.openai.com/docs/guides/realtime-webrtc)
+
+ - [WebRTCOpenAI](https://github.com/sipsorcery/sipsorcery/tree/master/examples/OpenAIExamples/WebRTCOpenAI): The simplest example. This program establishes a peer connection and feeds microphone input to the OpenAI agent.
+
+ - [WebRTCOpenAIAliceAndBob](https://github.com/sipsorcery/sipsorcery/tree/master/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob): An example WebRTC server application that eastablishes two connections with the OpenAI realtime endpoint and wires up their audio together. An OpenGL visualisation is used to show which agent is talking.
+
+- [WebRTCOpenAILocalFunctions](https://github.com/sipsorcery/sipsorcery/tree/master/examples/OpenAIExamples/WebRTCOpenAILocalFunctions): An example WebRTC application that interacts with OpenAI's WebRTC endpoint and utilise the [local functions feature](https://platform.openai.com/docs/guides/function-calling).
diff --git a/examples/OpenAIExamples/WebRTCOpenAI/Program.cs b/examples/OpenAIExamples/WebRTCOpenAI/Program.cs
new file mode 100755
index 000000000..b425be99e
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAI/Program.cs
@@ -0,0 +1,293 @@
+//-----------------------------------------------------------------------------
+// Filename: Program.cs
+//
+// Description: An example WebRTC application that can be used to interact with
+// OpenAI's real-time API https://platform.openai.com/docs/guides/realtime-webrtc.
+//
+// NOTE: As of 24 Dec 2024 this example does work to establish an audio stream and is
+// able to receive data channel messages. There is no echo cancellation feature in this
+// demo so if not provided by the OS then ChatGPT will end up talking to itself.
+//
+// NOTE: As of 24 Dec 2024 the official OpenAI dotnet SDK is missing the realtime
+// models that represent the JSON datachannel messages. As such some rudimentary
+// models have been created.
+// The official SDK is available at https://github.com/openai/openai-dotnet.
+// The OpenAI API realtime server events reference is available at
+// https://platform.openai.com/docs/api-reference/realtime-server-events.
+//
+// Remarks:
+// To get the ephemeral secret you first need an API key from OpenAI at
+// https://platform.openai.com/settings/organization/api-keys.
+//
+// If you don't want to pass your OpenAI API key to this app an alternative approach is
+// to create an ephemeral secret using the curl comamnd below and then hard code it into
+// the application.
+// NOTE each ephemeral key seems like it can ONLY be used once:
+// curl -v https://api.openai.com/v1/realtime/sessions ^
+// --header "Authorization: Bearer %OPENAI_TOKEN%" ^
+// --header "Content-Type: application/json" ^
+// --data "{\"model\": \"gpt-4o-realtime-preview-2024-12-17\", \"voice\": \"verse\"}"
+//
+// Usage:
+// set OPENAIKEY=your_openai_key
+// dotnet run %OPENAIKEY%
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 19 Dec 2024 Aaron Clauson Created, Dublin, Ireland.
+// 28 Dec 2024 Aaron Clauson Switched to functional approach for The Craic.
+// 17 Jan 2025 Aaron Clauson Added create resposne data channel message to trigger conversation start.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Text.Json;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Serilog;
+using SIPSorcery.Media;
+using SIPSorcery.Net;
+using SIPSorceryMedia.Windows;
+using LanguageExt;
+using LanguageExt.Common;
+
+namespace demo;
+
+record PcContext(
+ RTCPeerConnection Pc,
+ SemaphoreSlim PcConnectedSemaphore,
+ string EphemeralKey = "",
+ string OfferSdp = "",
+ string AnswerSdp = ""
+);
+
+class Program
+{
+ private const string OPENAI_REALTIME_SESSIONS_URL = "https://api.openai.com/v1/realtime/sessions";
+ private const string OPENAI_REALTIME_BASE_URL = "https://api.openai.com/v1/realtime";
+ private const string OPENAI_MODEL = "gpt-4o-realtime-preview-2024-12-17";
+ private const OpenAIVoicesEnum OPENAI_VOICE = OpenAIVoicesEnum.shimmer;
+ private const string OPENAI_DATACHANNEL_NAME = "oai-events";
+
+ private static Microsoft.Extensions.Logging.ILogger logger = LoggerFactory.Create(builder =>
+ builder.AddSerilog(new LoggerConfiguration()
+ .Enrich.FromLogContext()
+ .MinimumLevel.Debug()
+ .WriteTo.Console()
+ .CreateLogger()))
+ .CreateLogger();
+
+ static async Task Main(string[] args)
+ {
+ Console.WriteLine("WebRTC OpenAI Demo Program");
+ Console.WriteLine("Press ctrl-c to exit.");
+
+ if (args.Length != 1)
+ {
+ Console.WriteLine("Please provide your OpenAI key as a command line argument. It's used to get the single use ephemeral secret for the WebRTC connection.");
+ Console.WriteLine("The recommended approach is to use an environment variable, for example: set OPENAIKEY=");
+ Console.WriteLine("Then execute the application using: dotnet run %OPENAIKEY%");
+ return;
+ }
+
+ var flow = await Prelude.Right(default)
+ .BindAsync(_ =>
+ {
+ logger.LogInformation("STEP 1: Get ephemeral key from OpenAI.");
+ return OpenAIRealtimeRestClient.CreateEphemeralKeyAsync(OPENAI_REALTIME_SESSIONS_URL, args[0], OPENAI_MODEL, OPENAI_VOICE);
+ })
+ .BindAsync(async ephemeralKey =>
+ {
+ logger.LogDebug("STEP 2: Create WebRTC PeerConnection & get local SDP offer.");
+
+ var onConnectedSemaphore = new SemaphoreSlim(0, 1);
+ var pc = await CreatePeerConnection(onConnectedSemaphore);
+ var offer = pc.createOffer();
+ await pc.setLocalDescription(offer);
+
+ logger.LogDebug("SDP offer:");
+ logger.LogDebug(offer.sdp);
+
+ return Prelude.Right(
+ new PcContext(pc, onConnectedSemaphore, ephemeralKey, offer.sdp, string.Empty)
+ );
+ })
+ .BindAsync(async ctx =>
+ {
+ logger.LogInformation("STEP 3: Send SDP offer to OpenAI REST server & get SDP answer.");
+
+ var answerEither = await OpenAIRealtimeRestClient.GetOpenAIAnswerSdpAsync(ctx.EphemeralKey, OPENAI_REALTIME_BASE_URL, OPENAI_MODEL, ctx.OfferSdp);
+ return answerEither.Map(answer => ctx with { AnswerSdp = answer });
+ })
+ .BindAsync(ctx =>
+ {
+ logger.LogInformation("STEP 4: Set remote SDP");
+
+ logger.LogDebug("SDP answer:");
+ logger.LogDebug(ctx.AnswerSdp);
+
+ var setAnswerResult = ctx.Pc.setRemoteDescription(
+ new RTCSessionDescriptionInit { sdp = ctx.AnswerSdp, type = RTCSdpType.answer }
+ );
+ logger.LogInformation($"Set answer result {setAnswerResult}.");
+
+ return setAnswerResult == SetDescriptionResultEnum.OK ?
+ Prelude.Right(ctx) :
+ Prelude.Left(Error.New("Failed to set remote SDP."));
+ })
+ .MapAsync(async ctx =>
+ {
+ logger.LogInformation("STEP 5: Wait for data channel to connect and then trigger conversation.");
+
+ await ctx.PcConnectedSemaphore.WaitAsync();
+
+ // NOTE: If you want to trigger the convesation by using the audio from your microphone comment
+ // out this line.
+ SendResponseCreate(ctx.Pc.DataChannels.First(), OpenAIVoicesEnum.alloy, "Introduce urself. Keep it short.");
+
+ return ctx;
+ })
+ .BindAsync(ctx =>
+ {
+ logger.LogInformation("STEP 6: Wait for ctrl-c to indicate user exit.");
+
+ ManualResetEvent exitMre = new(false);
+ Console.CancelKeyPress += (_, e) =>
+ {
+ e.Cancel = true;
+ exitMre.Set();
+ };
+ exitMre.WaitOne();
+
+ ctx.Pc.Close("User exit.");
+
+ return Prelude.Right(ctx);
+ });
+
+ flow.Match(
+ Left: prob => Console.WriteLine($"There was a problem setting up the connection. {prob.Message}"),
+ Right: _ => Console.WriteLine("The call was successful.")
+ );
+ }
+
+ ///
+ /// Sends a response create message to the OpenAI data channel to trigger the conversation.
+ ///
+ private static void SendResponseCreate(RTCDataChannel dc, OpenAIVoicesEnum voice, string message)
+ {
+ var responseCreate = new OpenAIResponseCreate
+ {
+ EventID = Guid.NewGuid().ToString(),
+ Response = new OpenAIResponseCreateResponse
+ {
+ Instructions = message,
+ Voice = voice.ToString()
+ }
+ };
+
+ logger.LogInformation($"Sending initial response create to first call data channel {dc.label}.");
+ logger.LogDebug(responseCreate.ToJson());
+
+ dc.send(responseCreate.ToJson());
+ }
+
+ ///
+ /// Method to create the local peer connection instance and data channel.
+ ///
+ /// A semaphore that will get set when the data channel on the peer connection is opened. Since the data channel
+ /// can only be opened once the peer connection is open this indicates both are ready for use.
+ private static async Task CreatePeerConnection(SemaphoreSlim onConnectedSemaphore)
+ {
+ var pcConfig = new RTCConfiguration
+ {
+ X_UseRtpFeedbackProfile = true,
+ };
+
+ var peerConnection = new RTCPeerConnection(pcConfig);
+ var dataChannel = await peerConnection.createDataChannel(OPENAI_DATACHANNEL_NAME);
+
+ // Sink (speaker) only audio end point.
+ WindowsAudioEndPoint windowsAudioEP = new WindowsAudioEndPoint(new AudioEncoder(includeOpus: true), -1, -1, false, false);
+ windowsAudioEP.RestrictFormats(x => x.FormatName == "OPUS");
+ windowsAudioEP.OnAudioSinkError += err => logger.LogWarning($"Audio sink error. {err}.");
+ windowsAudioEP.OnAudioSourceEncodedSample += peerConnection.SendAudio;
+
+ MediaStreamTrack audioTrack = new MediaStreamTrack(windowsAudioEP.GetAudioSourceFormats(), MediaStreamStatusEnum.SendRecv);
+ peerConnection.addTrack(audioTrack);
+
+ peerConnection.OnAudioFormatsNegotiated += (audioFormats) =>
+ {
+ logger.LogDebug($"Audio format negotiated {audioFormats.First().FormatName}.");
+ windowsAudioEP.SetAudioSinkFormat(audioFormats.First());
+ windowsAudioEP.SetAudioSourceFormat(audioFormats.First());
+ };
+ //peerConnection.OnReceiveReport += RtpSession_OnReceiveReport;
+ //peerConnection.OnSendReport += RtpSession_OnSendReport;
+ peerConnection.OnTimeout += (mediaType) => logger.LogDebug($"Timeout on media {mediaType}.");
+ peerConnection.oniceconnectionstatechange += (state) => logger.LogDebug($"ICE connection state changed to {state}.");
+ peerConnection.onconnectionstatechange += async (state) =>
+ {
+ logger.LogDebug($"Peer connection connected changed to {state}.");
+
+ if (state == RTCPeerConnectionState.connected)
+ {
+ await windowsAudioEP.StartAudio();
+ await windowsAudioEP.StartAudioSink();
+ }
+ else if (state == RTCPeerConnectionState.closed || state == RTCPeerConnectionState.failed)
+ {
+ await windowsAudioEP.CloseAudio();
+ }
+ };
+
+ peerConnection.OnRtpPacketReceived += (IPEndPoint rep, SDPMediaTypesEnum media, RTPPacket rtpPkt) =>
+ {
+ //logger.LogDebug($"RTP {media} pkt received, SSRC {rtpPkt.Header.SyncSource}.");
+
+ if (media == SDPMediaTypesEnum.audio)
+ {
+ windowsAudioEP.GotAudioRtp(rep, rtpPkt.Header.SyncSource, rtpPkt.Header.SequenceNumber, rtpPkt.Header.Timestamp, rtpPkt.Header.PayloadType, rtpPkt.Header.MarkerBit == 1, rtpPkt.Payload);
+ }
+ };
+
+ dataChannel.onopen += () =>
+ {
+ logger.LogDebug("OpenAI data channel opened.");
+ onConnectedSemaphore.Release();
+ };
+
+ dataChannel.onclose += () => logger.LogDebug($"OpenAI data channel {dataChannel.label} closed.");
+
+ dataChannel.onmessage += OnDataChannelMessage;
+
+ return peerConnection;
+ }
+
+ ///
+ /// Event handler for WebRTC data channel messages.
+ ///
+ private static void OnDataChannelMessage(RTCDataChannel dc, DataChannelPayloadProtocols protocol, byte[] data)
+ {
+ //logger.LogInformation($"Data channel {dc.label}, protocol {protocol} message length {data.Length}.");
+
+ var message = Encoding.UTF8.GetString(data);
+ var serverEvent = JsonSerializer.Deserialize(message, JsonOptions.Default);
+
+ var serverEventModel = OpenAIDataChannelManager.ParseDataChannelMessage(data);
+ serverEventModel.IfSome(e =>
+ {
+ if (e is OpenAIResponseAudioTranscriptDone done)
+ {
+ logger.LogInformation($"Transcript done: {done.Transcript}");
+ }
+ });
+ }
+}
diff --git a/examples/OpenAIExamples/WebRTCOpenAI/WebRTCOpenAI.csproj b/examples/OpenAIExamples/WebRTCOpenAI/WebRTCOpenAI.csproj
new file mode 100755
index 000000000..25abc4993
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAI/WebRTCOpenAI.csproj
@@ -0,0 +1,28 @@
+
+
+
+ Exe
+ net8.0-windows10.0.17763.0
+ 12.0
+ enable
+ true
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/OpenAIExamples/WebRTCOpenAI/openai-js-test.html b/examples/OpenAIExamples/WebRTCOpenAI/openai-js-test.html
new file mode 100755
index 000000000..93224c33d
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAI/openai-js-test.html
@@ -0,0 +1,119 @@
+
+
+
+
+WebRTC Connection
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/AudioScope.cs b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/AudioScope.cs
new file mode 100755
index 000000000..c7c6f6676
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/AudioScope.cs
@@ -0,0 +1,196 @@
+//-----------------------------------------------------------------------------
+// Filename: AudioScope.cs
+//
+// Description: Implementation of a Hilbert filter to visualise audio input.
+// Originally based on https://github.com/conundrumer/visual-music-workshop.
+
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 29 Feb 2020 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Linq;
+using System.Numerics;
+using MathNet.Numerics;
+using MathNet.Numerics.IntegralTransforms;
+
+namespace AudioScope
+{
+ public class LowPassFilter
+ {
+ private readonly float _k;
+ private readonly float _norm;
+ private readonly float _a0;
+ private readonly float _a1;
+ private readonly float _a2;
+ private readonly float _b1;
+ private readonly float _b2;
+
+ private float _w1 = 0.0f;
+ private float _w2 = 0.0f;
+
+ public LowPassFilter(float n, float q)
+ {
+ _k = (float)Math.Tan((0.5 * n * Math.PI));
+ _norm = 1.0f / (1.0f + _k / q + _k * _k);
+ _a0 = _k * _k * _norm;
+ _a1 = 2.0f * _a0;
+ _a2 = _a0;
+ _b1 = 2.0f * (_k * _k - 1.0f) * _norm;
+ _b2 = (1.0f - _k / q + _k * _k) * _norm;
+ }
+
+ public float Apply(float x)
+ {
+ float w0 = x - _b1 * _w1 - _b2 * _w2;
+ float y = _a0 * w0 + _a1 * _w1 + _a2 * _w2;
+ _w2 = _w1;
+ _w1 = w0;
+
+ return y;
+ }
+ }
+
+ public class AudioScope
+ {
+ public const int NUM_CHANNELS = 1;
+ public const int SAMPLE_RATE = 44100;
+ public const float maxAmplitude = 4.0F;
+ public const int B = (1 << 16) - 1;
+ public const int M = 4;
+ public const int FFT_SIZE = 1024;
+ public const int MID = (FFT_SIZE - 1) / 2;
+ public const float DELAY_TIME = MID / SAMPLE_RATE;
+ public const float GAIN = 1.0f;
+ public const int BUFFER_SIZE = 256;
+ public const int CIRCULAR_BUFFER_SAMPLES = 3;
+ public const float CUTOFF_FREQ = 0.5f;
+
+ private const int DISPLAY_ARRAY_STRIDE = 4; // Each element sent to the display function needs to have 4 floats.
+ private const int PREVIOUS_SAMPLES_LENGTH = 3 * DISPLAY_ARRAY_STRIDE;
+
+ private Complex[] _analytic;
+ private LowPassFilter _angleLowPass;
+ private LowPassFilter _noiseLowPass;
+
+ private Complex[] _timeRingBuffer = new Complex[2 * FFT_SIZE];
+ private int _timeIndex = 0;
+ private float[] _previousResults = new float[3 * 4];
+ private Complex _prevInput = new Complex(0.0f, 0.0f);
+ private Complex _prevDiff = new Complex(0.0f, 0.0f);
+ private float[] _lastSample = [];
+
+ public AudioScope()
+ {
+ uint n = FFT_SIZE;
+ if (n % 2 == 0)
+ {
+ n -= 1;
+ }
+
+ _analytic = MakeAnalytic(n, FFT_SIZE);
+ _angleLowPass = new LowPassFilter(0.01f, 0.5f);
+ _noiseLowPass = new LowPassFilter(0.5f, 0.7f);
+ }
+
+ public float[] GetSample()
+ {
+ return _lastSample;
+ }
+
+ ///
+ /// Called to process the audio input once the required number of samples are available.
+ ///
+ public void ProcessSample(Complex[] samples)
+ {
+ Array.Copy(samples, 0, _timeRingBuffer, _timeIndex, samples.Length > FFT_SIZE ? FFT_SIZE : samples.Length);
+ Array.Copy(samples, 0, _timeRingBuffer, _timeIndex + FFT_SIZE, samples.Length > (_timeRingBuffer.Length/2 - _timeIndex) ? _timeRingBuffer.Length / 2 - _timeIndex : samples.Length);
+
+ _timeIndex = (_timeIndex + samples.Length) % FFT_SIZE;
+
+ var freqBuffer = _timeRingBuffer.Skip(_timeIndex).Take(FFT_SIZE).ToArray();
+
+ Fourier.Forward(freqBuffer, FourierOptions.NoScaling);
+
+ for (int j = 0; j < freqBuffer.Length; j++)
+ {
+ freqBuffer[j] = freqBuffer[j] * _analytic[j];
+ }
+
+ Fourier.Inverse(freqBuffer, FourierOptions.NoScaling);
+
+ float scale = (float)FFT_SIZE;
+
+ var complexAnalyticBuffer = freqBuffer.Skip(FFT_SIZE - BUFFER_SIZE).Take(BUFFER_SIZE).ToArray();
+ var data = new float[BUFFER_SIZE * DISPLAY_ARRAY_STRIDE + PREVIOUS_SAMPLES_LENGTH];
+
+ for (int k = 0; k < complexAnalyticBuffer.Length; k++)
+ {
+ var diff = complexAnalyticBuffer[k] - _prevInput;
+ _prevInput = complexAnalyticBuffer[k];
+
+ var angle = (float)Math.Max(Math.Log(Math.Abs(GetAngle(diff, _prevDiff)), 2.0f), -1.0e12);
+ _prevDiff = diff;
+ var output = _angleLowPass.Apply(angle);
+
+ data[k * DISPLAY_ARRAY_STRIDE] = (float)(complexAnalyticBuffer[k].Real / scale);
+ data[k * DISPLAY_ARRAY_STRIDE + 1] = (float)(complexAnalyticBuffer[k].Imaginary / scale);
+ data[k * DISPLAY_ARRAY_STRIDE + 2] = (float)Math.Pow(2, output); // Smoothed angular velocity.
+ data[k * DISPLAY_ARRAY_STRIDE + 3] = _noiseLowPass.Apply((float)Math.Abs(angle - output)); // Average angular noise.
+ }
+
+ Array.Copy(_previousResults, 0, data, 0, PREVIOUS_SAMPLES_LENGTH);
+ _lastSample = data;
+
+ _previousResults = data.Skip(data.Length - PREVIOUS_SAMPLES_LENGTH).ToArray();
+ }
+
+ public static float GetAngle(Complex v, Complex u)
+ {
+ var len_v_mul_u = v.Norm() * u;
+ var len_u_mul_v = u.Norm() * v;
+ var left = (len_v_mul_u - len_u_mul_v).Norm();
+ var right = (len_v_mul_u + len_u_mul_v).Norm();
+
+ return (float)(Math.Atan2(left, right) / Math.PI);
+ }
+
+ private static Complex[] MakeAnalytic(uint n, uint m)
+ {
+ var impulse = new Complex[m];
+
+ var mid = (n - 1) / 2;
+
+ impulse[mid] = new Complex(1.0f, 0.0f);
+ float re = -1.0f / (mid - 1);
+ for (int i = 1; i < mid + 1; i++)
+ {
+ if (i % 2 == 0)
+ {
+ impulse[mid + i] = new Complex(re, impulse[mid + i].Imaginary);
+ impulse[mid - i] = new Complex(re, impulse[mid - i].Imaginary);
+ }
+ else
+ {
+ float im = (float)(2.0 / Math.PI / i);
+ impulse[mid + i] = new Complex(impulse[mid + i].Real, im);
+ impulse[mid - i] = new Complex(impulse[mid - i].Real, -im);
+ }
+ // hamming window
+ var k = 0.53836 + 0.46164 * Math.Cos(i * Math.PI / (mid + 1));
+ impulse[mid + i] = new Complex((float)(impulse[mid + i].Real * k), (float)(impulse[mid + i].Imaginary * k));
+ impulse[mid - i] = new Complex((float)(impulse[mid - i].Real * k), (float)(impulse[mid - i].Imaginary * k));
+ }
+
+ Fourier.Forward(impulse, FourierOptions.NoScaling);
+
+ return impulse;
+ }
+ }
+}
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/AudioScopeOpenGL.cs b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/AudioScopeOpenGL.cs
new file mode 100755
index 000000000..56a2e62ef
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/AudioScopeOpenGL.cs
@@ -0,0 +1,193 @@
+//-----------------------------------------------------------------------------
+// Filename: AudioScopeOpenGL.cs
+//
+// Description: Initialise the OpenGL portion of the Audio Scope demo.
+
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 29 Feb 2020 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.IO;
+using SharpGL;
+using SharpGL.Shaders;
+using SharpGL.VertexBuffers;
+
+namespace AudioScope
+{
+ public class AudioScopeOpenGL
+ {
+ private const string VERTEX_SHADER_PATH = "shaders/line/line.vert";
+ private const string FRAGMENT_SHADER_PATH = "shaders/line/line.frag";
+ private const string GEOMETRY_SHADER_PATH = "shaders/line/line.geom";
+ private const string CLEAR_VERTEX_SHADER_PATH = "shaders/clear/clear.vert";
+ private const string CLEAR_FRAGMENT_SHADER_PATH = "shaders/clear/clear.frag";
+
+ ///
+ /// Length of each vector element passed to main GL program.
+ /// - X coordinate,
+ /// - Y coordinate,
+ /// - Angle,
+ /// - Output.
+ ///
+ private const int MAIN_DATA_STRIDE = 4;
+
+ ///
+ /// Length of each vector element passed to main GL program.
+ /// - X coordinate,
+ /// - Y coordinate,
+ ///
+ private const int CLEAR_DATA_STRIDE = 2;
+
+ private AudioScope _audioScope;
+ private SharpGL.Shaders.ShaderProgram? _prog;
+ private SharpGL.Shaders.ShaderProgram? _clearProg;
+ private float[]? _clearRectangle;
+
+ public AudioScopeOpenGL(AudioScope audioScope)
+ {
+ _audioScope = audioScope;
+ }
+
+ public void Initialise(OpenGL gl)
+ {
+ // Load the main program.
+
+ string? fragmentShaderCode = null;
+ using (StreamReader sr = new StreamReader(FRAGMENT_SHADER_PATH))
+ {
+ fragmentShaderCode = sr.ReadToEnd();
+ }
+
+ string? vertexShaderCode = null;
+ using (StreamReader sr = new StreamReader(VERTEX_SHADER_PATH))
+ {
+ vertexShaderCode = sr.ReadToEnd();
+ }
+
+ _prog = new SharpGL.Shaders.ShaderProgram();
+ _prog.Create(gl, vertexShaderCode, fragmentShaderCode, null);
+
+ string? geometryShaderCode = null;
+ if (File.Exists(GEOMETRY_SHADER_PATH))
+ {
+ using (StreamReader sr = new StreamReader(GEOMETRY_SHADER_PATH))
+ {
+ geometryShaderCode = sr.ReadToEnd();
+ }
+
+ Shader geometryShader = new Shader();
+ geometryShader.Create(gl, OpenGL.GL_GEOMETRY_SHADER, geometryShaderCode);
+ gl.AttachShader(_prog.ShaderProgramObject, geometryShader.ShaderObject);
+ }
+
+ gl.LinkProgram(_prog.ShaderProgramObject);
+
+ // Now that we've compiled and linked the shader, check it's link status.If it's not linked properly, we're
+ // going to throw an exception.
+ if (_prog.GetLinkStatus(gl) == false)
+ {
+ throw new SharpGL.Shaders.ShaderCompilationException(string.Format("Failed to link shader program with ID {0}.", _prog.ShaderProgramObject), _prog.GetInfoLog(gl));
+ }
+
+ // Load clear program.
+
+ string? clearFragShaderCode = null;
+ using (StreamReader sr = new StreamReader(CLEAR_FRAGMENT_SHADER_PATH))
+ {
+ clearFragShaderCode = sr.ReadToEnd();
+ }
+
+ string? clearVertexShaderCode = null;
+ using (StreamReader sr = new StreamReader(CLEAR_VERTEX_SHADER_PATH))
+ {
+ clearVertexShaderCode = sr.ReadToEnd();
+ }
+
+ _clearProg = new SharpGL.Shaders.ShaderProgram();
+ _clearProg.Create(gl, clearVertexShaderCode, clearFragShaderCode, null);
+
+ gl.LinkProgram(_clearProg.ShaderProgramObject);
+
+ // Now that we've compiled and linked the shader, check it's link status. If it's not linked properly, we're
+ // going to throw an exception.
+ if (_clearProg.GetLinkStatus(gl) == false)
+ {
+ throw new SharpGL.Shaders.ShaderCompilationException(string.Format("Failed to link the clear shader program with ID {0}.", _clearProg.ShaderProgramObject), _clearProg.GetInfoLog(gl));
+ }
+
+ _clearRectangle = new float[] { -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f };
+ }
+
+ public void Draw(OpenGL gl, int width, int height)
+ {
+ // Uncomment lne below to change the background color.
+ //gl.ClearColor(1.0f, 0.0f, 1.0f, 1.0f);
+
+ gl.Viewport(0, 0, width, height);
+ gl.Ortho2D(0, width, 0, height);
+
+ gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
+
+ if (_prog == null)
+ {
+ throw new ApplicationException("The main program must be assigned for the audio scope to work properly.");
+ }
+
+ int windowID = gl.GetUniformLocation(_prog.ShaderProgramObject, "window");
+ int nID = gl.GetUniformLocation(_prog.ShaderProgramObject, "n");
+ int baseHueID = gl.GetUniformLocation(_prog.ShaderProgramObject, "base_hue");
+ int colorizeID = gl.GetUniformLocation(_prog.ShaderProgramObject, "colorize");
+ int thicknessID = gl.GetUniformLocation(_prog.ShaderProgramObject, "thickness");
+ int minThicknessID = gl.GetUniformLocation(_prog.ShaderProgramObject, "min_thickness");
+ int thinningID = gl.GetUniformLocation(_prog.ShaderProgramObject, "thinning");
+ int decayID = gl.GetUniformLocation(_prog.ShaderProgramObject, "decay");
+ int desaturationID = gl.GetUniformLocation(_prog.ShaderProgramObject, "desaturation");
+
+ gl.Uniform2(windowID, (float)width, (float)height);
+ gl.Uniform1(nID, 5);
+ gl.Uniform1(thicknessID, 5.0f);
+ gl.Uniform1(minThicknessID, 1.5f);
+ gl.Uniform1(thinningID, 0.05f);
+ gl.Uniform1(baseHueID, 0.0f);
+ gl.Uniform1(colorizeID, 1);
+ gl.Uniform1(decayID, 0.3f);
+ gl.Uniform1(desaturationID, 0.1f);
+
+ // Run the clear program.
+ if (_clearProg == null)
+ {
+ throw new ApplicationException("The clear program must be assigned for teh audio scope to work properly.");
+ }
+
+ gl.UseProgram(_clearProg.ShaderProgramObject);
+
+ VertexBuffer clearVertexBuffer = new VertexBuffer();
+ clearVertexBuffer.Create(gl);
+ clearVertexBuffer.Bind(gl);
+ clearVertexBuffer.SetData(gl, 0, _clearRectangle, false, CLEAR_DATA_STRIDE);
+
+ // Attempt to get an available audio sample.
+ var data = _audioScope.GetSample();
+
+ if (data != null)
+ {
+ // Run the main program.
+ gl.UseProgram(_prog.ShaderProgramObject);
+
+ VertexBuffer vertexBuffer = new VertexBuffer();
+ vertexBuffer.Create(gl);
+ vertexBuffer.Bind(gl);
+ vertexBuffer.SetData(gl, 0, data, false, MAIN_DATA_STRIDE);
+
+ gl.DrawArrays(OpenGL.GL_LINE_STRIP_ADJACENCY, 0, data.Length);
+ }
+ }
+ }
+}
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/FormAudioScope.Designer.cs b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/FormAudioScope.Designer.cs
new file mode 100755
index 000000000..3229b4460
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/FormAudioScope.Designer.cs
@@ -0,0 +1,90 @@
+//-----------------------------------------------------------------------------
+// Filename: FormAudioScopeDesigner.cs
+//
+// Description: Initialise the Winfows Form portion of the Audio Scope demo.
+
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 29 Feb 2020 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+namespace AudioScope
+{
+ partial class FormAudioScope
+ {
+ private System.ComponentModel.IContainer components = null;
+
+ private SharpGL.OpenGLControl openGLControl1;
+ private SharpGL.OpenGLControl openGLControl2;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAudioScope));
+ this.openGLControl1 = new SharpGL.OpenGLControl();
+ this.openGLControl2 = new SharpGL.OpenGLControl();
+
+ ((System.ComponentModel.ISupportInitialize)(this.openGLControl1)).BeginInit();
+ ((System.ComponentModel.ISupportInitialize)(this.openGLControl2)).BeginInit();
+
+ this.SuspendLayout();
+
+ this.openGLControl1.DrawFPS = false;
+ this.openGLControl1.Name = "openGLControl1";
+ this.openGLControl1.OpenGLVersion = SharpGL.Version.OpenGLVersion.OpenGL2_1;
+ this.openGLControl1.RenderContextType = SharpGL.RenderContextType.FBO;
+ this.openGLControl1.RenderTrigger = SharpGL.RenderTrigger.Manual;
+ this.openGLControl1.Size = new System.Drawing.Size(AUDIO_SCOPE_WIDTH, AUDIO_SCOPE_HEIGHT);
+ this.openGLControl1.TabIndex = 0;
+ this.openGLControl1.OpenGLInitialized += new System.EventHandler(this.OpenGLControl1_OpenGLInitialized);
+ this.openGLControl1.OpenGLDraw += new SharpGL.RenderEventHandler(this.openGLControl1_OpenGLDraw);
+ this.openGLControl1.Dock = System.Windows.Forms.DockStyle.Left;
+
+ this.openGLControl2.DrawFPS = false;
+ this.openGLControl2.Name = "openGLControl2";
+ this.openGLControl2.OpenGLVersion = SharpGL.Version.OpenGLVersion.OpenGL2_1;
+ this.openGLControl2.RenderContextType = SharpGL.RenderContextType.FBO;
+ this.openGLControl2.RenderTrigger = SharpGL.RenderTrigger.Manual;
+ this.openGLControl2.Size = new System.Drawing.Size(AUDIO_SCOPE_WIDTH, AUDIO_SCOPE_HEIGHT);
+ this.openGLControl2.TabIndex = 1;
+ this.openGLControl2.OpenGLInitialized += new System.EventHandler(this.OpenGLControl2_OpenGLInitialized);
+ this.openGLControl2.OpenGLDraw += new SharpGL.RenderEventHandler(this.openGLControl2_OpenGLDraw);
+ this.openGLControl2.Dock = System.Windows.Forms.DockStyle.Fill;
+
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(AUDIO_SCOPE_WIDTH * 2, AUDIO_SCOPE_HEIGHT);
+ this.Controls.Add(this.openGLControl2);
+ this.Controls.Add(this.openGLControl1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "FormAudioScopeSample";
+ this.Text = "Audio Scope Sample";
+
+ ((System.ComponentModel.ISupportInitialize)(this.openGLControl1)).EndInit();
+ ((System.ComponentModel.ISupportInitialize)(this.openGLControl2)).EndInit();
+ this.ResumeLayout(false);
+ }
+ }
+}
+
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/FormAudioScope.cs b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/FormAudioScope.cs
new file mode 100755
index 000000000..36fae641c
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/FormAudioScope.cs
@@ -0,0 +1,153 @@
+//-----------------------------------------------------------------------------
+// Filename: FormAudioScope.cs
+//
+// Description: Initialise the Windows Form portion of the Audio Scope demo.
+
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 29 Feb 2020 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Numerics;
+using System.Windows.Forms;
+using SharpGL;
+
+namespace AudioScope
+{
+ public partial class FormAudioScope : Form
+ {
+ public const int AUDIO_SCOPE_WIDTH = 400;
+ public const int AUDIO_SCOPE_HEIGHT = 400;
+ public const int BYTES_PER_PIXEL = 3; // RGB = 3 bytes per pixel.
+
+ private bool _showWindow;
+ private AudioScope _audioScope1;
+ private AudioScopeOpenGL _audioScopeGL1;
+ private byte[] _pixelData1;
+ private AudioScope _audioScope2;
+ private AudioScopeOpenGL _audioScopeGL2;
+ private byte[] _pixelData2;
+
+ ///
+ /// Note: If you want to see the Windows Form with the Audio Scope comment out this whole method.
+ ///
+ protected override CreateParams CreateParams
+ {
+ get
+ {
+ CreateParams cp = base.CreateParams;
+
+ if (!_showWindow)
+ {
+ // Remove WS_EX_APPWINDOW to ensure it won't appear in Alt+Tab
+ cp.ExStyle &= ~0x00040000; // WS_EX_APPWINDOW
+
+ // Add WS_EX_TOOLWINDOW to hide from Alt+Tab
+ cp.ExStyle |= 0x00000080; // WS_EX_TOOLWINDOW
+
+ // Ensure the window is layered (required for transparency)
+ cp.ExStyle |= 0x00080000; // WS_EX_LAYERED
+
+ // Make it transparent to mouse events
+ cp.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
+ }
+
+ return cp;
+ }
+ }
+
+ public FormAudioScope(bool showWindow)
+ {
+ _showWindow = showWindow;
+
+ _audioScope1 = new AudioScope();
+ _audioScopeGL1 = new AudioScopeOpenGL(_audioScope1);
+
+ _pixelData1 = new byte[AUDIO_SCOPE_WIDTH * AUDIO_SCOPE_HEIGHT * BYTES_PER_PIXEL];
+
+ _audioScope2 = new AudioScope();
+ _audioScopeGL2 = new AudioScopeOpenGL(_audioScope2);
+
+ _pixelData2 = new byte[AUDIO_SCOPE_WIDTH * AUDIO_SCOPE_HEIGHT * BYTES_PER_PIXEL];
+
+ InitializeComponent();
+
+ if (!showWindow)
+ {
+ this.ShowInTaskbar = false; // remove from the taskbar
+ this.FormBorderStyle = FormBorderStyle.None;
+ this.Opacity = 0; // invisible, but "active"
+ this.StartPosition = FormStartPosition.Manual;
+ this.Enabled = false;
+ }
+ }
+
+ public byte[] ProcessAudioSample(Complex[] samples, int scopeNumber)
+ {
+ if (scopeNumber == 1)
+ {
+ _audioScope1.ProcessSample(samples);
+
+ openGLControl1.DoRender();
+
+ this.openGLControl1.OpenGL.ReadPixels(0, 0, AUDIO_SCOPE_WIDTH, AUDIO_SCOPE_HEIGHT, OpenGL.GL_RGB, OpenGL.GL_UNSIGNED_BYTE, _pixelData1);
+
+ // The pizel buffer is upside down at this point. Because the audio scope is a circular pattern the effect of the flip is inconsequential
+ // so the processing effort is skipped.
+
+ return _pixelData1;
+ }
+ else if (scopeNumber == 2)
+ {
+ _audioScope2.ProcessSample(samples);
+
+ openGLControl2.DoRender();
+
+ this.openGLControl2.OpenGL.ReadPixels(0, 0, AUDIO_SCOPE_WIDTH, AUDIO_SCOPE_HEIGHT, OpenGL.GL_RGB, OpenGL.GL_UNSIGNED_BYTE, _pixelData2);
+
+ // The pizel buffer is upside down at this point. Because the audio scope is a circular pattern the effect of the flip is inconsequential
+ // so the processing effort is skipped.
+
+ return _pixelData2;
+ }
+ else
+ {
+ throw new ApplicationException("Invalid scope number.");
+ }
+ }
+
+ private void OpenGLControl1_OpenGLInitialized(object sender, EventArgs e)
+ {
+ OpenGL gl = this.openGLControl1.OpenGL;
+ _audioScopeGL1.Initialise(gl);
+ }
+
+ private void openGLControl1_OpenGLDraw(object sender, RenderEventArgs e)
+ {
+ OpenGL gl = this.openGLControl1.OpenGL;
+ _audioScopeGL1.Draw(gl, AUDIO_SCOPE_WIDTH, AUDIO_SCOPE_HEIGHT);
+
+ gl.Finish();
+ }
+
+ private void OpenGLControl2_OpenGLInitialized(object sender, EventArgs e)
+ {
+ OpenGL gl = this.openGLControl2.OpenGL;
+ _audioScopeGL2.Initialise(gl);
+ }
+
+ private void openGLControl2_OpenGLDraw(object sender, RenderEventArgs e)
+ {
+ OpenGL gl = this.openGLControl2.OpenGL;
+ _audioScopeGL2.Draw(gl, AUDIO_SCOPE_WIDTH, AUDIO_SCOPE_HEIGHT);
+
+ gl.Finish();
+ }
+ }
+}
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/FormAudioScope.resx b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/FormAudioScope.resx
new file mode 100644
index 000000000..7ef0f1e76
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/AudioScope/FormAudioScope.resx
@@ -0,0 +1,518 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAgAICAQAAEABADoAgAAhgAAABAQEAABAAQAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA
+ CACoCAAAPhMAABAQAAABAAgAaAUAAOYbAAAwMAAAAQAgAKglAABOIQAAICAAAAEAIACoEAAA9kYAABAQ
+ AAABACAAaAQAAJ5XAAAoAAAAIAAAAEAAAAABAAQAAAAAAIACAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAA
+ gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcBQwYWNHRzd3AAAAAAAABwIEIFBBACAEBA
+ AAAAAAAAUHAUACBhQHAwBwAAAAAAAEIAQgcFAGAQQEcAAAAAAAgFBhQABgEEJDAHAAAAAAAHBCAQYWEF
+ JBAEBwAAAAAAA0FAYFN2ACQkMAcAAAAAAAFCAlA7cAU1AAQHAAAAAAACQUAFezcHNxYUBwAAAAAAcEMA
+ crkUA7cEACcAAAAAAHBAZJe3JBW3AlAHAAAAAABhIQE7t3lztRQAYQAAAAAABAQkF7e3t7NSUAYAAAAA
+ B0A3NRtxA3u3c1AFAAAAAANQB7h7NwBLe3s3BwAAAAABYCUzu7V1G1EzdxYAAAAABgUCQTizuDs0cCAA
+ AAAAAHAGAFA4MXO4t7UFJQAAAAB1AWAEs3AEu3NyBAMAAAAAQgYAUrcSQzcQAFIUAAAAADQBQhezQQWz
+ QWAEJAAAAAcAQ0AHNQBgNAJAFgEAAAAHcAA0ADQhQSQBJBBgAAAABwBDQAcABAJAFgQCQQAAAAc0AGEE
+ BSUBYEA0EEIAAAAAdDQ0BhIABgASUAYBAAAAAAAId3dHdDRwQCQWBAAAAAAAAAAAAAAHd3d0NDAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////gAAf/wAAH/8AAA//AAAP/gAAD/4A
+ AA/+AAAP/gAAD/4AAA/8AAAP/AAAD/wAAA/8AAAP+AAAD/gAAA/4AAAP+AAAD/AAAA/wAAAP8AAAD/AA
+ AA/gAAAP4AAAD+AAAA/gAAAP8AAAD/4AAA///4Af//////////8oAAAAEAAAACAAAAABAAQAAAAAAMAA
+ AAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/
+ AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAABxJQYWFwAAAGQCUlAHAAAAASUAAGcAAAgEA3Bw
+ BAAABwQzUzUHAAAGAXtTcCEAAAAXNztzVgAAdhezU3M0AABwA3N7cUMAAHBBNhcyUAAAQEM0AwFgAAAw
+ QhJSQHAAAHBDQEAABAAAAAB3d3cHAAAAAAAAAAAA//8AAPADAADwAwAA8AMAAOADAADgAwAA4AMAAOAD
+ AADAAwAAwAMAAMADAADAAwAAwAMAAMADAAD8AwAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAA
+ AAAAAAAAAAEAAAAAAAAAAAAAHxYVAB8dHgAgFxUAIRgWACIZGAAkGhgAJhwaACIeHgAnHRwAKBwbACoe
+ HAApIB4ALCAeAB8jJQAfJysAJyAgACEiJAAgJCcAJiUmACkhIAAtIiAALiQiACglJQAtJiUAIiUoACYn
+ KQAkKCsAIigsACUpLAAsKywAMCQiADEmJAAyKCYANCgnADIqKQA1KigAMywrADcsKgA2LiwAOC0rADku
+ LAA2MC8AOjAuACArMAAmMTUAKjE0ACM1PAAzMDEANDM0ADkyMQA9MjAAOjQzAD40MgA5NTUAPTY0AD45
+ OAA9PT8AQDUzAEA2NABDODYAQDs6AEQ6OABGPDoAQz89AEU+PQBIPj0ASkA+ACQ5QQA0PEEAIkFMACtB
+ SQA3QUYAO0RIACJFUgAlRlMAKktXACRMWgAsTVoAOUtSADNPWgAmUF8ALVBeACVSYgAkVmgAKVhoADFV
+ YQA9XGgAJV1wACpidgAoY3gALGV5AC1ofQBFQEAAREVHAElCQQBMQkAATkRCAEhDRABKRUUAT0VEAERL
+ TgBPSkkAUEZFAFFIRwBTSUgAVEpJAFVMSgBSTU0AV05MAFhPTQBaUE8ARExQAFZSUgBXVFUAWFNTAFxS
+ UQBZVlUAXlVUAFVZWwBWXF8AXVlZAF1cXgBgV1YAYVhWAGNaWQBlXFsAYFxcAGZdXABoYF4AQFljAF1e
+ YABZYWUAXWluAEtncQBdbXQATnJ/AFpzfABadH8AY2FhAGRhYABnZGQAamJgAGtkYgBsZGMAaGVlAG5m
+ ZQBqaGcAamhoAG9sbABwaGcAcWppAHJvbwB3b24AdnBvAHZ0cwB2dXUAeXJxAHx0cwB6eHgAfn18AIJ6
+ eQCAfn4AhX59ACdshAAva4AAKm+GACdyiwAsdI4AKHaRACp5kwApfJgAMX+aAEF2iQBHfI4AVHWBADyE
+ nQArhaMAK4mpADCLqQA2jaoALI+xAC2StAAvmr4ANJy/AD2dvQBagY8AQYSaAFGDlQBYg5EAUIeaAFaH
+ mABViZsARI6oAESSrQBLkakAUpCmAEqXsgBCmLUARpq2AC6exAAznsMANZ3AADGfxAAuoMYALqLIAC6l
+ zQAyoMUAMKbNADmlygAup9AAL6jSAC+q1AAvrtgAMazVADat1QA5r9cAMK7YADGz3wA+tdwAMrXhADi3
+ 4QA+t+AAMbnnADy65AAxvOsAO77qAEijwgBFqswARK7RADLA7wA0wO8AOcDtADLB8gA2wvAAMsP0ADLF
+ 9gA2xfUAOMPyADjE8wAzx/gAM8j6ADTJ+gAzyv0ANMr8ADPM/gCCgIAAiYOCAI6HhwCRi4oAmpWUAKGb
+ mwCnoqEAq6alAK2opwD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCGBgY
+ JSUqMjQ4PV1iY2Zsc3V/f4uRlJicAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkGBgYFBgUGBQQEBAQEBAME
+ AwQEBQUGBwcUQJwAAAAAAAAAAAAAAAAAAAAAAAAAjwoKCgsJCgoKCgoKCgcHBwcHBwYHBwYGBgYEAWIA
+ AAAAAAAAAAAAAAAAAAAAAAAAQw0NCwsLCwsLCw0LCwsLCwsLCwsLCwsLCwoHBCMAAAAAAAAAAAAAAAAA
+ AAAAAAAAKxUNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQsLBhYAAAAAAAAAAAAAAAAAAAAAAAAAIh8NDQ0N
+ DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQsLBhUAAAAAAAAAAAAAAAAAAAAAAACXIBUNDQ0NDQ0NDQ0NDQ0NCw0N
+ DQsNDQ0NDQ0LBxT2AAAAAAAAAAAAAAAAAAAAAABpHxUNDQ0NDQ0NDQ0VFQ0NDQ0LDQ0NDQ0NDQsLBwyg
+ AAAAAAAAAAAAAAAAAAAAAAA1HxUNDQ0NDQ0NFSZBQykVDQsNCw0NDQ0NDQ0LBwyfAAAAAAAAAAAAAAAA
+ AAAAAAAiHw0NDQ0NDQ0NFk/BvGMgDQsNDQ0NDQ0NDQ0LBwmbAAAAAAAAAAAAAAAAAAAAAJ0gFQ0NDQ0N
+ DQ0LLs/13XAgDRUkNSsfDQsLDQ0LBwqYAAAAAAAAAAAAAAAAAAAAAG4gFQ0NDQ0NDQ0MW/D1zzEWCxZJ
+ iHg6FQ0NDQ0LBweVAAAAAAAAAAAAAAAAAAAAADsfFQ0NDQ0NDQsXt/XxpRUNDRSz7cdjIA0NDQ0LCgeT
+ AAAAAAAAAAAAAAAAAAAAACQfFQ0NDQ0NDQwt2vXQLg0LDB3T9dheIA0NDQ0LCgaNAAAAAAAAAAAAAAAA
+ AAAAoSAVDQ0NDQ0fKylO6fSlFQ0NCx3T9dc5Hw0NDQ0LCgaMAAAAAAAAAAAAAAAAAAAAdiAVDQ0LDQ0Y
+ V63K8+eCMyANDBvT9co2Fg0NCw0LBwZ/AAAAAAAAAAAAAAAAAAAAPh8VDQsNDQsdzPT19fC+emg+JhrN
+ 9bQrFQ0NDQ0LCgZ5AAAAAAAAAAAAAAAAAAAAJhYNDQ0LDQwHSs719fXv5cSKd0jW9bA1FQ0NDQ0LCgZ1
+ AAAAAAAAAAAAAAAAAAD3IBYNDRUWFQ0JBU3r9ezm8fTu29Hs9cZrNR8NDQ0LCgVxAAAAAAAAAAAAAAAA
+ AAB9IBUNFSlCYDskC1Ht8ahGVKvS6/X19ejAemErHw0LCgZsAAAAAAAAAAAAAAAAAABCHxUNC1DCwIdz
+ M1zz4UcKBgUPU83z9fXt5LqDZCkVCgZmAAAAAAAAAAAAAAAAAAAoHxUNClrs9OLjrsr13XAmDQsKBU3r
+ 9ebp8+3lvXIzCwZjAAAAAAAAAAAAAAAAAPkgFg0NChmk1vD19PP16q9rOiQfCVHs31JKq9rz7cNiHwZf
+ AAAAAAAAAAAAAAAAAI4gFQ0NCwcFLFS15vX19d7AhXVoMqr1zx4HAkSp1M9FFQZdAAAAAAAAAAAAAAAA
+ AGAfFQ0LDQ0LCgUCWOv19fXy4OXFu9z1uWY+JgwFHC0UCwY9AAAAAAAAAAAAAAAAACsfFQ0NDQ0NDQsH
+ S+nzyKqyzd/z9fX13r+JhGAgCgsLCgY7AAAAAAAAAAAAAAAAACEWDQ0LDQ0NDQ0KWfPpTAYCDkSn4fX1
+ 9fLv3oYpDQ0LCgY3AAAAAAAAAAAAAAAAlyAVDQ0NDQ0NDQ0Qs/XcRRULCgYCtfXz2c3S01YgDQsNCgY0
+ AAAAAAAAAAAAAAAAaR8VDQsNDQ0NCwst2fXJMBUNDQsTzPXZRBESGwwNDQ0NCgcyAAAAAAAAAAAAAAAA
+ NR8VDQ0NDQsNDQtV7fWsIRUNCwtH4fWoDAsKCwsNCw0LCQcnAAAAAAAAAAAAAAAAIR8NDQsNDQ0NCxe2
+ 9elSFQ0NDQmm89xHDQsNDQ0NDQ0LCwYlAAAAAAAAAAAAAACdIBUNDQ0NDQ0LDS3c9bYeDQ0NCwlRtVUU
+ DQ0NDQ0NCw0NCwYjAAAAAAAAAAAAAABtIBUNDQ0NDQ0NCxmrsUQLDQ0NDQsGEAcLDQ0NDQ0NDQ0NCwch
+ AAAAAAAAAAAAAAA8IBULDQ0NDQ0NCwcICAoLDQ0NDQ0LCwsNDQ0NDQ0NDQsNCwcYAAAAAAAAAAAAAAAz
+ IRUNDQsNDQ0NDQsLCw0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0LCwcWAAAAAAAAAAAAAAA6Jh8NDQ0NDQ0NDQ0N
+ DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCw0NCwcV9gAAAAAAAAAAAABDOyYgHxUVFQ0NDQ0NDQ0NCw0NDQsLCw0N
+ DQ0NDQ0NDQ0NCwcVogAAAAAAAAAAAACAZz86MysoJiQiISAfFh8VFRUNDQ0NDQ0NDQ0NDQ0NDQ0NCwcN
+ 9gAAAAAAAAAAAAD+gW9qaGRgQz8+PDs1MyspJiYkIiEgHxYWFRUVDQ0NDQsLCwcWAAAAAAAAAAAAAAAA
+ AAD7+aOeloB8dGtpaGRgQ0I/Pjw7NTMrKSgkIiIhIB8WCwo3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ +/mjnZKAe29raWhkYUNCPz48OjUrIhWaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/fr4
+ oZmQfnZuamdDPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz6AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//
+ /////wAA//wAAAH/AAD/+AAAAH8AAP/wAAAAfwAA//AAAAB/AAD/8AAAAH8AAP/wAAAAfwAA/+AAAAA/
+ AAD/4AAAAD8AAP/gAAAAPwAA/+AAAAA/AAD/wAAAAD8AAP/AAAAAPwAA/8AAAAA/AAD/wAAAAD8AAP+A
+ AAAAPwAA/4AAAAA/AAD/gAAAAD8AAP+AAAAAPwAA/wAAAAA/AAD/AAAAAD8AAP8AAAAAPwAA/wAAAAA/
+ AAD+AAAAAD8AAP4AAAAAPwAA/gAAAAA/AAD+AAAAAD8AAP4AAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwA
+ AAAAPwAA/AAAAAA/AAD4AAAAAD8AAPgAAAAAPwAA+AAAAAA/AAD4AAAAAD8AAPgAAAAAHwAA+AAAAAAf
+ AAD4AAAAAB8AAPgAAAAAPwAA/wAAAAA/AAD//8AAAD8AAP///+AAfwAA//////n/AAD///////8AAP//
+ /////wAAKAAAACAAAABAAAAAAQAIAAAAAACABAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAhGBYAIxkYACUa
+ GQAmHBoAJx4dACgcGwAqHhwAKiAeACwgHgAiISMAJiEhACMlJwApIiEALiIgAC8kIgAoJSYALSYlACMm
+ KQAmJigAKCcpACYoKgAjKi4ALSkpACgrLgAoLC8AMCQiADImJAAxKCYANCgmADEqKQA2KykAMy0rADUs
+ KwA1Li0AOS0rADgtLAA3MS8AOzAuADwxLwAkLTEAKi0wACM3PwAlNz8ALzY6ACg2PQA5MTAAPTMxADo0
+ MgA9NDMAPDc2AD84NwA2NzkAMTg8ADQ6PQBBNjQAQjg2AEA5OQBEOTgARjw6AEQ+PQBJPz0AIz9JADI+
+ QwAqRE4ALURNADxITgAkRlIAJE1cAC1MWAA3T1kAKFFgAClWZgAsVmUAJlxuADtXYgA8XmsALmh8AEZC
+ QgBIQ0EATEJAAEtFRABDSEsAT0pJAE1LTABRR0UAUUhGAFBJSABTTU0AVU5NAFhOTQBaUU8ATk9RAFZS
+ UgBcVFIAXFdWAFJZXQBhWFYAYVpaAGBdXABnXl0AaGFfAEZdZQBKXWUAU1tgAEFsewBOb3oAU2x2AFFw
+ fABkYGAAamJhAGhlZABvZ2cAbGloAHFqaQB0bGsAd29uAHNwcAB5cnEAgXp5AIN8ewCAf38AKW+HAC5w
+ hwAscYgALXaOADl4jQApdpAAKXmVACx6lAAsfJgAKn+cAEl8jgApgZ4ALIOhACqEogAshaMALImoADGF
+ oQA1hqIAMIinADyPqwAtlLcALJW5ADGRsQAwlrkAMpm8ADyYuAA8nLwAQIGYAE+InABShJUAUIufAEON
+ pwBJjKMAT4+lAC2exAAynsMALqDGAC6iygAupMsANqHFADmjxgAxqdEAMKzWADGy3QA6s9wAPLPcADK2
+ 4gA+t+AAMrnmADa65gA5u+cAPLrkADW76AAxvOoAMb7tADS+7QA5v+wAQqjLAEGv1QBAsdcANsHvADLC
+ 8QA2wvEAMsT0ADjC8QAzx/gAM8j6ADPL/QAzzP4AiIKBAI+IiACRi4oAko2MAJ2XlwChm5oAsAB4AM8A
+ jgDwAKQA/xGzAP8xvgD/UccA/3HRAP+R3AD/seUA/9HwAP///wAAAAAALAAvAEsAUABpAHAAhwCQAKUA
+ sADEAM8A4QDwAPAR/wDyMf8A9FH/APZx/wD3kf8A+bH/APvR/wD///8AAAAAABsALwAtAFAAPwBwAFIA
+ kABjALAAdgDPAIgA8ACZEf8ApjH/ALRR/wDCcf8Az5H/ANyx/wDr0f8A////AAAAAAAIAC8ADgBQABUA
+ cAAbAJAAIQCwACYAzwAsAPAAPhH/AFgx/wBxUf8AjHH/AKaR/wC/sf8A2tH/AP///wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAVxwRHCAiJTAzOTxOUVNZXWN5AAAAAAAAAAAAAAAAAGUGBgQGBAQEBAMDAwMDAgICASAAAAAAAAAA
+ AAAAAAAAOgkHBwcHBwcHBwcHBwcHBwcGA3UAAAAAAAAAAAAAAAAfDgkJCQkJCQkJCQkJCQkJCQcDcQAA
+ AAAAAAAAAAAAwhoJCQkJCQkJCQkJCQkICQkIBwNvAAAAAAAAAAAAAABuGgkJCQkHDzExGggICQkICQkH
+ A20AAAAAAAAAAAAAAFAOCQcJBwgsjYQkCQ4aDgkJCAcDYgAAAAAAAAAAAAAAIw4JCQcJCH28ixwJNGc5
+ DggJBwRfAAAAAAAAAAAAAAAbCQkHCQgYo7dFCQh7rGYaCQgHBF0AAAAAAAAAAAAAchoJCQkOH0GwkBEI
+ BYa8TBoIBwcGWAAAAAAAAAAAAABWDgkICBd+obyVOh0Ig7dGDgkJCARXAAAAAAAAAAAAACcOBwkHC3+5
+ vq2ba1KMrkIOCQgIBFEAAAAAAAAAAAAAGwkOHR0OEqC5nqSrprG4ajobCQgGTwAAAAAAAAAAAHYPCRdp
+ bFw2pJ0ZFkOHub6tmGg5GgY8AAAAAAAAAAAAWg4JFY62tZO5lDsaBxKgr5yuqZZOBzkAAAAAAAAAAAAx
+ DgkHFkqPt76yl2BPP6WKFD6Fo0sJMwAAAAAAAAAAAB0OCQkHBgqAvbCop7OivJlUMQ0oEAYwAAAAAAAA
+ AAB4GgkJCQkJB4K3SCpEhbe+urSaMgkHBi4AAAAAAAAAAF4PCQkJCQkUnqU1CAcMn7mJg3weCQkEJQAA
+ AAAAAAAAOA4JCQkJB0Cxkh4ICS2okRAGBQkJCQYhAAAAAAAAAAAdDgkJCQkIgbxNDgkHR6VJCQkJCQkJ
+ Bh4AAAAAAAAAvxoJCQkJCQV6iCkJCQcTKw0HCQkJCQkGHAAAAAAAAABkGgkJCQkJBwsLBwkJCQcHCQkJ
+ CQkJCAcRAAAAAAAAAFsdDgcHBwcJBwgJCAkJCQkJCQkJCQcJBQ8AAAAAAAAAcDgfGxoaDg4OCQkJBwgH
+ BwgHBwgJCQgHDQAAAAAAAAAAYlU9Ozo3LycjIx0dGxoPDgkJCQkHBwcRAAAAAAAAAAAAAADEwXh0bmFa
+ VlA9Ozo3LyYjHx0bCTsAAAAAAAAAAAAAAAAAAAAAAAAAAADDwHdzbmFaVT07AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////
+ ////gAAf/wAAH/8AAA//AAAP/gAAD/4AAA/+AAAP/gAAD/4AAA/8AAAP/AAAD/wAAA/8AAAP+AAAD/gA
+ AA/4AAAP+AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP4AAAD+AAAA/gAAAP8AAAD/4AAA///4Af////////
+ //8oAAAAEAAAACAAAAABAAgAAAAAAEABAAAAAAAAAAAAAAABAAAAAAAAAAAAACgdGwAqHhwALCAeACoi
+ IQAuIiAALyQiACsoKAAvKioAKSstADAkIgAxJiQAMigmADQoJgAyKigANSooADUsKgA2LSwAOTAuACkx
+ NQAtMTQAKTU6AC03PAA6MjEAPzc2ADc4OgAzOT0AQDUzAEI3NgBCOjoARTs5AEY/PQBIPzwASkA+AC49
+ QwAqQksAOkBDADxITQAqSFQALE5bADhKUQA4U10AK1NiACpbbQA8ZnUAMmd6AElCQQBOR0YAUklHAFVL
+ SQBSTEsAQldfAF9WVABjWlkAZV1cAEJeaABpYWAAbGRjAHRtbAB6c3IALW+HAC5xiAAvdo8AMHaOADN4
+ kAA1gZsAM4OeADqCmwAvg6AAMIelAD+HoAAxiKUANIqoADCNrQA/jqkALpq+ADCWuQAxm74AL5zBADKj
+ yQA8qM0AOK7VADSx2wA0s90AhoSEAIqDggCLhYMAlI6NAJyWlQA9/zEAW/9RAHn/cQCY/5EAtf+xANT/
+ 0QD///8AAAAAABQvAAAiUAAAMHAAAD2QAABMsAAAWc8AAGfwAAB4/xEAiv8xAJz/UQCu/3EAwP+RANL/
+ sQDk/9EA////AAAAAAAmLwAAQFAAAFpwAAB0kAAAjrAAAKnPAADC8AAA0f8RANj/MQDe/1EA4/9xAOn/
+ kQDv/7EA9v/RAP///wAAAAAALyYAAFBBAABwWwAAkHQAALCOAADPqQAA8MMAAP/SEQD/2DEA/91RAP/k
+ cQD/6pEA//CxAP/20QD///8AAAAAAC8UAABQIgAAcDAAAJA+AACwTQAAz1sAAPBpAAD/eREA/4oxAP+d
+ UQD/r3EA/8GRAP/SsQD/5dEA////AAAAAAAvAwAAUAQAAHAGAACQCQAAsAoAAM8MAADwDgAA/yASAP8+
+ MQD/XFEA/3pxAP+XkQD/trEA/9TRAP///wAAAAAALwAOAFAAFwBwACEAkAArALAANgDPAEAA8ABJAP8R
+ WgD/MXAA/1GGAP9xnAD/kbIA/7HIAP/R3wD///8AAAAAAC8AIABQADYAcABMAJAAYgCwAHgAzwCOAPAA
+ pAD/EbMA/zG+AP9RxwD/cdEA/5HcAP+x5QD/0fAA////AAAAAAAsAC8ASwBQAGkAcACHAJAApQCwAMQA
+ zwDhAPAA8BH/APIx/wD0Uf8A9nH/APeR/wD5sf8A+9H/AP///wAAAAAAGwAvAC0AUAA/AHAAUgCQAGMA
+ sAB2AM8AiADwAJkR/wCmMf8AtFH/AMJx/wDPkf8A3LH/AOvR/wD///8AAAAAAAgALwAOAFAAFQBwABsA
+ kAAhALAAJgDPACwA8AA+Ef8AWDH/AHFR/wCMcf8AppH/AL+x/wDa0f8A////AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAOg8OERIXGB0uVAAAAAAAABsCAwICAgICATIAAAAAAAALAwMODAMCAwIvAAAAAABWBQMEQCkI
+ GQMCLgAAAAAANQMDIk0WJ0MGAh8AAAAAAB4DB0dRNy1BBgIdAAAAAAAMGiU/ST1PUDMQGAAAAABXBSNI
+ UkYkPkVCLBgAAAAAOAMCCUtEQVNKKAkXAAAAACEDAxVMFBVOKxYDEQAAAAAPAgMmPAQTKgQDAxAAAAAA
+ CgMDBAQCAwICAwIOAAAAADEcEg8NCwYFAwMDDwAAAAAAAAAAWFU7OTQwIDYAAAAAAAAAAAAAAAAAAAAA
+ AAD//wAA8AMAAPADAADwAwAA4AMAAOADAADgAwAA4AMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAPwD
+ AAD//wAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAUAAAAIAAAACAAA
+ AAcAAAAHAAAABgAAAAUAAAAFAAAABAAAAAMAAAADAAAAAwAAAAIAAAACAAAAAgAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFAAA
+ ACkAAAA0AAAANgAAADQAAAAxAAAALgAAACwAAAApAAAAJwAAACUAAAAjAAAAIQAAAB8AAAAdAAAAGwAA
+ ABkAAAAXAAAAFQAAABQAAAATAAAAEQAAABAAAAAPAAAADQAAAAkAAAAEAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAQAAAAbBgMDTQYEBHQGBAR/BgQEfwQEAnsEAgJ4AgICdQICAnECAABuAgAAawAAAGkAAABmAAAAYwAA
+ AGEAAABeAAAAWwAAAFgAAABVAAAAUwAAAFEAAABOAAAASwAAAEgAAABFAAAAQgAAADcAAAAiAAAACwAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQ0AABMXEBBuHBMSzxwUE+obExLqGhIR6BoTEeQZEhDiGRIR3hgRENsYERDZFhAP0xYP
+ DtAVDw/KFA4OxhMODcISDQy9EQwMuRELC7MQCwqvDgoKqw0JCacMCQmjDAgIngsICJsKBgaVBwUFjAIC
+ AngAAABZAAAAKgAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAXFFYkGhjoJBoY/yMZGP8jGRj/IhkX/yIZF/8iGRf/IhkX/yIZ
+ F/8hGBf/IRgX/yEYFv8hGBb/IRcW/yEXFv8gFxb+IBcW/iAXFf4fFxX9HxYV/B8WFfseFRT6HhUU+B0V
+ E/cdFBP2GxMS7xQPDcwFAwOKAAAATwAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISDicdGq4oHRv/KB0b/ygdG/8oHRv/KB0b/ycc
+ G/8nHBr/Jxwa/yccGv8nHBr/Jxwa/yccGv8mHBr/Jhwa/yYbGv8mGxn/JhsZ/yUbGf8lGxn/JRsZ/yUb
+ Gf8kGxn/JBoZ/yQaGP8jGRj/IRcW/x4VFP0UDg7GAgAAZQAAACIAAAADAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCEaJiwgHtorHx3/Kx8d/yof
+ Hf8qHx3/Kh8d/yofHf8qHx3/Kh8d/yofHf8qHx3/Kh4c/yoeHP8qHhz/Kh4c/yoeHP8qHhz/Kh4c/yke
+ HP8pHhz/KR4c/ykeHP8pHhz/KR4c/ykdG/8oHRv/JRsZ/yIYF/8cExLoBgQEdAAAACcAAAAEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKyEhTDAk
+ IvIuIiD/LCAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8qHx3/KB0b/yQaGP8fFhTuCAYGewAA
+ ACkAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAADLyUifDElI/wvIyH/LCAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/KR4c/yUb
+ Gf8fFxXxCggGfwAAACsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAqFRUMMCYkrTElI/8uIiD/LCAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/KR4c/yYbGf8gFxTzCQcHggAAAC0AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuHh4hMiYl1TAkIv8tIR//LCAe/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8sIB7/LiIg/y4iIP8sIB7/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/KR4c/yYbGf8hFxX1CwkHhgAAAC8AAAAGAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtISFEMiYk7zAkIv8tIR//Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/y0hH/83LCr/Rj08/0k/Pf84LSv/LSEf/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/KR4c/yYbGf8hFxX2DAkJiwAAADEAAAAHAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIxIyNyMSUk+y8j
+ If8sIB7/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/y4jIf85S1L/RI6o/1GDlf9LRUX/MSUj/ysf
+ Hf8rHx3/KyAe/ywgHv8sIB7/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/KR4c/yYbGf8hFxb3DgoIkAAA
+ ADQAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZ
+ GQowJiWkMSUj/y4iIP8sIB7/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kh8d/yoxNP8xn8T/M8v+/zi3
+ 4f9ES07/MiYk/ysfHf8tIR//NSoo/z4zMv86Ly3/LyQi/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yYb
+ Gv8hFxb5DwoKlQAAADYAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAACQbGxwxJiXOMCUj/y0iIP8sIB7/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/KB4d/yxl
+ ef8zx/j/M8z//zKhx/80MzT/LiMh/ysfHf8tIiD/O0RI/05yf/9WXF//QDUz/y0hH/8rHx3/Kx8d/ysf
+ Hf8rHx3/Kh4c/yYbGv8hGBb6EAsLmQAAADgAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAACsiIjsxJyTrLyQi/y0hH/8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8qHhz/JyUm/y+avv8zzP//M8f5/y5pfv8sIiD/LCAe/yoeHf8oIiL/MIup/zXG9/9Gmrb/SkRE/zAl
+ I/8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yccGv8hGRf7EAwLngAAADsAAAAKAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS4kImgwJST6LyMh/ywhH/8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ywgHv8qHx3/JjI3/zGz3/8zzP//MKbN/yoxNf8rHx3/Kx8d/ykeHP8mKSz/L6fQ/zPM
+ //85r9f/REVH/zEmJP8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yccGv8iGRf8EQwMogAAAD0AAAAKAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fCDEmJJoxJSP/LiIg/ywg
+ Hv8rHx3/Kx8d/ysfHf8rHx3/LyQi/zovLf84LSz/LE1a/zLC8v8zyfr/L2uA/ywiIP8rHx3/Kx8d/yke
+ HP8kKi3/L6nT/zPM//82rdX/PT0//zAkIv8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yccGv8iGRf9Eg0MpgAA
+ AD8AAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCEhFzEm
+ JccwJSP/LSIg/ywgHv8rHx3/Kx8d/ysfHf8rHx3/LiYm/z1caP9Bdon/NJy//zPL/f80wO//QFlj/zwy
+ MP8wJSP/LCAe/ykeHP8kKCv/L6fQ/zPM//81ncH/OTU1/y4jIf8rHx3/Kx8d/ysfHf8rHx3/Kh4c/ycc
+ Gv8jGRf+Ew0NqwAAAEEAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAALCIiNDEmJOcwJCL/LSEf/ysfHf8rHx3/Kx8d/ysfHf8qHhz/Jios/y+gxv80yfv/M8v+/zPM
+ //81xvf/UIea/15dXv9SSEf/RDo4/zYrKf8mJyn/LqLI/zPM//82jar/OC8u/y0hH/8rHx3/Kx8d/ysf
+ Hf8rHx3/Kh4c/yccGv8jGRj/FA4OrwAAAEQAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABMCUjXjEmI/gvIyH/LCEf/ysfHf8rHx3/Kx8d/ysfHf8qHx3/JBwa/yNF
+ Uv8upc3/M8v+/zPM//8zzP//OMTz/0Wt0P9SkKb/WnR//1VZW/83QUb/MazV/zPL/v88hJ3/PjMy/y4i
+ IP8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yccGv8jGRj/FQ8OswAAAEcAAAAPAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKgAGLyUjkDEmJP4uIyH/LCAe/ysfHf8tIR//LiMh/y4i
+ IP8sIB7/KB4c/yIaGP8jTFv/MsLz/zPM//8yxvf/Mb/v/zPI+v80yvz/OMPy/z602/85pcr/M8X1/zPM
+ /v9CmLX/U01M/z0yMP8vIyH/LCAe/ysfHf8rHx3/Kh4c/yccGv8jGRj/FhAPuAAAAEkAAAAQAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGhoTMSUjwDAlI/8tIiD/LCAe/y0h
+ H/84LSv/SD8+/0tBQP9BNjT/NCoo/ykeHP8nT13/M8b3/zPI+f8rc43/IkFM/yRXaf8pfJj/LqbO/zLD
+ 9P8zzP//M8z//zPM//85wO3/VoeZ/11cXv9NQ0H/OzAu/zAkIv8sIB7/Kh4c/yccGv8jGRj/FhAQvQAA
+ AEwAAAASAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsISEuMSYk4jAk
+ Iv8tIR//Kx8d/yofHf8zT1r/RJKt/1OJnP9dbXT/WFNT/z0zMf8saH3/M8r8/zO76f8vQUj/Jx0b/yMa
+ GP8gGhn/Hycr/yNTZP8uosn/M8v9/zPM//8zzP//N8X1/0eqzP9agY//XV5g/05FQ/85Liz/LSEf/ygc
+ G/8jGRj/FxEPwQAAAE8AAAATAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAEuIyNXMSYk9i8jIf8sIR//Kx8d/yccGv8oY3j/MsX2/zTK+/87vur/SKPC/0d8jv81ncD/M8z+/za2
+ 4f9ETFD/Nywq/ysgHv8pHhz/Jxwa/yEZF/8jSlj/MsLy/zPL/v8ywO//MsHx/zPK/f83xvb/RK/S/1iD
+ kf9XVFX/PDEw/yoeHf8kGhj/GBIQxgMAAFIAAAAUAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAUxJSOHMSYk/i4jIf8sIB7/Kx8d/ygdG/8hJSj/J2yE/y+r1f8yxvf/M8v+/zTK
+ /P8zyv3/M8z//zbC8P9UdYH/VExK/0A1M/81Kij/MCQi/ygdHP8nUV//MsX2/zK55/8nUWD/IkVS/yl7
+ lv8wtOD/M8r8/zfF9P9Lkan/SENE/y4jIf8kGhj/GRIQygMAAFQAAAAVAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHxAxJiS4MSUj/y4iIP8sIB7/Kx8d/yofHf8mHBr/IRsa/yAr
+ MP8kVmj/K5Cx/zG+7f8zzP//M8z//zPM/v8+t+D/V4ma/11pbv9ZVVb/UEhH/zkxMP8teJL/M8v+/zOh
+ xf8vLS7/JRwa/yAbG/8hNz//KHaR/y+q1P8yoMX/NzxA/ywiIP8kGhj/GRISzgICAlcAAAAXAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwfHygxJiTdMCQi/y0iIP8rHx3/Kx8d/ysf
+ Hf8rHx3/KR4c/yccGv8iGRj/Hx4f/yVdcP8yw/T/M8z//zPM//8zy/7/Ncj5/zy85v9Eq83/Spey/0GE
+ mv8ztuL/M8z//z2dvf9PSkr/Qzk3/zcsKv8pHx3/IRsb/yEpLf8lMDX/KSAf/ykeHP8kGhj/GhMS0wIC
+ AloAAAAYAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0jIE4xJSTzLyQi/y0h
+ H/8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8qHhz/JRsZ/yVGU/8ywvP/M8v9/y6dw/8peJP/Koqq/y6i
+ yP8xuuf/M8n7/zPL/v8zzP//M8z//zy54v9Wh5j/WnN8/1lhZf9KQUD/MCUj/ygdG/8pHRz/Kh4c/ygd
+ G/8kGhj/GxIR1wICAlwAAAAZAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy4m
+ In4xJiT9LiMh/ywgHv8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Jx0b/ypidv8zyfv/MsHx/ypL
+ V/8jGhn/IBsb/x8jJf8hOEL/J3KL/zG86v8zzP//M8z//zPM//81yfr/OMTz/z623v9LZ3H/OS4s/ywg
+ Hv8rHx3/Kh8d/ygdG/8kGhj/HRUS2gICAl8AAAAbAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAKhUVDDElJK8xJSP/LiIg/ywgHv8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/JyAg/y2J
+ qf8zzP//M7Xg/zI9Qv8tIR//KR4c/ygdG/8kGhj/Hx0e/yyPsf8zzP//M8r8/y+u2P8tocf/LqfQ/y+o
+ 0f8xVWH/MSUj/ywgHv8rHx3/Kx8d/ygdG/8lGhj/HBQT3QUCAmQAAAAdAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAALR4eIjImJNYwJCL/LSIg/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8qHhz/JzE1/zCu2P8zzP//M57D/zMwMf8uIiD/Kx8d/ysfHf8qHhz/JSUn/y6fxf8zzP//MazW/yU5
+ Qf8hIiT/ICQn/yMoLP8oIB7/Kx8d/ysfHf8rHx3/Kx8d/ygdG/8lGhn/HRUT4AQEAmcAAAAfAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLCEhRTImJO8vJCL/LSEf/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8pHhz/Klho/zPF9v8zy/7/MX+a/zEoJv8sIR//Kx8d/ysfHf8pHhz/KEBJ/zK7
+ 6f8zyv3/LnaP/ykgH/8pHRv/KB0b/ykdG/8qHhz/Kx8d/ysfHf8rHx3/Kx8d/ygdG/8lGhn/HhUU4wcE
+ BGsAAAAhAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLiMjczEmJPwvIyH/LCAe/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/yofHf8oJSX/LpK0/zPM//8ywvL/LVBe/y0iIP8rHx3/Kx8d/ysf
+ Hf8nHRz/Km+G/zPK/P8xtuP/K0JL/ysfHv8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykd
+ HP8lGhn/HRUT5gYEBG8AAAAjAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGRkKMSYkpjEm
+ JP8uIiD/LCAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8lNDn/MLTg/zPL/v8vlLf/Kikr/ysg
+ Hv8rHx3/Kx8d/ysfHf8mHBv/JVBf/yyPsf8oWGn/KSAg/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ykdHP8lGxn/HhUU6AYEBHIAAAAlAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAtJCQcMick0DElI/8tIiD/LCAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8jJSj/KX2Z/yuF
+ o/8nOkH/KR4c/ysfHf8rHx3/Kx8d/ysfHf8pHRv/Ixsa/yMfH/8mHBv/Kh4c/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8lGxn/HxYU6wgGBHYAAAAmAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAvJiY7NCkn6zElI/8tIiD/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/yof
+ Hf8mHBr/Ih0d/yMeHv8oHRv/Kh8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yoeHP8qHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8lGxn/HxYV7QgGBnoAAAAoAAAABAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4LS1fOC0r+TInJf8tIiD/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8qHx3/Kh4c/yoeHP8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8mGxn/HxcV8AoG
+ Bn0AAAAqAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFANzVyPzQy/jcrKv8vIyH/LCAe/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/yke
+ HP8mGxn/IBgW8wsHB4EAAAAsAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLQT9lST89/EA2
+ NP83Kyn/MSUj/y8jIf8uIiD/LSIg/y0hH/8sIB7/LCAe/ywgHv8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ykeHP8mGxn/IRgW9AsHB4QAAAAtAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABUS0s2VkxL5VFHRf9GPDr/PzQy/zwwL/86Ly3/OC0r/zYrKf81KSf/Mygm/zInJf8xJiT/MCQi/y8k
+ Iv8vIyH/LiIg/y0hH/8tIR//LCAe/ywgHv8sIB7/KyAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8mGxr/IhcW9Q0JCYIAAAAoAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABfXz8IXlRTgV5WVO9aUE/+VEpJ/1BGRf9OREL/TEJA/0o/Pv9HPTv/RTo4/0M4
+ Nv9BNjX/PzQy/z0yMP87MC7/OS4s/zcsKv82Kyn/NSkn/zMoJv8yJyX/MSUj/zAlI/8vIyH/LiMh/y4i
+ IP8tIR//LSEf/ywgHv8sIB7/LCAe/ysfHf8rHx3/Kx8d/yoeHP8nHBr/IhkX8g0LCHIAAAAcAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalVVDGVaV0lhWVd4XVRUkVxTUahcUlG8W1FQy1lQ
+ T9tZT07oWE5M8FdMS/ZUS0n8U0lI/lFHRv5PRUT/TUNB/0tBP/9JPj3/Rzw6/0U6OP9DODb/QDY0/z40
+ Mv89MjD/Oy8u/zkuLP83LCr/Niop/zQpJ/8zKCb/Micl/zElI/8wJCL/LiMh/ysfHf8oHRv/IxkY3w0K
+ CkwAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wABPz8/BFVV
+ VQZVVVUMXFFRFlxUVCFeU1MuX1NTQFxSUlNfVVJmXVNTfV1SUpRbU1GsW1FQvltRUM5ZUE/eWU9N6ldO
+ TfFWTUv4VEtJ/VNJR/5RR0b/T0VE/01DQf9LQT//ST89/0Y9O/9EOjj/Qjc1/0A1M/8+MzH/Oi8t/zMo
+ Jv8rHx38IxkYnggIAB0AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf39/Aj8/PwRVVVUGW1tbDltR
+ URleV1AjYFFRMl1WUkRdVFJXXFNTa11TUYNcUlKaXFJSsFxRUMJbUVDSWVBP4VhPTutXTUzyVUxK+lRK
+ SP1RR0X+S0E//kE1NPsyKCa/HxQUMQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9/fwJ/Pz8EbUhIB19PTxBiWFgaWVJSJVtW
+ UTVdVlJHXVRSWltSUm9aUU+HU0pJlkg/PHE6KysjAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFVVVUDPz8/BAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAAP/wAA//gAAAA/AAD/8AAAAB8AAP/gAAAAHwAA/+AAAAAP
+ AAD/4AAAAA8AAP/gAAAADwAA/8AAAAAPAAD/wAAAAA8AAP/AAAAADwAA/8AAAAAPAAD/gAAAAA8AAP+A
+ AAAADwAA/4AAAAAPAAD/gAAAAA8AAP+AAAAADwAA/wAAAAAPAAD/AAAAAA8AAP8AAAAADwAA/wAAAAAP
+ AAD+AAAAAA8AAP4AAAAADwAA/gAAAAAHAAD+AAAAAAcAAPwAAAAABwAA/AAAAAAHAAD8AAAAAAcAAPwA
+ AAAABwAA+AAAAAAHAAD4AAAAAAcAAPgAAAAABwAA+AAAAAAHAADwAAAAAAcAAPAAAAAABwAA8AAAAAAH
+ AADwAAAAAAcAAPAAAAAABwAA8AAAAAAHAADgAAAAAAcAAPAAAAAABwAA8AAAAAAHAADwAAAAAAcAAPgA
+ AAAADwAA/gAAAAAPAAD//4AAAB8AAP///8AAPwAA//////D/AAD///////8AACgAAAAgAAAAQAAAAAEA
+ IAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAFAAAADwAAABQAAAASAAAAEAAAAA8AAAANAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAA
+ AAQAAAAEAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAACAkEBDYHBQVmBgQEbwQEBGsFAgJmBQICYQICAlwCAgJYAwMDVAMAAE8AAABLAAAARwAA
+ AEMAAABAAAAAPAAAADkAAAA0AAAAJwAAAA4AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIbExNCHhUUxh4VE+scFBPrHBMS6BsUEuUbExLiGhMR3hkSEdoZERDWGBAP0hcR
+ EM0WEA/JFg8OxBQODb4UDQ25EgwMtBAMCqkHBQWCAAAAQAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAJBISDiYcGbEnHBr+Jxwa/yYcGv8mGxr/JhsZ/yUbGf8lGxn/JRsZ/yUb
+ Gf8lGhn/JBoY/yQaGP8kGhj/IxkY/yMZGP4iGRf+IBcV/RkTEOIIBAR1AAAAGAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArHx8pLSEf4isfHf8qHx3/Kh8d/yofHf8qHx3/Kh8d/yoe
+ HP8qHhz/Kh4c/yoeHP8qHhz/Kh4c/yoeHP8qHhz/KR4c/ykeHP8nHBr/IRcW+xELC5UAAAAfAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4lIlIwJCL2LSEf/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8kGRj9Ew4MngAA
+ ACEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLyYkhTAkIv4sIB7/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yUa
+ Gf4UDw6jAAAAJAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoVFQwwJSS3LyMh/ywg
+ Hv8rHx3/Kx8d/ysfHf8rHx3/LiMh/zwzMv89NDP/LyMh/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8qHhz/JRoZ/hUPD6gAAAAmAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMiQkIzEm
+ I90uIiD/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8vNjr/PI+r/0l8jv84LSz/Kx8d/y0hH/8wJCL/LSEf/ysf
+ Hf8rHx3/Kx8d/yoeHP8lGxn+FxAQrgAAACkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAwJiJJMSQj9C0hH/8rHx3/Kx8d/ysfHf8rHx3/KiAf/y12jv8zyfv/NYai/zIoJv8rHx3/Njc5/0pd
+ Zf9AOTj/LCEf/ysfHf8rHx3/Kh4c/yUbGf8YEQ+zAAAALAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAjAlI3owJCL9LCAe/ysfHf8rHx3/Kx8d/ysfHf8oKy7/MKnR/zK/7v8tTFj/LCAe/ykf
+ Hf8ucIf/Obvn/0ZdZf8vJCL/Kx8d/ysfHf8qHh3/Jhsa/xcRELkAAAAvAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAcHBwJMCYkri8jIf8sIB7/Kx8d/ysfHf8tIiD/Nisp/y1ETf8yvev/MZGx/ywm
+ J/8rHx3/Jx8d/yyDof8zx/j/PF5r/y8kIv8rHx3/Kx8d/yofHf8mGxr/GRERvgAAADIAAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAACoiIh4wJiPWLiIg/ysfHf8rHx3/Kx8d/ywoKf85eI3/NqHF/zPJ
+ +/9AgZj/Qjk3/zQpJ/8pIB//K3+c/zPB8f83T1n/LiIg/ysfHf8rHx3/Kh8d/yYbGv8aEhDDAAAANQAA
+ AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyMjQDAlI/AtIR//Kx8d/ysfHf8rHx3/JiIi/yl2
+ kP8yxPT/M8z//zy65P9Pj6X/U2x2/0NIS/8wiKf/Nbvo/zxITv8uIiD/Kx8d/ysfHf8qHx3/Jhwa/xoT
+ EcgAAAA4AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEvJCRwMCQi/CwhH/8tIR//NCgn/zQp
+ J/8sIR//Iycp/y6ky/8yxPT/LqHH/zCs1v82uub/OrPc/zS+7f82wvH/Tm96/0I5N/8xJSP/LCAe/yof
+ Hf8mHBr/GxQSzAQAADwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCQkBzAlI6QvJCL/LCAe/y0p
+ Kf9BbHv/UXB8/05PUf80Oj3/MK3X/zKew/8oLC//Iyou/yRGUv8qhKL/MsPz/zPM/v89uuT/UIuf/1Nb
+ YP9BODf/LyQi/yYcGv8cExLQAwMDQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoHh4ZMSYjzy4j
+ If8rHx3/Jigq/y2Ut/82we//QLHX/zyYuP8zw/P/PJy8/0I6Ov8vJCL/KR4c/yMmKf8uo8v/Mbzq/y2e
+ xP8yueb/Prfg/0+InP9FQkP/KR8d/xwUE9UDAwNEAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0k
+ JDgwJSPsLSIg/ysfHf8oHhz/Iysv/yZcbv8slbn/MsHx/zPM//85v+z/UoSV/1JZXf9HQkL/Mj5D/zGy
+ 3f8xhaH/Jycp/yM/Sf8qgp//MqnR/ztXYv8rIB7/HRUU2AMDA0gAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABLyUjZjAkIvstIR//Kx8d/ysfHf8qHhz/Jxwb/yIhI/8peZX/M8v9/zG+7P8zt+P/PLPc/0Ko
+ y/85o8b/M8j6/0ONp/9NS0z/PTUz/ykjI/8kLTH/KSUm/yccGv8dFRPdAwMDTAAAAAcAAAAAAAAAAAAA
+ AAAAAAAAAAAAADMAAAUxJiSaLyQi/ywgHv8rHx3/Kx8d/ysfHf8rHx3/KB4d/yx8mP8ywvH/KVZm/yM3
+ P/8kTVz/KYCe/zLB8f8zzP//OMLx/0Gv1f9JjKP/PDc3/ysfHf8rHx3/Jxwa/x4VFOAGAwNQAAAACAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAJiYmFDAmI8guIyH/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8oJyn/L6DG/zOy
+ 3f8xODz/Kh8d/ygdG/8jJSf/LqLJ/zLD8/8siaj/Kn+c/yxxiP8vKyv/Kx8d/ysfHf8nHBr/HxYV4wYG
+ BlUAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAtIyMyMCUj6C0iIP8rHx3/Kx8d/ysfHf8rHx3/Kh8d/ypE
+ Tv8yvu3/Mpm8/zAqKv8rHx3/Kx8d/yg2Pf8xtuL/MJa5/yglJv8mHBv/Jx4c/ysfHf8rHx3/Kx8d/ycc
+ G/8gFhXmCAUFWgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAADAlI14xJCL5LSEf/ysfHf8rHx3/Kx8d/ysf
+ Hf8pHx7/LHqU/zPH+f8uaHz/LCEf/ysfHf8pHhz/KFFg/zCz3/8sVmX/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/KBwb/x8WFekIBQVfAAAACwAAAAAAAAAAAAAAAAAAAAAAAAADMCYkkjAkIv8sIB7/Kx8d/ysf
+ Hf8rHx3/Kx8d/ycfHv8pb4f/LIWj/yotMP8rHx3/Kx8d/yoeHP8lJij/JTc//yghIf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8oHRv/IBcV7AoHB2QAAAAMAAAAAAAAAAAAAAAAAAAAADMiIg81KSi/MCUj/ywg
+ Hv8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yYgIP8mISH/Kh4d/ysfHf8rHx3/Kx8d/yofHf8qHhz/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ygdG/8gFxbuCQcHaAAAAA0AAAAAAAAAAAAAAAAAAAAAODg4Gz0y
+ MNg0KCb/LSEf/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/KB0b/yAXFvELBwdtAAAADwAAAAAAAAAAAAAAAAAA
+ AABIPDwVTEJBzEI3Nv82Kyn/MiYk/zAlI/8vIyH/LiIg/y0hH/8tIR//LCAe/ywgHv8sIB7/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8oHRv/IRgX8w0JCW8AAAAPAAAAAAAA
+ AAAAAAAAAAAAAFVVVQNbUlB1WE9O7k9FQ/xKPz7+Rzw6/0Q5OP9BNjT/PjMy/zwxL/85Liz/Nysq/zUp
+ J/8zKCb/MSYk/zAkIv8vIyH/LiIg/y0hH/8sIR//LCAe/ywgHv8rHx3/Kx8d/ykdG/8iGRjxDwoKYQAA
+ AAoAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXAtjW1dAX1RUY1tRUXpbUE+RWVBOqFhOTbxXTUvNVEtK3FJJ
+ R+hRRkXyTkNC+EtBQP1JPz3+Rjw6/0M5N/9BNjT/PjMx/zswLv85LSv/Nisp/zQpJ/8yJyX/LCEf/yQb
+ GNgOCQk2AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/fwJmZmYFXFxcC1lZ
+ WRRaUlIfYFRULVtTUz1bUVFRXFJQZltQTn5aT0+WWU9Pq1hOTb9VTErQVEpJ3lNJR+lQRkXzTUNB+Uc9
+ O/w6Ly3tKB8dcgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9/fwJVVVUGalVVDFxRURZcVFQhX1VPMFtT
+ U0BbUU5UVUtJZUc8OEQzMxkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAH/8AAAf+AAAH/gAAB/4A
+ AAP+AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP4AAAD+AAAA/gAAAPwAAAD8AAAA/AAAAPwAAAD4AAAA+AA
+ AAPgAAAD4AAAA+AAAAPAAAADwAAAA8AAAAPAAAADwAAAA+AAAAP+AAAH//8AD/////8oAAAAEAAAACAA
+ AAABACAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKChkLBwdECwcHRQgI
+ CD4IBAQ5CgUFMwUFBS4GBgYpBwAAJAAAABIAAAABAAAAAAAAAAAAAAAAAAAAACoVFQwkGRehIRcW6iAY
+ FekgFxbmHxYV4h8VFN4eFRPZHBQU1BsUEswPCwuAAAAADQAAAAAAAAAAAAAAAAAAAAAtISEtLSEe5yof
+ Hf8qHx3/Kh8d/yoeHf8qHhz/Kh4c/yoeHP8oHRv/HBUTwgAAABgAAAAAAAAAAAAAAAAAAAAAMCUiWS4h
+ H/krHx3/Kx8d/zApKP8xKCf/Kx8d/ysfHf8rHx3/Kh4c/x8WFckJCQAbAAAAAAAAAAAAAAAAAAAAAjAl
+ Io4tIR//Kx8d/ysjI/8zeJD/OFNd/y8qKv83ODr/LCAe/yoeHP8gFhbOCAgIHwAAAAAAAAAAAAAAACcn
+ Jw0wJCK/LCAe/ywhH/8uPUP/MZu+/y03PP8sTlv/OoKb/y8kIv8qHx3/IBgV0wcHByMAAAAAAAAAAAAA
+ AAAtJyAnLiIg4isfHf8rKCj/MYil/ziu1f9CXmj/Mmd6/zaBm/8uIyH/Kh8d/yEXFtgNBgYnAAAAAAAA
+ AAAAAAAAMCMjTy0iIPczOT3/PEhN/zB2jv8wja3/LnGI/zKjyf88qM3/Qldf/zMrKv8hGBfcCwUFKwAA
+ AAAAAAAAAAAAATAkI4MsIR/+KkJL/zSKqP80sdv/P4eg/zpAQ/8vdo//MIel/zODnv88ZnX/JRwb4AoK
+ CjAAAAAAAAAAADMZGQovJCK3LCAe/yofHf8oKy7/Lpq+/y+DoP80gZv/NLPd/z+Oqf84SlH/Kist/yIZ
+ GOQOCQk1AAAAAAAAAAAuJiYhLyMh3SsfHf8rHx3/KjU6/zCWuf8tMTT/KDU6/y+cwf8qW23/LTc8/ysf
+ Hf8jGRfnDQgIOgAAAAAAAAAALyQkRi0iIPQrHx3/Kx8d/ypIVP8tb4f/KyIh/ykxNf8rU2L/KyEg/ysf
+ Hf8rHx3/IxoX6g8LC0AAAAAAAAAAADktK28wJCL+Kx8d/ysfHf8pIiL/KiMj/ysfHf8rHx3/Kh8d/ysf
+ Hf8rHx3/Kx8d/yQZGO0OCwtFAAAAAAAAAABPQ0NXRjs56jwxMPc5Liz8Nisp/jQoJv8xJiT/LyQi/y4i
+ IP8tIR//LCAe/ywgHv8lGhjtEw8LQgAAAAAAAAAAVFRUCV1TTjRUTkpLVUpHYFNIRndRRkWQTUNBp0pB
+ QLtIPj3MRTs520E4Neg9MzDwLiMiuxwSEhsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX8/
+ PwRmTEwKY1RUEldPTx1YU00rVEdHOUQzMx4AAAABAAAAAPABAADgAQAA4AEAAOABAADAAQAAwAEAAMAB
+ AADAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAPwBAAA=
+
+
+
\ No newline at end of file
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/Program.cs b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/Program.cs
new file mode 100755
index 000000000..faacf7fd2
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/Program.cs
@@ -0,0 +1,446 @@
+//-----------------------------------------------------------------------------
+// Filename: Program.cs
+//
+// Description: An example WebRTC server application that eastablishes two connections
+// with the OpenAI realtime endpoint and wires up their audio together. An OpenGL
+// visualisation is used to show which agent is talking.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 12 Jan 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Linq;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Microsoft.Extensions.Logging;
+using Serilog;
+using SIPSorcery.Media;
+using SIPSorcery.Net;
+using AudioScope;
+using System.Numerics;
+using System.Text;
+using SIPSorceryMedia.Windows;
+using LanguageExt;
+using LanguageExt.Common;
+
+namespace demo;
+
+record InitPcContext(
+ string CallLabel,
+ string EphemeralKey,
+ string OfferSdp,
+ string AnswerSdp,
+ OpenAIVoicesEnum Voice,
+ int AudioScopeNumber
+);
+
+record CreatedPcContext(
+ string CallLabel,
+ string EphemeralKey,
+ RTCPeerConnection Pc,
+ string OfferSdp,
+ string AnswerSdp,
+ SemaphoreSlim PcConnectedSemaphore
+ );
+
+record PcContext(
+ string CallLabel,
+ RTCPeerConnection Pc,
+ WindowsAudioEndPoint AudioEndPoint,
+ SemaphoreSlim PcConnectedSemaphore
+);
+
+class Program
+{
+ private const int AUDIO_PACKET_DURATION = 20; // 20ms of audio per RTP packet for PCMU & PCMA.
+
+ private const string OPENAI_REALTIME_SESSIONS_URL = "https://api.openai.com/v1/realtime/sessions";
+ private const string OPENAI_REALTIME_BASE_URL = "https://api.openai.com/v1/realtime";
+ private const string OPENAI_MODEL = "gpt-4o-realtime-preview-2024-12-17";
+ private const string OPENAI_DATACHANNEL_NAME = "oai-events";
+ private const string ALICE_CALL_LABEL = "Alice";
+ private const string BOB_CALL_LABEL = "Bob";
+
+ private static Microsoft.Extensions.Logging.ILogger logger = LoggerFactory.Create(builder =>
+ builder.AddSerilog(new LoggerConfiguration()
+ .Enrich.FromLogContext()
+ .MinimumLevel.Debug()
+ .WriteTo.Console()
+ .CreateLogger()))
+ .CreateLogger();
+
+ private static FormAudioScope? _audioScopeForm;
+
+ static async Task Main(string[] args)
+ {
+ Console.WriteLine("WebRTC OpenAI Alice & Bob Demo");
+
+ if (args.Length != 1)
+ {
+ Console.WriteLine("Please provide your OpenAI key as a command line argument. "+
+ "It's used to get the single use ephemeral secret for the WebRTC connection.");
+ Console.WriteLine("The recommended approach is to use an environment variable, " +
+ "for example: set OPENAIKEY=");
+ Console.WriteLine("Then execute the application using: dotnet run %OPENAIKEY%");
+ return;
+ }
+
+ // Spin up a dedicated STA thread to run WinForms for the Audio Scope.
+ Thread uiThread = new Thread(() =>
+ {
+ // WinForms initialization must be on an STA thread.
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+
+ _audioScopeForm = new FormAudioScope(true);
+
+ Application.Run(_audioScopeForm);
+ });
+
+ uiThread.SetApartmentState(ApartmentState.STA);
+ uiThread.IsBackground = true;
+ uiThread.Start();
+
+ // Reset event to keep the console thread alive until we're ready to exit.
+ ManualResetEvent exitMre = new ManualResetEvent(false);
+
+ // Get the OpenAI key from the command line arguments. Note this is the API key that's used to get the
+ // ephemeral key (apparently this main API key can be used instead of the ephemeral key but I only found
+ // that out afterwards).
+ string openAIKey = args[0];
+
+ // Initialise two peer connection contexts for Alice & Bob.
+ var aliceInitialContext = new InitPcContext(
+ ALICE_CALL_LABEL,
+ string.Empty,
+ string.Empty,
+ string.Empty,
+ OpenAIVoicesEnum.shimmer,
+ 1);
+
+ var bobInitialContext = new InitPcContext(
+ BOB_CALL_LABEL,
+ string.Empty,
+ string.Empty,
+ string.Empty,
+ OpenAIVoicesEnum.ash,
+ 2);
+
+ var aliceCallTask = InitiatePeerConnection(openAIKey, aliceInitialContext);
+ var bobCallTask = InitiatePeerConnection(openAIKey, bobInitialContext);
+
+ _ = await Task.WhenAll(aliceCallTask, bobCallTask);
+
+ var combinedCtx = from aliceCtx in aliceCallTask.Result
+ from bobCtx in bobCallTask.Result
+ select (aliceCtx, bobCtx);
+
+ if (combinedCtx.IsLeft)
+ {
+ logger.LogError($"There was a problem initiating the connections. {((Error)combinedCtx).Message}");
+ exitMre.Set();
+ }
+ else
+ {
+ logger.LogInformation($"Both calls successfully initiated, waiting for them to connect...");
+
+ var aliceConncectedCtx = (PcContext)aliceCallTask.Result;
+ var bobConnectedCtx = (PcContext)bobCallTask.Result;
+
+ // Wait until both calls have their data channels connected which can only happen if the underlying
+ // peer connections are also connected.
+ var waitForAlice = aliceConncectedCtx.PcConnectedSemaphore.WaitAsync();
+ var waitForBob = bobConnectedCtx.PcConnectedSemaphore.WaitAsync();
+
+ await Task.WhenAll(waitForAlice, waitForBob);
+
+ logger.LogInformation($"Both calls successfully connected.");
+
+ // Send Alice's audio to Bob.
+ aliceConncectedCtx.Pc.OnRtpPacketReceived += (IPEndPoint rep, SDPMediaTypesEnum media, RTPPacket rtpPkt) =>
+ {
+ bobConnectedCtx.Pc.SendAudio(AUDIO_PACKET_DURATION, rtpPkt.Payload);
+ };
+
+ // Send Bob's audio to Alice.
+ bobConnectedCtx.Pc.OnRtpPacketReceived += (IPEndPoint rep, SDPMediaTypesEnum media, RTPPacket rtpPkt) =>
+ {
+ aliceConncectedCtx.Pc.SendAudio(AUDIO_PACKET_DURATION, rtpPkt.Payload);
+ };
+
+ // Trigger the conversation by getting Alice to say something witty.
+ var aliceDataChannel = aliceConncectedCtx.Pc.DataChannels.Where(x => x.label == OPENAI_DATACHANNEL_NAME).Single();
+
+ //if (aliceDataChannel != null)
+ //{
+ // SendResponseCreate(aliceDataChannel, OpenAIVoicesEnum.shimmer, "Only talk in cheesy puns. Keep it short once you'vegot you pun in. To start the conversation please repeat repeat this phrase in your corniest accent: 'You're a few tinnies short of a six-pack.'");
+ //}
+
+ logger.LogInformation($"ctrl-c to exit..");
+
+ // Ctrl-c will gracefully exit.
+ Console.CancelKeyPress += delegate (object? sender, ConsoleCancelEventArgs e)
+ {
+ e.Cancel = true;
+
+ aliceConncectedCtx.Pc.Close("User exit");
+ bobConnectedCtx.Pc.Close("User exit");
+
+ exitMre.Set();
+ };
+ }
+
+ // Wait for a signal saying the call failed, was cancelled with ctrl-c or completed.
+ exitMre.WaitOne();
+
+ Console.WriteLine("Exiting...");
+
+ _audioScopeForm?.Invoke(() => _audioScopeForm.Close());
+ }
+
+ ///
+ /// Initiaites the creation and media session wiring for a local peer connection.
+ ///
+ private static Task> InitiatePeerConnection(string openAIKey, InitPcContext ctx)
+ => InitiatePeerConnectionWithOpenAI(openAIKey, ctx)
+ .BindAsync(async createdPcCtx =>
+ {
+ var audioEncoder = new AudioEncoder(includeOpus: true);
+ WindowsAudioEndPoint windowsAudioEP = new WindowsAudioEndPoint(audioEncoder, -1, -1, true, false);
+ windowsAudioEP.OnAudioSinkError += err => logger.LogWarning($"Audio sink error. {err}.");
+ var opusOnly = audioEncoder.SupportedFormats.Where(x => x.FormatName == "OPUS").Single();
+
+ windowsAudioEP.SetAudioSinkFormat(opusOnly);
+
+ // Can be used to send microphone input to the remote peer connection.
+ //windowsAudioEP.SetAudioSourceFormat(opusOnly);
+ //windowsAudioEP.OnAudioSourceEncodedSample += createdPcCtx.Pc.SendAudio;
+ //await windowsAudioEP.StartAudio();
+
+ createdPcCtx.Pc.OnRtpPacketReceived += (IPEndPoint rep, SDPMediaTypesEnum media, RTPPacket rtpPkt) =>
+ {
+ if (media == SDPMediaTypesEnum.audio)
+ {
+ windowsAudioEP.GotAudioRtp(rep, rtpPkt.Header.SyncSource, rtpPkt.Header.SequenceNumber, rtpPkt.Header.Timestamp, rtpPkt.Header.PayloadType, rtpPkt.Header.MarkerBit == 1, rtpPkt.Payload);
+
+ var decodedSample = audioEncoder.DecodeAudio(rtpPkt.Payload, opusOnly);
+
+ var samples = decodedSample
+ .Select(s => new Complex(s / 32768f, 0f))
+ .ToArray();
+
+ var frame = _audioScopeForm?.Invoke(() => _audioScopeForm.ProcessAudioSample(samples, ctx.AudioScopeNumber));
+ }
+ };
+
+ await windowsAudioEP.StartAudioSink();
+
+ logger.LogInformation($"{createdPcCtx.CallLabel} call successfully intiated, waiting for connect...");
+
+ return Prelude.Right(new (
+ createdPcCtx.CallLabel,
+ createdPcCtx.Pc,
+ windowsAudioEP,
+ createdPcCtx.PcConnectedSemaphore));
+ });
+
+ ///
+ /// Contains a functional flow to initiate a WebRTC peer connection with the OpenAI realtime endpoint.
+ ///
+ ///
+ /// See https://platform.openai.com/docs/guides/realtime-webrtc for the steps required to establish a connection.
+ ///
+ private static async Task> InitiatePeerConnectionWithOpenAI(string openAIKey, InitPcContext initCtx)
+ {
+ return await Prelude.Right(default)
+ .BindAsync(async _ =>
+ {
+ logger.LogInformation($"STEP 1 {initCtx.CallLabel}: Get ephemeral key from OpenAI.");
+ var ephemeralKey = await OpenAIRealtimeRestClient.CreateEphemeralKeyAsync(OPENAI_REALTIME_SESSIONS_URL, openAIKey, OPENAI_MODEL, initCtx.Voice);
+
+ return ephemeralKey.Map(ephemeralKey => initCtx with { EphemeralKey = ephemeralKey });
+ })
+ .BindAsync(async withkeyCtx =>
+ {
+ logger.LogInformation($"STEP 2 {withkeyCtx.CallLabel}: Create WebRTC PeerConnection & get local SDP offer.");
+
+ var onConnectedSemaphore = new SemaphoreSlim(0, 1);
+ var pc = await CreatePeerConnection(withkeyCtx.CallLabel, onConnectedSemaphore);
+ var offer = pc.createOffer();
+ await pc.setLocalDescription(offer);
+
+ logger.LogDebug("SDP offer:");
+ logger.LogDebug(offer.sdp);
+
+ return Prelude.Right(new (
+ withkeyCtx.CallLabel,
+ withkeyCtx.EphemeralKey,
+ pc,
+ offer.sdp,
+ string.Empty,
+ onConnectedSemaphore));
+ })
+ .BindAsync(async createdCtx =>
+ {
+ logger.LogInformation($"STEP 3 {createdCtx.CallLabel}: Send SDP offer to OpenAI REST server & get SDP answer.");
+
+ var answerEither = await OpenAIRealtimeRestClient.GetOpenAIAnswerSdpAsync(createdCtx.EphemeralKey, OPENAI_REALTIME_BASE_URL, OPENAI_MODEL, createdCtx.OfferSdp);
+ return answerEither.Map(answer => createdCtx with { AnswerSdp = answer });
+ })
+ .BindAsync(withAnswerCtx =>
+ {
+ logger.LogInformation($"STEP 4 {withAnswerCtx.CallLabel}: Set remote SDP");
+
+ logger.LogDebug("SDP answer:");
+ logger.LogDebug(withAnswerCtx.AnswerSdp);
+
+ var setAnswerResult = withAnswerCtx.Pc.setRemoteDescription(
+ new RTCSessionDescriptionInit { sdp = withAnswerCtx.AnswerSdp, type = RTCSdpType.answer }
+ );
+ logger.LogDebug($"Set answer result {setAnswerResult}.");
+
+ return setAnswerResult == SetDescriptionResultEnum.OK ?
+ Prelude.Right(withAnswerCtx) :
+ Prelude.Left(Error.New("Failed to set remote SDP."));
+ });
+ }
+
+ ///
+ /// Method to create the local peer connection instance and data channel.
+ ///
+ /// A friendly label to identify the peer conenction. Helps in this app as there are two local peer connections.
+ /// A semaphore that will get set when the data channel on the peer connection is opened. Since the data channel
+ /// can only be opened once the peer connection is open this indicates both are ready for use.
+ private static async Task CreatePeerConnection(string callLabel, SemaphoreSlim onDcConnected)
+ {
+ var pcConfig = new RTCConfiguration
+ {
+ X_UseRtpFeedbackProfile = true,
+ };
+
+ var peerConnection = new RTCPeerConnection(pcConfig);
+ var dataChannel = await peerConnection.createDataChannel(OPENAI_DATACHANNEL_NAME);
+
+ var audioEncoder = new AudioEncoder(includeOpus: true);
+ var opusOnly = audioEncoder.SupportedFormats.Where(x => x.FormatName == "OPUS").ToList();
+
+ MediaStreamTrack audioTrack = new MediaStreamTrack(opusOnly, MediaStreamStatusEnum.SendRecv);
+ peerConnection.addTrack(audioTrack);
+
+ //peerConnection.OnAudioFormatsNegotiated += (audioFormats) => logger.LogDebug($"Audio format negotiated {audioFormats.First().FormatName}.";
+ //peerConnection.OnReceiveReport += RtpSession_OnReceiveReport;
+ //peerConnection.OnSendReport += RtpSession_OnSendReport;
+ peerConnection.OnTimeout += (mediaType) => logger.LogDebug($"{callLabel} Timeout on media {mediaType}.");
+ peerConnection.oniceconnectionstatechange += (state) => logger.LogDebug($"{callLabel} ICE connection state changed to {state}.");
+ peerConnection.onconnectionstatechange += (state) => logger.LogDebug($"{callLabel} Peer connection connected changed to {state}.");
+
+ dataChannel.onopen += () =>
+ {
+ logger.LogDebug($"{callLabel} OpenAI data channel opened.");
+ onDcConnected.Release();
+ };
+
+ dataChannel.onclose += () => logger.LogDebug($"{callLabel} OpenAI data channel {dataChannel.label} closed.");
+
+ dataChannel.onmessage += (dc, protocol, data) => OnDataChannelMessage(dc, protocol, data, callLabel);
+
+ return peerConnection;
+ }
+
+ ///
+ /// Event handler for WebRTC data channel messages.
+ ///
+ private static void OnDataChannelMessage(RTCDataChannel dc, DataChannelPayloadProtocols protocol, byte[] data, string callLabel)
+ {
+ //logger.LogInformation($"Data channel {dc.label}, protocol {protocol} message length {data.Length}.");
+
+ var message = Encoding.UTF8.GetString(data);
+
+ //logger.LogDebug(message);
+
+ var serverEventModel = OpenAIDataChannelManager.ParseDataChannelMessage(data);
+
+ serverEventModel.IfSome(e =>
+ {
+ switch (e)
+ {
+ case OpenAISessionCreated sessionCreated:
+ //logger.LogInformation($"Session created: {sessionCreated.ToJson()}");
+ OnSessionCreated(dc);
+ if (callLabel == ALICE_CALL_LABEL)
+ {
+ SendResponseCreate(dc, OpenAIVoicesEnum.alloy, "Tell me your first Dad joke.");
+ }
+ break;
+
+ case OpenAISessionUpdated sessionUpdated:
+ logger.LogInformation($"Session updated: {sessionUpdated.ToJson()}");
+ break;
+
+ case OpenAIResponseAudioTranscriptDone transcriptionDone:
+ logger.LogInformation($"Transcript done: {transcriptionDone.Transcript}");
+ break;
+
+ default:
+ //logger.LogInformation($"Data Channel {e.Type} message received.");
+ break;
+ }
+ });
+
+ if (serverEventModel.IsNone)
+ {
+ logger.LogWarning($"Failed to parse server event for: {message}");
+ }
+ }
+
+ ///
+ /// Sends a session update message to add the get weather demo function.
+ ///
+ private static void OnSessionCreated(RTCDataChannel dc)
+ {
+ var sessionUpdate = new OpenAISessionUpdate
+ {
+ EventID = Guid.NewGuid().ToString(),
+ Session = new OpenAISession
+ {
+ Model = OPENAI_MODEL,
+ Instructions = "You are a joke bot. Tell a Dad joke every chance you get.",
+ }
+ };
+
+ logger.LogInformation($"Sending OpenAI session update to data channel {dc.label}.");
+ logger.LogDebug(sessionUpdate.ToJson());
+
+ dc.send(sessionUpdate.ToJson());
+ }
+
+ ///
+ /// Sends a response create message to the OpenAI data channel to trigger the conversation.
+ ///
+ private static void SendResponseCreate(RTCDataChannel dc, OpenAIVoicesEnum voice, string message)
+ {
+ var responseCreate = new OpenAIResponseCreate
+ {
+ EventID = Guid.NewGuid().ToString(),
+ Response = new OpenAIResponseCreateResponse
+ {
+ Instructions = message,
+ Voice = voice.ToString()
+ }
+ };
+
+ logger.LogInformation($"Sending initial response create to first call data channel {dc.label}.");
+ logger.LogDebug(responseCreate.ToJson());
+
+ dc.send(responseCreate.ToJson());
+ }
+}
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/WebRTCOpenAIAliceAndBob.csproj b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/WebRTCOpenAIAliceAndBob.csproj
new file mode 100755
index 000000000..99136bbb1
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/WebRTCOpenAIAliceAndBob.csproj
@@ -0,0 +1,49 @@
+
+
+
+ Exe
+ net8.0-windows10.0.17763.0
+ true
+ true
+ true
+ 12.0
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/clear/clear.frag b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/clear/clear.frag
new file mode 100644
index 000000000..f67beb369
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/clear/clear.frag
@@ -0,0 +1,9 @@
+#version 150
+
+uniform float decay;
+
+out vec4 color;
+
+void main() {
+ color = vec4(0.0, 0.0, 0.0, decay);
+}
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/clear/clear.vert b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/clear/clear.vert
new file mode 100644
index 000000000..aab83f9cd
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/clear/clear.vert
@@ -0,0 +1,7 @@
+#version 150
+
+in vec2 vec;
+
+void main() {
+ gl_Position = vec4(vec, 1.0, 1.0);
+}
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/line/line.frag b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/line/line.frag
new file mode 100644
index 000000000..fe2602ee5
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/line/line.frag
@@ -0,0 +1,30 @@
+#version 150
+
+uniform bool colorize;
+uniform float base_hue;
+uniform float decay;
+uniform float desaturation;
+
+in float relative_length;
+in vec2 angle;
+in float position;
+
+out vec4 color;
+
+// https://github.com/hughsk/glsl-hsv2rgb
+vec3 hsv2rgb(vec3 c) {
+ vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
+ vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
+ return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
+}
+
+void main() {
+ float alpha = mix(1.0 - decay, 1.0, position);
+ if (colorize) {
+ float phase = log2(angle.x);
+ float saturation = exp2(-desaturation * angle.y); // more noise -> less saturation
+ color = vec4(hsv2rgb(vec3(base_hue + phase, saturation, 1.0)), alpha);
+ } else {
+ color = vec4(hsv2rgb(vec3(base_hue, 1.0, 1.0)), alpha);
+ }
+}
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/line/line.geom b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/line/line.geom
new file mode 100644
index 000000000..7dfb47a66
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/line/line.geom
@@ -0,0 +1,117 @@
+#version 150
+
+uniform uint n;
+uniform vec2 window;
+uniform float thickness;
+uniform float min_thickness;
+uniform float thinning;
+
+layout(lines_adjacency) in;
+layout(triangle_strip, max_vertices = 5) out;
+
+in vec2[] angular_velocity;
+
+out float relative_length;
+out vec2 angle;
+out float position;
+
+void emit_position(vec2 pos) {
+ gl_Position = vec4(pos / window, 0.0, 1.0);
+ EmitVertex();
+}
+
+float get_thickness(float len) {
+ float x = n * len;
+ return mix(min_thickness, thickness, 1.0 / (1.0 + thinning * x * x));
+}
+
+// heavily based on paul houx's miter polylines
+// https://github.com/paulhoux/Cinder-Samples/blob/master/GeometryShader/assets/shaders/lines2.geom
+void main() {
+ // get the four vertices passed to the shader:
+ vec2 p0_ = gl_in[0].gl_Position.xy;
+ vec2 p1_ = gl_in[1].gl_Position.xy;
+ vec2 p2_ = gl_in[2].gl_Position.xy;
+ vec2 p3_ = gl_in[3].gl_Position.xy;
+
+ // relative length of first two segments (NOT in terms of screen coordinates)
+ float length_a_ = distance(p0_, p1_);
+ float length_b_ = distance(p1_, p2_);
+
+ // transform to screen coordinates
+ // and also make it square
+ float side = min(window.x, window.y);
+ vec2 square = vec2(side, side);
+ vec2 p0 = p0_ * square;
+ vec2 p1 = p1_ * square;
+ vec2 p2 = p2_ * square;
+ vec2 p3 = p3_ * square;
+ float length_b = distance(p1, p2);
+
+ // vectors for the 3 segments (previous, current, next)
+ vec2 v0 = p1 - p0;
+ vec2 v1 = p2 - p1;
+ vec2 v2 = p3 - p2;
+
+ // the normal of each of the 3 segments (previous, current, next)
+ vec2 n0 = normalize(vec2(-v0.y, v0.x));
+ vec2 n1 = normalize(vec2(-v1.y, v1.x));
+ vec2 n2 = normalize(vec2(-v2.y, v2.x));
+
+ // miter lines by averaging the normals of the 2 segments
+ vec2 miter_a_norm = normalize(n0 + n1); // miter at start of current segment
+ vec2 miter_b_norm = normalize(n1 + n2); // miter at end of current segment
+
+ // thicknesses at p1 and p2
+ // float thickness_adjusted = thickness * mix(1.0, thickness, thinning);
+ // float thickness_a = max(min_thickness, min(thickness, thickness_adjusted / mix(1.0, n * length_a_, thinning)));
+ // float thickness_b = max(min_thickness, min(thickness, thickness_adjusted / mix(1.0, n * length_b_, thinning)));
+ float thickness_a = get_thickness(length_a_);
+ float thickness_b = get_thickness(length_b_);
+
+ // the length of the miter by projecting it onto normal and then inverse it
+ // also bound the length
+ float miter_a_length = abs(thickness_a / dot(miter_a_norm, n1));
+ float miter_a_length_max = abs(length_b / dot(miter_a_norm, v1));
+ float miter_b_length = abs(thickness_b / dot(miter_b_norm, n1));
+ float miter_b_length_max = abs(length_b / dot(miter_b_norm, v1));
+ vec2 miter_a = miter_a_norm * min(miter_a_length, max(thickness, miter_a_length_max));
+ vec2 miter_b = miter_b_norm * min(miter_b_length, max(thickness, miter_b_length_max));
+
+ float n = n;
+ position = gl_in[1].gl_Position.z;
+ relative_length = length_a_;
+ angle = angular_velocity[1];
+ if(dot(v0, n1) > 0) {
+ // start at negative miter
+ emit_position(p1 - miter_a);
+ // proceed to positive normal
+ emit_position(p1 + thickness_a * n1);
+ } else {
+ // start at negative normal
+ emit_position(p1 - thickness_a * n1);
+ // proceed to positive miter
+ emit_position(p1 + miter_a);
+ }
+
+ position = gl_in[2].gl_Position.z;
+ relative_length = length_b_;
+ angle = angular_velocity[2];
+ if (dot(v2, n1) < 0) {
+ // proceed to negative miter
+ emit_position(p2 - miter_b);
+ // proceed to positive normal
+ emit_position(p2 + thickness_b * n1);
+ // end at positive normal
+ emit_position(p2 + thickness_b * n2);
+ } else {
+ // proceed to negative normal
+ emit_position(p2 - thickness_b * n1);
+ // proceed to positive miter
+ emit_position(p2 + miter_b);
+ // end at negative normal
+ emit_position(p2 - thickness_b * n2);
+ }
+
+ EndPrimitive();
+}
diff --git a/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/line/line.vert b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/line/line.vert
new file mode 100644
index 000000000..25b686a0c
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAIAliceAndBob/shaders/line/line.vert
@@ -0,0 +1,19 @@
+#version 150
+
+uniform vec2 window;
+uniform uint n;
+uniform float decay;
+
+in vec4 vec;
+out vec2 angular_velocity;
+
+void main() {
+ float n = n;
+ float z = (gl_VertexID - 1) / (n - 2);
+ if (window.y > window.x) {
+ gl_Position = vec4(vec.x, vec.y, z, 1.0);
+ } else {
+ gl_Position = vec4(vec.y, vec.x, z, 1.0);
+ }
+ angular_velocity = vec.zw;
+}
diff --git a/examples/OpenAIExamples/WebRTCOpenAILocalFunctions/Program.cs b/examples/OpenAIExamples/WebRTCOpenAILocalFunctions/Program.cs
new file mode 100755
index 000000000..7dc1329a7
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAILocalFunctions/Program.cs
@@ -0,0 +1,392 @@
+//-----------------------------------------------------------------------------
+// Filename: Program.cs
+//
+// Description: An example WebRTC application that can be used to interact with
+// OpenAI's real-time API https://platform.openai.com/docs/guides/realtime-webrtc
+// and utilise the local function calling feature https://platform.openai.com/docs/guides/function-calling.
+//
+// Usage:
+// set OPENAIKEY=your_openai_key
+// dotnet run %OPENAIKEY%
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 19 Jan 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Serilog;
+using SIPSorcery.Media;
+using SIPSorcery.Net;
+using SIPSorceryMedia.Windows;
+using LanguageExt;
+using LanguageExt.Common;
+
+namespace demo;
+
+record PcContext(
+ RTCPeerConnection Pc,
+ SemaphoreSlim PcConnectedSemaphore,
+ string EphemeralKey = "",
+ string OfferSdp = "",
+ string AnswerSdp = ""
+);
+
+class Program
+{
+ private const string OPENAI_REALTIME_SESSIONS_URL = "https://api.openai.com/v1/realtime/sessions";
+ private const string OPENAI_REALTIME_BASE_URL = "https://api.openai.com/v1/realtime";
+ private const string OPENAI_MODEL = "gpt-4o-realtime-preview-2024-12-17";
+ private const OpenAIVoicesEnum OPENAI_VOICE = OpenAIVoicesEnum.shimmer;
+ private const string OPENAI_DATACHANNEL_NAME = "oai-events";
+
+ private static Microsoft.Extensions.Logging.ILogger logger = LoggerFactory.Create(builder =>
+ builder.AddSerilog(new LoggerConfiguration()
+ .Enrich.FromLogContext()
+ .MinimumLevel.Debug()
+ .WriteTo.Console()
+ .CreateLogger()))
+ .CreateLogger();
+
+ static async Task Main(string[] args)
+ {
+ Console.WriteLine("WebRTC OpenAI Local Function Demo Program");
+ Console.WriteLine("Press ctrl-c to exit.");
+
+ if (args.Length != 1)
+ {
+ Console.WriteLine("Please provide your OpenAI key as a command line argument. It's used to get the single use ephemeral secret for the WebRTC connection.");
+ Console.WriteLine("The recommended approach is to use an environment variable, for example: set OPENAIKEY=");
+ Console.WriteLine("Then execute the application using: dotnet run %OPENAIKEY%");
+ return;
+ }
+
+ var flow = await Prelude.Right(default)
+ .BindAsync(_ =>
+ {
+ logger.LogInformation("STEP 1: Get ephemeral key from OpenAI.");
+ return OpenAIRealtimeRestClient.CreateEphemeralKeyAsync(OPENAI_REALTIME_SESSIONS_URL, args[0], OPENAI_MODEL, OPENAI_VOICE);
+ })
+ .BindAsync(async ephemeralKey =>
+ {
+ logger.LogDebug("STEP 2: Create WebRTC PeerConnection & get local SDP offer.");
+
+ var onConnectedSemaphore = new SemaphoreSlim(0, 1);
+ var pc = await CreatePeerConnection(onConnectedSemaphore);
+ var offer = pc.createOffer();
+ await pc.setLocalDescription(offer);
+
+ logger.LogDebug("SDP offer:");
+ logger.LogDebug(offer.sdp);
+
+ return Prelude.Right(
+ new PcContext(pc, onConnectedSemaphore, ephemeralKey, offer.sdp, string.Empty)
+ );
+ })
+ .BindAsync(async ctx =>
+ {
+ logger.LogInformation("STEP 3: Send SDP offer to OpenAI REST server & get SDP answer.");
+
+ var answerEither = await OpenAIRealtimeRestClient.GetOpenAIAnswerSdpAsync(ctx.EphemeralKey, OPENAI_REALTIME_BASE_URL, OPENAI_MODEL, ctx.OfferSdp);
+ return answerEither.Map(answer => ctx with { AnswerSdp = answer });
+ })
+ .BindAsync(ctx =>
+ {
+ logger.LogInformation("STEP 4: Set remote SDP");
+
+ logger.LogDebug("SDP answer:");
+ logger.LogDebug(ctx.AnswerSdp);
+
+ var setAnswerResult = ctx.Pc.setRemoteDescription(
+ new RTCSessionDescriptionInit { sdp = ctx.AnswerSdp, type = RTCSdpType.answer }
+ );
+ logger.LogInformation($"Set answer result {setAnswerResult}.");
+
+ return setAnswerResult == SetDescriptionResultEnum.OK ?
+ Prelude.Right(ctx) :
+ Prelude.Left(Error.New("Failed to set remote SDP."));
+ })
+ .MapAsync(async ctx =>
+ {
+ logger.LogInformation("STEP 5: Wait for data channel to connect and then trigger conversation.");
+
+ await ctx.PcConnectedSemaphore.WaitAsync();
+
+ return ctx;
+ })
+ .BindAsync(ctx =>
+ {
+ logger.LogInformation("STEP 6: Wait for ctrl-c to indicate user exit.");
+
+ ManualResetEvent exitMre = new(false);
+ Console.CancelKeyPress += (_, e) =>
+ {
+ e.Cancel = true;
+ exitMre.Set();
+ };
+ exitMre.WaitOne();
+
+ ctx.Pc.Close("User exit.");
+
+ return Prelude.Right(ctx);
+ });
+
+ flow.Match(
+ Left: prob => Console.WriteLine($"There was a problem setting up the connection. {prob.Message}"),
+ Right: _ => Console.WriteLine("The call was successful.")
+ );
+ }
+
+ ///
+ /// Event handler for WebRTC data channel messages.
+ ///
+ private static void OnDataChannelMessage(RTCDataChannel dc, DataChannelPayloadProtocols protocol, byte[] data)
+ {
+ //logger.LogInformation($"Data channel {dc.label}, protocol {protocol} message length {data.Length}.");
+
+ var message = Encoding.UTF8.GetString(data);
+ //logger.LogDebug($"Data channel message: {message}");
+
+ var serverEventModel = OpenAIDataChannelManager.ParseDataChannelMessage(data);
+
+ serverEventModel.IfSome(e =>
+ {
+ switch (e)
+ {
+ case OpenAIResponseFunctionCallArgumentsDone argumentsDone:
+ logger.LogInformation($"Function Arguments done: {message}\n{argumentsDone.ToJson()}\n{argumentsDone.ArgumentsToString()}");
+ OnFunctionArgumentsDone(dc, argumentsDone);
+ break;
+
+ case OpenAISessionCreated sessionCreated:
+ logger.LogInformation($"Session created: {sessionCreated.ToJson()}");
+ OnSessionCreated(dc);
+ SendResponseCreate(dc, OpenAIVoicesEnum.alloy, "Introduce urself. Keep it short.");
+ break;
+
+ case OpenAISessionUpdated sessionUpdated:
+ logger.LogInformation($"Session updated: {sessionUpdated.ToJson()}");
+ break;
+
+ case OpenAIResponseAudioTranscriptDone transcriptionDone:
+ logger.LogInformation($"Transcript done: {transcriptionDone.Transcript}");
+ break;
+
+ default:
+ //logger.LogInformation($"Data Channel {e.Type} message received.");
+ break;
+ }
+ });
+
+ if (serverEventModel.IsNone)
+ {
+ logger.LogWarning($"Failed to parse server event for: {message}");
+ }
+ }
+
+ ///
+ /// Sends a session update message to add the get weather demo function.
+ ///
+ private static void OnSessionCreated(RTCDataChannel dc)
+ {
+ var sessionUpdate = new OpenAISessionUpdate
+ {
+ EventID = Guid.NewGuid().ToString(),
+ Session = new OpenAISession
+ {
+ Model = OPENAI_MODEL,
+ Instructions = "You are a weather bot who favours brevity and accuracy.",
+ Tools = new System.Collections.Generic.List
+ {
+ new OpenAITool
+ {
+ Name = "get_weather",
+ Description = "Get the current weather.",
+ Parameters = new OpenAIToolParameters
+ {
+ Properties = new OpenAIToolProperties
+ {
+ Location = new OpenAIToolLocation
+ {
+ Type = "string"
+ }
+ },
+ Required = new System.Collections.Generic.List { "location" }
+ }
+ }
+ }
+ }
+ };
+
+ logger.LogInformation($"Sending OpenAI session update to data channel {dc.label}.");
+ logger.LogDebug(sessionUpdate.ToJson());
+
+ dc.send(sessionUpdate.ToJson());
+ }
+
+ private static void OnFunctionArgumentsDone(RTCDataChannel dc, OpenAIResponseFunctionCallArgumentsDone argsDone)
+ {
+ var result = argsDone.Name switch
+ {
+ "get_weather" => $"The weather in {argsDone.Arguments.GetNamedArgumentValue("location")} is sunny.",
+ _ => "Unknown Function."
+ };
+ logger.LogInformation($"Call {argsDone.Name} with args {argsDone.ArgumentsToString()} result {result}.");
+
+ var getWeatherResult = GetWeather(argsDone);
+ logger.LogDebug(getWeatherResult.ToJson());
+ dc.send(getWeatherResult.ToJson());
+
+ // Tell the AI to continue the conversation.
+ var responseCreate = new OpenAIResponseCreate
+ {
+ EventID = Guid.NewGuid().ToString(),
+ Response = new OpenAIResponseCreateResponse
+ {
+ Instructions = "Please give me the answer.",
+ }
+ };
+
+ dc.send(responseCreate.ToJson());
+ }
+
+ ///
+ /// The local function to call and return the result to the AI to continue the conversation.
+ ///
+ private static OpenAIConversationItemCreate GetWeather(OpenAIResponseFunctionCallArgumentsDone argsDone)
+ {
+ var location = argsDone.Arguments.GetNamedArgumentValue("location") ?? string.Empty;
+
+ var weather = location switch
+ {
+ string s when s.Contains("Canberra", StringComparison.OrdinalIgnoreCase) => "It's cloudy and 15 degrees.",
+ string s when s.Contains("Dublin", StringComparison.OrdinalIgnoreCase) => "It's raining and 7 degrees.",
+ string s when s.Contains("Hobart", StringComparison.OrdinalIgnoreCase) => "It's sunny and 25 degrees.",
+ string s when s.Contains("Melbourne", StringComparison.OrdinalIgnoreCase) => "It's cold and wet and 11 degrees.",
+ string s when s.Contains("Sydney", StringComparison.OrdinalIgnoreCase) => "It's humid and stormy and 30 degrees.",
+ string s when s.Contains("Perth", StringComparison.OrdinalIgnoreCase) => "It's hot and dry and 40 degrees.",
+ _ => "It's sunny and 20 degrees."
+ };
+
+ return new OpenAIConversationItemCreate
+ {
+ EventID = Guid.NewGuid().ToString(),
+ //PreviousItemID = argsDone.ItemID,
+ Item = new OpenAIConversationItem
+ {
+ //ID = Guid.NewGuid().ToString().Replace("-", string.Empty),
+ Type = OpenAIConversationConversationTypeEnum.function_call_output,
+ //Status = "completed",
+ CallID = argsDone.CallID,
+ //Name = argsDone.Name,
+ //Arguments = argsDone.ArgumentsToString(),
+ //Role = "tool",
+ Output = weather
+ }
+ };
+ }
+
+ ///
+ /// Sends a response create message to the OpenAI data channel to trigger the conversation.
+ ///
+ private static void SendResponseCreate(RTCDataChannel dc, OpenAIVoicesEnum voice, string message)
+ {
+ var responseCreate = new OpenAIResponseCreate
+ {
+ EventID = Guid.NewGuid().ToString(),
+ Response = new OpenAIResponseCreateResponse
+ {
+ Instructions = message,
+ Voice = voice.ToString()
+ }
+ };
+
+ logger.LogInformation($"Sending initial response create to first call data channel {dc.label}.");
+ //logger.LogDebug(responseCreate.ToJson());
+
+ dc.send(responseCreate.ToJson());
+ }
+
+ ///
+ /// Method to create the local peer connection instance and data channel.
+ ///
+ /// A semaphore that will get set when the data channel on the peer connection is opened. Since the data channel
+ /// can only be opened once the peer connection is open this indicates both are ready for use.
+ private static async Task CreatePeerConnection(SemaphoreSlim onConnectedSemaphore)
+ {
+ var pcConfig = new RTCConfiguration
+ {
+ X_UseRtpFeedbackProfile = true,
+ };
+
+ var peerConnection = new RTCPeerConnection(pcConfig);
+ var dataChannel = await peerConnection.createDataChannel(OPENAI_DATACHANNEL_NAME);
+
+ // Sink (speaker) only audio end point.
+ WindowsAudioEndPoint windowsAudioEP = new WindowsAudioEndPoint(new AudioEncoder(includeOpus: true), -1, -1, false, false);
+ windowsAudioEP.RestrictFormats(x => x.FormatName == "OPUS");
+ windowsAudioEP.OnAudioSinkError += err => logger.LogWarning($"Audio sink error. {err}.");
+ windowsAudioEP.OnAudioSourceEncodedSample += peerConnection.SendAudio;
+
+ MediaStreamTrack audioTrack = new MediaStreamTrack(windowsAudioEP.GetAudioSourceFormats(), MediaStreamStatusEnum.SendRecv);
+ peerConnection.addTrack(audioTrack);
+
+ peerConnection.OnAudioFormatsNegotiated += (audioFormats) =>
+ {
+ logger.LogDebug($"Audio format negotiated {audioFormats.First().FormatName}.");
+ windowsAudioEP.SetAudioSinkFormat(audioFormats.First());
+ windowsAudioEP.SetAudioSourceFormat(audioFormats.First());
+ };
+ //peerConnection.OnReceiveReport += RtpSession_OnReceiveReport;
+ //peerConnection.OnSendReport += RtpSession_OnSendReport;
+ peerConnection.OnTimeout += (mediaType) => logger.LogDebug($"Timeout on media {mediaType}.");
+ peerConnection.oniceconnectionstatechange += (state) => logger.LogDebug($"ICE connection state changed to {state}.");
+ peerConnection.onconnectionstatechange += async (state) =>
+ {
+ logger.LogDebug($"Peer connection connected changed to {state}.");
+
+ if (state == RTCPeerConnectionState.connected)
+ {
+ await windowsAudioEP.StartAudio();
+ await windowsAudioEP.StartAudioSink();
+ }
+ else if (state == RTCPeerConnectionState.closed || state == RTCPeerConnectionState.failed)
+ {
+ await windowsAudioEP.CloseAudio();
+ }
+ };
+
+ peerConnection.OnRtpPacketReceived += (IPEndPoint rep, SDPMediaTypesEnum media, RTPPacket rtpPkt) =>
+ {
+ //logger.LogDebug($"RTP {media} pkt received, SSRC {rtpPkt.Header.SyncSource}.");
+
+ if (media == SDPMediaTypesEnum.audio)
+ {
+ windowsAudioEP.GotAudioRtp(rep, rtpPkt.Header.SyncSource, rtpPkt.Header.SequenceNumber, rtpPkt.Header.Timestamp, rtpPkt.Header.PayloadType, rtpPkt.Header.MarkerBit == 1, rtpPkt.Payload);
+ }
+ };
+
+ dataChannel.onopen += () =>
+ {
+ logger.LogDebug("OpenAI data channel opened.");
+ onConnectedSemaphore.Release();
+ };
+
+ dataChannel.onclose += () => logger.LogDebug($"OpenAI data channel {dataChannel.label} closed.");
+
+ dataChannel.onmessage += OnDataChannelMessage;
+
+ return peerConnection;
+ }
+}
diff --git a/examples/OpenAIExamples/WebRTCOpenAILocalFunctions/WebRTCOpenAILocalFunctions.csproj b/examples/OpenAIExamples/WebRTCOpenAILocalFunctions/WebRTCOpenAILocalFunctions.csproj
new file mode 100755
index 000000000..be59b908d
--- /dev/null
+++ b/examples/OpenAIExamples/WebRTCOpenAILocalFunctions/WebRTCOpenAILocalFunctions.csproj
@@ -0,0 +1,25 @@
+
+
+
+ Exe
+ net8.0-windows10.0.17763.0
+ 12.0
+ enable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/AsteriskIce/AsteriskIce.csproj b/examples/SIPExamples/AsteriskIce/AsteriskIce.csproj
old mode 100644
new mode 100755
index df9d970ce..ebd41fcfb
--- a/examples/SIPExamples/AsteriskIce/AsteriskIce.csproj
+++ b/examples/SIPExamples/AsteriskIce/AsteriskIce.csproj
@@ -2,17 +2,20 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/AttendedTransfer/AttendedTransfer.csproj b/examples/SIPExamples/AttendedTransfer/AttendedTransfer.csproj
old mode 100644
new mode 100755
index d18a7c9e1..2168f863a
--- a/examples/SIPExamples/AttendedTransfer/AttendedTransfer.csproj
+++ b/examples/SIPExamples/AttendedTransfer/AttendedTransfer.csproj
@@ -2,17 +2,21 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
-
-
-
-
-
+
+
+
+
+
+
+
+
+
PreserveNewest
diff --git a/examples/SIPExamples/AttendedTransfer/Program.cs b/examples/SIPExamples/AttendedTransfer/Program.cs
index 3d7380a3e..0f63c68d2 100644
--- a/examples/SIPExamples/AttendedTransfer/Program.cs
+++ b/examples/SIPExamples/AttendedTransfer/Program.cs
@@ -80,10 +80,10 @@ static void Main()
var userAgent2 = new SIPUserAgent(sipTransport, null);
userAgent1.OnCallHungup += (dialog) => Log.LogInformation($"UA1: Call hungup by remote party.");
- userAgent1.ServerCallCancelled += (uas) => Log.LogInformation("UA1: Incoming call cancelled by caller.");
+ userAgent1.ServerCallCancelled += (uas, cancelReq) => Log.LogInformation("UA1: Incoming call cancelled by caller.");
userAgent2.OnCallHungup += (dialog) => Log.LogInformation($"UA2: Call hungup by remote party.");
- userAgent2.ServerCallCancelled += (uas) => Log.LogInformation("UA2: Incoming call cancelled by caller.");
+ userAgent2.ServerCallCancelled += (uas, cancelReq) => Log.LogInformation("UA2: Incoming call cancelled by caller.");
userAgent2.OnTransferNotify += (sipFrag) =>
{
diff --git a/examples/SIPExamples/CallHoldAndTransfer/CallHoldAndTransfer.csproj b/examples/SIPExamples/CallHoldAndTransfer/CallHoldAndTransfer.csproj
old mode 100644
new mode 100755
index 28ac79060..2475b3e1a
--- a/examples/SIPExamples/CallHoldAndTransfer/CallHoldAndTransfer.csproj
+++ b/examples/SIPExamples/CallHoldAndTransfer/CallHoldAndTransfer.csproj
@@ -2,15 +2,19 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/CustomAudioCodec/CustomAudioCodec.csproj b/examples/SIPExamples/CustomAudioCodec/CustomAudioCodec.csproj
old mode 100644
new mode 100755
index 14dce7e08..2475b3e1a
--- a/examples/SIPExamples/CustomAudioCodec/CustomAudioCodec.csproj
+++ b/examples/SIPExamples/CustomAudioCodec/CustomAudioCodec.csproj
@@ -2,16 +2,19 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/CustomAudioCodec/Program.cs b/examples/SIPExamples/CustomAudioCodec/Program.cs
index f67179108..709041057 100644
--- a/examples/SIPExamples/CustomAudioCodec/Program.cs
+++ b/examples/SIPExamples/CustomAudioCodec/Program.cs
@@ -26,7 +26,6 @@
using SIPSorcery.SIP.App;
using SIPSorceryMedia.Windows;
using SIPSorceryMedia.Abstractions;
-using GroovyCodecs.G729;
namespace demo
{
diff --git a/examples/SIPExamples/GetStarted/GetStarted.csproj b/examples/SIPExamples/GetStarted/GetStarted.csproj
old mode 100644
new mode 100755
index 28ac79060..7111f172f
--- a/examples/SIPExamples/GetStarted/GetStarted.csproj
+++ b/examples/SIPExamples/GetStarted/GetStarted.csproj
@@ -2,15 +2,20 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
+ 9.0
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/GetStarted/Program.cs b/examples/SIPExamples/GetStarted/Program.cs
old mode 100644
new mode 100755
index 06b42bba1..796edd62d
--- a/examples/SIPExamples/GetStarted/Program.cs
+++ b/examples/SIPExamples/GetStarted/Program.cs
@@ -12,38 +12,30 @@
// 31 Dec 2019 Aaron Clauson Changed from an OPTIONS example to a call example.
// 20 Feb 2020 Aaron Clauson Switched to RtpAVSession and simplified.
// 02 Feb 2021 Aaron Clauson Removed logging to make main logic more obvious.
+// 14 Jan 2024 Aaron Clauson Updated target from netcoreapp3.1 to net8.
//
// License:
// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
//-----------------------------------------------------------------------------
using System;
-using System.Threading.Tasks;
using SIPSorcery.SIP.App;
using SIPSorcery.Media;
using SIPSorceryMedia.Windows;
+using SIPSorceryMedia.Abstractions;
-namespace SIPGetStarted
-{
- class Program
- {
- private static string DESTINATION = "helloworld@sipsorcery.cloud";
+const string DESTINATION = "music@iptel.org";
+Console.WriteLine("SIP Get Started");
- static async Task Main()
- {
- Console.WriteLine("SIP Get Started");
+var userAgent = new SIPUserAgent();
+var winAudio = new WindowsAudioEndPoint(new AudioEncoder());
+winAudio.RestrictFormats(x => x.Codec == AudioCodecsEnum.PCMU);
+var voipMediaSession = new VoIPMediaSession(winAudio.ToMediaEndPoints());
+voipMediaSession.AcceptRtpFromAny = true;
- var userAgent = new SIPUserAgent();
- var winAudio = new WindowsAudioEndPoint(new AudioEncoder());
- var voipMediaSession = new VoIPMediaSession(winAudio.ToMediaEndPoints());
- voipMediaSession.AcceptRtpFromAny = true;
+// Place the call and wait for the result.
+bool callResult = await userAgent.Call(DESTINATION, null, null, voipMediaSession);
+Console.WriteLine($"Call result {(callResult ? "success" : "failure")}.");
- // Place the call and wait for the result.
- bool callResult = await userAgent.Call(DESTINATION, null, null, voipMediaSession);
- Console.WriteLine($"Call result {((callResult) ? "success" : "failure")}.");
-
- Console.WriteLine("Press any key to hangup and exit.");
- Console.ReadLine();
- }
- }
-}
+Console.WriteLine("Press any key to hangup and exit.");
+Console.ReadLine();
diff --git a/examples/SIPExamples/GetStartedVideo/GetStartedVideo.csproj b/examples/SIPExamples/GetStartedVideo/GetStartedVideo.csproj
old mode 100644
new mode 100755
index 6b53484f4..6dce6a3ec
--- a/examples/SIPExamples/GetStartedVideo/GetStartedVideo.csproj
+++ b/examples/SIPExamples/GetStartedVideo/GetStartedVideo.csproj
@@ -1,19 +1,23 @@
-
+
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
true
true
true
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/GetStartedVideo/Program.cs b/examples/SIPExamples/GetStartedVideo/Program.cs
old mode 100644
new mode 100755
index 01f1ccf91..1da7812c4
--- a/examples/SIPExamples/GetStartedVideo/Program.cs
+++ b/examples/SIPExamples/GetStartedVideo/Program.cs
@@ -14,6 +14,7 @@
// History:
// 21 Feb 2020 Aaron Clauson Created, Dublin, Ireland.
// 02 Feb 2021 Aaron Clauson Simplified by switching to video test pattern only.
+// 30 Sep 2024 Aaron Clauson Can't find a SIP echo server that supports video calls :(
//
// License:
// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
@@ -40,7 +41,12 @@ namespace demo
{
class Program
{
- private static string DESTINATION = "echo@sipsorcery.cloud";
+ // Need to find a new echo endpoint since the sipsorcery cloud was turned off to save $$. 14 Jan 2024.
+ //private static string DESTINATION = "echo@iptel.org"; // Doesn't support video.
+ //private static string DESTINATION = "3333@sip2sip.info"; // Doesn't support video.
+ //private static string DESTINATION = "echo@linphone.org"; // Authentication required.
+ //private static string DESTINATION = "echo@onsip.com"; // Not found.
+ private static string DESTINATION = "???";
private static int VIDEO_FRAME_WIDTH = 640;
private static int VIDEO_FRAME_HEIGHT = 480;
diff --git a/examples/SIPExamples/GetStartedWebSocket/GetStartedWebSocket.csproj b/examples/SIPExamples/GetStartedWebSocket/GetStartedWebSocket.csproj
old mode 100644
new mode 100755
index 6f507b364..8e7e2cb1f
--- a/examples/SIPExamples/GetStartedWebSocket/GetStartedWebSocket.csproj
+++ b/examples/SIPExamples/GetStartedWebSocket/GetStartedWebSocket.csproj
@@ -2,16 +2,20 @@
Exe
- netcoreapp3.1
+ net8.0
-
-
-
-
+
+
+
+
+
+
+
+
PreserveNewest
diff --git a/examples/SIPExamples/NotifierClient/NotifierClient.csproj b/examples/SIPExamples/NotifierClient/NotifierClient.csproj
old mode 100644
new mode 100755
index 33982a8ed..68ec55e9e
--- a/examples/SIPExamples/NotifierClient/NotifierClient.csproj
+++ b/examples/SIPExamples/NotifierClient/NotifierClient.csproj
@@ -2,14 +2,18 @@
Exe
- net5.0
+ net8.0
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/PlaySounds/PlaySounds.csproj b/examples/SIPExamples/PlaySounds/PlaySounds.csproj
old mode 100644
new mode 100755
index 54e82766a..bff9252a4
--- a/examples/SIPExamples/PlaySounds/PlaySounds.csproj
+++ b/examples/SIPExamples/PlaySounds/PlaySounds.csproj
@@ -2,17 +2,21 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
-
-
-
-
-
+
+
+
+
+
+
+
+
+
PreserveNewest
diff --git a/examples/SIPExamples/PlaySounds/Program.cs b/examples/SIPExamples/PlaySounds/Program.cs
old mode 100644
new mode 100755
index bf50309ae..4708db24f
--- a/examples/SIPExamples/PlaySounds/Program.cs
+++ b/examples/SIPExamples/PlaySounds/Program.cs
@@ -19,6 +19,7 @@
using System;
using System.IO;
+using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
@@ -34,7 +35,7 @@ namespace demo
{
class Program
{
- private static string DESTINATION = "aaron@192.168.0.147";
+ private static string DESTINATION = "aaron@127.0.0.1:5080";
private static SIPEndPoint OUTBOUND_PROXY = null;
private const string WELCOME_8K = "Sounds/hellowelcome8k.raw";
@@ -63,7 +64,8 @@ static async Task Main()
//voipMediaSession.AudioLocalTrack.Capabilities.Clear();
//voipMediaSession.AudioLocalTrack.Capabilities.Add(
// new SDPAudioVideoMediaFormat(new AudioFormat(AudioCodecsEnum.L16, 118, 8000)));
-
+ voipMediaSession.OnAudioFormatsNegotiated += (formats) => voipMediaSession.AudioExtrasSource.SetAudioSourceFormat(formats.First());
+
Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e)
{
e.Cancel = true;
@@ -163,6 +165,11 @@ static async Task Main()
sipTransport.Shutdown();
}
+ private static void VoipMediaSession_OnAudioFormatsNegotiated(System.Collections.Generic.List obj)
+ {
+ throw new NotImplementedException();
+ }
+
///
/// Adds a console logger. Can be omitted if internal SIPSorcery debug and warning messages are not required.
///
diff --git a/examples/SIPExamples/ReceiveDtmf/Program.cs b/examples/SIPExamples/ReceiveDtmf/Program.cs
new file mode 100755
index 000000000..ce661060b
--- /dev/null
+++ b/examples/SIPExamples/ReceiveDtmf/Program.cs
@@ -0,0 +1,91 @@
+//-----------------------------------------------------------------------------
+// Filename: Program.cs
+//
+// Description: Sample program of how to receive DTMF tones using RTP events
+// as specified in RFC2833.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 12 Jan 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Linq;
+using System.Net;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
+using Serilog;
+using Serilog.Extensions.Logging;
+using SIPSorcery.Media;
+using SIPSorcery.Net;
+using SIPSorcery.SIP;
+using SIPSorcery.SIP.App;
+using TinyJson;
+
+namespace demo
+{
+ class Program
+ {
+ private static int SIP_LISTEN_PORT = 5060;
+
+ private static Microsoft.Extensions.Logging.ILogger Log = NullLogger.Instance;
+
+ private static SIPTransport _sipTransport;
+
+ static void Main()
+ {
+ Console.WriteLine("SIPSorcery Receive DTMF Demo");
+
+ Log = AddConsoleLogger();
+
+ _sipTransport = new SIPTransport();
+ _sipTransport.AddSIPChannel(new SIPUDPChannel(new IPEndPoint(IPAddress.Any, SIP_LISTEN_PORT)));
+
+ var userAgent = new SIPUserAgent(_sipTransport, null, true);
+ userAgent.ServerCallCancelled += (uas, cancelReq) => Log.LogDebug("Incoming call cancelled by remote party.");
+ userAgent.OnCallHungup += (dialog) => Log.LogDebug("Call hungup.");
+ userAgent.OnIncomingCall += async (ua, req) =>
+ {
+ Log.LogDebug($"SDP Offer:\r\n{req.Body}");
+
+ VoIPMediaSession voipMediaSession = new VoIPMediaSession();
+ voipMediaSession.AcceptRtpFromAny = true;
+
+ var uas = userAgent.AcceptCall(req);
+
+ await userAgent.Answer(uas, voipMediaSession);
+
+ var sdpAnswer = voipMediaSession.CreateAnswer(IPAddress.Loopback);
+
+ Log.LogDebug($"SDP Answer:\r\n{sdpAnswer.ToString()}");
+ };
+ userAgent.OnDtmfTone += (tone, duration) => Log.LogInformation($"DTMF tone {tone} of duration {duration}ms received.");
+
+ Console.WriteLine("press any key to exit...");
+ Console.Read();
+
+ // Clean up.
+ _sipTransport.Shutdown();
+ }
+
+ ///
+ /// Adds a console logger. Can be omitted if internal SIPSorcery debug and warning messages are not required.
+ ///
+ private static Microsoft.Extensions.Logging.ILogger AddConsoleLogger()
+ {
+ var serilogLogger = new LoggerConfiguration()
+ .Enrich.FromLogContext()
+ .MinimumLevel.Is(Serilog.Events.LogEventLevel.Debug)
+ .WriteTo.Console()
+ .CreateLogger();
+ var factory = new SerilogLoggerFactory(serilogLogger);
+ SIPSorcery.LogFactory.Set(factory);
+ return factory.CreateLogger();
+ }
+ }
+}
diff --git a/examples/SIPExamples/ReceiveDtmf/ReceiveDtmf.csproj b/examples/SIPExamples/ReceiveDtmf/ReceiveDtmf.csproj
new file mode 100755
index 000000000..db5cf0dac
--- /dev/null
+++ b/examples/SIPExamples/ReceiveDtmf/ReceiveDtmf.csproj
@@ -0,0 +1,20 @@
+
+
+
+ Exe
+ net8.0-windows10.0.17763.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/RecordCall/RecordCall.csproj b/examples/SIPExamples/RecordCall/RecordCall.csproj
old mode 100644
new mode 100755
index e43b05f89..dbc905abf
--- a/examples/SIPExamples/RecordCall/RecordCall.csproj
+++ b/examples/SIPExamples/RecordCall/RecordCall.csproj
@@ -2,16 +2,20 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/RecordIncomingCall/Program.cs b/examples/SIPExamples/RecordIncomingCall/Program.cs
index 865e412e0..5dff7087d 100644
--- a/examples/SIPExamples/RecordIncomingCall/Program.cs
+++ b/examples/SIPExamples/RecordIncomingCall/Program.cs
@@ -51,7 +51,7 @@ static void Main()
_sipTransport.AddSIPChannel(new SIPUDPChannel(new IPEndPoint(IPAddress.Any, SIP_LISTEN_PORT)));
var userAgent = new SIPUserAgent(_sipTransport, null, true);
- userAgent.ServerCallCancelled += (uas) => Log.LogDebug("Incoming call cancelled by remote party.");
+ userAgent.ServerCallCancelled += (uas, cancelReq) => Log.LogDebug("Incoming call cancelled by remote party.");
userAgent.OnCallHungup += (dialog) => _waveFile?.Close();
userAgent.OnIncomingCall += async (ua, req) =>
{
diff --git a/examples/SIPExamples/RecordIncomingCall/RecordIncomingCall.csproj b/examples/SIPExamples/RecordIncomingCall/RecordIncomingCall.csproj
old mode 100644
new mode 100755
index e43b05f89..dbc905abf
--- a/examples/SIPExamples/RecordIncomingCall/RecordIncomingCall.csproj
+++ b/examples/SIPExamples/RecordIncomingCall/RecordIncomingCall.csproj
@@ -2,16 +2,20 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/SIPCallResampleAudio/SIPCallResampleAudio.csproj b/examples/SIPExamples/SIPCallResampleAudio/SIPCallResampleAudio.csproj
old mode 100644
new mode 100755
index 4dc4b4b2a..db5cf0dac
--- a/examples/SIPExamples/SIPCallResampleAudio/SIPCallResampleAudio.csproj
+++ b/examples/SIPExamples/SIPCallResampleAudio/SIPCallResampleAudio.csproj
@@ -2,15 +2,19 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/SIPCallServer/Program.cs b/examples/SIPExamples/SIPCallServer/Program.cs
old mode 100644
new mode 100755
index e87bc2bfd..22125c587
--- a/examples/SIPExamples/SIPCallServer/Program.cs
+++ b/examples/SIPExamples/SIPCallServer/Program.cs
@@ -376,7 +376,7 @@ private static async Task OnRequest(SIPEndPoint localSIPEndPoint, SIPEndPoint re
SIPUserAgent ua = new SIPUserAgent(_sipTransport, null);
ua.OnCallHungup += OnHangup;
- ua.ServerCallCancelled += (uas) => Log.LogDebug("Incoming call cancelled by remote party.");
+ ua.ServerCallCancelled += (uas, cancelReq) => Log.LogDebug("Incoming call cancelled by remote party.");
ua.OnDtmfTone += (key, duration) => OnDtmfTone(ua, key, duration);
ua.OnRtpEvent += (evt, hdr) => Log.LogDebug($"rtp event {evt.EventID}, duration {evt.Duration}, end of event {evt.EndOfEvent}, timestamp {hdr.Timestamp}, marker {hdr.MarkerBit}.");
//ua.OnTransactionTraceMessage += (tx, msg) => Log.LogDebug($"uas tx {tx.TransactionId}: {msg}");
@@ -456,10 +456,10 @@ private static void StartRegistrations(SIPTransport sipTransport, List Log.LogError($"{uri.ToString()}: {err}");
- regUserAgent.RegistrationTemporaryFailure += (uri, msg) => Log.LogWarning($"{uri.ToString()}: {msg}");
- regUserAgent.RegistrationRemoved += (uri) => Log.LogError($"{uri.ToString()} registration failed.");
- regUserAgent.RegistrationSuccessful += (uri) => Log.LogInformation($"{uri.ToString()} registration succeeded.");
+ regUserAgent.RegistrationFailed += (uri, resp, err) => Log.LogError($"{uri.ToString()}: {err}");
+ regUserAgent.RegistrationTemporaryFailure += (uri, resp, msg) => Log.LogWarning($"{uri.ToString()}: {msg}");
+ regUserAgent.RegistrationRemoved += (uri, resp) => Log.LogError($"{uri.ToString()} registration failed.");
+ regUserAgent.RegistrationSuccessful += (uri, resp) => Log.LogInformation($"{uri.ToString()} registration succeeded.");
// Start the thread to perform the initial registration and then periodically resend it.
regUserAgent.Start();
@@ -483,4 +483,4 @@ private static Microsoft.Extensions.Logging.ILogger AddConsoleLogger()
return factory.CreateLogger();
}
}
-}
\ No newline at end of file
+}
diff --git a/examples/SIPExamples/SIPCallServer/SIPCallServer.csproj b/examples/SIPExamples/SIPCallServer/SIPCallServer.csproj
old mode 100644
new mode 100755
index 6f507b364..8e7e2cb1f
--- a/examples/SIPExamples/SIPCallServer/SIPCallServer.csproj
+++ b/examples/SIPExamples/SIPCallServer/SIPCallServer.csproj
@@ -2,16 +2,20 @@
Exe
- netcoreapp3.1
+ net8.0
-
-
-
-
+
+
+
+
+
+
+
+
PreserveNewest
diff --git a/examples/SIPExamples/SIPExamples.sln b/examples/SIPExamples/SIPExamples.sln
index 2f9c5f111..25ec80374 100644
--- a/examples/SIPExamples/SIPExamples.sln
+++ b/examples/SIPExamples/SIPExamples.sln
@@ -41,6 +41,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CustomAudioCodec", "CustomA
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NotifierClient", "NotifierClient\NotifierClient.csproj", "{3839C073-00D1-45AD-9C1E-7E4C4719BFCA}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SIPSorcery", "..\..\src\SIPSorcery.csproj", "{DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReceiveDtmf", "ReceiveDtmf\ReceiveDtmf.csproj", "{428BFA9A-F082-4444-9E04-30AD60B5E794}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -279,6 +283,30 @@ Global
{3839C073-00D1-45AD-9C1E-7E4C4719BFCA}.Release|x64.Build.0 = Release|Any CPU
{3839C073-00D1-45AD-9C1E-7E4C4719BFCA}.Release|x86.ActiveCfg = Release|Any CPU
{3839C073-00D1-45AD-9C1E-7E4C4719BFCA}.Release|x86.Build.0 = Release|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Debug|x64.Build.0 = Debug|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Debug|x86.Build.0 = Debug|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Release|x64.ActiveCfg = Release|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Release|x64.Build.0 = Release|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Release|x86.ActiveCfg = Release|Any CPU
+ {DE20DB0F-AB95-47DD-B51F-A2A7EC12FA01}.Release|x86.Build.0 = Release|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Debug|x64.Build.0 = Debug|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Debug|x86.Build.0 = Debug|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Release|Any CPU.Build.0 = Release|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Release|x64.ActiveCfg = Release|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Release|x64.Build.0 = Release|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Release|x86.ActiveCfg = Release|Any CPU
+ {428BFA9A-F082-4444-9E04-30AD60B5E794}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/examples/SIPExamples/SIPProxy/Program.cs b/examples/SIPExamples/SIPProxy/Program.cs
index 11d36b0f6..c236c86e4 100644
--- a/examples/SIPExamples/SIPProxy/Program.cs
+++ b/examples/SIPExamples/SIPProxy/Program.cs
@@ -169,9 +169,9 @@ private static async Task SIPTransportRequestReceived(SIPEndPoint localSIPEndPoi
if (sipRequest.Header.Contact != null && sipRequest.Header.Contact.Count > 0)
{
- int expiry = sipRequest.Header.Contact[0].Expires > 0 ? sipRequest.Header.Contact[0].Expires : sipRequest.Header.Expires;
+ long expiry = sipRequest.Header.Contact[0].Expires > 0 ? sipRequest.Header.Contact[0].Expires : sipRequest.Header.Expires;
var sipAccount = new SIPAccount(sipRequest.Header.From.FromURI.User, sipRequest.Header.From.FromURI.Host);
- SIPAccountBinding binding = new SIPAccountBinding(sipAccount, sipRequest.Header.Contact[0].ContactURI, remoteEndPoint, localSIPEndPoint, expiry);
+ SIPAccountBinding binding = new SIPAccountBinding(sipAccount, sipRequest.Header.Contact[0].ContactURI, remoteEndPoint, localSIPEndPoint, (int)expiry);
if (_sipRegistrations.ContainsKey(sipAccount.SIPUsername))
{
diff --git a/examples/SIPExamples/SIPProxy/SIPProxy.csproj b/examples/SIPExamples/SIPProxy/SIPProxy.csproj
old mode 100644
new mode 100755
index 8b11a643c..2f5ab8c78
--- a/examples/SIPExamples/SIPProxy/SIPProxy.csproj
+++ b/examples/SIPExamples/SIPProxy/SIPProxy.csproj
@@ -2,16 +2,20 @@
Exe
- netcoreapp3.1
+ net8.0
StunServerExample
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/SendDtmf/Program.cs b/examples/SIPExamples/SendDtmf/Program.cs
old mode 100644
new mode 100755
index e8911846c..f7ca56042
--- a/examples/SIPExamples/SendDtmf/Program.cs
+++ b/examples/SIPExamples/SendDtmf/Program.cs
@@ -1,7 +1,7 @@
//-----------------------------------------------------------------------------
// Filename: Program.cs
//
-// Description: An example of how top send DTMF tones in band (with specific RTP
+// Description: An example of how to send DTMF tones in band (with specific RTP
// packets) as specified in RFC2833.
//
// Author(s):
@@ -20,7 +20,7 @@
//
// This example calls a destination (represented by DEFAULT_DESTINATION_SIP_URI)
// and expects a SIP agent capable of receiving DTMF with RFC2833 to be listening.
-// What the receiving SIP does with the received DTMF is up to it. A good example
+// What the receiving SIP ageent does with the received DTMF is up to it. A good example
// is to playback the presses via speech synthesis. The dialplan below is an
// example of how to do that with Asterisk.
//
@@ -43,15 +43,16 @@
using Serilog;
using Serilog.Extensions.Logging;
using SIPSorcery.Media;
+using SIPSorcery.Net;
using SIPSorcery.SIP;
using SIPSorcery.SIP.App;
-using SIPSorceryMedia.Windows;
namespace SIPSorcery
{
class Program
{
- private static readonly string DEFAULT_DESTINATION_SIP_URI = "sip:*63@192.168.0.48"; // Custom Asterisk dialplan to speak back DTMF tones.
+ //private static readonly string DEFAULT_DESTINATION_SIP_URI = "sip:*63@192.168.0.48"; // Custom Asterisk dialplan to speak back DTMF tones.
+ private static readonly string DEFAULT_DESTINATION_SIP_URI = "sip:aaron@127.0.0.1:5060";
private static Microsoft.Extensions.Logging.ILogger Log = NullLogger.Instance;
@@ -67,8 +68,7 @@ static async Task Main()
var sipTransport = new SIPTransport();
var userAgent = new SIPUserAgent(sipTransport, null);
- var winAudioEP = new WindowsAudioEndPoint(new AudioEncoder());
- var voipMediaSession = new VoIPMediaSession(winAudioEP.ToMediaEndPoints());
+ var voipMediaSession = new VoIPMediaSession();
Console.WriteLine($"Calling {DEFAULT_DESTINATION_SIP_URI}.");
@@ -90,10 +90,13 @@ static async Task Main()
await Task.Delay(1000);
// Send the DTMF tones.
+ Console.WriteLine("Sending DTMF tone 5.");
await userAgent.SendDtmf(0x05);
await Task.Delay(2000);
+ Console.WriteLine("Sending DTMF tone 9.");
await userAgent.SendDtmf(0x09);
await Task.Delay(2000);
+ Console.WriteLine("Sending DTMF tone 2.");
await userAgent.SendDtmf(0x02);
await Task.Delay(2000);
@@ -115,46 +118,6 @@ static async Task Main()
sipTransport.Shutdown();
}
- ///
- /// Enable detailed SIP log messages.
- ///
- private static void EnableTraceLogs(SIPTransport sipTransport)
- {
- sipTransport.SIPRequestInTraceEvent += (localEP, remoteEP, req) =>
- {
- Log.LogDebug($"Request received: {localEP}<-{remoteEP}");
- Log.LogDebug(req.ToString());
- };
-
- sipTransport.SIPRequestOutTraceEvent += (localEP, remoteEP, req) =>
- {
- Log.LogDebug($"Request sent: {localEP}->{remoteEP}");
- Log.LogDebug(req.ToString());
- };
-
- sipTransport.SIPResponseInTraceEvent += (localEP, remoteEP, resp) =>
- {
- Log.LogDebug($"Response received: {localEP}<-{remoteEP}");
- Log.LogDebug(resp.ToString());
- };
-
- sipTransport.SIPResponseOutTraceEvent += (localEP, remoteEP, resp) =>
- {
- Log.LogDebug($"Response sent: {localEP}->{remoteEP}");
- Log.LogDebug(resp.ToString());
- };
-
- sipTransport.SIPRequestRetransmitTraceEvent += (tx, req, count) =>
- {
- Log.LogDebug($"Request retransmit {count} for request {req.StatusLine}, initial transmit {DateTime.Now.Subtract(tx.InitialTransmit).TotalSeconds.ToString("0.###")}s ago.");
- };
-
- sipTransport.SIPResponseRetransmitTraceEvent += (tx, resp, count) =>
- {
- Log.LogDebug($"Response retransmit {count} for response {resp.ShortDescription}, initial transmit {DateTime.Now.Subtract(tx.InitialTransmit).TotalSeconds.ToString("0.###")}s ago.");
- };
- }
-
///
/// Adds a console logger. Can be omitted if internal SIPSorcery debug and warning messages are not required.
///
diff --git a/examples/SIPExamples/SendDtmf/SendDtmf.csproj b/examples/SIPExamples/SendDtmf/SendDtmf.csproj
old mode 100644
new mode 100755
index 28ac79060..53ab2ad83
--- a/examples/SIPExamples/SendDtmf/SendDtmf.csproj
+++ b/examples/SIPExamples/SendDtmf/SendDtmf.csproj
@@ -2,15 +2,18 @@
Exe
- netcoreapp3.1
+ net8
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/UserAgentClient/Program.cs b/examples/SIPExamples/UserAgentClient/Program.cs
old mode 100644
new mode 100755
index 543a26340..5b7011d41
--- a/examples/SIPExamples/UserAgentClient/Program.cs
+++ b/examples/SIPExamples/UserAgentClient/Program.cs
@@ -29,14 +29,13 @@
using SIPSorcery.Net;
using SIPSorcery.SIP;
using SIPSorcery.SIP.App;
-using SIPSorceryMedia.Abstractions;
using SIPSorceryMedia.Windows;
namespace demo
{
class Program
{
- private static readonly string DEFAULT_DESTINATION_SIP_URI = "sips:helloworld@sipsorcery.cloud";
+ private static readonly string DEFAULT_DESTINATION_SIP_URI = "sip:music@iptel.org";
private static Microsoft.Extensions.Logging.ILogger Log = NullLogger.Instance;
@@ -51,7 +50,7 @@ static void Main(string[] args)
bool isCallHungup = false;
bool hasCallFailed = false;
- Log = AddConsoleLogger(LogEventLevel.Verbose);
+ Log = AddConsoleLogger(LogEventLevel.Debug);
SIPURI callUri = SIPURI.ParseSIPURI(DEFAULT_DESTINATION_SIP_URI);
if (args?.Length > 0)
@@ -81,8 +80,8 @@ static void Main(string[] args)
sipTransport.EnableTraceLogs();
var audioSession = new WindowsAudioEndPoint(new AudioEncoder());
- audioSession.RestrictFormats(x => x.Codec == AudioCodecsEnum.PCMA || x.Codec == AudioCodecsEnum.PCMU);
- //audioSession.RestrictFormats(x => x.Codec == AudioCodecsEnum.G722);
+ //audioSession.RestrictFormats(x => x.Codec == AudioCodecsEnum.PCMA || x.Codec == AudioCodecsEnum.PCMU);
+ //audioSession.RestrictFormats(x => x.Codec == AudioCodecsEnum.PCMA);
var rtpSession = new VoIPMediaSession(audioSession.ToMediaEndPoints());
var offerSDP = rtpSession.CreateOffer(preferIPv6 ? IPAddress.IPv6Any : IPAddress.Any);
diff --git a/examples/SIPExamples/UserAgentClient/UserAgentClient.csproj b/examples/SIPExamples/UserAgentClient/UserAgentClient.csproj
old mode 100644
new mode 100755
index 28ac79060..5489917a3
--- a/examples/SIPExamples/UserAgentClient/UserAgentClient.csproj
+++ b/examples/SIPExamples/UserAgentClient/UserAgentClient.csproj
@@ -2,15 +2,19 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/UserAgentRegister/Program.cs b/examples/SIPExamples/UserAgentRegister/Program.cs
old mode 100644
new mode 100755
index 76b1628df..b2615ee01
--- a/examples/SIPExamples/UserAgentRegister/Program.cs
+++ b/examples/SIPExamples/UserAgentRegister/Program.cs
@@ -81,10 +81,10 @@ static void Main(string[] args)
var regUserAgent = new SIPRegistrationUserAgent(sipTransport, username, password, server, expiry);
// Event handlers for the different stages of the registration.
- regUserAgent.RegistrationFailed += (uri, err) => Log.LogWarning($"{uri}: {err}");
- regUserAgent.RegistrationTemporaryFailure += (uri, msg) => Log.LogWarning($"{uri}: {msg}");
- regUserAgent.RegistrationRemoved += (uri) => Log.LogWarning($"{uri} registration failed.");
- regUserAgent.RegistrationSuccessful += (uri) => Log.LogInformation($"{uri} registration succeeded.");
+ regUserAgent.RegistrationFailed += (uri, resp, err) => Log.LogWarning($"{uri}: {err}");
+ regUserAgent.RegistrationTemporaryFailure += (uri, resp, msg) => Log.LogWarning($"{uri}: {msg}");
+ regUserAgent.RegistrationRemoved += (uri, resp) => Log.LogWarning($"{uri} registration failed.");
+ regUserAgent.RegistrationSuccessful += (uri, resp) => Log.LogInformation($"{uri} registration succeeded.");
// Start the thread to perform the initial registration and then periodically resend it.
regUserAgent.Start();
diff --git a/examples/SIPExamples/UserAgentRegister/UserAgentRegister.csproj b/examples/SIPExamples/UserAgentRegister/UserAgentRegister.csproj
old mode 100644
new mode 100755
index f4584a146..68ec55e9e
--- a/examples/SIPExamples/UserAgentRegister/UserAgentRegister.csproj
+++ b/examples/SIPExamples/UserAgentRegister/UserAgentRegister.csproj
@@ -2,14 +2,18 @@
Exe
- netcoreapp3.1
+ net8.0
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/examples/SIPExamples/UserAgentServer/Program.cs b/examples/SIPExamples/UserAgentServer/Program.cs
old mode 100644
new mode 100755
index 1f09b53c0..14ea364b8
--- a/examples/SIPExamples/UserAgentServer/Program.cs
+++ b/examples/SIPExamples/UserAgentServer/Program.cs
@@ -74,6 +74,9 @@ class Program
//private static int SIP_SECURE_WEBSOCKET_LISTEN_PORT = 443;
private static string SIPS_CERTIFICATE_PATH = "localhost.pfx";
+ private const string WELCOME_8K = "Sounds/hellowelcome8k.raw";
+ private const string GOODBYE_16K = "Sounds/goodbye16k.raw";
+
private static Microsoft.Extensions.Logging.ILogger Log = NullLogger.Instance;
static void Main(string[] args)
@@ -150,8 +153,9 @@ static void Main(string[] args)
if (offerSdp.Media.Any(x => x.Media == SDPMediaTypesEnum.audio && x.MediaFormats.Any(x => x.Key == (int)SDPWellKnownMediaFormatsEnum.PCMU)))
{
Log.LogDebug($"Client offer contained PCMU audio codec.");
- AudioExtrasSource extrasSource = new AudioExtrasSource(new AudioEncoder(), new AudioSourceOptions { AudioSource = AudioSourcesEnum.Music });
- rtpSession = new VoIPMediaSession(new MediaEndPoints { AudioSource = extrasSource });
+ //AudioExtrasSource extrasSource = new AudioExtrasSource(new AudioEncoder(), new AudioSourceOptions { AudioSource = AudioSourcesEnum.Music });
+ //rtpSession = new VoIPMediaSession(new MediaEndPoints { AudioSource = extrasSource });
+ rtpSession = new VoIPMediaSession();
rtpSession.AcceptRtpFromAny = true;
var setResult = rtpSession.SetRemoteDescription(SdpType.offer, offerSdp);
@@ -175,7 +179,7 @@ static void Main(string[] args)
UASInviteTransaction uasTransaction = new UASInviteTransaction(sipTransport, sipRequest, null);
uas = new SIPServerUserAgent(sipTransport, null, uasTransaction, null);
- uas.CallCancelled += (uasAgent) =>
+ uas.CallCancelled += (uasAgent, canelReq) =>
{
rtpCts?.Cancel();
rtpSession.Close(null);
@@ -242,18 +246,37 @@ static void Main(string[] args)
};
// Task to handle user key presses.
- Task.Run(() =>
+ Task.Run(async () =>
{
try
{
while (!exitMre.WaitOne(0))
{
var keyProps = Console.ReadKey();
+
+ if (keyProps.KeyChar == 'w')
+ {
+ Console.WriteLine();
+ Console.WriteLine("Welcome requested by user...");
+
+ if(rtpSession?.IsStarted == true &&
+ rtpSession?.IsClosed == false)
+ {
+ await rtpSession.AudioExtrasSource.SendAudioFromStream(new FileStream(WELCOME_8K, FileMode.Open), AudioSamplingRatesEnum.Rate8KHz);
+ }
+ }
+
if (keyProps.KeyChar == 'h' || keyProps.KeyChar == 'q')
{
Console.WriteLine();
Console.WriteLine("Hangup requested by user...");
+ if (rtpSession?.IsStarted == true &&
+ rtpSession?.IsClosed == false)
+ {
+ await rtpSession.AudioExtrasSource.SendAudioFromStream(new FileStream(GOODBYE_16K, FileMode.Open), AudioSamplingRatesEnum.Rate16KHz);
+ }
+
Hangup(uas).Wait();
rtpSession?.Close(null);
diff --git a/examples/SIPExamples/UserAgentServer/Sounds/goodbye16k.raw b/examples/SIPExamples/UserAgentServer/Sounds/goodbye16k.raw
new file mode 100644
index 000000000..6dd2b752b
Binary files /dev/null and b/examples/SIPExamples/UserAgentServer/Sounds/goodbye16k.raw differ
diff --git a/examples/SIPExamples/UserAgentServer/Sounds/hellowelcome16k.raw b/examples/SIPExamples/UserAgentServer/Sounds/hellowelcome16k.raw
new file mode 100644
index 000000000..9777ac647
Binary files /dev/null and b/examples/SIPExamples/UserAgentServer/Sounds/hellowelcome16k.raw differ
diff --git a/examples/SIPExamples/UserAgentServer/Sounds/hellowelcome8k.raw b/examples/SIPExamples/UserAgentServer/Sounds/hellowelcome8k.raw
new file mode 100644
index 000000000..b5b9650de
Binary files /dev/null and b/examples/SIPExamples/UserAgentServer/Sounds/hellowelcome8k.raw differ
diff --git a/examples/SIPExamples/UserAgentServer/UserAgentServer.csproj b/examples/SIPExamples/UserAgentServer/UserAgentServer.csproj
old mode 100644
new mode 100755
index 6f507b364..67a6e0547
--- a/examples/SIPExamples/UserAgentServer/UserAgentServer.csproj
+++ b/examples/SIPExamples/UserAgentServer/UserAgentServer.csproj
@@ -2,17 +2,21 @@
Exe
- netcoreapp3.1
+ net8.0
-
-
-
-
+
+
+
+
-
+
+
+
+
+
PreserveNewest
diff --git a/examples/SIPExamples/VideoPhoneCmdLine/Program.cs b/examples/SIPExamples/VideoPhoneCmdLine/Program.cs
old mode 100644
new mode 100755
index d53b72210..5cf535e49
--- a/examples/SIPExamples/VideoPhoneCmdLine/Program.cs
+++ b/examples/SIPExamples/VideoPhoneCmdLine/Program.cs
@@ -10,6 +10,8 @@
//
// History:
// 23 Dec 2020 Aaron Clauson Created, Dublin, Ireland.
+// 30 Sep 2024 Aaron Clauson Broken :(. Needs investigation.
+// 15 Oct 2024 Aaron Clauson Fixed. Was just missing FFmpeg initialise call.
//
// License:
// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
@@ -21,14 +23,14 @@
// dotnet run -- --tp
//
// Calling application:
-// dotnet run --no-build -- --dst=127.0.0.1:5080 --tp
+// dotnet run --dst=127.0.0.1:5080 --tp
//
// Usage - with two webcams:
// Listening application:
// dotnet run
//
// Calling application:
-// dotnet run --no-build -- --dst=127.0.0.1:5080 --cam=1
+// dotnet run --dst=127.0.0.1:5080 --cam=1
//-----------------------------------------------------------------------------
using System;
@@ -87,6 +89,9 @@ public class DecoderVideoSink : IVideoSink
private MediaFormatManager _formatManager;
public event VideoSinkSampleDecodedDelegate OnVideoSinkDecodedSample;
+#pragma warning disable CS0067
+ public event VideoSinkSampleDecodedFasterDelegate OnVideoSinkDecodedSampleFaster;
+#pragma warning restore CS0067
public DecoderVideoSink(IVideoEncoder videoDecoder)
{
@@ -151,6 +156,8 @@ static async Task Main(string[] args)
ManualResetEvent exitMRE = new ManualResetEvent(false);
ManualResetEvent waitForCallMre = new ManualResetEvent(false);
+ SIPSorceryMedia.FFmpeg.FFmpegInit.Initialise(SIPSorceryMedia.FFmpeg.FfmpegLogLevelEnum.AV_LOG_VERBOSE, null, Log);
+
var parseResult = Parser.Default.ParseArguments(args);
_options = (parseResult as Parsed)?.Value;
@@ -283,7 +290,7 @@ static async Task Main(string[] args)
if (!_options.NoAudio)
{
windowsAudioEndPoint = new WindowsAudioEndPoint(new AudioEncoder());
- windowsAudioEndPoint.RestrictFormats(x => x.Codec == AudioCodecsEnum.G722);
+ windowsAudioEndPoint.RestrictFormats(x => x.Codec == AudioCodecsEnum.PCMU || x.Codec == AudioCodecsEnum.PCMA);
}
MediaEndPoints mediaEndPoints = null;
diff --git a/examples/SIPExamples/VideoPhoneCmdLine/VideoPhoneCmdLine.csproj b/examples/SIPExamples/VideoPhoneCmdLine/VideoPhoneCmdLine.csproj
old mode 100644
new mode 100755
index c559a67d7..cfe162ba8
--- a/examples/SIPExamples/VideoPhoneCmdLine/VideoPhoneCmdLine.csproj
+++ b/examples/SIPExamples/VideoPhoneCmdLine/VideoPhoneCmdLine.csproj
@@ -1,22 +1,26 @@
-
+
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
true
true
true
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/SIPScenarios/BlindTransferScenario/Target/Program.cs b/examples/SIPScenarios/BlindTransferScenario/Target/Program.cs
old mode 100644
new mode 100755
index a1e3f1c54..2c288da16
--- a/examples/SIPScenarios/BlindTransferScenario/Target/Program.cs
+++ b/examples/SIPScenarios/BlindTransferScenario/Target/Program.cs
@@ -56,7 +56,7 @@ static void Main()
EnableTraceLogs(_sipTransport);
var userAgent = new SIPUserAgent(_sipTransport, null);
- userAgent.ServerCallCancelled += (uas) => Log.LogDebug("Incoming call cancelled by remote party.");
+ userAgent.ServerCallCancelled += (uas, cancelReq) => Log.LogDebug("Incoming call cancelled by remote party.");
userAgent.OnCallHungup += (dialog) => Log.LogDebug("Call hungup by remote party.");
userAgent.OnIncomingCall += async (ua, req) =>
{
diff --git a/examples/SIPScenarios/BlindTransferScenario/Target/Target.csproj b/examples/SIPScenarios/BlindTransferScenario/Target/Target.csproj
old mode 100644
new mode 100755
index bc13f4c2a..6a25d987f
--- a/examples/SIPScenarios/BlindTransferScenario/Target/Target.csproj
+++ b/examples/SIPScenarios/BlindTransferScenario/Target/Target.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ net8.0
diff --git a/examples/SIPScenarios/BlindTransferScenario/Transferee/Program.cs b/examples/SIPScenarios/BlindTransferScenario/Transferee/Program.cs
old mode 100644
new mode 100755
index 41a1d35cc..bee390e56
--- a/examples/SIPScenarios/BlindTransferScenario/Transferee/Program.cs
+++ b/examples/SIPScenarios/BlindTransferScenario/Transferee/Program.cs
@@ -56,7 +56,7 @@ static void Main()
EnableTraceLogs(_sipTransport);
var userAgent = new SIPUserAgent(_sipTransport, null);
- userAgent.ServerCallCancelled += (uas) => Log.LogDebug("Incoming call cancelled by remote party.");
+ userAgent.ServerCallCancelled += (uas, cancelReq) => Log.LogDebug("Incoming call cancelled by remote party.");
userAgent.OnCallHungup += (dialog) => Log.LogDebug("Call hungup by remote party.");
userAgent.OnIncomingCall += async (ua, req) =>
{
diff --git a/examples/SIPScenarios/BlindTransferScenario/Transferee/Transferee.csproj b/examples/SIPScenarios/BlindTransferScenario/Transferee/Transferee.csproj
old mode 100644
new mode 100755
index bc13f4c2a..6a25d987f
--- a/examples/SIPScenarios/BlindTransferScenario/Transferee/Transferee.csproj
+++ b/examples/SIPScenarios/BlindTransferScenario/Transferee/Transferee.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ net8.0
diff --git a/examples/SIPScenarios/BlindTransferScenario/Transferor/Transferor.csproj b/examples/SIPScenarios/BlindTransferScenario/Transferor/Transferor.csproj
old mode 100644
new mode 100755
index fd352c10b..0e4c04b78
--- a/examples/SIPScenarios/BlindTransferScenario/Transferor/Transferor.csproj
+++ b/examples/SIPScenarios/BlindTransferScenario/Transferor/Transferor.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ net8.0
diff --git a/examples/SIPScenarios/LoadTestScenario/LoadClient/LoadClient.csproj b/examples/SIPScenarios/LoadTestScenario/LoadClient/LoadClient.csproj
old mode 100644
new mode 100755
index fd352c10b..0e4c04b78
--- a/examples/SIPScenarios/LoadTestScenario/LoadClient/LoadClient.csproj
+++ b/examples/SIPScenarios/LoadTestScenario/LoadClient/LoadClient.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ net8.0
diff --git a/examples/SIPScenarios/LoadTestScenario/LoadClient/Program.cs b/examples/SIPScenarios/LoadTestScenario/LoadClient/Program.cs
old mode 100644
new mode 100755
index 3b231d79d..7be493ff4
--- a/examples/SIPScenarios/LoadTestScenario/LoadClient/Program.cs
+++ b/examples/SIPScenarios/LoadTestScenario/LoadClient/Program.cs
@@ -41,6 +41,7 @@ class Program
{
private static string TARGET_DST = "sip:127.0.0.1";
private static int TIMEOUT_MILLISECONDS = 5000;
+ private static int CALL_COUNT = 1; // 100;
private static Microsoft.Extensions.Logging.ILogger Log = NullLogger.Instance;
@@ -62,7 +63,7 @@ static async Task Main()
int successCount = 0;
- for (int i = 0; i < 100; i++)
+ for (int i = 0; i < CALL_COUNT; i++)
{
bool success = await PlaceCall(exitCts.Token);
@@ -82,6 +83,9 @@ static async Task Main()
//Task.Run(() => OnKeyPress(exitCts));
//exitCts.Token.WaitHandle.WaitOne();
+ // Give any call hangups time to complete.
+ await Task.Delay(500);
+
Log.LogInformation("Exiting...");
}
diff --git a/examples/SIPScenarios/LoadTestScenario/LoadServer/LoadServer.csproj b/examples/SIPScenarios/LoadTestScenario/LoadServer/LoadServer.csproj
old mode 100644
new mode 100755
index 855731491..23569683c
--- a/examples/SIPScenarios/LoadTestScenario/LoadServer/LoadServer.csproj
+++ b/examples/SIPScenarios/LoadTestScenario/LoadServer/LoadServer.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ net8.0
diff --git a/examples/SIPScenarios/LoadTestScenario/LoadServer/Program.cs b/examples/SIPScenarios/LoadTestScenario/LoadServer/Program.cs
old mode 100644
new mode 100755
index 6864273b9..dbca24a08
--- a/examples/SIPScenarios/LoadTestScenario/LoadServer/Program.cs
+++ b/examples/SIPScenarios/LoadTestScenario/LoadServer/Program.cs
@@ -238,7 +238,7 @@ private static async Task OnRequest(SIPEndPoint localSIPEndPoint, SIPEndPoint re
SIPUserAgent ua = new SIPUserAgent(_sipTransport, null);
ua.OnCallHungup += OnHangup;
- ua.ServerCallCancelled += (uas) => Log.LogDebug("Incoming call cancelled by remote party.");
+ ua.ServerCallCancelled += (uas, cancelReq) => Log.LogDebug("Incoming call cancelled by remote party.");
ua.OnDtmfTone += (key, duration) => OnDtmfTone(ua, key, duration);
ua.OnRtpEvent += (evt, hdr) => Log.LogDebug($"rtp event {evt.EventID}, duration {evt.Duration}, end of event {evt.EndOfEvent}, timestamp {hdr.Timestamp}, marker {hdr.MarkerBit}.");
ua.OnTransactionTraceMessage += (tx, msg) => Log.LogDebug($"uas tx {tx.TransactionId}: {msg}");
@@ -280,7 +280,12 @@ private static async Task OnRequest(SIPEndPoint localSIPEndPoint, SIPEndPoint re
}
else
{
+ var stopWatch = System.Diagnostics.Stopwatch.StartNew();
+
await ua.SendDtmf(dtmfByte);
+
+ stopWatch.Stop();
+ Log.LogDebug($"DTMF {dtmfByte} sent in {stopWatch.ElapsedMilliseconds}ms.");
}
dtmfCode /= 10;
@@ -422,4 +427,4 @@ private static void EnableTraceLogs(SIPTransport sipTransport, bool fullSIP)
};
}
}
-}
\ No newline at end of file
+}
diff --git a/examples/Softphone/readme.txt b/examples/Softphone/README.md
old mode 100644
new mode 100755
similarity index 53%
rename from examples/Softphone/readme.txt
rename to examples/Softphone/README.md
index 0bac45a42..1f07ff512
--- a/examples/Softphone/readme.txt
+++ b/examples/Softphone/README.md
@@ -1,33 +1,34 @@
-Readme for SIPSorcery Softphone
+## SIPSorcery Softphone Demo Application
-Date: 18 Feb 2016
+Date: 18 Feb 2016
+Updated: 30 Nov 2024
Author: Aaron Clauson
-URL: https://github.com/sipsorcery/sipsorcery
+URL: https://github.com/sipsorcery-org/sipsorcery/tree/master/examples/Softphone
-The SIPSorcery softphone is a demo application to prototype
-using .Net as a suitable runtime environment for a softphone application requiring
-deterministic audio sampling and playback, it's not.
+The SIPSorcery softphone is a demo application for the SIP stack in the SIPSorcery library.
+It supports audio calls and can also receive video calls. It is far from being
+a production application and is intended to be used as a learning tool.
-Settings that can be adjusted in the softphone.exe.config.
+## Audio
-Audio:
-------
-
-The bad news is that the softphone is barely usable due to the inability of .Net to
+~~The bad news is that the softphone is barely usable due to the inability of .Net to
reliably deliver audio samples from the microphone. What tends to happen is that as
soon as incoming RTP packets start arriving the .Net runtime has periods where it's
busy doing its garbage collection and other housekeeping and the microphone samples
jump from a 20ms period up to a 100 or 200ms period. The softphone supplied audio
will still be usable at the remote end of the call but it will be jumpy and possibly
-have clicks and static.
+have clicks and static.~~
-I've only implemented support for the PCMU (G711 ULAW) codec so if the remote SIP
+~~I've only implemented support for the PCMU (G711 ULAW) codec so if the remote SIP
device doesn't support it a call will not be possible.
As far as audio devices go the default input and output devices are used and there
-is no user interface option facility to change that. Can be done via code.
+is no user interface option facility to change that. Can be done via code.~~
+
+Since the above was written the audio performance in .NET has improved a lot and is
+now usable. The softphone now supports the PCMU, PCMA and G722 audio codecs and the
+VP8 video codec..
-Settings:
----------
+## Settings
STUNServerHostname - STUN is a protocol used to determine a machine's public IP address.
This STUN server setting needs to be a public STUN server so that the application can
@@ -44,13 +45,18 @@ DnsServer - Optional, a custom DNS server to use. Relevant if default DNS server
The sipsockets node can be used to configure the SIP transport layer. This is optional
and if the node is left commented then default values will be used.
-Calling:
---------
-
-The softphone supports SIP calls. For authenticated SIP calls check the desired radio button,
-enter the destination number in the text box and click the Call button.
-
-It's also possible to place anonymous SIP calls that won't use any preset SIP account information.
-To place an anonymous SIP call check the SIP radio button and then enter a SIP address in the
-text box, e.g. music@iptel.org. The softphone will identify that it's a full SIP address and place
-a call to it directly.
+## Calling
+
+The softphone supports SIP calls. For authenticated SIP calls the SIP credentials in the previous section
+can be used.
+
+## Video Call Testing
+
+A handy way to test the video calling feature of this application is to use the VideoPhoneCmdLine example
+see, https://github.com/sipsorcery-org/sipsorcery/blob/master/examples/SIPExamples/VideoPhoneCmdLine/Program.cs.
+
+Command line to use to place a video call to this softphone application:
+
+````
+dotnet run --dst=127.0.0.1:5060 --tp
+````
\ No newline at end of file
diff --git a/examples/Softphone/SIPSorcery.SoftPhone.csproj b/examples/Softphone/SIPSorcery.SoftPhone.csproj
old mode 100644
new mode 100755
index 6b1b8352e..7ac6bfe63
--- a/examples/Softphone/SIPSorcery.SoftPhone.csproj
+++ b/examples/Softphone/SIPSorcery.SoftPhone.csproj
@@ -2,10 +2,11 @@
WinExe
- net6.0-windows10.0.22000.0
+ net8.0-windows10.0.17763.0
true
true
softphone
+ 9.0
@@ -14,13 +15,12 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
@@ -30,4 +30,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/examples/Softphone/SIPSorcery.SoftPhone.sln b/examples/Softphone/SIPSorcery.SoftPhone.sln
index 6380cb800..30faf405b 100644
--- a/examples/Softphone/SIPSorcery.SoftPhone.sln
+++ b/examples/Softphone/SIPSorcery.SoftPhone.sln
@@ -1,10 +1,12 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29519.87
+# Visual Studio Version 17
+VisualStudioVersion = 17.11.35208.52
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SIPSorcery.SoftPhone", "SIPSorcery.SoftPhone.csproj", "{286D90B8-C7A6-43ED-9C8A-423B4A681F7D}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SIPSorcery", "..\..\src\SIPSorcery.csproj", "{8A44DBB1-D640-4A80-AF8C-289C33B76725}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -27,6 +29,18 @@ Global
{286D90B8-C7A6-43ED-9C8A-423B4A681F7D}.Release|x64.Build.0 = Release|Any CPU
{286D90B8-C7A6-43ED-9C8A-423B4A681F7D}.Release|x86.ActiveCfg = Release|Any CPU
{286D90B8-C7A6-43ED-9C8A-423B4A681F7D}.Release|x86.Build.0 = Release|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Debug|x64.Build.0 = Debug|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Debug|x86.Build.0 = Debug|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Release|x64.ActiveCfg = Release|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Release|x64.Build.0 = Release|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Release|x86.ActiveCfg = Release|Any CPU
+ {8A44DBB1-D640-4A80-AF8C-289C33B76725}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/examples/Softphone/Signalling/SIPClient.cs b/examples/Softphone/Signalling/SIPClient.cs
old mode 100644
new mode 100755
index 0f3e6897e..19d442cd3
--- a/examples/Softphone/Signalling/SIPClient.cs
+++ b/examples/Softphone/Signalling/SIPClient.cs
@@ -97,7 +97,7 @@ public SIPClient(SIPTransport sipTransport)
///
/// Places an outgoing SIP call.
///
- /// The SIP URI to place a call to. The destination can be a full SIP URI in which case the all will
+ /// The SIP URI to place a call to. The destination can be a full SIP URI in which case the call will
/// be placed anonymously directly to that URI. Alternatively it can be just the user portion of a URI in which case it will
/// be sent to the configured SIP server.
public async Task Call(string destination)
@@ -291,9 +291,6 @@ public void Shutdown()
///
/// Creates the media session to use with the SIP call.
///
- /// The audio source options to set when the call is first
- /// answered. These options can be adjusted afterwards to do things like put play
- /// on hold music etc.
/// A new media session object.
private VoIPMediaSession CreateMediaSession()
{
@@ -365,7 +362,7 @@ private void CallFinished(SIPDialogue dialogue)
///
/// An incoming call was cancelled by the caller.
///
- private void IncomingCallCancelled(ISIPServerUserAgent uas)
+ private void IncomingCallCancelled(ISIPServerUserAgent uas, SIPRequest cancelRequest)
{
//SetText(m_signallingStatus, "incoming call cancelled for: " + uas.CallDestination + ".");
CallFinished(null);
diff --git a/examples/Softphone/Softphone.xaml b/examples/Softphone/Softphone.xaml
index f019da1f1..02e0a254c 100644
--- a/examples/Softphone/Softphone.xaml
+++ b/examples/Softphone/Softphone.xaml
@@ -51,7 +51,7 @@
-
+
diff --git a/examples/Softphone/Softphone.xaml.cs b/examples/Softphone/Softphone.xaml.cs
old mode 100644
new mode 100755
index ef89da49a..fc543e531
--- a/examples/Softphone/Softphone.xaml.cs
+++ b/examples/Softphone/Softphone.xaml.cs
@@ -138,7 +138,7 @@ private async Task Initialize()
}
///
- /// Application closing, shutdown the SIP, Google Voice and STUN clients.
+ /// Application closing, shutdown the SIP and STUN clients.
///
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
diff --git a/examples/StunServer/StunServer.csproj b/examples/StunServer/StunServer.csproj
index d06f00c32..720268fb2 100644
--- a/examples/StunServer/StunServer.csproj
+++ b/examples/StunServer/StunServer.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ net8.0
StunServerExample
@@ -10,7 +10,10 @@
-
+
+
+
+
diff --git a/examples/StunServer/StunServer.sln b/examples/StunServer/StunServer.sln
index 08c6068f5..1d36a9b88 100644
--- a/examples/StunServer/StunServer.sln
+++ b/examples/StunServer/StunServer.sln
@@ -1,10 +1,12 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29911.98
+# Visual Studio Version 17
+VisualStudioVersion = 17.11.35208.52
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StunServer", "StunServer.csproj", "{747D12B6-97A5-4547-B5D2-3E9BC457333A}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SIPSorcery", "..\..\src\SIPSorcery.csproj", "{8F5D5CF9-9C46-4EDF-83E2-139B07AA5C37}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -15,6 +17,10 @@ Global
{747D12B6-97A5-4547-B5D2-3E9BC457333A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{747D12B6-97A5-4547-B5D2-3E9BC457333A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{747D12B6-97A5-4547-B5D2-3E9BC457333A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8F5D5CF9-9C46-4EDF-83E2-139B07AA5C37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8F5D5CF9-9C46-4EDF-83E2-139B07AA5C37}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8F5D5CF9-9C46-4EDF-83E2-139B07AA5C37}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8F5D5CF9-9C46-4EDF-83E2-139B07AA5C37}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/examples/WebRTCExamples/FfmpegToWebRTC/FfmpegToWebRTC.csproj b/examples/WebRTCExamples/FfmpegToWebRTC/FfmpegToWebRTC.csproj
old mode 100644
new mode 100755
index c1516c48c..f82d54d47
--- a/examples/WebRTCExamples/FfmpegToWebRTC/FfmpegToWebRTC.csproj
+++ b/examples/WebRTCExamples/FfmpegToWebRTC/FfmpegToWebRTC.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ net8.0
@@ -11,13 +11,16 @@
-
+
-
+
+
+
+
PreserveNewest
diff --git a/examples/WebRTCExamples/FfmpegToWebRTC/Program.cs b/examples/WebRTCExamples/FfmpegToWebRTC/Program.cs
index c7cf8f558..820154f23 100644
--- a/examples/WebRTCExamples/FfmpegToWebRTC/Program.cs
+++ b/examples/WebRTCExamples/FfmpegToWebRTC/Program.cs
@@ -56,9 +56,10 @@ protected override async void OnOpen()
class Program
{
- //private const string LOCALHOST_CERTIFICATE_PATH = "certs/localhost.pfx";
+ private const uint SSRC_REMOTE_VIDEO = 38106908;
private const int WEBSOCKET_PORT = 8081;
- private const string FFMPEG_DEFAULT_COMMAND = "ffmpeg -re -f lavfi -i testsrc=size=640x480:rate=10 -vcodec {0} -pix_fmt yuv420p -strict experimental -g 1 -f rtp rtp://127.0.0.1:{1} -sdp_file {2}";
+
+ private const string FFMPEG_DEFAULT_COMMAND = "ffmpeg -re -f lavfi -i testsrc=size=640x480:rate=10 {0} -pix_fmt yuv420p -strict experimental -g 1 -ssrc {2} -f rtp rtp://127.0.0.1:{1} -sdp_file {3}";
private const string FFMPEG_SDP_FILE = "ffmpeg.sdp";
private const int FFMPEG_DEFAULT_RTP_PORT = 5020;
@@ -67,12 +68,14 @@ class Program
/// - vp8
/// - vp9
/// - h264
+ /// - libx265
/// Note if you change this option you will need to delete the ffmpeg.sdp file.
///
- private const string FFMPEG_VP8_CODEC = "vp8";
- private const string FFMPEG_VP9_CODEC = "vp9";
- private const string FFMPEG_H264_CODEC = "h264";
- private const string FFMPEG_DEFAULT_CODEC = FFMPEG_VP9_CODEC;
+ private const string FFMPEG_VP8_CODEC = "-vcodec vp8";
+ private const string FFMPEG_VP9_CODEC = "-vcodec vp9";
+ private const string FFMPEG_H264_CODEC = "-vcodec h264";
+ private const string FFMPEG_H265_CODEC = "-c:v libx265";
+ private const string FFMPEG_DEFAULT_CODEC = FFMPEG_H265_CODEC;
private static Microsoft.Extensions.Logging.ILogger logger = NullLogger.Instance;
@@ -91,6 +94,7 @@ static async Task Main(string[] args)
case FFMPEG_VP8_CODEC:
case FFMPEG_VP9_CODEC:
case FFMPEG_H264_CODEC:
+ case FFMPEG_H265_CODEC:
videoCodec = args[0].ToLower();
break;
@@ -104,7 +108,7 @@ static async Task Main(string[] args)
logger = AddConsoleLogger();
- string ffmpegCommand = String.Format(FFMPEG_DEFAULT_COMMAND, videoCodec, FFMPEG_DEFAULT_RTP_PORT, FFMPEG_SDP_FILE);
+ string ffmpegCommand = String.Format(FFMPEG_DEFAULT_COMMAND, videoCodec, FFMPEG_DEFAULT_RTP_PORT, SSRC_REMOTE_VIDEO, FFMPEG_SDP_FILE);
// Start web socket.
Console.WriteLine("Starting web socket server...");
@@ -119,11 +123,11 @@ static async Task Main(string[] args)
client.OnMessageReceived += WebSocketMessageReceived;
});
- if(File.Exists(FFMPEG_SDP_FILE))
+ if (File.Exists(FFMPEG_SDP_FILE))
{
- var sdp = SDP.ParseSDPDescription(File.ReadAllText(FFMPEG_SDP_FILE));
- var videoAnn = sdp.Media.Single(x => x.Media == SDPMediaTypesEnum.video);
- if(videoAnn.MediaFormats.Values.First().Name().ToLower() != videoCodec)
+
+ string codecName = GetCodecName();
+ if (!videoCodec.Contains(codecName))
{
logger.LogWarning($"Removing existing ffmpeg SDP file {FFMPEG_SDP_FILE} due to codec mismatch.");
File.Delete(FFMPEG_SDP_FILE);
@@ -154,6 +158,20 @@ static async Task Main(string[] args)
_webSocketServer.Stop();
}
+ private static string GetCodecName()
+ {
+ var sdp = SDP.ParseSDPDescription(File.ReadAllText(FFMPEG_SDP_FILE));
+ var videoAnn = sdp.Media.Single(x => x.Media == SDPMediaTypesEnum.video);
+ var codec = videoAnn.MediaFormats.Values.First().Name().ToLower();
+ if (codec == "h265")
+ {
+ return "libx265";
+ }else
+ {
+ return codec;
+ }
+ }
+
private static async Task StartFfmpegListener(string sdpPath, CancellationToken cancel)
{
while (!File.Exists(FFMPEG_SDP_FILE) && !cancel.IsCancellationRequested)
@@ -171,7 +189,9 @@ private static async Task StartFfmpegListener(string sdpPath, CancellationToken
_ffmpegListener = new RTPSession(false, false, false, IPAddress.Loopback, FFMPEG_DEFAULT_RTP_PORT);
_ffmpegListener.AcceptRtpFromAny = true;
+
MediaStreamTrack videoTrack = new MediaStreamTrack(SDPMediaTypesEnum.video, false, new List { _ffmpegVideoFormat }, MediaStreamStatusEnum.RecvOnly);
+ videoTrack.Ssrc = SSRC_REMOTE_VIDEO; // /!\ Need to set the correct SSRC in order to accept RTP stream
_ffmpegListener.addTrack(videoTrack);
_ffmpegListener.SetRemoteDescription(SIP.App.SdpType.answer, sdp);
@@ -212,7 +232,6 @@ private static async Task SendOffer(WebSocketContext context)
await pc.setLocalDescription(offerInit);
logger.LogDebug($"Sending SDP offer to client {context.UserEndPoint}.");
-
context.WebSocket.Send(offerInit.sdp);
return pc;
diff --git a/examples/WebRTCExamples/FfmpegToWebRTC/webrtc.html b/examples/WebRTCExamples/FfmpegToWebRTC/webrtc.html
index ab5ae2cda..52244b631 100644
--- a/examples/WebRTCExamples/FfmpegToWebRTC/webrtc.html
+++ b/examples/WebRTCExamples/FfmpegToWebRTC/webrtc.html
@@ -4,7 +4,7 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/SIPToWebRtcBridge/Program.cs b/examples/WebRTCExamples/SIPToWebRtcBridge/Program.cs
index d8f93d819..9c490c247 100644
--- a/examples/WebRTCExamples/SIPToWebRtcBridge/Program.cs
+++ b/examples/WebRTCExamples/SIPToWebRtcBridge/Program.cs
@@ -86,7 +86,7 @@ static void Main()
Log.LogInformation($"Call hungup by remote party.");
exitCts.Cancel();
};
- userAgent.ServerCallCancelled += (uas) => Log.LogInformation("Incoming call cancelled by caller.");
+ userAgent.ServerCallCancelled += (uas, cancelReq) => Log.LogInformation("Incoming call cancelled by caller.");
userAgent.OnIncomingCall += async (ua, req) =>
{
Log.LogInformation($"Incoming call request from {req.RemoteSIPEndPoint}: {req.StatusLine}.");
diff --git a/examples/WebRTCExamples/SIPToWebRtcBridge/SIPToWebRtcBridge.csproj b/examples/WebRTCExamples/SIPToWebRtcBridge/SIPToWebRtcBridge.csproj
old mode 100644
new mode 100755
index 3e1e2ff8e..ff3d16764
--- a/examples/WebRTCExamples/SIPToWebRtcBridge/SIPToWebRtcBridge.csproj
+++ b/examples/WebRTCExamples/SIPToWebRtcBridge/SIPToWebRtcBridge.csproj
@@ -2,15 +2,18 @@
Exe
- netcoreapp3.1
+ net8.0
-
+
+
+
+
diff --git a/examples/WebRTCExamples/SIPToWebRtcBridgeVideo/Program.cs b/examples/WebRTCExamples/SIPToWebRtcBridgeVideo/Program.cs
old mode 100644
new mode 100755
index 594ca8727..717caa786
--- a/examples/WebRTCExamples/SIPToWebRtcBridgeVideo/Program.cs
+++ b/examples/WebRTCExamples/SIPToWebRtcBridgeVideo/Program.cs
@@ -75,7 +75,7 @@ async static Task Main()
var sipTransport = new SIPTransport();
sipTransport.AddSIPChannel(new SIPUDPChannel(new IPEndPoint(IPAddress.Any, SIP_LISTEN_PORT)));
- //EnableTraceLogs(sipTransport);
+ EnableTraceLogs(sipTransport);
// Create a SIP user agent to receive a call from a remote SIP client.
// Wire up event handlers for the different stages of the call.
@@ -87,7 +87,7 @@ async static Task Main()
Log.LogInformation($"Call hungup by remote party.");
exitCts.Cancel();
};
- userAgent.ServerCallCancelled += (uas) => Log.LogInformation("Incoming call cancelled by caller.");
+ userAgent.ServerCallCancelled += (uas, cancelReq) => Log.LogInformation("Incoming call cancelled by caller.");
userAgent.OnIncomingCall += async (ua, req) =>
{
Log.LogInformation($"Incoming call request from {req.RemoteSIPEndPoint}: {req.StatusLine}.");
@@ -188,7 +188,7 @@ private static Task CreatePeerConnection()
pc.onconnectionstatechange += (state) =>
{
Log.LogDebug($"Peer connection state change to {state}.");
- RequestSIPAgentKeyFrame(_rtpSession);
+ //RequestSIPAgentKeyFrame(_rtpSession);
};
pc.OnRtpPacketReceived += ForwardAudioToSIP;
pc.OnVideoFrameReceived += ForwardVideoFrameToSIP; // ForwardVideoFrameToPeerConnection;
diff --git a/examples/WebRTCExamples/SIPToWebRtcBridgeVideo/SIPToWebRtcBridgeVideo.csproj b/examples/WebRTCExamples/SIPToWebRtcBridgeVideo/SIPToWebRtcBridgeVideo.csproj
old mode 100644
new mode 100755
index 3e1e2ff8e..e0ccfe159
--- a/examples/WebRTCExamples/SIPToWebRtcBridgeVideo/SIPToWebRtcBridgeVideo.csproj
+++ b/examples/WebRTCExamples/SIPToWebRtcBridgeVideo/SIPToWebRtcBridgeVideo.csproj
@@ -2,15 +2,18 @@
Exe
- netcoreapp3.1
+ net8.0
-
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCAspNetMvc/WebRTCAspNet.csproj b/examples/WebRTCExamples/WebRTCAspNetMvc/WebRTCAspNet.csproj
old mode 100644
new mode 100755
index bbc755c32..775607e8a
--- a/examples/WebRTCExamples/WebRTCAspNetMvc/WebRTCAspNet.csproj
+++ b/examples/WebRTCExamples/WebRTCAspNetMvc/WebRTCAspNet.csproj
@@ -1,16 +1,19 @@
- net5
+ net8.0
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCClient/Program.cs b/examples/WebRTCExamples/WebRTCClient/Program.cs
index d03a8e9e2..176808168 100644
--- a/examples/WebRTCExamples/WebRTCClient/Program.cs
+++ b/examples/WebRTCExamples/WebRTCClient/Program.cs
@@ -30,11 +30,15 @@
using SIPSorcery.Net;
using SIPSorceryMedia.Windows;
using SIPSorceryMedia.Abstractions;
+using SIPSorceryMedia.FFmpeg;
namespace demo
{
class Program
{
+ private const string ffmpegLibFullPath = @"C:\ffmpeg-4.4.1-full_build-shared\bin"; // /!\ A valid path to FFmpeg library
+
+
private const string REST_SIGNALING_SERVER = "https://sipsorcery.cloud/api/webrtcsignal";
private const string REST_SIGNALING_MY_USER = "con";
private const string REST_SIGNALING_THEIR_USER = "bro";
@@ -75,10 +79,28 @@ private static Task CreatePeerConnection()
{
var peerConnection = new RTCPeerConnection(null);
- var videoEP = new SIPSorceryMedia.Encoders.VideoEncoderEndPoint();
+ //var videoEP = new SIPSorceryMedia.Encoders.VideoEncoderEndPoint();
//var videoEP = new SIPSorceryMedia.Windows.WindowsEncoderEndPoint();
- //var videoEP = new FFmpegVideoEndPoint();
+
+ SIPSorceryMedia.FFmpeg.FFmpegInit.Initialise(SIPSorceryMedia.FFmpeg.FfmpegLogLevelEnum.AV_LOG_VERBOSE, ffmpegLibFullPath, logger);
+ var videoEP = new FFmpegVideoEndPoint();
+
videoEP.RestrictFormats(format => format.Codec == VideoCodecsEnum.VP8);
+ videoEP.OnVideoSinkDecodedSampleFaster += (RawImage rawImage) =>
+ {
+ _form.BeginInvoke(new Action(() =>
+ {
+
+ if (rawImage.PixelFormat == SIPSorceryMedia.Abstractions.VideoPixelFormatsEnum.Rgb)
+ {
+ unsafe
+ {
+ Bitmap bmpImage = new Bitmap(rawImage.Width, rawImage.Height, rawImage.Stride, PixelFormat.Format24bppRgb, rawImage.Sample);
+ _picBox.Image = bmpImage;
+ }
+ }
+ }));
+ };
videoEP.OnVideoSinkDecodedSample += (byte[] bmp, uint width, uint height, int stride, VideoPixelFormatsEnum pixelFormat) =>
{
@@ -98,13 +120,14 @@ private static Task CreatePeerConnection()
// Sink (speaker) only audio end point.
WindowsAudioEndPoint windowsAudioEP = new WindowsAudioEndPoint(new AudioEncoder(), -1, -1, true, false);
+
MediaStreamTrack audioTrack = new MediaStreamTrack(windowsAudioEP.GetAudioSinkFormats(), MediaStreamStatusEnum.RecvOnly);
peerConnection.addTrack(audioTrack);
MediaStreamTrack videoTrack = new MediaStreamTrack(videoEP.GetVideoSinkFormats(), MediaStreamStatusEnum.RecvOnly);
peerConnection.addTrack(videoTrack);
peerConnection.OnVideoFrameReceived += videoEP.GotVideoFrame;
- peerConnection.OnVideoFormatsNegotiated += (formats) =>
+ peerConnection.OnVideoFormatsNegotiated += (formats) =>
videoEP.SetVideoSinkFormat(formats.First());
peerConnection.OnAudioFormatsNegotiated += (formats) =>
windowsAudioEP.SetAudioSinkFormat(formats.First());
diff --git a/examples/WebRTCExamples/WebRTCClient/WebRTCClient.csproj b/examples/WebRTCExamples/WebRTCClient/WebRTCClient.csproj
old mode 100644
new mode 100755
index 1dc30a036..f42ac2b87
--- a/examples/WebRTCExamples/WebRTCClient/WebRTCClient.csproj
+++ b/examples/WebRTCExamples/WebRTCClient/WebRTCClient.csproj
@@ -1,22 +1,25 @@
-
+
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763
true
true
true
-
-
+
+
-
-
-
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCClientVP8Net/Program.cs b/examples/WebRTCExamples/WebRTCClientVP8Net/Program.cs
old mode 100644
new mode 100755
index 716e7b49f..29f2ec434
--- a/examples/WebRTCExamples/WebRTCClientVP8Net/Program.cs
+++ b/examples/WebRTCExamples/WebRTCClientVP8Net/Program.cs
@@ -20,11 +20,8 @@
using System;
using System.Drawing;
using System.Drawing.Imaging;
-using System.IO;
using System.Linq;
using System.Net;
-using System.Text;
-using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Extensions.Logging;
@@ -33,14 +30,16 @@
using SIPSorcery.Net;
using SIPSorceryMedia.Abstractions;
using Vpx.Net;
+using WebSocketSharp.Server;
namespace demo
{
class Program
{
- private const string REST_SIGNALING_SERVER = "https://sipsorcery.cloud/api/webrtcsignal";
- private const string REST_SIGNALING_MY_USER = "cli";
- private const string REST_SIGNALING_THEIR_USER = "svr";
+ //private const string REST_SIGNALING_SERVER = "https://localhost:5001/api/webrtcsignal";
+ //private const string REST_SIGNALING_MY_USER = "cli";
+ //private const string REST_SIGNALING_THEIR_USER = "svr";
+ private const int WEBSOCKET_PORT = 8081;
private static Microsoft.Extensions.Logging.ILogger logger = null;
@@ -54,10 +53,16 @@ static async Task Main(string[] args)
logger = AddConsoleLogger();
- CancellationTokenSource cts = new CancellationTokenSource();
+ //CancellationTokenSource cts = new CancellationTokenSource();
- var nodeDssWebRTCPeer = new WebRTCRestSignalingPeer(REST_SIGNALING_SERVER, REST_SIGNALING_MY_USER, REST_SIGNALING_THEIR_USER, CreatePeerConnection);
- await nodeDssWebRTCPeer.Start(cts);
+ //var nodeDssWebRTCPeer = new WebRTCRestSignalingPeer(REST_SIGNALING_SERVER, REST_SIGNALING_MY_USER, REST_SIGNALING_THEIR_USER, CreatePeerConnection);
+ //await nodeDssWebRTCPeer.Start(cts);
+
+ // Start web socket.
+ Console.WriteLine("Starting web socket server...");
+ var webSocketServer = new WebSocketServer(IPAddress.Any, WEBSOCKET_PORT);
+ webSocketServer.AddWebSocketService("/", (peer) => peer.CreatePeerConnection = CreatePeerConnection);
+ webSocketServer.Start();
// Open a Window to display the video feed from the WebRTC peer.
_form = new Form();
diff --git a/examples/WebRTCExamples/WebRTCClientVP8Net/WebRTCClientVP8Net.csproj b/examples/WebRTCExamples/WebRTCClientVP8Net/WebRTCClientVP8Net.csproj
old mode 100644
new mode 100755
index 1590206d6..a28f405d0
--- a/examples/WebRTCExamples/WebRTCClientVP8Net/WebRTCClientVP8Net.csproj
+++ b/examples/WebRTCExamples/WebRTCClientVP8Net/WebRTCClientVP8Net.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ net8.0-windows
true
true
true
diff --git a/examples/WebRTCExamples/WebRTCClientVP8Net/capture.html b/examples/WebRTCExamples/WebRTCClientVP8Net/capture.html
new file mode 100644
index 000000000..a3d981be9
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCClientVP8Net/capture.html
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCDaemon/WebRTCDaemon.csproj b/examples/WebRTCExamples/WebRTCDaemon/WebRTCDaemon.csproj
old mode 100644
new mode 100755
index df6ad4b94..df6a8dc3d
--- a/examples/WebRTCExamples/WebRTCDaemon/WebRTCDaemon.csproj
+++ b/examples/WebRTCExamples/WebRTCDaemon/WebRTCDaemon.csproj
@@ -1,7 +1,7 @@
- net5
+ net8.0
Linux
@@ -23,12 +23,16 @@
+
-
-
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCDaemon/WebRTCWorker.cs b/examples/WebRTCExamples/WebRTCDaemon/WebRTCWorker.cs
index 3d7946919..d74aa31bb 100644
--- a/examples/WebRTCExamples/WebRTCDaemon/WebRTCWorker.cs
+++ b/examples/WebRTCExamples/WebRTCDaemon/WebRTCWorker.cs
@@ -34,6 +34,8 @@ namespace WebRTCDaemon
{
public class WebRTCWorker : BackgroundService
{
+ private const string ffmpegLibFullPath = @"C:\ffmpeg-4.4.1-full_build-shared\bin"; // /!\ Path to FFmpeg binaries
+
private const int WEBSOCKET_PORT = 8081;
private const string STUN_URL = "stun:stun.sipsorcery.com";
private const string MP4_PATH = "media/max_intro.mp4";
@@ -63,9 +65,10 @@ public WebRTCWorker(ILogger logger, IConfiguration configuration)
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
+
+ SIPSorceryMedia.FFmpeg.FFmpegInit.Initialise(SIPSorceryMedia.FFmpeg.FfmpegLogLevelEnum.AV_LOG_VERBOSE, ffmpegLibFullPath, _logger);
// Set up media sources.
_maxSource = new FFmpegFileSource(MP4_PATH, true, new AudioEncoder());
- _maxSource.Initialise();
_testPatternSource = new VideoTestPatternSource();
_testPatternEncoder = new FFmpegVideoEndPoint();
@@ -137,7 +140,7 @@ private Task CreatePeerConnection(string url)
}
else
{
- videoSource = _testPatternEncoder;
+ videoSource = _testPatternSource;
audioSource = _musicSource;
}
diff --git a/examples/WebRTCExamples/WebRTCEchoClient/WebRTCEchoClient.csproj b/examples/WebRTCExamples/WebRTCEchoClient/WebRTCEchoClient.csproj
old mode 100644
new mode 100755
index 833d7a3f2..685a0cfc2
--- a/examples/WebRTCExamples/WebRTCEchoClient/WebRTCEchoClient.csproj
+++ b/examples/WebRTCExamples/WebRTCEchoClient/WebRTCEchoClient.csproj
@@ -1,20 +1,24 @@
-
+
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763
true
true
true
+ 9.0
-
-
+
-
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCEchoServer/WebRTCEchoServer.cs b/examples/WebRTCExamples/WebRTCEchoServer/WebRTCEchoServer.cs
old mode 100644
new mode 100755
index ce65fe368..3204734a4
--- a/examples/WebRTCExamples/WebRTCEchoServer/WebRTCEchoServer.cs
+++ b/examples/WebRTCExamples/WebRTCEchoServer/WebRTCEchoServer.cs
@@ -99,7 +99,7 @@ public async Task GotOffer(RTCSessionDescriptionInit
{
_logger.LogDebug($"RTP event received: {ev.EventID}.");
// Echo the DTMF event back.
- var echoEvent = new RTPEvent(ev.EventID, true, RTPEvent.DEFAULT_VOLUME, RTPSession.DTMF_EVENT_DURATION, RTPSession.DTMF_EVENT_PAYLOAD_ID);
+ var echoEvent = new RTPEvent(ev.EventID, true, RTPEvent.DEFAULT_VOLUME, RTPSession.DTMF_EVENT_DURATION, RTPSession.DEFAULT_DTMF_EVENT_PAYLOAD_ID);
await pc.SendDtmfEvent(echoEvent, CancellationToken.None).ConfigureAwait(false);
}
@@ -109,7 +109,7 @@ public async Task GotOffer(RTCSessionDescriptionInit
{
_logger.LogDebug($"RTP event received: {ev.EventID}.");
// Echo the DTMF event back.
- var echoEvent = new RTPEvent(ev.EventID, true, RTPEvent.DEFAULT_VOLUME, RTPSession.DTMF_EVENT_DURATION, RTPSession.DTMF_EVENT_PAYLOAD_ID);
+ var echoEvent = new RTPEvent(ev.EventID, true, RTPEvent.DEFAULT_VOLUME, RTPSession.DTMF_EVENT_DURATION, RTPSession.DEFAULT_DTMF_EVENT_PAYLOAD_ID);
await pc.SendDtmfEvent(echoEvent, CancellationToken.None).ConfigureAwait(false);
}
else if (!ev.EndOfEvent)
@@ -117,7 +117,7 @@ public async Task GotOffer(RTCSessionDescriptionInit
_rtpEventSsrc = hdr.SyncSource;
_logger.LogDebug($"RTP event received: {ev.EventID}.");
// Echo the DTMF event back.
- var echoEvent = new RTPEvent(ev.EventID, true, RTPEvent.DEFAULT_VOLUME, RTPSession.DTMF_EVENT_DURATION, RTPSession.DTMF_EVENT_PAYLOAD_ID);
+ var echoEvent = new RTPEvent(ev.EventID, true, RTPEvent.DEFAULT_VOLUME, RTPSession.DTMF_EVENT_DURATION, RTPSession.DEFAULT_DTMF_EVENT_PAYLOAD_ID);
await pc.SendDtmfEvent(echoEvent, CancellationToken.None).ConfigureAwait(false);
}
}
diff --git a/examples/WebRTCExamples/WebRTCEchoServer/WebRTCEchoServer.csproj b/examples/WebRTCExamples/WebRTCEchoServer/WebRTCEchoServer.csproj
old mode 100644
new mode 100755
index a1cdef8d3..2aeeafbed
--- a/examples/WebRTCExamples/WebRTCEchoServer/WebRTCEchoServer.csproj
+++ b/examples/WebRTCExamples/WebRTCEchoServer/WebRTCEchoServer.csproj
@@ -1,19 +1,19 @@
- net5.0
+ net8.0
demo
webrtcecho
+
+
+
+
PreserveNewest
-
-
-
-
diff --git a/examples/WebRTCExamples/WebRTCExamples.sln b/examples/WebRTCExamples/WebRTCExamples.sln
index 4d4936f49..1917d4526 100644
--- a/examples/WebRTCExamples/WebRTCExamples.sln
+++ b/examples/WebRTCExamples/WebRTCExamples.sln
@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29409.12
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32228.430
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SIPToWebRtcBridge", "SIPToWebRtcBridge\SIPToWebRtcBridge.csproj", "{1C72B9CE-BDDB-4C7C-BDD9-D43B9CFFB2B6}"
EndProject
@@ -43,6 +43,14 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebRTCTestPatternRest", "We
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WebRTCGetStartedDataChannel", "WebRTCGetStartedDataChannel\WebRTCGetStartedDataChannel.csproj", "{AFB26B0B-05CB-4F7A-89C8-ACBB62DCCAEB}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RtspToWebRTCAudioAndVideo", "RtspToWebRTCAudioAndVideo\RtspToWebRTCAudioAndVideo.csproj", "{48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SIPSorcery", "..\..\src\SIPSorcery.csproj", "{3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebRTCOpenGL", "WebRTCOpenGL\WebRTCOpenGL.csproj", "{581BE6CD-8699-40C0-A975-F2C1993B62B8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebRTCFFmpegGetStarted", "WebRTCFFmpegGetStarted\WebRTCFFmpegGetStarted.csproj", "{616B1ECF-B8DF-8E04-7AAA-678F947496E1}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -293,6 +301,54 @@ Global
{AFB26B0B-05CB-4F7A-89C8-ACBB62DCCAEB}.Release|x64.Build.0 = Release|Any CPU
{AFB26B0B-05CB-4F7A-89C8-ACBB62DCCAEB}.Release|x86.ActiveCfg = Release|Any CPU
{AFB26B0B-05CB-4F7A-89C8-ACBB62DCCAEB}.Release|x86.Build.0 = Release|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Debug|x64.Build.0 = Debug|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Debug|x86.Build.0 = Debug|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Release|Any CPU.Build.0 = Release|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Release|x64.ActiveCfg = Release|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Release|x64.Build.0 = Release|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Release|x86.ActiveCfg = Release|Any CPU
+ {48DA4367-06AC-40D2-9B4B-D45B49BBA1AF}.Release|x86.Build.0 = Release|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Debug|x64.Build.0 = Debug|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Debug|x86.Build.0 = Debug|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Release|x64.ActiveCfg = Release|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Release|x64.Build.0 = Release|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Release|x86.ActiveCfg = Release|Any CPU
+ {3B92CB90-3999-4017-9C4D-ACC2C7DDFDD8}.Release|x86.Build.0 = Release|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Debug|x64.Build.0 = Debug|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Debug|x86.Build.0 = Debug|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Release|x64.ActiveCfg = Release|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Release|x64.Build.0 = Release|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Release|x86.ActiveCfg = Release|Any CPU
+ {581BE6CD-8699-40C0-A975-F2C1993B62B8}.Release|x86.Build.0 = Release|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Debug|x64.Build.0 = Debug|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Debug|x86.Build.0 = Debug|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Release|x64.ActiveCfg = Release|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Release|x64.Build.0 = Release|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Release|x86.ActiveCfg = Release|Any CPU
+ {616B1ECF-B8DF-8E04-7AAA-678F947496E1}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/examples/WebRTCExamples/WebRTCFFmpegGetStarted/Dockerfile b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/Dockerfile
new file mode 100755
index 000000000..6e7166ee9
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/Dockerfile
@@ -0,0 +1,74 @@
+# Stage 1: Build FFmpeg Image
+FROM sipsorcery/ffmpegbuild:7.0 AS ffmpeg
+
+# Stage 2: Base Image - Install FFmpeg dependencies (This will be cached)
+FROM ubuntu:24.04 AS base
+
+ENV DEBIAN_FRONTEND=noninteractive
+
+# Install the required libraries for FFmpeg in the final image (as root)
+RUN apt-get update && apt-get install -y \
+ libdrm2 \
+ libsdl2-2.0-0 \
+ libsndio7.0 \
+ libxvidcore4 \
+ libxv1 \
+ libass9 \
+ libvpx-dev \
+ libsdl2-dev \
+ libx264-dev \
+ libx265-dev \
+ libopus-dev \
+ libfreetype6-dev \
+ libvorbis-dev \
+ libxvidcore-dev \
+ libavutil-dev \
+ libssl-dev \
+ libavdevice-dev \
+ libfdk-aac-dev \
+ aspnetcore-runtime-8.0 \
+ && rm -rf /var/lib/apt/lists/*
+
+WORKDIR /app
+EXPOSE 8081
+
+# Stage 3: Build .NET Application (Only rebuilds if source code changes)
+FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
+
+ARG BUILD_CONFIGURATION=Release
+WORKDIR /src
+
+COPY [".", "."]
+
+# Publish the application
+FROM build AS publish
+RUN dotnet publish "./WebRTCFFmpegGetStarted.csproj" -c $BUILD_CONFIGURATION -o /app/publish
+
+# Stage 4: Final Image to Run the App
+FROM base AS final
+
+WORKDIR /app
+
+# Copy the published app from the build image
+COPY --from=publish /app/publish .
+
+# Copy FFmpeg binaries and libraries from the FFmpeg build image
+COPY --from=ffmpeg /usr/local/bin/ffmpeg /usr/local/bin/
+COPY --from=ffmpeg /usr/local/bin/ffprobe /usr/local/bin/
+COPY --from=ffmpeg /usr/local/lib/libavcodec.so.61.3.100 /usr/local/lib/
+COPY --from=ffmpeg /usr/local/lib/libavdevice.so.61.1.100 /usr/local/lib/
+COPY --from=ffmpeg /usr/local/lib/libavfilter.so.10.1.100 /usr/local/lib/
+COPY --from=ffmpeg /usr/local/lib/libavformat.so.61.1.100 /usr/local/lib/
+COPY --from=ffmpeg /usr/local/lib/libavutil.so.59.8.100 /usr/local/lib/
+COPY --from=ffmpeg /usr/local/lib/libpostproc.so.58.1.100 /usr/local/lib/
+COPY --from=ffmpeg /usr/local/lib/libswresample.so.5.1.100 /usr/local/lib/
+COPY --from=ffmpeg /usr/local/lib/libswscale.so.8.1.100 /usr/local/lib/
+
+# Update library links
+RUN ldconfig
+
+# Ensure FFmpeg is available in the PATH for your app
+ENV PATH="/usr/local/bin:${PATH}"
+
+# Set entrypoint to run the .NET application
+ENTRYPOINT ["dotnet", "WebRTCFFmpegGetStarted.dll"]
diff --git a/examples/WebRTCExamples/WebRTCFFmpegGetStarted/Program.cs b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/Program.cs
new file mode 100755
index 000000000..bd6027737
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/Program.cs
@@ -0,0 +1,178 @@
+//-----------------------------------------------------------------------------
+// Filename: Program.cs
+//
+// Description: An example WebRTC server application that attempts to send and
+// receive audio and video. This example attempts to use the ffmpeg libraries for
+// the video encoding. A web socket is used for signalling.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 06 Apr 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Diagnostics.Eventing.Reader;
+using System.Linq;
+using System.Net;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Hosting;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
+using Serilog;
+using Serilog.Extensions.Logging;
+using SIPSorcery.Media;
+using SIPSorcery.Net;
+using SIPSorceryMedia.FFmpeg;
+using WebSocketSharp.Server;
+
+namespace demo;
+
+class Program
+{
+ private const int ASPNET_PORT = 8080;
+ private const int WEBSOCKET_PORT = 8081;
+ //private const string STUN_URL = "stun:stun.cloudflare.com";
+ private const string LINUX_FFMPEG_LIB_PATH = "/usr/local/lib/";
+
+ private static Microsoft.Extensions.Logging.ILogger logger = NullLogger.Instance;
+
+ static void Main()
+ {
+ Console.WriteLine("WebRTC FFmpeg Get Started");
+
+ if (Environment.OSVersion.Platform == PlatformID.Unix)
+ {
+ SIPSorceryMedia.FFmpeg.FFmpegInit.Initialise(SIPSorceryMedia.FFmpeg.FfmpegLogLevelEnum.AV_LOG_VERBOSE, LINUX_FFMPEG_LIB_PATH, logger);
+ }
+ else
+ {
+ SIPSorceryMedia.FFmpeg.FFmpegInit.Initialise(SIPSorceryMedia.FFmpeg.FfmpegLogLevelEnum.AV_LOG_VERBOSE, null, logger);
+ }
+
+ logger = AddConsoleLogger();
+
+ // Start web socket.
+ Console.WriteLine("Starting web socket server...");
+ var webSocketServer = new WebSocketServer(IPAddress.Any, WEBSOCKET_PORT);
+ webSocketServer.AddWebSocketService("/ws", (peer) => peer.CreatePeerConnection = CreatePeerConnection);
+ webSocketServer.Start();
+
+ Console.WriteLine($"Waiting for web socket connections on {webSocketServer.Address}:{webSocketServer.Port}...");
+ Console.WriteLine("Press ctrl-c to exit.");
+
+ var builder = WebApplication.CreateBuilder();
+
+ builder.WebHost.ConfigureKestrel(options =>
+ {
+ options.Listen(IPAddress.Any, ASPNET_PORT);
+ });
+
+ var app = builder.Build();
+
+ // Map the root URL (/) to return "Hello World"
+ ///app.MapGet("/", () => "Hello World");
+
+ app.UseDefaultFiles();
+ app.UseStaticFiles();
+
+ app.Run();
+ }
+
+ private static Task CreatePeerConnection()
+ {
+ RTCConfiguration config = new RTCConfiguration
+ {
+ //iceServers = new List { new RTCIceServer { urls = STUN_URL } },
+ X_BindAddress = IPAddress.Any // Docker images typically don't support IPv6 so force bind to IPv4.
+ };
+ var pc = new RTCPeerConnection(config);
+
+ var testPatternSource = new VideoTestPatternSource(new FFmpegVideoEncoder());
+ var audioSource = new AudioExtrasSource(new AudioEncoder(), new AudioSourceOptions { AudioSource = AudioSourcesEnum.Music });
+
+ MediaStreamTrack videoTrack = new MediaStreamTrack(testPatternSource.GetVideoSourceFormats(), MediaStreamStatusEnum.SendRecv);
+ pc.addTrack(videoTrack);
+ MediaStreamTrack audioTrack = new MediaStreamTrack(audioSource.GetAudioSourceFormats(), MediaStreamStatusEnum.SendRecv);
+ pc.addTrack(audioTrack);
+
+ testPatternSource.OnVideoSourceEncodedSample += pc.SendVideo;
+ audioSource.OnAudioSourceEncodedSample += pc.SendAudio;
+
+ pc.OnVideoFormatsNegotiated += (formats) => testPatternSource.SetVideoSourceFormat(formats.First());
+ pc.OnAudioFormatsNegotiated += (formats) => audioSource.SetAudioSourceFormat(formats.First());
+ pc.onsignalingstatechange += () =>
+ {
+ logger.LogDebug($"Signalling state change to {pc.signalingState}.");
+
+ if (pc.signalingState == RTCSignalingState.have_local_offer)
+ {
+ logger.LogDebug($"Local SDP offer:\n{pc.localDescription.sdp}");
+ }
+ else if (pc.signalingState == RTCSignalingState.stable)
+ {
+ logger.LogDebug($"Remote SDP offer:\n{pc.remoteDescription.sdp}");
+ }
+ };
+
+ pc.onconnectionstatechange += async (state) =>
+ {
+ logger.LogDebug($"Peer connection state change to {state}.");
+
+ if (state == RTCPeerConnectionState.connected)
+ {
+ await audioSource.StartAudio();
+ await testPatternSource.StartVideo();
+ }
+ else if (state == RTCPeerConnectionState.failed)
+ {
+ pc.Close("ice disconnection");
+ }
+ else if (state == RTCPeerConnectionState.closed)
+ {
+ await testPatternSource.CloseVideo();
+ await audioSource.CloseAudio();
+ }
+ };
+
+ // Diagnostics.
+ pc.OnReceiveReport += (re, media, rr) => logger.LogDebug($"RTCP Receive for {media} from {re}\n{rr.GetDebugSummary()}");
+ pc.OnSendReport += (media, sr) => logger.LogDebug($"RTCP Send for {media}\n{sr.GetDebugSummary()}");
+ pc.GetRtpChannel().OnStunMessageReceived += (msg, ep, isRelay) => logger.LogDebug($"STUN {msg.Header.MessageType} received from {ep}.");
+ pc.oniceconnectionstatechange += (state) => logger.LogDebug($"ICE connection state change to {state}.");
+
+ // To test closing.
+ //_ = Task.Run(async () =>
+ //{
+ // await Task.Delay(5000);
+
+ // audioSource.OnAudioSourceEncodedSample -= pc.SendAudio;
+ // videoEncoderEndPoint.OnVideoSourceEncodedSample -= pc.SendVideo;
+
+ // logger.LogDebug("Closing peer connection.");
+ // pc.Close("normal");
+ //});
+
+ return Task.FromResult(pc);
+ }
+
+ ///
+ /// Adds a console logger. Can be omitted if internal SIPSorcery debug and warning messages are not required.
+ ///
+ private static Microsoft.Extensions.Logging.ILogger AddConsoleLogger()
+ {
+ var seriLogger = new LoggerConfiguration()
+ .Enrich.FromLogContext()
+ .MinimumLevel.Is(Serilog.Events.LogEventLevel.Debug)
+ .WriteTo.Console()
+ .CreateLogger();
+ var factory = new SerilogLoggerFactory(seriLogger);
+ SIPSorcery.LogFactory.Set(factory);
+ return factory.CreateLogger();
+ }
+}
diff --git a/examples/WebRTCExamples/WebRTCFFmpegGetStarted/Properties/launchSettings.json b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/Properties/launchSettings.json
new file mode 100755
index 000000000..d6d8158bb
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "WebRTCFFmpegGetStarted": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:52561;http://localhost:52562"
+ }
+ }
+}
\ No newline at end of file
diff --git a/examples/WebRTCExamples/WebRTCFFmpegGetStarted/README.md b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/README.md
new file mode 100755
index 000000000..c751208aa
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/README.md
@@ -0,0 +1,26 @@
+# Description
+
+This demo serves a dual purpose:
+
+ - A demo of how to get started with the sipsorcery library when using FFmpeg for video encoding.
+ - A demo of how to host a sipsorcery webrtc application in a docker container.
+
+The demo can be run locally on Windows in the same manner as the other demoes. The correct version of FFmpeg must be installed as per the instructions [here](https://github.com/sipsorcery-org/SIPSorceryMedia.FFmpeg).
+
+The demo "should" also work in a docker container and was verified to do so. The hardest thing about getting the contianer to work and the most likely thing to break iy
+is a mismtach in the verion of the FFmpeg binaries supported by the [FFmpeg.Autogen](https://github.com/Ruslan-B/FFmpeg.AutoGen) library used by sipsorcery.
+
+As the time of writing the correct FFmpeg version was `n7.0` and a docker build image was created [here](https://github.com/sipsorcery-org/SIPSorceryMedia.FFmpeg/tree/master/ffmpeg-build).
+
+# Docker Build & Run
+
+`c:\dev\sipsorcery\examples\WebRTCExamples\WebRTCFFmpegGetStarted> docker build -t webrtcgetstarted --progress=plain -f Dockerfile .`
+`c:\dev\sipsorcery\examples\WebRTCExamples\WebRTCFFmpegGetStarted> docker run --rm -it -p 8080:8080 -p 8081:8081 webrtcgetstarted`
+
+# From DockerHub
+
+`docker run --rm -it -p 8080:8080 -p 8081:8081 sipsorcery/webrtcgetstarted`
+
+# Troubleshooting
+
+`c:\dev\sipsorcery\examples\WebRTCExamples\WebRTCFFmpegGetStarted> docker run --rm -it -p 8080:8080 -p 8081:8081 --entrypoint "/bin/bash" webrtcgetstarted`
\ No newline at end of file
diff --git a/examples/WebRTCExamples/WebRTCFFmpegGetStarted/WebRTCFFmpegGetStarted.csproj b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/WebRTCFFmpegGetStarted.csproj
new file mode 100755
index 000000000..290304c1e
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/WebRTCFFmpegGetStarted.csproj
@@ -0,0 +1,20 @@
+
+
+
+ Exe
+ net8.0
+ true
+ false
+ 12.0
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCFFmpegGetStarted/wwwroot/index.html b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/wwwroot/index.html
new file mode 100755
index 000000000..9e4818142
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCFFmpegGetStarted/wwwroot/index.html
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/WebRTCExamples/WebRTCGetStarted/Program.cs b/examples/WebRTCExamples/WebRTCGetStarted/Program.cs
old mode 100644
new mode 100755
index 8273f42ab..41507ad03
--- a/examples/WebRTCExamples/WebRTCGetStarted/Program.cs
+++ b/examples/WebRTCExamples/WebRTCGetStarted/Program.cs
@@ -34,7 +34,7 @@ namespace demo
class Program
{
private const int WEBSOCKET_PORT = 8081;
- private const string STUN_URL = "stun:stun.sipsorcery.com";
+ private const string STUN_URL = "stun:stun.cloudflare.com";
private static Microsoft.Extensions.Logging.ILogger logger = NullLogger.Instance;
@@ -69,7 +69,8 @@ private static Task CreatePeerConnection()
{
RTCConfiguration config = new RTCConfiguration
{
- iceServers = new List { new RTCIceServer { urls = STUN_URL } }
+ iceServers = new List { new RTCIceServer { urls = STUN_URL } },
+ //X_BindAddress = IPAddress.Any
};
var pc = new RTCPeerConnection(config);
@@ -88,6 +89,19 @@ private static Task CreatePeerConnection()
pc.OnVideoFormatsNegotiated += (formats) => videoEncoderEndPoint.SetVideoSourceFormat(formats.First());
pc.OnAudioFormatsNegotiated += (formats) => audioSource.SetAudioSourceFormat(formats.First());
+ pc.onsignalingstatechange += () =>
+ {
+ logger.LogDebug($"Signalling state change to {pc.signalingState}.");
+
+ if (pc.signalingState == RTCSignalingState.have_local_offer)
+ {
+ logger.LogDebug($"Local SDP offer:\n{pc.localDescription.sdp}");
+ }
+ else if (pc.signalingState == RTCSignalingState.stable)
+ {
+ logger.LogDebug($"Remote SDP offer:\n{pc.remoteDescription.sdp}");
+ }
+ };
pc.onconnectionstatechange += async (state) =>
{
@@ -115,6 +129,18 @@ private static Task CreatePeerConnection()
pc.GetRtpChannel().OnStunMessageReceived += (msg, ep, isRelay) => logger.LogDebug($"STUN {msg.Header.MessageType} received from {ep}.");
pc.oniceconnectionstatechange += (state) => logger.LogDebug($"ICE connection state change to {state}.");
+ // To test closing.
+ //_ = Task.Run(async () =>
+ //{
+ // await Task.Delay(5000);
+
+ // audioSource.OnAudioSourceEncodedSample -= pc.SendAudio;
+ // videoEncoderEndPoint.OnVideoSourceEncodedSample -= pc.SendVideo;
+
+ // logger.LogDebug("Closing peer connection.");
+ // pc.Close("normal");
+ //});
+
return Task.FromResult(pc);
}
diff --git a/examples/WebRTCExamples/WebRTCGetStarted/WebRTCGetStarted.csproj b/examples/WebRTCExamples/WebRTCGetStarted/WebRTCGetStarted.csproj
old mode 100644
new mode 100755
index a8a09bc83..bfe26f326
--- a/examples/WebRTCExamples/WebRTCGetStarted/WebRTCGetStarted.csproj
+++ b/examples/WebRTCExamples/WebRTCGetStarted/WebRTCGetStarted.csproj
@@ -2,7 +2,7 @@
Exe
- net5
+ net8.0
@@ -11,12 +11,15 @@
-
+
-
-
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCGetStarted/getstarted.html b/examples/WebRTCExamples/WebRTCGetStarted/getstarted.html
index ca9bc9749..d6ecba813 100644
--- a/examples/WebRTCExamples/WebRTCGetStarted/getstarted.html
+++ b/examples/WebRTCExamples/WebRTCGetStarted/getstarted.html
@@ -8,9 +8,25 @@
async function start() {
pc = new RTCPeerConnection();
- pc.ontrack = evt => document.querySelector('#videoCtl').srcObject = evt.streams[0];
+ pc.ontrack = evt => {
+ console.log("Adding track to video control.");
+ document.querySelector('#videoCtl').srcObject = evt.streams[0];
+
+ evt.streams[0].onunmute = () => {
+ console.log("Adding track to video control.");
+ };
+
+ evt.streams[0].onended = () => {
+ console.log("Track ended.");
+ };
+ }
+
pc.onicecandidate = evt => evt.candidate && ws.send(JSON.stringify(evt.candidate));
+ pc.onclose= () => {
+ console.log("pc close");
+ };
+
ws = new WebSocket(document.querySelector('#websockurl').value, []);
ws.onmessage = async function (evt) {
var obj = JSON.parse(evt.data);
@@ -31,6 +47,8 @@
await ws?.close();
};
+
+
diff --git a/examples/WebRTCExamples/WebRTCGetStartedDataChannel/Program.cs b/examples/WebRTCExamples/WebRTCGetStartedDataChannel/Program.cs
old mode 100644
new mode 100755
index 081b4a7cb..76965ccd2
--- a/examples/WebRTCExamples/WebRTCGetStartedDataChannel/Program.cs
+++ b/examples/WebRTCExamples/WebRTCGetStartedDataChannel/Program.cs
@@ -189,13 +189,13 @@ private static string DoJavscriptSHA256(byte[] buffer)
var slice = new ArraySegment(buffer, startPosn, length);
- using (SHA256Managed sha256 = new SHA256Managed())
+ using (var sha256 = SHA256.Create())
{
Buffer.BlockCopy(sha256.ComputeHash(slice.ToArray()), 0, hashOfHashes, i * SHA256_OUTPUT_SIZE, SHA256_OUTPUT_SIZE);
}
}
- using (SHA256Managed sha256 = new SHA256Managed())
+ using (var sha256 = SHA256.Create())
{
return sha256.ComputeHash(hashOfHashes).HexStr();
}
diff --git a/examples/WebRTCExamples/WebRTCGetStartedDataChannel/WebRTCGetStartedDataChannel.csproj b/examples/WebRTCExamples/WebRTCGetStartedDataChannel/WebRTCGetStartedDataChannel.csproj
old mode 100644
new mode 100755
index fa6d776cc..e0ccfe159
--- a/examples/WebRTCExamples/WebRTCGetStartedDataChannel/WebRTCGetStartedDataChannel.csproj
+++ b/examples/WebRTCExamples/WebRTCGetStartedDataChannel/WebRTCGetStartedDataChannel.csproj
@@ -2,13 +2,18 @@
Exe
- net5
+ net8.0
-
-
+
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCGetStartedVP8Net/Program.cs b/examples/WebRTCExamples/WebRTCGetStartedVP8Net/Program.cs
new file mode 100755
index 000000000..6eeaa9051
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCGetStartedVP8Net/Program.cs
@@ -0,0 +1,170 @@
+//-----------------------------------------------------------------------------
+// Filename: Program.cs
+//
+// Description: An example WebRTC server application that attempts to send a
+// test pattern to a browser peer and that uses a prototype .NET version of the
+// VP8 encoder. A web socket is used for signalling.
+//
+// The point of this demo is that it does not require any native libraries or
+// audio/video devices. This makes it a good palce to start for checking
+// whether a particular platform can be used to establish WebRTC connections
+// and get a media strem flowing.
+//
+// TODO: Not available until the VP8.NET project ports the encoder.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 12 Mar 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
+using Serilog;
+using Serilog.Extensions.Logging;
+using SIPSorcery.Media;
+using SIPSorcery.Net;
+using Vpx.Net;
+using WebSocketSharp.Server;
+
+namespace demo
+{
+ class Program
+ {
+ private const int WEBSOCKET_PORT = 8081;
+ private const string STUN_URL = "stun:stun.cloudflare.com";
+
+ private static Microsoft.Extensions.Logging.ILogger logger = NullLogger.Instance;
+
+ static void Main()
+ {
+ Console.WriteLine("WebRTC Get Started");
+
+ logger = AddConsoleLogger();
+
+ // Start web socket.
+ Console.WriteLine("Starting web socket server...");
+ var webSocketServer = new WebSocketServer(IPAddress.Any, WEBSOCKET_PORT);
+ webSocketServer.AddWebSocketService("/", (peer) => peer.CreatePeerConnection = CreatePeerConnection);
+ webSocketServer.Start();
+
+ Console.WriteLine($"Waiting for web socket connections on {webSocketServer.Address}:{webSocketServer.Port}...");
+ Console.WriteLine("Press ctrl-c to exit.");
+
+ // Ctrl-c will gracefully exit the call at any point.
+ ManualResetEvent exitMre = new ManualResetEvent(false);
+ Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e)
+ {
+ e.Cancel = true;
+ exitMre.Set();
+ };
+
+ // Wait for a signal saying the call failed, was cancelled with ctrl-c or completed.
+ exitMre.WaitOne();
+ }
+
+ private static Task CreatePeerConnection()
+ {
+ RTCConfiguration config = new RTCConfiguration
+ {
+ iceServers = new List { new RTCIceServer { urls = STUN_URL } },
+ //X_BindAddress = IPAddress.Any
+ };
+ var pc = new RTCPeerConnection(config);
+
+ var testPatternSource = new VideoTestPatternSource();
+ var videoEncoderEndPoint = new Vp8NetVideoEncoderEndPoint();
+ var audioSource = new AudioExtrasSource(new AudioEncoder(), new AudioSourceOptions { AudioSource = AudioSourcesEnum.Music });
+
+ MediaStreamTrack videoTrack = new MediaStreamTrack(videoEncoderEndPoint.GetVideoSourceFormats(), MediaStreamStatusEnum.SendRecv);
+ pc.addTrack(videoTrack);
+ MediaStreamTrack audioTrack = new MediaStreamTrack(audioSource.GetAudioSourceFormats(), MediaStreamStatusEnum.SendRecv);
+ pc.addTrack(audioTrack);
+
+ testPatternSource.OnVideoSourceRawSample += videoEncoderEndPoint.ExternalVideoSourceRawSample;
+ videoEncoderEndPoint.OnVideoSourceEncodedSample += pc.SendVideo;
+ audioSource.OnAudioSourceEncodedSample += pc.SendAudio;
+
+ pc.OnVideoFormatsNegotiated += (formats) => videoEncoderEndPoint.SetVideoSourceFormat(formats.First());
+ pc.OnAudioFormatsNegotiated += (formats) => audioSource.SetAudioSourceFormat(formats.First());
+ pc.onsignalingstatechange += () =>
+ {
+ logger.LogDebug($"Signalling state change to {pc.signalingState}.");
+
+ if (pc.signalingState == RTCSignalingState.have_local_offer)
+ {
+ logger.LogDebug($"Local SDP offer:\n{pc.localDescription.sdp}");
+ }
+ else if (pc.signalingState == RTCSignalingState.stable)
+ {
+ logger.LogDebug($"Remote SDP offer:\n{pc.remoteDescription.sdp}");
+ }
+ };
+
+ pc.onconnectionstatechange += async (state) =>
+ {
+ logger.LogDebug($"Peer connection state change to {state}.");
+
+ if (state == RTCPeerConnectionState.connected)
+ {
+ await audioSource.StartAudio();
+ await testPatternSource.StartVideo();
+ }
+ else if (state == RTCPeerConnectionState.failed)
+ {
+ pc.Close("ice disconnection");
+ }
+ else if (state == RTCPeerConnectionState.closed)
+ {
+ await testPatternSource.CloseVideo();
+ await audioSource.CloseAudio();
+ }
+ };
+
+ // Diagnostics.
+ pc.OnReceiveReport += (re, media, rr) => logger.LogDebug($"RTCP Receive for {media} from {re}\n{rr.GetDebugSummary()}");
+ pc.OnSendReport += (media, sr) => logger.LogDebug($"RTCP Send for {media}\n{sr.GetDebugSummary()}");
+ pc.GetRtpChannel().OnStunMessageReceived += (msg, ep, isRelay) => logger.LogDebug($"STUN {msg.Header.MessageType} received from {ep}.");
+ pc.oniceconnectionstatechange += (state) => logger.LogDebug($"ICE connection state change to {state}.");
+
+ // To test closing.
+ //_ = Task.Run(async () =>
+ //{
+ // await Task.Delay(5000);
+
+ // audioSource.OnAudioSourceEncodedSample -= pc.SendAudio;
+ // videoEncoderEndPoint.OnVideoSourceEncodedSample -= pc.SendVideo;
+
+ // logger.LogDebug("Closing peer connection.");
+ // pc.Close("normal");
+ //});
+
+ return Task.FromResult(pc);
+ }
+
+ ///
+ /// Adds a console logger. Can be omitted if internal SIPSorcery debug and warning messages are not required.
+ ///
+ private static Microsoft.Extensions.Logging.ILogger AddConsoleLogger()
+ {
+ var seriLogger = new LoggerConfiguration()
+ .Enrich.FromLogContext()
+ .MinimumLevel.Is(Serilog.Events.LogEventLevel.Debug)
+ .WriteTo.Console()
+ .CreateLogger();
+ var factory = new SerilogLoggerFactory(seriLogger);
+ SIPSorcery.LogFactory.Set(factory);
+ return factory.CreateLogger();
+ }
+ }
+}
diff --git a/examples/WebRTCExamples/WebRTCGetStartedVP8Net/WebRTCGetStartedVP8Net.csproj b/examples/WebRTCExamples/WebRTCGetStartedVP8Net/WebRTCGetStartedVP8Net.csproj
new file mode 100755
index 000000000..d68df3ee6
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCGetStartedVP8Net/WebRTCGetStartedVP8Net.csproj
@@ -0,0 +1,26 @@
+
+
+
+ Exe
+ net8.0
+
+
+
+ true
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCGetStartedVP8Net/getstarted.html b/examples/WebRTCExamples/WebRTCGetStartedVP8Net/getstarted.html
new file mode 100644
index 000000000..d6ecba813
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCGetStartedVP8Net/getstarted.html
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/WebRTCExamples/WebRTCMp4Source/Program.cs b/examples/WebRTCExamples/WebRTCMp4Source/Program.cs
old mode 100644
new mode 100755
index e9f363b17..c32619a35
--- a/examples/WebRTCExamples/WebRTCMp4Source/Program.cs
+++ b/examples/WebRTCExamples/WebRTCMp4Source/Program.cs
@@ -15,7 +15,6 @@
//-----------------------------------------------------------------------------
using System;
-using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading;
@@ -33,10 +32,11 @@ namespace demo
{
class Program
{
+ private const string MP4_PATH = @"media\max_intro.mp4"; // /!\ A valid path to Video file
+ //private const string MP4_PATH = @"media\big_buck_bunny.mp4";
+
private const int WEBSOCKET_PORT = 8081;
private const string STUN_URL = "stun:stun.sipsorcery.com";
- private const string MP4_PATH = "media/max_intro.mp4";
- //private const string MP4_PATH = "media/big_buck_bunny.mp4";
private static Microsoft.Extensions.Logging.ILogger logger = NullLogger.Instance;
@@ -71,15 +71,16 @@ private static Task CreatePeerConnection()
{
RTCConfiguration config = new RTCConfiguration
{
- iceServers = new List { new RTCIceServer { urls = STUN_URL } }
+ //iceServers = new List { new RTCIceServer { urls = STUN_URL } }
};
var pc = new RTCPeerConnection(config);
- var mediaFileSource = new SIPSorceryMedia.FFmpeg.FFmpegFileSource(MP4_PATH, false, new AudioEncoder());
- mediaFileSource.Initialise();
+ SIPSorceryMedia.FFmpeg.FFmpegInit.Initialise(SIPSorceryMedia.FFmpeg.FfmpegLogLevelEnum.AV_LOG_VERBOSE, null, logger);
+ var mediaFileSource = new SIPSorceryMedia.FFmpeg.FFmpegFileSource(MP4_PATH, true, new AudioEncoder());
mediaFileSource.RestrictFormats(x => x.Codec == VideoCodecsEnum.VP8);
- mediaFileSource.RestrictFormats(x => x.Codec == AudioCodecsEnum.PCMU);
- mediaFileSource.OnEndOfFile += () => pc.Close("source eof");
+
+ //mediaFileSource.RestrictFormats(x => x.Codec == AudioCodecsEnum.OPUS);
+ //mediaFileSource..OnEndOfFile += () => pc.Close("source eof");
MediaStreamTrack videoTrack = new MediaStreamTrack(mediaFileSource.GetVideoSourceFormats(), MediaStreamStatusEnum.SendRecv);
pc.addTrack(videoTrack);
@@ -99,7 +100,7 @@ private static Task CreatePeerConnection()
{
pc.Close("ice disconnection");
}
- else if (state == RTCPeerConnectionState.closed)
+ else if (state is RTCPeerConnectionState.closed or RTCPeerConnectionState.disconnected)
{
await mediaFileSource.CloseVideo();
}
@@ -109,6 +110,20 @@ private static Task CreatePeerConnection()
}
};
+ pc.onsignalingstatechange += () =>
+ {
+ logger.LogDebug($"Signalling state change to {pc.signalingState}.");
+
+ if (pc.signalingState == RTCSignalingState.have_local_offer)
+ {
+ logger.LogDebug($"Local SDP offer:\n{pc.localDescription.sdp}");
+ }
+ else if (pc.signalingState == RTCSignalingState.stable)
+ {
+ logger.LogDebug($"Remote SDP offer:\n{pc.remoteDescription.sdp}");
+ }
+ };
+
// Diagnostics.
//pc.OnReceiveReport += (re, media, rr) => logger.LogDebug($"RTCP Receive for {media} from {re}\n{rr.GetDebugSummary()}");
//pc.OnSendReport += (media, sr) => logger.LogDebug($"RTCP Send for {media}\n{sr.GetDebugSummary()}");
diff --git a/examples/WebRTCExamples/WebRTCMp4Source/WebRTCMp4Source.csproj b/examples/WebRTCExamples/WebRTCMp4Source/WebRTCMp4Source.csproj
old mode 100644
new mode 100755
index 51ea15d99..1681d3493
--- a/examples/WebRTCExamples/WebRTCMp4Source/WebRTCMp4Source.csproj
+++ b/examples/WebRTCExamples/WebRTCMp4Source/WebRTCMp4Source.csproj
@@ -2,30 +2,36 @@
Exe
- netcoreapp3.1
-
-
-
+ net8
true
false
+ 10
-
+
-
-
-
-
-
-
+
+
-
+
-
+
PreserveNewest
-
-
+
+
PreserveNewest
-
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCNoSignalling/WebRTCNoSignalling.csproj b/examples/WebRTCExamples/WebRTCNoSignalling/WebRTCNoSignalling.csproj
old mode 100644
new mode 100755
index 69220d586..e0451d8b1
--- a/examples/WebRTCExamples/WebRTCNoSignalling/WebRTCNoSignalling.csproj
+++ b/examples/WebRTCExamples/WebRTCNoSignalling/WebRTCNoSignalling.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
@@ -10,17 +10,19 @@
-
-
-
+
+
-
-
-
+
+
-
+
+
+
+
+
PreserveNewest
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/AudioScope.cs b/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/AudioScope.cs
new file mode 100755
index 000000000..5b3c6341a
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/AudioScope.cs
@@ -0,0 +1,196 @@
+//-----------------------------------------------------------------------------
+// Filename: AudioScope.cs
+//
+// Description: Implementation of a Hilbert filter to visualise audio input.
+// Originally based on https://github.com/conundrumer/visual-music-workshop.
+
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 29 Feb 2020 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Linq;
+using System.Numerics;
+using MathNet.Numerics;
+using MathNet.Numerics.IntegralTransforms;
+
+namespace AudioScope
+{
+ public class LowPassFilter
+ {
+ private readonly float _k;
+ private readonly float _norm;
+ private readonly float _a0;
+ private readonly float _a1;
+ private readonly float _a2;
+ private readonly float _b1;
+ private readonly float _b2;
+
+ private float _w1 = 0.0f;
+ private float _w2 = 0.0f;
+
+ public LowPassFilter(float n, float q)
+ {
+ _k = (float)Math.Tan((0.5 * n * Math.PI));
+ _norm = 1.0f / (1.0f + _k / q + _k * _k);
+ _a0 = _k * _k * _norm;
+ _a1 = 2.0f * _a0;
+ _a2 = _a0;
+ _b1 = 2.0f * (_k * _k - 1.0f) * _norm;
+ _b2 = (1.0f - _k / q + _k * _k) * _norm;
+ }
+
+ public float Apply(float x)
+ {
+ float w0 = x - _b1 * _w1 - _b2 * _w2;
+ float y = _a0 * w0 + _a1 * _w1 + _a2 * _w2;
+ _w2 = _w1;
+ _w1 = w0;
+
+ return y;
+ }
+ }
+
+ public class AudioScope
+ {
+ public const int NUM_CHANNELS = 1;
+ public const int SAMPLE_RATE = 44100;
+ public const float maxAmplitude = 4.0F;
+ public const int B = (1 << 16) - 1;
+ public const int M = 4;
+ public const int FFT_SIZE = 1024;
+ public const int MID = (FFT_SIZE - 1) / 2;
+ public const float DELAY_TIME = MID / SAMPLE_RATE;
+ public const float GAIN = 1.0f;
+ public const int BUFFER_SIZE = 256;
+ public const int CIRCULAR_BUFFER_SAMPLES = 3;
+ public const float CUTOFF_FREQ = 0.5f;
+
+ private const int DISPLAY_ARRAY_STRIDE = 4; // Each element sent to the display function needs to have 4 floats.
+ private const int PREVIOUS_SAMPLES_LENGTH = 3 * DISPLAY_ARRAY_STRIDE;
+
+ private Complex[] _analytic;
+ private LowPassFilter _angleLowPass;
+ private LowPassFilter _noiseLowPass;
+
+ private Complex[] _timeRingBuffer = new Complex[2 * FFT_SIZE];
+ private int _timeIndex = 0;
+ private float[] _previousResults = new float[3 * 4];
+ private Complex _prevInput = new Complex(0.0f, 0.0f);
+ private Complex _prevDiff = new Complex(0.0f, 0.0f);
+ private float[] _lastSample;
+
+ public AudioScope()
+ {
+ uint n = FFT_SIZE;
+ if (n % 2 == 0)
+ {
+ n -= 1;
+ }
+
+ _analytic = MakeAnalytic(n, FFT_SIZE);
+ _angleLowPass = new LowPassFilter(0.01f, 0.5f);
+ _noiseLowPass = new LowPassFilter(0.5f, 0.7f);
+ }
+
+ public float[] GetSample()
+ {
+ return _lastSample;
+ }
+
+ ///
+ /// Called to process the audio input once the required number of samples are available.
+ ///
+ public void ProcessSample(Complex[] samples)
+ {
+ Array.Copy(samples, 0, _timeRingBuffer, _timeIndex, samples.Length > FFT_SIZE ? FFT_SIZE : samples.Length);
+ Array.Copy(samples, 0, _timeRingBuffer, _timeIndex + FFT_SIZE, samples.Length > (_timeRingBuffer.Length/2 - _timeIndex) ? _timeRingBuffer.Length / 2 - _timeIndex : samples.Length);
+
+ _timeIndex = (_timeIndex + samples.Length) % FFT_SIZE;
+
+ var freqBuffer = _timeRingBuffer.Skip(_timeIndex).Take(FFT_SIZE).ToArray();
+
+ Fourier.Forward(freqBuffer, FourierOptions.NoScaling);
+
+ for (int j = 0; j < freqBuffer.Length; j++)
+ {
+ freqBuffer[j] = freqBuffer[j] * _analytic[j];
+ }
+
+ Fourier.Inverse(freqBuffer, FourierOptions.NoScaling);
+
+ float scale = (float)FFT_SIZE;
+
+ var complexAnalyticBuffer = freqBuffer.Skip(FFT_SIZE - BUFFER_SIZE).Take(BUFFER_SIZE).ToArray();
+ var data = new float[BUFFER_SIZE * DISPLAY_ARRAY_STRIDE + PREVIOUS_SAMPLES_LENGTH];
+
+ for (int k = 0; k < complexAnalyticBuffer.Length; k++)
+ {
+ var diff = complexAnalyticBuffer[k] - _prevInput;
+ _prevInput = complexAnalyticBuffer[k];
+
+ var angle = (float)Math.Max(Math.Log(Math.Abs(GetAngle(diff, _prevDiff)), 2.0f), -1.0e12);
+ _prevDiff = diff;
+ var output = _angleLowPass.Apply(angle);
+
+ data[k * DISPLAY_ARRAY_STRIDE] = (float)(complexAnalyticBuffer[k].Real / scale);
+ data[k * DISPLAY_ARRAY_STRIDE + 1] = (float)(complexAnalyticBuffer[k].Imaginary / scale);
+ data[k * DISPLAY_ARRAY_STRIDE + 2] = (float)Math.Pow(2, output); // Smoothed angular velocity.
+ data[k * DISPLAY_ARRAY_STRIDE + 3] = _noiseLowPass.Apply((float)Math.Abs(angle - output)); // Average angular noise.
+ }
+
+ Array.Copy(_previousResults, 0, data, 0, PREVIOUS_SAMPLES_LENGTH);
+ _lastSample = data;
+
+ _previousResults = data.Skip(data.Length - PREVIOUS_SAMPLES_LENGTH).ToArray();
+ }
+
+ public static float GetAngle(Complex v, Complex u)
+ {
+ var len_v_mul_u = v.Norm() * u;
+ var len_u_mul_v = u.Norm() * v;
+ var left = (len_v_mul_u - len_u_mul_v).Norm();
+ var right = (len_v_mul_u + len_u_mul_v).Norm();
+
+ return (float)(Math.Atan2(left, right) / Math.PI);
+ }
+
+ private static Complex[] MakeAnalytic(uint n, uint m)
+ {
+ var impulse = new Complex[m];
+
+ var mid = (n - 1) / 2;
+
+ impulse[mid] = new Complex(1.0f, 0.0f);
+ float re = -1.0f / (mid - 1);
+ for (int i = 1; i < mid + 1; i++)
+ {
+ if (i % 2 == 0)
+ {
+ impulse[mid + i] = new Complex(re, impulse[mid + i].Imaginary);
+ impulse[mid - i] = new Complex(re, impulse[mid - i].Imaginary);
+ }
+ else
+ {
+ float im = (float)(2.0 / Math.PI / i);
+ impulse[mid + i] = new Complex(impulse[mid + i].Real, im);
+ impulse[mid - i] = new Complex(impulse[mid - i].Real, -im);
+ }
+ // hamming window
+ var k = 0.53836 + 0.46164 * Math.Cos(i * Math.PI / (mid + 1));
+ impulse[mid + i] = new Complex((float)(impulse[mid + i].Real * k), (float)(impulse[mid + i].Imaginary * k));
+ impulse[mid - i] = new Complex((float)(impulse[mid - i].Real * k), (float)(impulse[mid - i].Imaginary * k));
+ }
+
+ Fourier.Forward(impulse, FourierOptions.NoScaling);
+
+ return impulse;
+ }
+ }
+}
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/AudioScopeOpenGL.cs b/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/AudioScopeOpenGL.cs
new file mode 100755
index 000000000..9393443fc
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/AudioScopeOpenGL.cs
@@ -0,0 +1,182 @@
+//-----------------------------------------------------------------------------
+// Filename: AudioScopeOpenGL.cs
+//
+// Description: Initialise the OpenGL portion of the Audio Scope demo.
+
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 29 Feb 2020 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System.IO;
+using SharpGL;
+using SharpGL.Shaders;
+using SharpGL.VertexBuffers;
+
+namespace AudioScope
+{
+ public class AudioScopeOpenGL
+ {
+ private const string VERTEX_SHADER_PATH = "shaders/line/line.vert";
+ private const string FRAGMENT_SHADER_PATH = "shaders/line/line.frag";
+ private const string GEOMETRY_SHADER_PATH = "shaders/line/line.geom";
+ private const string CLEAR_VERTEX_SHADER_PATH = "shaders/clear/clear.vert";
+ private const string CLEAR_FRAGMENT_SHADER_PATH = "shaders/clear/clear.frag";
+
+ ///
+ /// Length of each vector element passed to main GL program.
+ /// - X coordinate,
+ /// - Y coordinate,
+ /// - Angle,
+ /// - Output.
+ ///
+ private const int MAIN_DATA_STRIDE = 4;
+
+ ///
+ /// Length of each vector element passed to main GL program.
+ /// - X coordinate,
+ /// - Y coordinate,
+ ///
+ private const int CLEAR_DATA_STRIDE = 2;
+
+ private AudioScope _audioScope = new AudioScope();
+ private SharpGL.Shaders.ShaderProgram _prog;
+ private SharpGL.Shaders.ShaderProgram _clearProg;
+ private float[] _clearRectangle;
+
+ public AudioScopeOpenGL(AudioScope audioScope)
+ {
+ _audioScope = audioScope;
+ }
+
+ public void Initialise(OpenGL gl)
+ {
+ // Load the main program.
+
+ string fragmentShaderCode = null;
+ using (StreamReader sr = new StreamReader(FRAGMENT_SHADER_PATH))
+ {
+ fragmentShaderCode = sr.ReadToEnd();
+ }
+
+ string vertexShaderCode = null;
+ using (StreamReader sr = new StreamReader(VERTEX_SHADER_PATH))
+ {
+ vertexShaderCode = sr.ReadToEnd();
+ }
+
+ _prog = new SharpGL.Shaders.ShaderProgram();
+ _prog.Create(gl, vertexShaderCode, fragmentShaderCode, null);
+
+ string geometryShaderCode = null;
+ if (File.Exists(GEOMETRY_SHADER_PATH))
+ {
+ using (StreamReader sr = new StreamReader(GEOMETRY_SHADER_PATH))
+ {
+ geometryShaderCode = sr.ReadToEnd();
+ }
+
+ Shader geometryShader = new Shader();
+ geometryShader.Create(gl, OpenGL.GL_GEOMETRY_SHADER, geometryShaderCode);
+ gl.AttachShader(_prog.ShaderProgramObject, geometryShader.ShaderObject);
+ }
+
+ gl.LinkProgram(_prog.ShaderProgramObject);
+
+ // Now that we've compiled and linked the shader, check it's link status.If it's not linked properly, we're
+ // going to throw an exception.
+ if (_prog.GetLinkStatus(gl) == false)
+ {
+ throw new SharpGL.Shaders.ShaderCompilationException(string.Format("Failed to link shader program with ID {0}.", _prog.ShaderProgramObject), _prog.GetInfoLog(gl));
+ }
+
+ // Load clear program.
+
+ string clearFragShaderCode = null;
+ using (StreamReader sr = new StreamReader(CLEAR_FRAGMENT_SHADER_PATH))
+ {
+ clearFragShaderCode = sr.ReadToEnd();
+ }
+
+ string clearVertexShaderCode = null;
+ using (StreamReader sr = new StreamReader(CLEAR_VERTEX_SHADER_PATH))
+ {
+ clearVertexShaderCode = sr.ReadToEnd();
+ }
+
+ _clearProg = new SharpGL.Shaders.ShaderProgram();
+ _clearProg.Create(gl, clearVertexShaderCode, clearFragShaderCode, null);
+
+ gl.LinkProgram(_clearProg.ShaderProgramObject);
+
+ // Now that we've compiled and linked the shader, check it's link status. If it's not linked properly, we're
+ // going to throw an exception.
+ if (_clearProg.GetLinkStatus(gl) == false)
+ {
+ throw new SharpGL.Shaders.ShaderCompilationException(string.Format("Failed to link the clear shader program with ID {0}.", _clearProg.ShaderProgramObject), _clearProg.GetInfoLog(gl));
+ }
+
+ _clearRectangle = new float[] { -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 1.0f, 1.0f };
+ }
+
+ public void Draw(OpenGL gl, int width, int height)
+ {
+ // Uncomment lne below to change the background color.
+ //gl.ClearColor(1.0f, 0.0f, 1.0f, 1.0f);
+
+ gl.Viewport(0, 0, width, height);
+ gl.Ortho2D(0, width, 0, height);
+
+ gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer
+
+ int windowID = gl.GetUniformLocation(_prog.ShaderProgramObject, "window");
+ int nID = gl.GetUniformLocation(_prog.ShaderProgramObject, "n");
+ int baseHueID = gl.GetUniformLocation(_prog.ShaderProgramObject, "base_hue");
+ int colorizeID = gl.GetUniformLocation(_prog.ShaderProgramObject, "colorize");
+ int thicknessID = gl.GetUniformLocation(_prog.ShaderProgramObject, "thickness");
+ int minThicknessID = gl.GetUniformLocation(_prog.ShaderProgramObject, "min_thickness");
+ int thinningID = gl.GetUniformLocation(_prog.ShaderProgramObject, "thinning");
+ int decayID = gl.GetUniformLocation(_prog.ShaderProgramObject, "decay");
+ int desaturationID = gl.GetUniformLocation(_prog.ShaderProgramObject, "desaturation");
+
+ gl.Uniform2(windowID, (float)width, (float)height);
+ gl.Uniform1(nID, 5);
+ gl.Uniform1(thicknessID, 5.0f);
+ gl.Uniform1(minThicknessID, 1.5f);
+ gl.Uniform1(thinningID, 0.05f);
+ gl.Uniform1(baseHueID, 0.0f);
+ gl.Uniform1(colorizeID, 1);
+ gl.Uniform1(decayID, 0.3f);
+ gl.Uniform1(desaturationID, 0.1f);
+
+ // Run the clear program.
+ gl.UseProgram(_clearProg.ShaderProgramObject);
+
+ VertexBuffer clearVertexBuffer = new VertexBuffer();
+ clearVertexBuffer.Create(gl);
+ clearVertexBuffer.Bind(gl);
+ clearVertexBuffer.SetData(gl, 0, _clearRectangle, false, CLEAR_DATA_STRIDE);
+
+ // Attempt to get an available audio sample.
+ var data = _audioScope.GetSample();
+
+ if (data != null)
+ {
+ // Run the main program.
+ gl.UseProgram(_prog.ShaderProgramObject);
+
+ VertexBuffer vertexBuffer = new VertexBuffer();
+ vertexBuffer.Create(gl);
+ vertexBuffer.Bind(gl);
+ vertexBuffer.SetData(gl, 0, data, false, MAIN_DATA_STRIDE);
+
+ gl.DrawArrays(OpenGL.GL_LINE_STRIP_ADJACENCY, 0, data.Length);
+ }
+ }
+ }
+}
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/FormAudioScope.Designer.cs b/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/FormAudioScope.Designer.cs
new file mode 100755
index 000000000..f9bc16575
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/FormAudioScope.Designer.cs
@@ -0,0 +1,80 @@
+//-----------------------------------------------------------------------------
+// Filename: FormAudioScopeDesigner.cs
+//
+// Description: Initialise the Winfows Form portion of the Audio Scope demo.
+
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 29 Feb 2020 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System.Windows.Forms;
+
+namespace AudioScope
+{
+ partial class FormAudioScope
+ {
+ private System.ComponentModel.IContainer components = null;
+
+ private SharpGL.OpenGLControl openGLControl1;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormAudioScope));
+ this.openGLControl1 = new SharpGL.OpenGLControl();
+ ((System.ComponentModel.ISupportInitialize)(this.openGLControl1)).BeginInit();
+ this.SuspendLayout();
+ //
+ // openGLControl1
+ //
+ this.openGLControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
+ | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.openGLControl1.DrawFPS = false;
+ this.openGLControl1.Name = "openGLControl1";
+ this.openGLControl1.OpenGLVersion = SharpGL.Version.OpenGLVersion.OpenGL2_1;
+ this.openGLControl1.RenderContextType = SharpGL.RenderContextType.FBO;
+ this.openGLControl1.RenderTrigger = SharpGL.RenderTrigger.Manual;
+ this.openGLControl1.Size = new System.Drawing.Size(AUDIO_SCOPE_WIDTH, AUDIO_SCOPE_HEIGHT);
+ this.openGLControl1.TabIndex = 0;
+ this.openGLControl1.OpenGLInitialized += new System.EventHandler(this.OpenGLControl_OpenGLInitialized);
+ this.openGLControl1.OpenGLDraw += new SharpGL.RenderEventHandler(this.openGLControl1_OpenGLDraw);
+ this.openGLControl1.Dock = DockStyle.Fill;
+ //
+ // FormAudioScopeSample
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(AUDIO_SCOPE_WIDTH, AUDIO_SCOPE_HEIGHT);
+ this.Controls.Add(this.openGLControl1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "FormAudioScopeSample";
+ this.Text = "Audio Scope Sample";
+ ((System.ComponentModel.ISupportInitialize)(this.openGLControl1)).EndInit();
+ this.ResumeLayout(false);
+ }
+ }
+}
+
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/FormAudioScope.cs b/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/FormAudioScope.cs
new file mode 100755
index 000000000..58e767c76
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/FormAudioScope.cs
@@ -0,0 +1,111 @@
+//-----------------------------------------------------------------------------
+// Filename: FormAudioScope.cs
+//
+// Description: Initialise the Windows Form portion of the Audio Scope demo.
+
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 29 Feb 2020 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Numerics;
+using System.Windows.Forms;
+using SharpGL;
+
+namespace AudioScope
+{
+ public partial class FormAudioScope : Form
+ {
+ public const int AUDIO_SCOPE_WIDTH = 640;
+ public const int AUDIO_SCOPE_HEIGHT = 480;
+ public const int BYTES_PER_PIXEL = 3; // RGB = 3 bytes per pixel.
+
+ private bool _showWindow;
+ private AudioScope _audioScope;
+ private AudioScopeOpenGL _audioScopeGL;
+ private byte[] _pixelData;
+
+ ///
+ /// Note: If you want to see the Windows Form with the Audio Scope comment out this whole method.
+ ///
+ protected override CreateParams CreateParams
+ {
+ get
+ {
+ CreateParams cp = base.CreateParams;
+
+ if (!_showWindow)
+ {
+ // Remove WS_EX_APPWINDOW to ensure it won't appear in Alt+Tab
+ cp.ExStyle &= ~0x00040000; // WS_EX_APPWINDOW
+
+ // Add WS_EX_TOOLWINDOW to hide from Alt+Tab
+ cp.ExStyle |= 0x00000080; // WS_EX_TOOLWINDOW
+
+ // Ensure the window is layered (required for transparency)
+ cp.ExStyle |= 0x00080000; // WS_EX_LAYERED
+
+ // Make it transparent to mouse events
+ cp.ExStyle |= 0x00000020; // WS_EX_TRANSPARENT
+ }
+
+ return cp;
+ }
+ }
+
+ public FormAudioScope(bool showWindow)
+ {
+ _showWindow = showWindow;
+
+ _audioScope = new AudioScope();
+ _audioScopeGL = new AudioScopeOpenGL(_audioScope);
+
+ _pixelData = new byte[AUDIO_SCOPE_WIDTH * AUDIO_SCOPE_HEIGHT * BYTES_PER_PIXEL];
+
+ InitializeComponent();
+
+ if (!showWindow)
+ {
+ this.ShowInTaskbar = false; // remove from the taskbar
+ this.FormBorderStyle = FormBorderStyle.None;
+ this.Opacity = 0; // invisible, but "active"
+ this.StartPosition = FormStartPosition.Manual;
+ this.Enabled = false;
+ }
+ }
+
+ public byte[] ProcessAudioSample(Complex[] samples)
+ {
+ _audioScope.ProcessSample(samples);
+
+ openGLControl1.DoRender();
+
+ this.openGLControl1.OpenGL.ReadPixels(0, 0, AUDIO_SCOPE_WIDTH, AUDIO_SCOPE_HEIGHT, OpenGL.GL_RGB, OpenGL.GL_UNSIGNED_BYTE, _pixelData);
+
+ // The pizel buffer is upside down at this point. Because the audio scope is a circular pattern the effect of the flip is inconsequential
+ // so the processing effort is skipped.
+
+ return _pixelData;
+ }
+
+ private void OpenGLControl_OpenGLInitialized(object sender, EventArgs e)
+ {
+ OpenGL gl = this.openGLControl1.OpenGL;
+ _audioScopeGL.Initialise(gl);
+ }
+
+ private void openGLControl1_OpenGLDraw(object sender, RenderEventArgs e)
+ {
+ OpenGL gl = this.openGLControl1.OpenGL;
+ _audioScopeGL.Draw(gl, AUDIO_SCOPE_WIDTH, AUDIO_SCOPE_HEIGHT);
+
+ gl.Finish();
+ }
+ }
+}
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/FormAudioScope.resx b/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/FormAudioScope.resx
new file mode 100644
index 000000000..7ef0f1e76
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/AudioScope/FormAudioScope.resx
@@ -0,0 +1,518 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+
+ AAABAAgAICAQAAEABADoAgAAhgAAABAQEAABAAQAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA
+ CACoCAAAPhMAABAQAAABAAgAaAUAAOYbAAAwMAAAAQAgAKglAABOIQAAICAAAAEAIACoEAAA9kYAABAQ
+ AAABACAAaAQAAJ5XAAAoAAAAIAAAAEAAAAABAAQAAAAAAIACAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAA
+ gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcBQwYWNHRzd3AAAAAAAABwIEIFBBACAEBA
+ AAAAAAAAUHAUACBhQHAwBwAAAAAAAEIAQgcFAGAQQEcAAAAAAAgFBhQABgEEJDAHAAAAAAAHBCAQYWEF
+ JBAEBwAAAAAAA0FAYFN2ACQkMAcAAAAAAAFCAlA7cAU1AAQHAAAAAAACQUAFezcHNxYUBwAAAAAAcEMA
+ crkUA7cEACcAAAAAAHBAZJe3JBW3AlAHAAAAAABhIQE7t3lztRQAYQAAAAAABAQkF7e3t7NSUAYAAAAA
+ B0A3NRtxA3u3c1AFAAAAAANQB7h7NwBLe3s3BwAAAAABYCUzu7V1G1EzdxYAAAAABgUCQTizuDs0cCAA
+ AAAAAHAGAFA4MXO4t7UFJQAAAAB1AWAEs3AEu3NyBAMAAAAAQgYAUrcSQzcQAFIUAAAAADQBQhezQQWz
+ QWAEJAAAAAcAQ0AHNQBgNAJAFgEAAAAHcAA0ADQhQSQBJBBgAAAABwBDQAcABAJAFgQCQQAAAAc0AGEE
+ BSUBYEA0EEIAAAAAdDQ0BhIABgASUAYBAAAAAAAId3dHdDRwQCQWBAAAAAAAAAAAAAAHd3d0NDAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////gAAf/wAAH/8AAA//AAAP/gAAD/4A
+ AA/+AAAP/gAAD/4AAA/8AAAP/AAAD/wAAA/8AAAP+AAAD/gAAA/4AAAP+AAAD/AAAA/wAAAP8AAAD/AA
+ AA/gAAAP4AAAD+AAAA/gAAAP8AAAD/4AAA///4Af//////////8oAAAAEAAAACAAAAABAAQAAAAAAMAA
+ AAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/
+ AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAABxJQYWFwAAAGQCUlAHAAAAASUAAGcAAAgEA3Bw
+ BAAABwQzUzUHAAAGAXtTcCEAAAAXNztzVgAAdhezU3M0AABwA3N7cUMAAHBBNhcyUAAAQEM0AwFgAAAw
+ QhJSQHAAAHBDQEAABAAAAAB3d3cHAAAAAAAAAAAA//8AAPADAADwAwAA8AMAAOADAADgAwAA4AMAAOAD
+ AADAAwAAwAMAAMADAADAAwAAwAMAAMADAAD8AwAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAgAoAAAAA
+ AAAAAAAAAAEAAAAAAAAAAAAAHxYVAB8dHgAgFxUAIRgWACIZGAAkGhgAJhwaACIeHgAnHRwAKBwbACoe
+ HAApIB4ALCAeAB8jJQAfJysAJyAgACEiJAAgJCcAJiUmACkhIAAtIiAALiQiACglJQAtJiUAIiUoACYn
+ KQAkKCsAIigsACUpLAAsKywAMCQiADEmJAAyKCYANCgnADIqKQA1KigAMywrADcsKgA2LiwAOC0rADku
+ LAA2MC8AOjAuACArMAAmMTUAKjE0ACM1PAAzMDEANDM0ADkyMQA9MjAAOjQzAD40MgA5NTUAPTY0AD45
+ OAA9PT8AQDUzAEA2NABDODYAQDs6AEQ6OABGPDoAQz89AEU+PQBIPj0ASkA+ACQ5QQA0PEEAIkFMACtB
+ SQA3QUYAO0RIACJFUgAlRlMAKktXACRMWgAsTVoAOUtSADNPWgAmUF8ALVBeACVSYgAkVmgAKVhoADFV
+ YQA9XGgAJV1wACpidgAoY3gALGV5AC1ofQBFQEAAREVHAElCQQBMQkAATkRCAEhDRABKRUUAT0VEAERL
+ TgBPSkkAUEZFAFFIRwBTSUgAVEpJAFVMSgBSTU0AV05MAFhPTQBaUE8ARExQAFZSUgBXVFUAWFNTAFxS
+ UQBZVlUAXlVUAFVZWwBWXF8AXVlZAF1cXgBgV1YAYVhWAGNaWQBlXFsAYFxcAGZdXABoYF4AQFljAF1e
+ YABZYWUAXWluAEtncQBdbXQATnJ/AFpzfABadH8AY2FhAGRhYABnZGQAamJgAGtkYgBsZGMAaGVlAG5m
+ ZQBqaGcAamhoAG9sbABwaGcAcWppAHJvbwB3b24AdnBvAHZ0cwB2dXUAeXJxAHx0cwB6eHgAfn18AIJ6
+ eQCAfn4AhX59ACdshAAva4AAKm+GACdyiwAsdI4AKHaRACp5kwApfJgAMX+aAEF2iQBHfI4AVHWBADyE
+ nQArhaMAK4mpADCLqQA2jaoALI+xAC2StAAvmr4ANJy/AD2dvQBagY8AQYSaAFGDlQBYg5EAUIeaAFaH
+ mABViZsARI6oAESSrQBLkakAUpCmAEqXsgBCmLUARpq2AC6exAAznsMANZ3AADGfxAAuoMYALqLIAC6l
+ zQAyoMUAMKbNADmlygAup9AAL6jSAC+q1AAvrtgAMazVADat1QA5r9cAMK7YADGz3wA+tdwAMrXhADi3
+ 4QA+t+AAMbnnADy65AAxvOsAO77qAEijwgBFqswARK7RADLA7wA0wO8AOcDtADLB8gA2wvAAMsP0ADLF
+ 9gA2xfUAOMPyADjE8wAzx/gAM8j6ADTJ+gAzyv0ANMr8ADPM/gCCgIAAiYOCAI6HhwCRi4oAmpWUAKGb
+ mwCnoqEAq6alAK2opwD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCGBgY
+ JSUqMjQ4PV1iY2Zsc3V/f4uRlJicAAAAAAAAAAAAAAAAAAAAAAAAAAAAACkGBgYFBgUGBQQEBAQEBAME
+ AwQEBQUGBwcUQJwAAAAAAAAAAAAAAAAAAAAAAAAAjwoKCgsJCgoKCgoKCgcHBwcHBwYHBwYGBgYEAWIA
+ AAAAAAAAAAAAAAAAAAAAAAAAQw0NCwsLCwsLCw0LCwsLCwsLCwsLCwsLCwoHBCMAAAAAAAAAAAAAAAAA
+ AAAAAAAAKxUNDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQsLBhYAAAAAAAAAAAAAAAAAAAAAAAAAIh8NDQ0N
+ DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQsLBhUAAAAAAAAAAAAAAAAAAAAAAACXIBUNDQ0NDQ0NDQ0NDQ0NCw0N
+ DQsNDQ0NDQ0LBxT2AAAAAAAAAAAAAAAAAAAAAABpHxUNDQ0NDQ0NDQ0VFQ0NDQ0LDQ0NDQ0NDQsLBwyg
+ AAAAAAAAAAAAAAAAAAAAAAA1HxUNDQ0NDQ0NFSZBQykVDQsNCw0NDQ0NDQ0LBwyfAAAAAAAAAAAAAAAA
+ AAAAAAAiHw0NDQ0NDQ0NFk/BvGMgDQsNDQ0NDQ0NDQ0LBwmbAAAAAAAAAAAAAAAAAAAAAJ0gFQ0NDQ0N
+ DQ0LLs/13XAgDRUkNSsfDQsLDQ0LBwqYAAAAAAAAAAAAAAAAAAAAAG4gFQ0NDQ0NDQ0MW/D1zzEWCxZJ
+ iHg6FQ0NDQ0LBweVAAAAAAAAAAAAAAAAAAAAADsfFQ0NDQ0NDQsXt/XxpRUNDRSz7cdjIA0NDQ0LCgeT
+ AAAAAAAAAAAAAAAAAAAAACQfFQ0NDQ0NDQwt2vXQLg0LDB3T9dheIA0NDQ0LCgaNAAAAAAAAAAAAAAAA
+ AAAAoSAVDQ0NDQ0fKylO6fSlFQ0NCx3T9dc5Hw0NDQ0LCgaMAAAAAAAAAAAAAAAAAAAAdiAVDQ0LDQ0Y
+ V63K8+eCMyANDBvT9co2Fg0NCw0LBwZ/AAAAAAAAAAAAAAAAAAAAPh8VDQsNDQsdzPT19fC+emg+JhrN
+ 9bQrFQ0NDQ0LCgZ5AAAAAAAAAAAAAAAAAAAAJhYNDQ0LDQwHSs719fXv5cSKd0jW9bA1FQ0NDQ0LCgZ1
+ AAAAAAAAAAAAAAAAAAD3IBYNDRUWFQ0JBU3r9ezm8fTu29Hs9cZrNR8NDQ0LCgVxAAAAAAAAAAAAAAAA
+ AAB9IBUNFSlCYDskC1Ht8ahGVKvS6/X19ejAemErHw0LCgZsAAAAAAAAAAAAAAAAAABCHxUNC1DCwIdz
+ M1zz4UcKBgUPU83z9fXt5LqDZCkVCgZmAAAAAAAAAAAAAAAAAAAoHxUNClrs9OLjrsr13XAmDQsKBU3r
+ 9ebp8+3lvXIzCwZjAAAAAAAAAAAAAAAAAPkgFg0NChmk1vD19PP16q9rOiQfCVHs31JKq9rz7cNiHwZf
+ AAAAAAAAAAAAAAAAAI4gFQ0NCwcFLFS15vX19d7AhXVoMqr1zx4HAkSp1M9FFQZdAAAAAAAAAAAAAAAA
+ AGAfFQ0LDQ0LCgUCWOv19fXy4OXFu9z1uWY+JgwFHC0UCwY9AAAAAAAAAAAAAAAAACsfFQ0NDQ0NDQsH
+ S+nzyKqyzd/z9fX13r+JhGAgCgsLCgY7AAAAAAAAAAAAAAAAACEWDQ0LDQ0NDQ0KWfPpTAYCDkSn4fX1
+ 9fLv3oYpDQ0LCgY3AAAAAAAAAAAAAAAAlyAVDQ0NDQ0NDQ0Qs/XcRRULCgYCtfXz2c3S01YgDQsNCgY0
+ AAAAAAAAAAAAAAAAaR8VDQsNDQ0NCwst2fXJMBUNDQsTzPXZRBESGwwNDQ0NCgcyAAAAAAAAAAAAAAAA
+ NR8VDQ0NDQsNDQtV7fWsIRUNCwtH4fWoDAsKCwsNCw0LCQcnAAAAAAAAAAAAAAAAIR8NDQsNDQ0NCxe2
+ 9elSFQ0NDQmm89xHDQsNDQ0NDQ0LCwYlAAAAAAAAAAAAAACdIBUNDQ0NDQ0LDS3c9bYeDQ0NCwlRtVUU
+ DQ0NDQ0NCw0NCwYjAAAAAAAAAAAAAABtIBUNDQ0NDQ0NCxmrsUQLDQ0NDQsGEAcLDQ0NDQ0NDQ0NCwch
+ AAAAAAAAAAAAAAA8IBULDQ0NDQ0NCwcICAoLDQ0NDQ0LCwsNDQ0NDQ0NDQsNCwcYAAAAAAAAAAAAAAAz
+ IRUNDQsNDQ0NDQsLCw0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0LCwcWAAAAAAAAAAAAAAA6Jh8NDQ0NDQ0NDQ0N
+ DQ0NDQ0NDQ0NDQ0NDQ0NDQ0NCw0NCwcV9gAAAAAAAAAAAABDOyYgHxUVFQ0NDQ0NDQ0NCw0NDQsLCw0N
+ DQ0NDQ0NDQ0NCwcVogAAAAAAAAAAAACAZz86MysoJiQiISAfFh8VFRUNDQ0NDQ0NDQ0NDQ0NDQ0NCwcN
+ 9gAAAAAAAAAAAAD+gW9qaGRgQz8+PDs1MyspJiYkIiEgHxYWFRUVDQ0NDQsLCwcWAAAAAAAAAAAAAAAA
+ AAD7+aOeloB8dGtpaGRgQ0I/Pjw7NTMrKSgkIiIhIB8WCwo3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ +/mjnZKAe29raWhkYUNCPz48OjUrIhWaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/fr4
+ oZmQfnZuamdDPIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPz6AAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////AAD///////8AAP//
+ /////wAA//wAAAH/AAD/+AAAAH8AAP/wAAAAfwAA//AAAAB/AAD/8AAAAH8AAP/wAAAAfwAA/+AAAAA/
+ AAD/4AAAAD8AAP/gAAAAPwAA/+AAAAA/AAD/wAAAAD8AAP/AAAAAPwAA/8AAAAA/AAD/wAAAAD8AAP+A
+ AAAAPwAA/4AAAAA/AAD/gAAAAD8AAP+AAAAAPwAA/wAAAAA/AAD/AAAAAD8AAP8AAAAAPwAA/wAAAAA/
+ AAD+AAAAAD8AAP4AAAAAPwAA/gAAAAA/AAD+AAAAAD8AAP4AAAAAPwAA/AAAAAA/AAD8AAAAAD8AAPwA
+ AAAAPwAA/AAAAAA/AAD4AAAAAD8AAPgAAAAAPwAA+AAAAAA/AAD4AAAAAD8AAPgAAAAAHwAA+AAAAAAf
+ AAD4AAAAAB8AAPgAAAAAPwAA/wAAAAA/AAD//8AAAD8AAP///+AAfwAA//////n/AAD///////8AAP//
+ /////wAAKAAAACAAAABAAAAAAQAIAAAAAACABAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAhGBYAIxkYACUa
+ GQAmHBoAJx4dACgcGwAqHhwAKiAeACwgHgAiISMAJiEhACMlJwApIiEALiIgAC8kIgAoJSYALSYlACMm
+ KQAmJigAKCcpACYoKgAjKi4ALSkpACgrLgAoLC8AMCQiADImJAAxKCYANCgmADEqKQA2KykAMy0rADUs
+ KwA1Li0AOS0rADgtLAA3MS8AOzAuADwxLwAkLTEAKi0wACM3PwAlNz8ALzY6ACg2PQA5MTAAPTMxADo0
+ MgA9NDMAPDc2AD84NwA2NzkAMTg8ADQ6PQBBNjQAQjg2AEA5OQBEOTgARjw6AEQ+PQBJPz0AIz9JADI+
+ QwAqRE4ALURNADxITgAkRlIAJE1cAC1MWAA3T1kAKFFgAClWZgAsVmUAJlxuADtXYgA8XmsALmh8AEZC
+ QgBIQ0EATEJAAEtFRABDSEsAT0pJAE1LTABRR0UAUUhGAFBJSABTTU0AVU5NAFhOTQBaUU8ATk9RAFZS
+ UgBcVFIAXFdWAFJZXQBhWFYAYVpaAGBdXABnXl0AaGFfAEZdZQBKXWUAU1tgAEFsewBOb3oAU2x2AFFw
+ fABkYGAAamJhAGhlZABvZ2cAbGloAHFqaQB0bGsAd29uAHNwcAB5cnEAgXp5AIN8ewCAf38AKW+HAC5w
+ hwAscYgALXaOADl4jQApdpAAKXmVACx6lAAsfJgAKn+cAEl8jgApgZ4ALIOhACqEogAshaMALImoADGF
+ oQA1hqIAMIinADyPqwAtlLcALJW5ADGRsQAwlrkAMpm8ADyYuAA8nLwAQIGYAE+InABShJUAUIufAEON
+ pwBJjKMAT4+lAC2exAAynsMALqDGAC6iygAupMsANqHFADmjxgAxqdEAMKzWADGy3QA6s9wAPLPcADK2
+ 4gA+t+AAMrnmADa65gA5u+cAPLrkADW76AAxvOoAMb7tADS+7QA5v+wAQqjLAEGv1QBAsdcANsHvADLC
+ 8QA2wvEAMsT0ADjC8QAzx/gAM8j6ADPL/QAzzP4AiIKBAI+IiACRi4oAko2MAJ2XlwChm5oAsAB4AM8A
+ jgDwAKQA/xGzAP8xvgD/UccA/3HRAP+R3AD/seUA/9HwAP///wAAAAAALAAvAEsAUABpAHAAhwCQAKUA
+ sADEAM8A4QDwAPAR/wDyMf8A9FH/APZx/wD3kf8A+bH/APvR/wD///8AAAAAABsALwAtAFAAPwBwAFIA
+ kABjALAAdgDPAIgA8ACZEf8ApjH/ALRR/wDCcf8Az5H/ANyx/wDr0f8A////AAAAAAAIAC8ADgBQABUA
+ cAAbAJAAIQCwACYAzwAsAPAAPhH/AFgx/wBxUf8AjHH/AKaR/wC/sf8A2tH/AP///wAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAVxwRHCAiJTAzOTxOUVNZXWN5AAAAAAAAAAAAAAAAAGUGBgQGBAQEBAMDAwMDAgICASAAAAAAAAAA
+ AAAAAAAAOgkHBwcHBwcHBwcHBwcHBwcGA3UAAAAAAAAAAAAAAAAfDgkJCQkJCQkJCQkJCQkJCQcDcQAA
+ AAAAAAAAAAAAwhoJCQkJCQkJCQkJCQkICQkIBwNvAAAAAAAAAAAAAABuGgkJCQkHDzExGggICQkICQkH
+ A20AAAAAAAAAAAAAAFAOCQcJBwgsjYQkCQ4aDgkJCAcDYgAAAAAAAAAAAAAAIw4JCQcJCH28ixwJNGc5
+ DggJBwRfAAAAAAAAAAAAAAAbCQkHCQgYo7dFCQh7rGYaCQgHBF0AAAAAAAAAAAAAchoJCQkOH0GwkBEI
+ BYa8TBoIBwcGWAAAAAAAAAAAAABWDgkICBd+obyVOh0Ig7dGDgkJCARXAAAAAAAAAAAAACcOBwkHC3+5
+ vq2ba1KMrkIOCQgIBFEAAAAAAAAAAAAAGwkOHR0OEqC5nqSrprG4ajobCQgGTwAAAAAAAAAAAHYPCRdp
+ bFw2pJ0ZFkOHub6tmGg5GgY8AAAAAAAAAAAAWg4JFY62tZO5lDsaBxKgr5yuqZZOBzkAAAAAAAAAAAAx
+ DgkHFkqPt76yl2BPP6WKFD6Fo0sJMwAAAAAAAAAAAB0OCQkHBgqAvbCop7OivJlUMQ0oEAYwAAAAAAAA
+ AAB4GgkJCQkJB4K3SCpEhbe+urSaMgkHBi4AAAAAAAAAAF4PCQkJCQkUnqU1CAcMn7mJg3weCQkEJQAA
+ AAAAAAAAOA4JCQkJB0Cxkh4ICS2okRAGBQkJCQYhAAAAAAAAAAAdDgkJCQkIgbxNDgkHR6VJCQkJCQkJ
+ Bh4AAAAAAAAAvxoJCQkJCQV6iCkJCQcTKw0HCQkJCQkGHAAAAAAAAABkGgkJCQkJBwsLBwkJCQcHCQkJ
+ CQkJCAcRAAAAAAAAAFsdDgcHBwcJBwgJCAkJCQkJCQkJCQcJBQ8AAAAAAAAAcDgfGxoaDg4OCQkJBwgH
+ BwgHBwgJCQgHDQAAAAAAAAAAYlU9Ozo3LycjIx0dGxoPDgkJCQkHBwcRAAAAAAAAAAAAAADEwXh0bmFa
+ VlA9Ozo3LyYjHx0bCTsAAAAAAAAAAAAAAAAAAAAAAAAAAADDwHdzbmFaVT07AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////
+ ////gAAf/wAAH/8AAA//AAAP/gAAD/4AAA/+AAAP/gAAD/4AAA/8AAAP/AAAD/wAAA/8AAAP+AAAD/gA
+ AA/4AAAP+AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP4AAAD+AAAA/gAAAP8AAAD/4AAA///4Af////////
+ //8oAAAAEAAAACAAAAABAAgAAAAAAEABAAAAAAAAAAAAAAABAAAAAAAAAAAAACgdGwAqHhwALCAeACoi
+ IQAuIiAALyQiACsoKAAvKioAKSstADAkIgAxJiQAMigmADQoJgAyKigANSooADUsKgA2LSwAOTAuACkx
+ NQAtMTQAKTU6AC03PAA6MjEAPzc2ADc4OgAzOT0AQDUzAEI3NgBCOjoARTs5AEY/PQBIPzwASkA+AC49
+ QwAqQksAOkBDADxITQAqSFQALE5bADhKUQA4U10AK1NiACpbbQA8ZnUAMmd6AElCQQBOR0YAUklHAFVL
+ SQBSTEsAQldfAF9WVABjWlkAZV1cAEJeaABpYWAAbGRjAHRtbAB6c3IALW+HAC5xiAAvdo8AMHaOADN4
+ kAA1gZsAM4OeADqCmwAvg6AAMIelAD+HoAAxiKUANIqoADCNrQA/jqkALpq+ADCWuQAxm74AL5zBADKj
+ yQA8qM0AOK7VADSx2wA0s90AhoSEAIqDggCLhYMAlI6NAJyWlQA9/zEAW/9RAHn/cQCY/5EAtf+xANT/
+ 0QD///8AAAAAABQvAAAiUAAAMHAAAD2QAABMsAAAWc8AAGfwAAB4/xEAiv8xAJz/UQCu/3EAwP+RANL/
+ sQDk/9EA////AAAAAAAmLwAAQFAAAFpwAAB0kAAAjrAAAKnPAADC8AAA0f8RANj/MQDe/1EA4/9xAOn/
+ kQDv/7EA9v/RAP///wAAAAAALyYAAFBBAABwWwAAkHQAALCOAADPqQAA8MMAAP/SEQD/2DEA/91RAP/k
+ cQD/6pEA//CxAP/20QD///8AAAAAAC8UAABQIgAAcDAAAJA+AACwTQAAz1sAAPBpAAD/eREA/4oxAP+d
+ UQD/r3EA/8GRAP/SsQD/5dEA////AAAAAAAvAwAAUAQAAHAGAACQCQAAsAoAAM8MAADwDgAA/yASAP8+
+ MQD/XFEA/3pxAP+XkQD/trEA/9TRAP///wAAAAAALwAOAFAAFwBwACEAkAArALAANgDPAEAA8ABJAP8R
+ WgD/MXAA/1GGAP9xnAD/kbIA/7HIAP/R3wD///8AAAAAAC8AIABQADYAcABMAJAAYgCwAHgAzwCOAPAA
+ pAD/EbMA/zG+AP9RxwD/cdEA/5HcAP+x5QD/0fAA////AAAAAAAsAC8ASwBQAGkAcACHAJAApQCwAMQA
+ zwDhAPAA8BH/APIx/wD0Uf8A9nH/APeR/wD5sf8A+9H/AP///wAAAAAAGwAvAC0AUAA/AHAAUgCQAGMA
+ sAB2AM8AiADwAJkR/wCmMf8AtFH/AMJx/wDPkf8A3LH/AOvR/wD///8AAAAAAAgALwAOAFAAFQBwABsA
+ kAAhALAAJgDPACwA8AA+Ef8AWDH/AHFR/wCMcf8AppH/AL+x/wDa0f8A////AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAOg8OERIXGB0uVAAAAAAAABsCAwICAgICATIAAAAAAAALAwMODAMCAwIvAAAAAABWBQMEQCkI
+ GQMCLgAAAAAANQMDIk0WJ0MGAh8AAAAAAB4DB0dRNy1BBgIdAAAAAAAMGiU/ST1PUDMQGAAAAABXBSNI
+ UkYkPkVCLBgAAAAAOAMCCUtEQVNKKAkXAAAAACEDAxVMFBVOKxYDEQAAAAAPAgMmPAQTKgQDAxAAAAAA
+ CgMDBAQCAwICAwIOAAAAADEcEg8NCwYFAwMDDwAAAAAAAAAAWFU7OTQwIDYAAAAAAAAAAAAAAAAAAAAA
+ AAD//wAA8AMAAPADAADwAwAA4AMAAOADAADgAwAA4AMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAPwD
+ AAD//wAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAUAAAAIAAAACAAA
+ AAcAAAAHAAAABgAAAAUAAAAFAAAABAAAAAMAAAADAAAAAwAAAAIAAAACAAAAAgAAAAEAAAABAAAAAQAA
+ AAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFAAA
+ ACkAAAA0AAAANgAAADQAAAAxAAAALgAAACwAAAApAAAAJwAAACUAAAAjAAAAIQAAAB8AAAAdAAAAGwAA
+ ABkAAAAXAAAAFQAAABQAAAATAAAAEQAAABAAAAAPAAAADQAAAAkAAAAEAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAQAAAAbBgMDTQYEBHQGBAR/BgQEfwQEAnsEAgJ4AgICdQICAnECAABuAgAAawAAAGkAAABmAAAAYwAA
+ AGEAAABeAAAAWwAAAFgAAABVAAAAUwAAAFEAAABOAAAASwAAAEgAAABFAAAAQgAAADcAAAAiAAAACwAA
+ AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAQ0AABMXEBBuHBMSzxwUE+obExLqGhIR6BoTEeQZEhDiGRIR3hgRENsYERDZFhAP0xYP
+ DtAVDw/KFA4OxhMODcISDQy9EQwMuRELC7MQCwqvDgoKqw0JCacMCQmjDAgIngsICJsKBgaVBwUFjAIC
+ AngAAABZAAAAKgAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAXFFYkGhjoJBoY/yMZGP8jGRj/IhkX/yIZF/8iGRf/IhkX/yIZ
+ F/8hGBf/IRgX/yEYFv8hGBb/IRcW/yEXFv8gFxb+IBcW/iAXFf4fFxX9HxYV/B8WFfseFRT6HhUU+B0V
+ E/cdFBP2GxMS7xQPDcwFAwOKAAAATwAAABcAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhISDicdGq4oHRv/KB0b/ygdG/8oHRv/KB0b/ycc
+ G/8nHBr/Jxwa/yccGv8nHBr/Jxwa/yccGv8mHBr/Jhwa/yYbGv8mGxn/JhsZ/yUbGf8lGxn/JRsZ/yUb
+ Gf8kGxn/JBoZ/yQaGP8jGRj/IRcW/x4VFP0UDg7GAgAAZQAAACIAAAADAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKCEaJiwgHtorHx3/Kx8d/yof
+ Hf8qHx3/Kh8d/yofHf8qHx3/Kh8d/yofHf8qHx3/Kh4c/yoeHP8qHhz/Kh4c/yoeHP8qHhz/Kh4c/yke
+ HP8pHhz/KR4c/ykeHP8pHhz/KR4c/ykdG/8oHRv/JRsZ/yIYF/8cExLoBgQEdAAAACcAAAAEAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABKyEhTDAk
+ IvIuIiD/LCAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8qHx3/KB0b/yQaGP8fFhTuCAYGewAA
+ ACkAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAADLyUifDElI/wvIyH/LCAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/KR4c/yUb
+ Gf8fFxXxCggGfwAAACsAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAqFRUMMCYkrTElI/8uIiD/LCAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/KR4c/yYbGf8gFxTzCQcHggAAAC0AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuHh4hMiYl1TAkIv8tIR//LCAe/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8sIB7/LiIg/y4iIP8sIB7/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/KR4c/yYbGf8hFxX1CwkHhgAAAC8AAAAGAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEtISFEMiYk7zAkIv8tIR//Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/y0hH/83LCr/Rj08/0k/Pf84LSv/LSEf/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/KR4c/yYbGf8hFxX2DAkJiwAAADEAAAAHAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIxIyNyMSUk+y8j
+ If8sIB7/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/y4jIf85S1L/RI6o/1GDlf9LRUX/MSUj/ysf
+ Hf8rHx3/KyAe/ywgHv8sIB7/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/KR4c/yYbGf8hFxb3DgoIkAAA
+ ADQAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkZ
+ GQowJiWkMSUj/y4iIP8sIB7/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kh8d/yoxNP8xn8T/M8v+/zi3
+ 4f9ES07/MiYk/ysfHf8tIR//NSoo/z4zMv86Ly3/LyQi/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yYb
+ Gv8hFxb5DwoKlQAAADYAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAACQbGxwxJiXOMCUj/y0iIP8sIB7/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/KB4d/yxl
+ ef8zx/j/M8z//zKhx/80MzT/LiMh/ysfHf8tIiD/O0RI/05yf/9WXF//QDUz/y0hH/8rHx3/Kx8d/ysf
+ Hf8rHx3/Kh4c/yYbGv8hGBb6EAsLmQAAADgAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAACsiIjsxJyTrLyQi/y0hH/8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8qHhz/JyUm/y+avv8zzP//M8f5/y5pfv8sIiD/LCAe/yoeHf8oIiL/MIup/zXG9/9Gmrb/SkRE/zAl
+ I/8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yccGv8hGRf7EAwLngAAADsAAAAKAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS4kImgwJST6LyMh/ywhH/8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ywgHv8qHx3/JjI3/zGz3/8zzP//MKbN/yoxNf8rHx3/Kx8d/ykeHP8mKSz/L6fQ/zPM
+ //85r9f/REVH/zEmJP8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yccGv8iGRf8EQwMogAAAD0AAAAKAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8fCDEmJJoxJSP/LiIg/ywg
+ Hv8rHx3/Kx8d/ysfHf8rHx3/LyQi/zovLf84LSz/LE1a/zLC8v8zyfr/L2uA/ywiIP8rHx3/Kx8d/yke
+ HP8kKi3/L6nT/zPM//82rdX/PT0//zAkIv8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yccGv8iGRf9Eg0MpgAA
+ AD8AAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCEhFzEm
+ JccwJSP/LSIg/ywgHv8rHx3/Kx8d/ysfHf8rHx3/LiYm/z1caP9Bdon/NJy//zPL/f80wO//QFlj/zwy
+ MP8wJSP/LCAe/ykeHP8kKCv/L6fQ/zPM//81ncH/OTU1/y4jIf8rHx3/Kx8d/ysfHf8rHx3/Kh4c/ycc
+ Gv8jGRf+Ew0NqwAAAEEAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAALCIiNDEmJOcwJCL/LSEf/ysfHf8rHx3/Kx8d/ysfHf8qHhz/Jios/y+gxv80yfv/M8v+/zPM
+ //81xvf/UIea/15dXv9SSEf/RDo4/zYrKf8mJyn/LqLI/zPM//82jar/OC8u/y0hH/8rHx3/Kx8d/ysf
+ Hf8rHx3/Kh4c/yccGv8jGRj/FA4OrwAAAEQAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAABMCUjXjEmI/gvIyH/LCEf/ysfHf8rHx3/Kx8d/ysfHf8qHx3/JBwa/yNF
+ Uv8upc3/M8v+/zPM//8zzP//OMTz/0Wt0P9SkKb/WnR//1VZW/83QUb/MazV/zPL/v88hJ3/PjMy/y4i
+ IP8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yccGv8jGRj/FQ8OswAAAEcAAAAPAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAqKgAGLyUjkDEmJP4uIyH/LCAe/ysfHf8tIR//LiMh/y4i
+ IP8sIB7/KB4c/yIaGP8jTFv/MsLz/zPM//8yxvf/Mb/v/zPI+v80yvz/OMPy/z602/85pcr/M8X1/zPM
+ /v9CmLX/U01M/z0yMP8vIyH/LCAe/ysfHf8rHx3/Kh4c/yccGv8jGRj/FhAPuAAAAEkAAAAQAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoGhoTMSUjwDAlI/8tIiD/LCAe/y0h
+ H/84LSv/SD8+/0tBQP9BNjT/NCoo/ykeHP8nT13/M8b3/zPI+f8rc43/IkFM/yRXaf8pfJj/LqbO/zLD
+ 9P8zzP//M8z//zPM//85wO3/VoeZ/11cXv9NQ0H/OzAu/zAkIv8sIB7/Kh4c/yccGv8jGRj/FhAQvQAA
+ AEwAAAASAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsISEuMSYk4jAk
+ Iv8tIR//Kx8d/yofHf8zT1r/RJKt/1OJnP9dbXT/WFNT/z0zMf8saH3/M8r8/zO76f8vQUj/Jx0b/yMa
+ GP8gGhn/Hycr/yNTZP8uosn/M8v9/zPM//8zzP//N8X1/0eqzP9agY//XV5g/05FQ/85Liz/LSEf/ygc
+ G/8jGRj/FxEPwQAAAE8AAAATAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAEuIyNXMSYk9i8jIf8sIR//Kx8d/yccGv8oY3j/MsX2/zTK+/87vur/SKPC/0d8jv81ncD/M8z+/za2
+ 4f9ETFD/Nywq/ysgHv8pHhz/Jxwa/yEZF/8jSlj/MsLy/zPL/v8ywO//MsHx/zPK/f83xvb/RK/S/1iD
+ kf9XVFX/PDEw/yoeHf8kGhj/GBIQxgMAAFIAAAAUAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAUxJSOHMSYk/i4jIf8sIB7/Kx8d/ygdG/8hJSj/J2yE/y+r1f8yxvf/M8v+/zTK
+ /P8zyv3/M8z//zbC8P9UdYH/VExK/0A1M/81Kij/MCQi/ygdHP8nUV//MsX2/zK55/8nUWD/IkVS/yl7
+ lv8wtOD/M8r8/zfF9P9Lkan/SENE/y4jIf8kGhj/GRIQygMAAFQAAAAVAAAAAQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fHxAxJiS4MSUj/y4iIP8sIB7/Kx8d/yofHf8mHBr/IRsa/yAr
+ MP8kVmj/K5Cx/zG+7f8zzP//M8z//zPM/v8+t+D/V4ma/11pbv9ZVVb/UEhH/zkxMP8teJL/M8v+/zOh
+ xf8vLS7/JRwa/yAbG/8hNz//KHaR/y+q1P8yoMX/NzxA/ywiIP8kGhj/GRISzgICAlcAAAAXAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwfHygxJiTdMCQi/y0iIP8rHx3/Kx8d/ysf
+ Hf8rHx3/KR4c/yccGv8iGRj/Hx4f/yVdcP8yw/T/M8z//zPM//8zy/7/Ncj5/zy85v9Eq83/Spey/0GE
+ mv8ztuL/M8z//z2dvf9PSkr/Qzk3/zcsKv8pHx3/IRsb/yEpLf8lMDX/KSAf/ykeHP8kGhj/GhMS0wIC
+ AloAAAAYAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS0jIE4xJSTzLyQi/y0h
+ H/8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8qHhz/JRsZ/yVGU/8ywvP/M8v9/y6dw/8peJP/Koqq/y6i
+ yP8xuuf/M8n7/zPL/v8zzP//M8z//zy54v9Wh5j/WnN8/1lhZf9KQUD/MCUj/ygdG/8pHRz/Kh4c/ygd
+ G/8kGhj/GxIR1wICAlwAAAAZAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAy4m
+ In4xJiT9LiMh/ywgHv8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Jx0b/ypidv8zyfv/MsHx/ypL
+ V/8jGhn/IBsb/x8jJf8hOEL/J3KL/zG86v8zzP//M8z//zPM//81yfr/OMTz/z623v9LZ3H/OS4s/ywg
+ Hv8rHx3/Kh8d/ygdG/8kGhj/HRUS2gICAl8AAAAbAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAKhUVDDElJK8xJSP/LiIg/ywgHv8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/JyAg/y2J
+ qf8zzP//M7Xg/zI9Qv8tIR//KR4c/ygdG/8kGhj/Hx0e/yyPsf8zzP//M8r8/y+u2P8tocf/LqfQ/y+o
+ 0f8xVWH/MSUj/ywgHv8rHx3/Kx8d/ygdG/8lGhj/HBQT3QUCAmQAAAAdAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAALR4eIjImJNYwJCL/LSIg/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8qHhz/JzE1/zCu2P8zzP//M57D/zMwMf8uIiD/Kx8d/ysfHf8qHhz/JSUn/y6fxf8zzP//MazW/yU5
+ Qf8hIiT/ICQn/yMoLP8oIB7/Kx8d/ysfHf8rHx3/Kx8d/ygdG/8lGhn/HRUT4AQEAmcAAAAfAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLCEhRTImJO8vJCL/LSEf/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8pHhz/Klho/zPF9v8zy/7/MX+a/zEoJv8sIR//Kx8d/ysfHf8pHhz/KEBJ/zK7
+ 6f8zyv3/LnaP/ykgH/8pHRv/KB0b/ykdG/8qHhz/Kx8d/ysfHf8rHx3/Kx8d/ygdG/8lGhn/HhUU4wcE
+ BGsAAAAhAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADLiMjczEmJPwvIyH/LCAe/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/yofHf8oJSX/LpK0/zPM//8ywvL/LVBe/y0iIP8rHx3/Kx8d/ysf
+ Hf8nHRz/Km+G/zPK/P8xtuP/K0JL/ysfHv8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykd
+ HP8lGhn/HRUT5gYEBG8AAAAjAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGRkKMSYkpjEm
+ JP8uIiD/LCAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8lNDn/MLTg/zPL/v8vlLf/Kikr/ysg
+ Hv8rHx3/Kx8d/ysfHf8mHBv/JVBf/yyPsf8oWGn/KSAg/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ykdHP8lGxn/HhUU6AYEBHIAAAAlAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAtJCQcMick0DElI/8tIiD/LCAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8jJSj/KX2Z/yuF
+ o/8nOkH/KR4c/ysfHf8rHx3/Kx8d/ysfHf8pHRv/Ixsa/yMfH/8mHBv/Kh4c/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8lGxn/HxYU6wgGBHYAAAAmAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAvJiY7NCkn6zElI/8tIiD/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/yof
+ Hf8mHBr/Ih0d/yMeHv8oHRv/Kh8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yoeHP8qHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8lGxn/HxYV7QgGBnoAAAAoAAAABAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4LS1fOC0r+TInJf8tIiD/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8qHx3/Kh4c/yoeHP8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8mGxn/HxcV8AoG
+ Bn0AAAAqAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFANzVyPzQy/jcrKv8vIyH/LCAe/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/yke
+ HP8mGxn/IBgW8wsHB4EAAAAsAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABLQT9lST89/EA2
+ NP83Kyn/MSUj/y8jIf8uIiD/LSIg/y0hH/8sIB7/LCAe/ywgHv8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ykeHP8mGxn/IRgW9AsHB4QAAAAtAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AABUS0s2VkxL5VFHRf9GPDr/PzQy/zwwL/86Ly3/OC0r/zYrKf81KSf/Mygm/zInJf8xJiT/MCQi/y8k
+ Iv8vIyH/LiIg/y0hH/8tIR//LCAe/ywgHv8sIB7/KyAe/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8mGxr/IhcW9Q0JCYIAAAAoAAAABAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABfXz8IXlRTgV5WVO9aUE/+VEpJ/1BGRf9OREL/TEJA/0o/Pv9HPTv/RTo4/0M4
+ Nv9BNjX/PzQy/z0yMP87MC7/OS4s/zcsKv82Kyn/NSkn/zMoJv8yJyX/MSUj/zAlI/8vIyH/LiMh/y4i
+ IP8tIR//LSEf/ywgHv8sIB7/LCAe/ysfHf8rHx3/Kx8d/yoeHP8nHBr/IhkX8g0LCHIAAAAcAAAAAgAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAalVVDGVaV0lhWVd4XVRUkVxTUahcUlG8W1FQy1lQ
+ T9tZT07oWE5M8FdMS/ZUS0n8U0lI/lFHRv5PRUT/TUNB/0tBP/9JPj3/Rzw6/0U6OP9DODb/QDY0/z40
+ Mv89MjD/Oy8u/zkuLP83LCr/Niop/zQpJ/8zKCb/Micl/zElI/8wJCL/LiMh/ysfHf8oHRv/IxkY3w0K
+ CkwAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wABPz8/BFVV
+ VQZVVVUMXFFRFlxUVCFeU1MuX1NTQFxSUlNfVVJmXVNTfV1SUpRbU1GsW1FQvltRUM5ZUE/eWU9N6ldO
+ TfFWTUv4VEtJ/VNJR/5RR0b/T0VE/01DQf9LQT//ST89/0Y9O/9EOjj/Qjc1/0A1M/8+MzH/Oi8t/zMo
+ Jv8rHx38IxkYnggIAB0AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAf39/Aj8/PwRVVVUGW1tbDltR
+ URleV1AjYFFRMl1WUkRdVFJXXFNTa11TUYNcUlKaXFJSsFxRUMJbUVDSWVBP4VhPTutXTUzyVUxK+lRK
+ SP1RR0X+S0E//kE1NPsyKCa/HxQUMQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9/fwJ/Pz8EbUhIB19PTxBiWFgaWVJSJVtW
+ UTVdVlJHXVRSWltSUm9aUU+HU0pJlkg/PHE6KysjAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFVVVUDPz8/BAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAAP/wAA//gAAAA/AAD/8AAAAB8AAP/gAAAAHwAA/+AAAAAP
+ AAD/4AAAAA8AAP/gAAAADwAA/8AAAAAPAAD/wAAAAA8AAP/AAAAADwAA/8AAAAAPAAD/gAAAAA8AAP+A
+ AAAADwAA/4AAAAAPAAD/gAAAAA8AAP+AAAAADwAA/wAAAAAPAAD/AAAAAA8AAP8AAAAADwAA/wAAAAAP
+ AAD+AAAAAA8AAP4AAAAADwAA/gAAAAAHAAD+AAAAAAcAAPwAAAAABwAA/AAAAAAHAAD8AAAAAAcAAPwA
+ AAAABwAA+AAAAAAHAAD4AAAAAAcAAPgAAAAABwAA+AAAAAAHAADwAAAAAAcAAPAAAAAABwAA8AAAAAAH
+ AADwAAAAAAcAAPAAAAAABwAA8AAAAAAHAADgAAAAAAcAAPAAAAAABwAA8AAAAAAHAADwAAAAAAcAAPgA
+ AAAADwAA/gAAAAAPAAD//4AAAB8AAP///8AAPwAA//////D/AAD///////8AACgAAAAgAAAAQAAAAAEA
+ IAAAAAAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAFAAAADwAAABQAAAASAAAAEAAAAA8AAAANAAAACwAAAAoAAAAJAAAACAAAAAcAAAAGAAAABQAA
+ AAQAAAAEAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAACAkEBDYHBQVmBgQEbwQEBGsFAgJmBQICYQICAlwCAgJYAwMDVAMAAE8AAABLAAAARwAA
+ AEMAAABAAAAAPAAAADkAAAA0AAAAJwAAAA4AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAIbExNCHhUUxh4VE+scFBPrHBMS6BsUEuUbExLiGhMR3hkSEdoZERDWGBAP0hcR
+ EM0WEA/JFg8OxBQODb4UDQ25EgwMtBAMCqkHBQWCAAAAQAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAJBISDiYcGbEnHBr+Jxwa/yYcGv8mGxr/JhsZ/yUbGf8lGxn/JRsZ/yUb
+ Gf8lGhn/JBoY/yQaGP8kGhj/IxkY/yMZGP4iGRf+IBcV/RkTEOIIBAR1AAAAGAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArHx8pLSEf4isfHf8qHx3/Kh8d/yofHf8qHx3/Kh8d/yoe
+ HP8qHhz/Kh4c/yoeHP8qHhz/Kh4c/yoeHP8qHhz/KR4c/ykeHP8nHBr/IRcW+xELC5UAAAAfAAAAAQAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4lIlIwJCL2LSEf/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ykeHP8kGRj9Ew4MngAA
+ ACEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACLyYkhTAkIv4sIB7/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yUa
+ Gf4UDw6jAAAAJAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACoVFQwwJSS3LyMh/ywg
+ Hv8rHx3/Kx8d/ysfHf8rHx3/LiMh/zwzMv89NDP/LyMh/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8qHhz/JRoZ/hUPD6gAAAAmAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMiQkIzEm
+ I90uIiD/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8vNjr/PI+r/0l8jv84LSz/Kx8d/y0hH/8wJCL/LSEf/ysf
+ Hf8rHx3/Kx8d/yoeHP8lGxn+FxAQrgAAACkAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAwJiJJMSQj9C0hH/8rHx3/Kx8d/ysfHf8rHx3/KiAf/y12jv8zyfv/NYai/zIoJv8rHx3/Njc5/0pd
+ Zf9AOTj/LCEf/ysfHf8rHx3/Kh4c/yUbGf8YEQ+zAAAALAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAjAlI3owJCL9LCAe/ysfHf8rHx3/Kx8d/ysfHf8oKy7/MKnR/zK/7v8tTFj/LCAe/ykf
+ Hf8ucIf/Obvn/0ZdZf8vJCL/Kx8d/ysfHf8qHh3/Jhsa/xcRELkAAAAvAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAcHBwJMCYkri8jIf8sIB7/Kx8d/ysfHf8tIiD/Nisp/y1ETf8yvev/MZGx/ywm
+ J/8rHx3/Jx8d/yyDof8zx/j/PF5r/y8kIv8rHx3/Kx8d/yofHf8mGxr/GRERvgAAADIAAAACAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAACoiIh4wJiPWLiIg/ysfHf8rHx3/Kx8d/ywoKf85eI3/NqHF/zPJ
+ +/9AgZj/Qjk3/zQpJ/8pIB//K3+c/zPB8f83T1n/LiIg/ysfHf8rHx3/Kh8d/yYbGv8aEhDDAAAANQAA
+ AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyMjQDAlI/AtIR//Kx8d/ysfHf8rHx3/JiIi/yl2
+ kP8yxPT/M8z//zy65P9Pj6X/U2x2/0NIS/8wiKf/Nbvo/zxITv8uIiD/Kx8d/ysfHf8qHx3/Jhwa/xoT
+ EcgAAAA4AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEvJCRwMCQi/CwhH/8tIR//NCgn/zQp
+ J/8sIR//Iycp/y6ky/8yxPT/LqHH/zCs1v82uub/OrPc/zS+7f82wvH/Tm96/0I5N/8xJSP/LCAe/yof
+ Hf8mHBr/GxQSzAQAADwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJCQkBzAlI6QvJCL/LCAe/y0p
+ Kf9BbHv/UXB8/05PUf80Oj3/MK3X/zKew/8oLC//Iyou/yRGUv8qhKL/MsPz/zPM/v89uuT/UIuf/1Nb
+ YP9BODf/LyQi/yYcGv8cExLQAwMDQAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoHh4ZMSYjzy4j
+ If8rHx3/Jigq/y2Ut/82we//QLHX/zyYuP8zw/P/PJy8/0I6Ov8vJCL/KR4c/yMmKf8uo8v/Mbzq/y2e
+ xP8yueb/Prfg/0+InP9FQkP/KR8d/xwUE9UDAwNEAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0k
+ JDgwJSPsLSIg/ysfHf8oHhz/Iysv/yZcbv8slbn/MsHx/zPM//85v+z/UoSV/1JZXf9HQkL/Mj5D/zGy
+ 3f8xhaH/Jycp/yM/Sf8qgp//MqnR/ztXYv8rIB7/HRUU2AMDA0gAAAAGAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAABLyUjZjAkIvstIR//Kx8d/ysfHf8qHhz/Jxwb/yIhI/8peZX/M8v9/zG+7P8zt+P/PLPc/0Ko
+ y/85o8b/M8j6/0ONp/9NS0z/PTUz/ykjI/8kLTH/KSUm/yccGv8dFRPdAwMDTAAAAAcAAAAAAAAAAAAA
+ AAAAAAAAAAAAADMAAAUxJiSaLyQi/ywgHv8rHx3/Kx8d/ysfHf8rHx3/KB4d/yx8mP8ywvH/KVZm/yM3
+ P/8kTVz/KYCe/zLB8f8zzP//OMLx/0Gv1f9JjKP/PDc3/ysfHf8rHx3/Jxwa/x4VFOAGAwNQAAAACAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAJiYmFDAmI8guIyH/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8oJyn/L6DG/zOy
+ 3f8xODz/Kh8d/ygdG/8jJSf/LqLJ/zLD8/8siaj/Kn+c/yxxiP8vKyv/Kx8d/ysfHf8nHBr/HxYV4wYG
+ BlUAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAtIyMyMCUj6C0iIP8rHx3/Kx8d/ysfHf8rHx3/Kh8d/ypE
+ Tv8yvu3/Mpm8/zAqKv8rHx3/Kx8d/yg2Pf8xtuL/MJa5/yglJv8mHBv/Jx4c/ysfHf8rHx3/Kx8d/ycc
+ G/8gFhXmCAUFWgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAADAlI14xJCL5LSEf/ysfHf8rHx3/Kx8d/ysf
+ Hf8pHx7/LHqU/zPH+f8uaHz/LCEf/ysfHf8pHhz/KFFg/zCz3/8sVmX/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/KBwb/x8WFekIBQVfAAAACwAAAAAAAAAAAAAAAAAAAAAAAAADMCYkkjAkIv8sIB7/Kx8d/ysf
+ Hf8rHx3/Kx8d/ycfHv8pb4f/LIWj/yotMP8rHx3/Kx8d/yoeHP8lJij/JTc//yghIf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8oHRv/IBcV7AoHB2QAAAAMAAAAAAAAAAAAAAAAAAAAADMiIg81KSi/MCUj/ywg
+ Hv8rHx3/Kx8d/ysfHf8rHx3/Kh4c/yYgIP8mISH/Kh4d/ysfHf8rHx3/Kx8d/yofHf8qHhz/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ygdG/8gFxbuCQcHaAAAAA0AAAAAAAAAAAAAAAAAAAAAODg4Gz0y
+ MNg0KCb/LSEf/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/KB0b/yAXFvELBwdtAAAADwAAAAAAAAAAAAAAAAAA
+ AABIPDwVTEJBzEI3Nv82Kyn/MiYk/zAlI/8vIyH/LiIg/y0hH/8tIR//LCAe/ywgHv8sIB7/Kx8d/ysf
+ Hf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8rHx3/Kx8d/ysfHf8oHRv/IRgX8w0JCW8AAAAPAAAAAAAA
+ AAAAAAAAAAAAAFVVVQNbUlB1WE9O7k9FQ/xKPz7+Rzw6/0Q5OP9BNjT/PjMy/zwxL/85Liz/Nysq/zUp
+ J/8zKCb/MSYk/zAkIv8vIyH/LiIg/y0hH/8sIR//LCAe/ywgHv8rHx3/Kx8d/ykdG/8iGRjxDwoKYQAA
+ AAoAAAAAAAAAAAAAAAAAAAAAAAAAAFxcXAtjW1dAX1RUY1tRUXpbUE+RWVBOqFhOTbxXTUvNVEtK3FJJ
+ R+hRRkXyTkNC+EtBQP1JPz3+Rjw6/0M5N/9BNjT/PjMx/zswLv85LSv/Nisp/zQpJ/8yJyX/LCEf/yQb
+ GNgOCQk2AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH9/fwJmZmYFXFxcC1lZ
+ WRRaUlIfYFRULVtTUz1bUVFRXFJQZltQTn5aT0+WWU9Pq1hOTb9VTErQVEpJ3lNJR+lQRkXzTUNB+Uc9
+ O/w6Ly3tKB8dcgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX9/fwJVVVUGalVVDFxRURZcVFQhX1VPMFtT
+ U0BbUU5UVUtJZUc8OEQzMxkKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAH/8AAAf+AAAH/gAAB/4A
+ AAP+AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP4AAAD+AAAA/gAAAPwAAAD8AAAA/AAAAPwAAAD4AAAA+AA
+ AAPgAAAD4AAAA+AAAAPAAAADwAAAA8AAAAPAAAADwAAAA+AAAAP+AAAH//8AD/////8oAAAAEAAAACAA
+ AAABACAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoKChkLBwdECwcHRQgI
+ CD4IBAQ5CgUFMwUFBS4GBgYpBwAAJAAAABIAAAABAAAAAAAAAAAAAAAAAAAAACoVFQwkGRehIRcW6iAY
+ FekgFxbmHxYV4h8VFN4eFRPZHBQU1BsUEswPCwuAAAAADQAAAAAAAAAAAAAAAAAAAAAtISEtLSEe5yof
+ Hf8qHx3/Kh8d/yoeHf8qHhz/Kh4c/yoeHP8oHRv/HBUTwgAAABgAAAAAAAAAAAAAAAAAAAAAMCUiWS4h
+ H/krHx3/Kx8d/zApKP8xKCf/Kx8d/ysfHf8rHx3/Kh4c/x8WFckJCQAbAAAAAAAAAAAAAAAAAAAAAjAl
+ Io4tIR//Kx8d/ysjI/8zeJD/OFNd/y8qKv83ODr/LCAe/yoeHP8gFhbOCAgIHwAAAAAAAAAAAAAAACcn
+ Jw0wJCK/LCAe/ywhH/8uPUP/MZu+/y03PP8sTlv/OoKb/y8kIv8qHx3/IBgV0wcHByMAAAAAAAAAAAAA
+ AAAtJyAnLiIg4isfHf8rKCj/MYil/ziu1f9CXmj/Mmd6/zaBm/8uIyH/Kh8d/yEXFtgNBgYnAAAAAAAA
+ AAAAAAAAMCMjTy0iIPczOT3/PEhN/zB2jv8wja3/LnGI/zKjyf88qM3/Qldf/zMrKv8hGBfcCwUFKwAA
+ AAAAAAAAAAAAATAkI4MsIR/+KkJL/zSKqP80sdv/P4eg/zpAQ/8vdo//MIel/zODnv88ZnX/JRwb4AoK
+ CjAAAAAAAAAAADMZGQovJCK3LCAe/yofHf8oKy7/Lpq+/y+DoP80gZv/NLPd/z+Oqf84SlH/Kist/yIZ
+ GOQOCQk1AAAAAAAAAAAuJiYhLyMh3SsfHf8rHx3/KjU6/zCWuf8tMTT/KDU6/y+cwf8qW23/LTc8/ysf
+ Hf8jGRfnDQgIOgAAAAAAAAAALyQkRi0iIPQrHx3/Kx8d/ypIVP8tb4f/KyIh/ykxNf8rU2L/KyEg/ysf
+ Hf8rHx3/IxoX6g8LC0AAAAAAAAAAADktK28wJCL+Kx8d/ysfHf8pIiL/KiMj/ysfHf8rHx3/Kh8d/ysf
+ Hf8rHx3/Kx8d/yQZGO0OCwtFAAAAAAAAAABPQ0NXRjs56jwxMPc5Liz8Nisp/jQoJv8xJiT/LyQi/y4i
+ IP8tIR//LCAe/ywgHv8lGhjtEw8LQgAAAAAAAAAAVFRUCV1TTjRUTkpLVUpHYFNIRndRRkWQTUNBp0pB
+ QLtIPj3MRTs520E4Neg9MzDwLiMiuxwSEhsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAX8/
+ PwRmTEwKY1RUEldPTx1YU00rVEdHOUQzMx4AAAABAAAAAPABAADgAQAA4AEAAOABAADAAQAAwAEAAMAB
+ AADAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAPwBAAA=
+
+
+
\ No newline at end of file
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/Program.cs b/examples/WebRTCExamples/WebRTCOpenGL/Program.cs
new file mode 100755
index 000000000..120f17b7b
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/Program.cs
@@ -0,0 +1,195 @@
+//-----------------------------------------------------------------------------
+// Filename: Program.cs
+//
+// Description: An example WebRTC server application that uses OpenGL to produce
+// a video stream for the remote peer. In this case OpenGL is used to process the
+// received audio stream from the remote peer and generates a visual representation
+// which is sent back in a video stream.
+//
+// The high level steps are:
+// 1. Establish a WebRTC peer connection with a remote peer with a receive only
+// audio stream and a send only video stream.
+// 2. Receive audio packets from the remote peer and process them with the OpenGL
+// program to generate a visual representation of teh received audio samples.
+// 3. Send the visual representation back to the remote peer as a video stream.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 04 Jan 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
+using Serilog;
+using Serilog.Extensions.Logging;
+using SIPSorcery.Media;
+using SIPSorcery.Net;
+using SIPSorceryMedia.Encoders;
+using WebSocketSharp.Server;
+using AudioScope;
+using System.Numerics;
+using SIPSorceryMedia.Abstractions;
+
+namespace demo
+{
+ class Program
+ {
+ private const int WEBSOCKET_PORT = 8081;
+ private const int AUDIO_PACKET_DURATION = 20; // 20ms of audio per RTP packet for PCMU & PCMA.
+
+ private static Microsoft.Extensions.Logging.ILogger logger = NullLogger.Instance;
+
+ private static FormAudioScope _audioScopeForm;
+ private static RTCPeerConnection _pc;
+
+ static void Main()
+ {
+ Console.WriteLine("WebRTC OpenGL Demo - Audio Scope");
+
+ logger = AddConsoleLogger();
+
+ // Spin up a dedicated STA thread to run WinForms.
+ Thread uiThread = new Thread(() =>
+ {
+ // WinForms initialization must be on an STA thread.
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+
+ _audioScopeForm = new FormAudioScope(false);
+
+ Application.Run(_audioScopeForm);
+ });
+
+ uiThread.SetApartmentState(ApartmentState.STA);
+ uiThread.IsBackground = true;
+ uiThread.Start();
+
+ // Start web socket.
+ Console.WriteLine("Starting web socket server...");
+ var webSocketServer = new WebSocketServer(IPAddress.Any, WEBSOCKET_PORT);
+ webSocketServer.AddWebSocketService("/", (peer) =>
+ {
+ // For the purposes of the demo only one peer conenction at a time is managed.
+ peer.CreatePeerConnection = CreatePeerConnection;
+ _pc = peer.RTCPeerConnection;
+ });
+ webSocketServer.Start();
+
+ Console.WriteLine($"Waiting for web socket connections on {webSocketServer.Address}:{webSocketServer.Port}...");
+ Console.WriteLine("Press ctrl-c to exit.");
+
+ // Ctrl-c will gracefully exit the call at any point.
+ ManualResetEvent exitMre = new ManualResetEvent(false);
+ Console.CancelKeyPress += delegate (object sender, ConsoleCancelEventArgs e)
+ {
+ Console.WriteLine("Exiting...");
+
+ e.Cancel = true;
+
+ _pc?.Close("User exit");
+
+ _audioScopeForm.Invoke(() => _audioScopeForm.Close());
+
+ exitMre.Set();
+ };
+
+ // Wait for a signal saying the call failed, was cancelled with ctrl-c or completed.
+ exitMre.WaitOne();
+ }
+
+ private static Task CreatePeerConnection()
+ {
+ RTCConfiguration config = new RTCConfiguration
+ {
+ //iceServers = new List { new RTCIceServer { urls = STUN_URL } },
+ //X_BindAddress = IPAddress.Any
+ };
+ var pc = new RTCPeerConnection(config);
+
+ var videoEncoderEndPoint = new VideoEncoderEndPoint();
+ var audioEncoder = new AudioEncoder();
+
+ // For the sake of the demo stick to a basic audio format with a predictable sampling rate.
+ var supportedAudioFormats = new List
+ {
+ new AudioFormat(SDPWellKnownMediaFormatsEnum.PCMU),
+ new AudioFormat(SDPWellKnownMediaFormatsEnum.PCMA),
+ };
+
+ MediaStreamTrack videoTrack = new MediaStreamTrack(videoEncoderEndPoint.GetVideoSourceFormats(), MediaStreamStatusEnum.SendOnly);
+ pc.addTrack(videoTrack);
+ MediaStreamTrack audioTrack = new MediaStreamTrack(supportedAudioFormats, MediaStreamStatusEnum.RecvOnly);
+ pc.addTrack(audioTrack);
+
+ videoEncoderEndPoint.OnVideoSourceEncodedSample += pc.SendVideo;
+
+ pc.OnVideoFormatsNegotiated += (formats) => videoEncoderEndPoint.SetVideoSourceFormat(formats.First());
+ pc.oniceconnectionstatechange += (state) => logger.LogDebug($"ICE connection state change to {state}.");
+ pc.onconnectionstatechange += (state) => logger.LogDebug($"Peer connection state change to {state}.");
+ pc.onsignalingstatechange += () =>
+ {
+ logger.LogDebug($"Signalling state change to {pc.signalingState}.");
+
+ if (pc.signalingState == RTCSignalingState.have_local_offer)
+ {
+ logger.LogDebug($"Local SDP offer:\n{pc.localDescription.sdp}");
+ }
+ else if (pc.signalingState == RTCSignalingState.stable)
+ {
+ logger.LogDebug($"Remote SDP offer:\n{pc.remoteDescription.sdp}");
+ }
+ };
+
+ pc.OnRtpPacketReceived += (IPEndPoint rep, SDPMediaTypesEnum media, RTPPacket rtpPkt) =>
+ {
+ //logger.LogDebug($"RTP {media} pkt received, SSRC {rtpPkt.Header.SyncSource}, payload {rtpPkt.Header.PayloadType}, SeqNum {rtpPkt.Header.SequenceNumber}.");
+
+ if (media == SDPMediaTypesEnum.audio)
+ {
+ var decodedSample = audioEncoder.DecodeAudio(rtpPkt.Payload, pc.AudioStream.NegotiatedFormat.ToAudioFormat());
+
+ var samples = decodedSample
+ .Select(s => new Complex(s / 32768f, 0f))
+ .ToArray();
+
+ var frame = _audioScopeForm.Invoke(() => _audioScopeForm.ProcessAudioSample(samples));
+
+ videoEncoderEndPoint.ExternalVideoSourceRawSample(AUDIO_PACKET_DURATION,
+ FormAudioScope.AUDIO_SCOPE_WIDTH,
+ FormAudioScope.AUDIO_SCOPE_HEIGHT,
+ frame,
+ VideoPixelFormatsEnum.Rgb);
+ }
+ };
+
+ return Task.FromResult(pc);
+ }
+
+ ///
+ /// Adds a console logger. Can be omitted if internal SIPSorcery debug and warning messages are not required.
+ ///
+ private static Microsoft.Extensions.Logging.ILogger AddConsoleLogger()
+ {
+ var seriLogger = new LoggerConfiguration()
+ .Enrich.FromLogContext()
+ .MinimumLevel.Is(Serilog.Events.LogEventLevel.Debug)
+ .WriteTo.Console()
+ .CreateLogger();
+ var factory = new SerilogLoggerFactory(seriLogger);
+ SIPSorcery.LogFactory.Set(factory);
+ return factory.CreateLogger();
+ }
+ }
+}
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/WebRTCOpenGL.csproj b/examples/WebRTCExamples/WebRTCOpenGL/WebRTCOpenGL.csproj
new file mode 100755
index 000000000..a11aca3d6
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/WebRTCOpenGL.csproj
@@ -0,0 +1,44 @@
+
+
+
+ Exe
+ net8.0-windows10.0.17763.0
+ true
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/audioscope.html b/examples/WebRTCExamples/WebRTCOpenGL/audioscope.html
new file mode 100755
index 000000000..8bb3521cf
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/audioscope.html
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/shaders/clear/clear.frag b/examples/WebRTCExamples/WebRTCOpenGL/shaders/clear/clear.frag
new file mode 100644
index 000000000..f67beb369
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/shaders/clear/clear.frag
@@ -0,0 +1,9 @@
+#version 150
+
+uniform float decay;
+
+out vec4 color;
+
+void main() {
+ color = vec4(0.0, 0.0, 0.0, decay);
+}
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/shaders/clear/clear.vert b/examples/WebRTCExamples/WebRTCOpenGL/shaders/clear/clear.vert
new file mode 100644
index 000000000..aab83f9cd
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/shaders/clear/clear.vert
@@ -0,0 +1,7 @@
+#version 150
+
+in vec2 vec;
+
+void main() {
+ gl_Position = vec4(vec, 1.0, 1.0);
+}
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/shaders/line/line.frag b/examples/WebRTCExamples/WebRTCOpenGL/shaders/line/line.frag
new file mode 100644
index 000000000..fe2602ee5
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/shaders/line/line.frag
@@ -0,0 +1,30 @@
+#version 150
+
+uniform bool colorize;
+uniform float base_hue;
+uniform float decay;
+uniform float desaturation;
+
+in float relative_length;
+in vec2 angle;
+in float position;
+
+out vec4 color;
+
+// https://github.com/hughsk/glsl-hsv2rgb
+vec3 hsv2rgb(vec3 c) {
+ vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
+ vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
+ return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
+}
+
+void main() {
+ float alpha = mix(1.0 - decay, 1.0, position);
+ if (colorize) {
+ float phase = log2(angle.x);
+ float saturation = exp2(-desaturation * angle.y); // more noise -> less saturation
+ color = vec4(hsv2rgb(vec3(base_hue + phase, saturation, 1.0)), alpha);
+ } else {
+ color = vec4(hsv2rgb(vec3(base_hue, 1.0, 1.0)), alpha);
+ }
+}
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/shaders/line/line.geom b/examples/WebRTCExamples/WebRTCOpenGL/shaders/line/line.geom
new file mode 100644
index 000000000..7dfb47a66
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/shaders/line/line.geom
@@ -0,0 +1,117 @@
+#version 150
+
+uniform uint n;
+uniform vec2 window;
+uniform float thickness;
+uniform float min_thickness;
+uniform float thinning;
+
+layout(lines_adjacency) in;
+layout(triangle_strip, max_vertices = 5) out;
+
+in vec2[] angular_velocity;
+
+out float relative_length;
+out vec2 angle;
+out float position;
+
+void emit_position(vec2 pos) {
+ gl_Position = vec4(pos / window, 0.0, 1.0);
+ EmitVertex();
+}
+
+float get_thickness(float len) {
+ float x = n * len;
+ return mix(min_thickness, thickness, 1.0 / (1.0 + thinning * x * x));
+}
+
+// heavily based on paul houx's miter polylines
+// https://github.com/paulhoux/Cinder-Samples/blob/master/GeometryShader/assets/shaders/lines2.geom
+void main() {
+ // get the four vertices passed to the shader:
+ vec2 p0_ = gl_in[0].gl_Position.xy;
+ vec2 p1_ = gl_in[1].gl_Position.xy;
+ vec2 p2_ = gl_in[2].gl_Position.xy;
+ vec2 p3_ = gl_in[3].gl_Position.xy;
+
+ // relative length of first two segments (NOT in terms of screen coordinates)
+ float length_a_ = distance(p0_, p1_);
+ float length_b_ = distance(p1_, p2_);
+
+ // transform to screen coordinates
+ // and also make it square
+ float side = min(window.x, window.y);
+ vec2 square = vec2(side, side);
+ vec2 p0 = p0_ * square;
+ vec2 p1 = p1_ * square;
+ vec2 p2 = p2_ * square;
+ vec2 p3 = p3_ * square;
+ float length_b = distance(p1, p2);
+
+ // vectors for the 3 segments (previous, current, next)
+ vec2 v0 = p1 - p0;
+ vec2 v1 = p2 - p1;
+ vec2 v2 = p3 - p2;
+
+ // the normal of each of the 3 segments (previous, current, next)
+ vec2 n0 = normalize(vec2(-v0.y, v0.x));
+ vec2 n1 = normalize(vec2(-v1.y, v1.x));
+ vec2 n2 = normalize(vec2(-v2.y, v2.x));
+
+ // miter lines by averaging the normals of the 2 segments
+ vec2 miter_a_norm = normalize(n0 + n1); // miter at start of current segment
+ vec2 miter_b_norm = normalize(n1 + n2); // miter at end of current segment
+
+ // thicknesses at p1 and p2
+ // float thickness_adjusted = thickness * mix(1.0, thickness, thinning);
+ // float thickness_a = max(min_thickness, min(thickness, thickness_adjusted / mix(1.0, n * length_a_, thinning)));
+ // float thickness_b = max(min_thickness, min(thickness, thickness_adjusted / mix(1.0, n * length_b_, thinning)));
+ float thickness_a = get_thickness(length_a_);
+ float thickness_b = get_thickness(length_b_);
+
+ // the length of the miter by projecting it onto normal and then inverse it
+ // also bound the length
+ float miter_a_length = abs(thickness_a / dot(miter_a_norm, n1));
+ float miter_a_length_max = abs(length_b / dot(miter_a_norm, v1));
+ float miter_b_length = abs(thickness_b / dot(miter_b_norm, n1));
+ float miter_b_length_max = abs(length_b / dot(miter_b_norm, v1));
+ vec2 miter_a = miter_a_norm * min(miter_a_length, max(thickness, miter_a_length_max));
+ vec2 miter_b = miter_b_norm * min(miter_b_length, max(thickness, miter_b_length_max));
+
+ float n = n;
+ position = gl_in[1].gl_Position.z;
+ relative_length = length_a_;
+ angle = angular_velocity[1];
+ if(dot(v0, n1) > 0) {
+ // start at negative miter
+ emit_position(p1 - miter_a);
+ // proceed to positive normal
+ emit_position(p1 + thickness_a * n1);
+ } else {
+ // start at negative normal
+ emit_position(p1 - thickness_a * n1);
+ // proceed to positive miter
+ emit_position(p1 + miter_a);
+ }
+
+ position = gl_in[2].gl_Position.z;
+ relative_length = length_b_;
+ angle = angular_velocity[2];
+ if (dot(v2, n1) < 0) {
+ // proceed to negative miter
+ emit_position(p2 - miter_b);
+ // proceed to positive normal
+ emit_position(p2 + thickness_b * n1);
+ // end at positive normal
+ emit_position(p2 + thickness_b * n2);
+ } else {
+ // proceed to negative normal
+ emit_position(p2 - thickness_b * n1);
+ // proceed to positive miter
+ emit_position(p2 + miter_b);
+ // end at negative normal
+ emit_position(p2 - thickness_b * n2);
+ }
+
+ EndPrimitive();
+}
diff --git a/examples/WebRTCExamples/WebRTCOpenGL/shaders/line/line.vert b/examples/WebRTCExamples/WebRTCOpenGL/shaders/line/line.vert
new file mode 100644
index 000000000..25b686a0c
--- /dev/null
+++ b/examples/WebRTCExamples/WebRTCOpenGL/shaders/line/line.vert
@@ -0,0 +1,19 @@
+#version 150
+
+uniform vec2 window;
+uniform uint n;
+uniform float decay;
+
+in vec4 vec;
+out vec2 angular_velocity;
+
+void main() {
+ float n = n;
+ float z = (gl_VertexID - 1) / (n - 2);
+ if (window.y > window.x) {
+ gl_Position = vec4(vec.x, vec.y, z, 1.0);
+ } else {
+ gl_Position = vec4(vec.y, vec.x, z, 1.0);
+ }
+ angular_velocity = vec.zw;
+}
diff --git a/examples/WebRTCExamples/WebRTCReceiveAudio/Program.cs b/examples/WebRTCExamples/WebRTCReceiveAudio/Program.cs
old mode 100644
new mode 100755
index 4f3c517ab..feb434de3
--- a/examples/WebRTCExamples/WebRTCReceiveAudio/Program.cs
+++ b/examples/WebRTCExamples/WebRTCReceiveAudio/Program.cs
@@ -62,7 +62,6 @@ protected override void OnClose(CloseEventArgs e)
class Program
{
- //private const string LOCALHOST_CERTIFICATE_PATH = "certs/localhost.pfx";
private const int WEBSOCKET_PORT = 8081;
private static Microsoft.Extensions.Logging.ILogger logger = NullLogger.Instance;
@@ -83,9 +82,6 @@ static void Main()
// Start web socket.
Console.WriteLine("Starting web socket server...");
_webSocketServer = new WebSocketServer(IPAddress.Any, WEBSOCKET_PORT, false);
- //_webSocketServer.SslConfiguration.ServerCertificate = new System.Security.Cryptography.X509Certificates.X509Certificate2(LOCALHOST_CERTIFICATE_PATH);
- //_webSocketServer.SslConfiguration.CheckCertificateRevocation = false;
- //_webSocketServer.Log.Level = WebSocketSharp.LogLevel.Debug;
_webSocketServer.AddWebSocketService("/", (sdpExchanger) =>
{
sdpExchanger.WebSocketOpened += SendSDPOffer;
@@ -113,29 +109,31 @@ private static async Task SendSDPOffer(WebSocketContext conte
var peerConnection = new RTCPeerConnection(null);
// Sink (speaker) only audio end point.
- WindowsAudioEndPoint windowsAudioEP = new WindowsAudioEndPoint(new AudioEncoder(), -1, -1, true, false);
-
+ WindowsAudioEndPoint windowsAudioEP = new WindowsAudioEndPoint(new AudioEncoder(includeOpus: false), -1, -1, true, false);
+ //windowsAudioEP.RestrictFormats(x => x.FormatName == "OPUS");
+ windowsAudioEP.OnAudioSinkError += err => logger.LogWarning($"Audio sink error. {err}.");
+
MediaStreamTrack audioTrack = new MediaStreamTrack(windowsAudioEP.GetAudioSinkFormats(), MediaStreamStatusEnum.RecvOnly);
peerConnection.addTrack(audioTrack);
peerConnection.OnAudioFormatsNegotiated += (audioFormats) =>
windowsAudioEP.SetAudioSinkFormat(audioFormats.First());
peerConnection.OnReceiveReport += RtpSession_OnReceiveReport;
- peerConnection.OnSendReport += RtpSession_OnSendReport;
+ peerConnection.OnSendReportByIndex += RtpSession_OnSendReportByIndex;
peerConnection.OnTimeout += (mediaType) => logger.LogDebug($"Timeout on media {mediaType}.");
peerConnection.oniceconnectionstatechange += (state) => logger.LogDebug($"ICE connection state changed to {state}.");
peerConnection.onconnectionstatechange += async (state) =>
{
logger.LogDebug($"Peer connection connected changed to {state}.");
- if(state == RTCPeerConnectionState.connected)
+ if (state == RTCPeerConnectionState.connected)
{
- await windowsAudioEP.StartAudio();
+ await windowsAudioEP.StartAudioSink();
}
else if (state == RTCPeerConnectionState.closed || state == RTCPeerConnectionState.failed)
{
peerConnection.OnReceiveReport -= RtpSession_OnReceiveReport;
- peerConnection.OnSendReport -= RtpSession_OnSendReport;
+ peerConnection.OnSendReportByIndex -= RtpSession_OnSendReportByIndex;
await windowsAudioEP.CloseAudio();
}
@@ -144,6 +142,7 @@ private static async Task SendSDPOffer(WebSocketContext conte
peerConnection.OnRtpPacketReceived += (IPEndPoint rep, SDPMediaTypesEnum media, RTPPacket rtpPkt) =>
{
//logger.LogDebug($"RTP {media} pkt received, SSRC {rtpPkt.Header.SyncSource}.");
+
if (media == SDPMediaTypesEnum.audio)
{
windowsAudioEP.GotAudioRtp(rep, rtpPkt.Header.SyncSource, rtpPkt.Header.SequenceNumber, rtpPkt.Header.Timestamp, rtpPkt.Header.PayloadType, rtpPkt.Header.MarkerBit == 1, rtpPkt.Payload);
@@ -185,8 +184,10 @@ private static void WebSocketMessageReceived(RTCPeerConnection peerConnection, s
///
/// Diagnostic handler to print out our RTCP sender/receiver reports.
///
- private static void RtpSession_OnSendReport(SDPMediaTypesEnum mediaType, RTCPCompoundPacket sentRtcpReport)
+ private static void RtpSession_OnSendReportByIndex(int index, SDPMediaTypesEnum mediaType, RTCPCompoundPacket sentRtcpReport)
{
+ //logger.LogDebug($"RTCP report sent for index {index} and media {mediaType}.");
+
if (sentRtcpReport.Bye != null)
{
logger.LogDebug($"RTCP sent BYE {mediaType}.");
@@ -201,7 +202,7 @@ private static void RtpSession_OnSendReport(SDPMediaTypesEnum mediaType, RTCPCom
if (sentRtcpReport.ReceiverReport.ReceptionReports?.Count > 0)
{
var rrSample = sentRtcpReport.ReceiverReport.ReceptionReports.First();
- logger.LogDebug($"RTCP sent RR {mediaType}, ssrc {rrSample.SSRC}, seqnum {rrSample.ExtendedHighestSequenceNumber}.");
+ logger.LogDebug($"RTCP sent RR {mediaType}, ssrc {rrSample.SSRC}, seqnum {rrSample.ExtendedHighestSequenceNumber}, pkts lost {rrSample.PacketsLost}.");
}
else
{
@@ -215,20 +216,22 @@ private static void RtpSession_OnSendReport(SDPMediaTypesEnum mediaType, RTCPCom
///
private static void RtpSession_OnReceiveReport(IPEndPoint remoteEndPoint, SDPMediaTypesEnum mediaType, RTCPCompoundPacket recvRtcpReport)
{
+ //logger.LogDebug($"RTCP report received for {mediaType}.");
+
if (recvRtcpReport.Bye != null)
{
logger.LogDebug($"RTCP recv BYE {mediaType}.");
}
- else
+ else if(recvRtcpReport.ReceiverReport != null)
{
- var rr = recvRtcpReport.ReceiverReport?.ReceptionReports?.FirstOrDefault();
+ var rr = recvRtcpReport.ReceiverReport.ReceptionReports?.FirstOrDefault();
if (rr != null)
{
- logger.LogDebug($"RTCP {mediaType} Receiver Report: SSRC {rr.SSRC}, pkts lost {rr.PacketsLost}, delay since SR {rr.DelaySinceLastSenderReport}.");
+ logger.LogDebug($"RTCP {mediaType} Receiver Report SSRC {rr.SSRC}: pkts lost {rr.PacketsLost}, delay since SR {rr.DelaySinceLastSenderReport}.");
}
else
{
- logger.LogDebug($"RTCP {mediaType} Receiver Report: empty.");
+ logger.LogDebug($"RTCP {mediaType} Receiver Report for SSRC {recvRtcpReport.ReceiverReport.SSRC}: empty.");
}
}
}
diff --git a/examples/WebRTCExamples/WebRTCReceiveAudio/WebRTCReceiveAudio.csproj b/examples/WebRTCExamples/WebRTCReceiveAudio/WebRTCReceiveAudio.csproj
old mode 100644
new mode 100755
index 3953ffdce..a475705e2
--- a/examples/WebRTCExamples/WebRTCReceiveAudio/WebRTCReceiveAudio.csproj
+++ b/examples/WebRTCExamples/WebRTCReceiveAudio/WebRTCReceiveAudio.csproj
@@ -2,7 +2,8 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
+ 9.0
@@ -11,21 +12,14 @@
-
-
-
+
-
-
- PreserveNewest
-
-
- PreserveNewest
-
-
-
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCReceiveAudio/certs/localhost.pfx b/examples/WebRTCExamples/WebRTCReceiveAudio/certs/localhost.pfx
deleted file mode 100644
index bda0c15c6..000000000
Binary files a/examples/WebRTCExamples/WebRTCReceiveAudio/certs/localhost.pfx and /dev/null differ
diff --git a/examples/WebRTCExamples/WebRTCReceiver/Program.cs b/examples/WebRTCExamples/WebRTCReceiver/Program.cs
old mode 100644
new mode 100755
index 820f9e033..91f9b533a
--- a/examples/WebRTCExamples/WebRTCReceiver/Program.cs
+++ b/examples/WebRTCExamples/WebRTCReceiver/Program.cs
@@ -53,6 +53,8 @@ public class Options
class Program
{
+ private const string ffmpegLibFullPath = @"C:\ffmpeg-4.4.1-full_build-shared\bin"; // /!\ A valid path to FFmpeg library
+
private const string STUN_URL = "stun:stun.sipsorcery.com";
private const int WEBSOCKET_PORT = 8081;
private const int VIDEO_INITIAL_WIDTH = 640;
@@ -70,6 +72,8 @@ static void Main(string[] args)
logger = AddConsoleLogger();
+ SIPSorceryMedia.FFmpeg.FFmpegInit.Initialise(SIPSorceryMedia.FFmpeg.FfmpegLogLevelEnum.AV_LOG_VERBOSE, null, logger);
+
var parseResult = Parser.Default.ParseArguments(args);
_options = (parseResult as Parsed)?.Value;
X509Certificate2 wssCertificate = (_options.WSSCertificate != null) ? LoadCertificate(_options.WSSCertificate) : null;
@@ -108,26 +112,52 @@ private static Task CreatePeerConnection()
{
//var videoEP = new SIPSorceryMedia.Windows.WindowsVideoEndPoint(new VpxVideoEncoder());
//videoEP.RestrictFormats(format => format.Codec == VideoCodecsEnum.VP8);
- var videoEP = new SIPSorceryMedia.Windows.WindowsVideoEndPoint(new FFmpegVideoEncoder());
+ //var videoEP = new SIPSorceryMedia.Windows.WindowsVideoEndPoint(new FFmpegVideoEncoder());
+ //videoEP.RestrictFormats(format => format.Codec == VideoCodecsEnum.H264);
+
+ var videoEP = new FFmpegVideoEndPoint();
videoEP.RestrictFormats(format => format.Codec == VideoCodecsEnum.H264);
+
+ videoEP.OnVideoSinkDecodedSampleFaster += (RawImage rawImage) =>
+ {
+ _form.BeginInvoke(new Action(() =>
+ {
+ if (rawImage.PixelFormat == SIPSorceryMedia.Abstractions.VideoPixelFormatsEnum.Rgb)
+ {
+ if (_picBox.Width != rawImage.Width || _picBox.Height != rawImage.Height)
+ {
+ logger.LogDebug($"Adjusting video display from {_picBox.Width}x{_picBox.Height} to {rawImage.Width}x{rawImage.Height}.");
+ _picBox.Width = rawImage.Width;
+ _picBox.Height = rawImage.Height;
+ }
+
+ Bitmap bmpImage = new Bitmap(rawImage.Width, rawImage.Height, rawImage.Stride, PixelFormat.Format24bppRgb, rawImage.Sample);
+ _picBox.Image = bmpImage;
+ }
+ }));
+ };
+
videoEP.OnVideoSinkDecodedSample += (byte[] bmp, uint width, uint height, int stride, VideoPixelFormatsEnum pixelFormat) =>
{
_form.BeginInvoke(new Action(() =>
{
- unsafe
+ if (pixelFormat == SIPSorceryMedia.Abstractions.VideoPixelFormatsEnum.Rgb)
{
- if(_picBox.Width != (int)width || _picBox.Height != (int)height)
+ if (_picBox.Width != (int)width || _picBox.Height != (int)height)
{
- logger.LogDebug($"Adjusting video display from {_picBox.Width}x{_picBox.Height} to {width}x{height}.");
+ logger.LogDebug($"Adjusting video display from {_picBox.Width}x{_picBox.Height} to {width}x{height}.");
_picBox.Width = (int)width;
_picBox.Height = (int)height;
}
- fixed (byte* s = bmp)
+ unsafe
{
- Bitmap bmpImage = new Bitmap((int)width, (int)height, (int)(bmp.Length / height), PixelFormat.Format24bppRgb, (IntPtr)s);
- _picBox.Image = bmpImage;
+ fixed (byte* s = bmp)
+ {
+ Bitmap bmpImage = new Bitmap((int)width, (int)height, (int)(bmp.Length / height), PixelFormat.Format24bppRgb, (IntPtr)s);
+ _picBox.Image = bmpImage;
+ }
}
}
}));
diff --git a/examples/WebRTCExamples/WebRTCReceiver/WebRTCReceiver.csproj b/examples/WebRTCExamples/WebRTCReceiver/WebRTCReceiver.csproj
old mode 100644
new mode 100755
index c5ca29aaa..a90c80b7c
--- a/examples/WebRTCExamples/WebRTCReceiver/WebRTCReceiver.csproj
+++ b/examples/WebRTCExamples/WebRTCReceiver/WebRTCReceiver.csproj
@@ -1,10 +1,11 @@
-
+
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
true
true
+ 9.0
@@ -16,11 +17,13 @@
-
-
-
-
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCSendAudio/Program.cs b/examples/WebRTCExamples/WebRTCSendAudio/Program.cs
old mode 100644
new mode 100755
index c181fbfcc..4c8daa85f
--- a/examples/WebRTCExamples/WebRTCSendAudio/Program.cs
+++ b/examples/WebRTCExamples/WebRTCSendAudio/Program.cs
@@ -15,7 +15,6 @@
//-----------------------------------------------------------------------------
using System;
-using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Threading;
@@ -26,7 +25,6 @@
using Serilog.Extensions.Logging;
using SIPSorcery.Net;
using SIPSorcery.Media;
-using SIPSorceryMedia.Windows;
using WebSocketSharp.Server;
namespace demo
@@ -34,7 +32,6 @@ namespace demo
class Program
{
private const int WEBSOCKET_PORT = 8081;
- private const string STUN_URL = "stun:stun.sipsorcery.com";
private static Microsoft.Extensions.Logging.ILogger logger = NullLogger.Instance;
@@ -68,13 +65,12 @@ private static Task CreatePeerConnection()
{
RTCConfiguration config = new RTCConfiguration
{
- iceServers = new List { new RTCIceServer { urls = STUN_URL } }
+ //iceServers = new List { new RTCIceServer { urls = STUN_URL } }
};
var pc = new RTCPeerConnection(config);
-
- //AudioExtrasSource audioSource = new AudioExtrasSource(new AudioEncoder(), new AudioSourceOptions { AudioSource = AudioSourcesEnum.SineWave });
- //audioSource.OnAudioSourceEncodedSample += pc.SendAudio;
- WindowsAudioEndPoint audioSource = new WindowsAudioEndPoint(new AudioEncoder());
+
+ AudioExtrasSource audioSource = new AudioExtrasSource(new AudioEncoder(includeOpus: false), new AudioSourceOptions { AudioSource = AudioSourcesEnum.SineWave });
+ //audioSource.RestrictFormats(x => x.FormatName == "OPUS");
audioSource.OnAudioSourceEncodedSample += pc.SendAudio;
MediaStreamTrack audioTrack = new MediaStreamTrack(audioSource.GetAudioSourceFormats(), MediaStreamStatusEnum.SendOnly);
@@ -105,6 +101,20 @@ private static Task CreatePeerConnection()
pc.OnSendReport += (media, sr) => logger.LogDebug($"RTCP Send for {media}\n{sr.GetDebugSummary()}");
pc.GetRtpChannel().OnStunMessageReceived += (msg, ep, isRelay) => logger.LogDebug($"STUN {msg.Header.MessageType} received from {ep}.");
pc.oniceconnectionstatechange += (state) => logger.LogDebug($"ICE connection state change to {state}.");
+ pc.onsignalingstatechange += () =>
+ {
+ logger.LogDebug($"Signalling state change to {pc.signalingState}.");
+ if (pc.signalingState == RTCSignalingState.have_local_offer)
+ {
+ logger.LogDebug("Offer SDP:");
+ logger.LogDebug(pc.localDescription.sdp.ToString());
+ }
+ else if (pc.signalingState == RTCSignalingState.have_remote_offer || pc.signalingState == RTCSignalingState.stable)
+ {
+ logger.LogDebug("Answer SDP:");
+ logger.LogDebug(pc.remoteDescription.sdp.ToString());
+ }
+ };
return Task.FromResult(pc);
}
diff --git a/examples/WebRTCExamples/WebRTCSendAudio/WebRTCSendAudio.csproj b/examples/WebRTCExamples/WebRTCSendAudio/WebRTCSendAudio.csproj
old mode 100644
new mode 100755
index 0abafea16..97df6bed2
--- a/examples/WebRTCExamples/WebRTCSendAudio/WebRTCSendAudio.csproj
+++ b/examples/WebRTCExamples/WebRTCSendAudio/WebRTCSendAudio.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763.0
@@ -10,13 +10,14 @@
-
-
+
-
-
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCTestPatternRest/Program.cs b/examples/WebRTCExamples/WebRTCTestPatternRest/Program.cs
index 1ae937f1c..33c14cd16 100644
--- a/examples/WebRTCExamples/WebRTCTestPatternRest/Program.cs
+++ b/examples/WebRTCExamples/WebRTCTestPatternRest/Program.cs
@@ -34,6 +34,9 @@ namespace demo
{
class Program
{
+ private const string ffmpegLibFullPath = @"C:\ffmpeg-4.4.1-full_build-shared\bin"; // /!\ A valid path to FFmpeg library
+
+
private const string HTTP_LISTEN_URL = "http://*:8080/";
private const int TEST_PATTERN_FRAMES_PER_SECOND = 30;
@@ -102,6 +105,7 @@ private static Task CreatePeerConnection()
//var pc = new RTCPeerConnection(config);
var pc = new RTCPeerConnection();
+ SIPSorceryMedia.FFmpeg.FFmpegInit.Initialise(SIPSorceryMedia.FFmpeg.FfmpegLogLevelEnum.AV_LOG_VERBOSE, ffmpegLibFullPath, logger);
//var testPatternSource = new VideoTestPatternSource(new SIPSorceryMedia.Encoders.VideoEncoder());
var testPatternSource = new VideoTestPatternSource(new FFmpegVideoEncoder());
testPatternSource.SetFrameRate(TEST_PATTERN_FRAMES_PER_SECOND);
diff --git a/examples/WebRTCExamples/WebRTCTestPatternRest/WebRTCTestPatternRest.csproj b/examples/WebRTCExamples/WebRTCTestPatternRest/WebRTCTestPatternRest.csproj
old mode 100644
new mode 100755
index e0e976b46..36a1786fd
--- a/examples/WebRTCExamples/WebRTCTestPatternRest/WebRTCTestPatternRest.csproj
+++ b/examples/WebRTCExamples/WebRTCTestPatternRest/WebRTCTestPatternRest.csproj
@@ -2,17 +2,20 @@
Exe
- net5
+ net8.0
true
-
-
-
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCTestPatternServer/Program.cs b/examples/WebRTCExamples/WebRTCTestPatternServer/Program.cs
old mode 100644
new mode 100755
index d8bdbc918..31a17d099
--- a/examples/WebRTCExamples/WebRTCTestPatternServer/Program.cs
+++ b/examples/WebRTCExamples/WebRTCTestPatternServer/Program.cs
@@ -43,6 +43,9 @@ public class Options
class Program
{
+ // Install with: winget install "FFmpeg (Shared)"
+ private const string ffmpegLibFullPath = null; //@"C:\ffmpeg-4.4.1-full_build-shared\bin"; // /!\ A valid path to FFmpeg library
+
private const int WEBSOCKET_PORT = 8081;
private const string STUN_URL = "stun:stun.sipsorcery.com";
private const int TEST_PATTERN_FRAMES_PER_SECOND = 5; //30;
@@ -126,6 +129,7 @@ private static Task CreatePeerConnection(X509Certificate2 cer
var pc = new RTCPeerConnection(null);
//var testPatternSource = new VideoTestPatternSource(new SIPSorceryMedia.Encoders.VideoEncoder());
+ SIPSorceryMedia.FFmpeg.FFmpegInit.Initialise(SIPSorceryMedia.FFmpeg.FfmpegLogLevelEnum.AV_LOG_VERBOSE, ffmpegLibFullPath, logger);
var testPatternSource = new VideoTestPatternSource(new FFmpegVideoEncoder());
testPatternSource.SetFrameRate(TEST_PATTERN_FRAMES_PER_SECOND);
//testPatternSource.SetMaxFrameRate(true);
diff --git a/examples/WebRTCExamples/WebRTCTestPatternServer/Properties/launchSettings.json b/examples/WebRTCExamples/WebRTCTestPatternServer/Properties/launchSettings.json
index 1b124b76e..294183c67 100644
--- a/examples/WebRTCExamples/WebRTCTestPatternServer/Properties/launchSettings.json
+++ b/examples/WebRTCExamples/WebRTCTestPatternServer/Properties/launchSettings.json
@@ -1,8 +1,8 @@
{
"profiles": {
"WebRTCTestPatternServer": {
- "commandName": "Project",
- "commandLineArgs": "--rest https://localhost:5001/api/webrtcsignal;a;b"
+ "commandName": "Project"
+ //"commandLineArgs": "--rest https://localhost:5001/api/webrtcsignal;a;b"
}
}
}
\ No newline at end of file
diff --git a/examples/WebRTCExamples/WebRTCTestPatternServer/WebRTCTestPatternServer.csproj b/examples/WebRTCExamples/WebRTCTestPatternServer/WebRTCTestPatternServer.csproj
old mode 100644
new mode 100755
index 52db0ff92..24fb8d6e5
--- a/examples/WebRTCExamples/WebRTCTestPatternServer/WebRTCTestPatternServer.csproj
+++ b/examples/WebRTCExamples/WebRTCTestPatternServer/WebRTCTestPatternServer.csproj
@@ -2,7 +2,7 @@
Exe
- net5
+ net8.0
true
@@ -10,10 +10,13 @@
-
-
-
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCWebcamServer/Program.cs b/examples/WebRTCExamples/WebRTCWebcamServer/Program.cs
index 916aa8fbe..83b7485ee 100644
--- a/examples/WebRTCExamples/WebRTCWebcamServer/Program.cs
+++ b/examples/WebRTCExamples/WebRTCWebcamServer/Program.cs
@@ -98,6 +98,9 @@ private static async Task CreatePeerConnection()
//WindowsVideoEndPoint winVideoEP = new WindowsVideoEndPoint(new FFmpegVideoEncoder(), WEBCAM_NAME);
//WindowsVideoEndPoint winVideoEP = new WindowsVideoEndPoint(WEBCAM_NAME, 1920, 1080, 30);
//winVideoEP.RestrictFormats(x => x.Codec == SIPSorceryMedia.Abstractions.V1.VideoCodecsEnum.H264);
+
+
+
bool initResult = await winVideoEP.InitialiseVideoSourceDevice();
if (!initResult)
{
diff --git a/examples/WebRTCExamples/WebRTCWebcamServer/WebRTCWebcamServer.csproj b/examples/WebRTCExamples/WebRTCWebcamServer/WebRTCWebcamServer.csproj
old mode 100644
new mode 100755
index e4eafe134..0a9631b46
--- a/examples/WebRTCExamples/WebRTCWebcamServer/WebRTCWebcamServer.csproj
+++ b/examples/WebRTCExamples/WebRTCWebcamServer/WebRTCWebcamServer.csproj
@@ -2,19 +2,22 @@
Exe
- netcoreapp3.1
+ net8.0-windows10.0.17763
true
+ 9.0
-
-
-
-
-
+
+
+
+
+
+
+
diff --git a/examples/WebRTCExamples/WebRTCtoFfplay/WebRTCtoFfplay.csproj b/examples/WebRTCExamples/WebRTCtoFfplay/WebRTCtoFfplay.csproj
old mode 100644
new mode 100755
index c1516c48c..9224e6f93
--- a/examples/WebRTCExamples/WebRTCtoFfplay/WebRTCtoFfplay.csproj
+++ b/examples/WebRTCExamples/WebRTCtoFfplay/WebRTCtoFfplay.csproj
@@ -2,7 +2,7 @@
Exe
- netcoreapp3.1
+ net8.0
@@ -11,13 +11,16 @@
-
+
-
+
+
+
+
PreserveNewest
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/README.md b/examples/WebRTCExamples/XamarinDataChannelTest/README.md
deleted file mode 100644
index 49737c1b9..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/README.md
+++ /dev/null
@@ -1,48 +0,0 @@
-## Usage
-
-The Xamarin test programs (only the Android emulator has been tested) demonstrate how to establish a WebRTC peer connection and exchange data channel messages.
-
-You will need `.Net Core` installed.
-
-The Xamarin test program is designed to work with the [webrtccmdline](https://github.com/sipsorcery/sipsorcery/tree/master/examples/webrtccmdline) console application. In a separate console or terminal start it with:
-
-`dotnet core run --ws`
-
-The `--ws` option indicates that signalling (the exchange of SDP offer/answer and ICE candidates) should be done over a web socket.
-
-````
-examples\webrtccmdline>dotnet run --ws
-WebRTC Console Test Program
-Press ctrl-c to exit.
-Starting web socket server...
-Waiting for browser web socket connection to 0.0.0.0:8081...
-````
-
- - Start the Xamarin Android application in the emulator:
-
-
-
- - You will need to adjust the `Web Socket URL` to use the IP address of the machine running the `webtcmdline` program. Note the Android emulator runs in a virtual machine and uses a different IP address to the host machine.
-
- - Click the `Connect` button and the `webrtcmdline` application should display log messages indicating the incoming request.
-
- - Once the peer connection is successfully established the status bar at the bottom of the Xamarin app should display "Peer connection state connected."
-
- - Data channel messages can now be exchanged:
-
- - In the Xamarin application enter text in the `Entry Box` above the `Send Message` button and then press the button to send. The message should appear in the `webrtccmdline` console.
-
- 
-
- - In the `webrtccmdline` console press `Enter` to get a command prompt and then use the `sdc` (send data channel) command below. The message should appear in the Xamarin app.
-
-````
-Command => sdc dcx some message
-Sending message on channel dcx: some message
-````
-
-
-
-
-
-
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Assets/AboutAssets.txt b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Assets/AboutAssets.txt
deleted file mode 100644
index 12919ea11..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Assets/AboutAssets.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-Any raw assets you want to be deployed with your application can be placed in
-this directory (and child directories) and given a Build Action of "AndroidAsset".
-
-These files will be deployed with your package and will be accessible using Android's
-AssetManager, like this:
-
-public class ReadAsset : Activity
-{
- protected override void OnCreate (Bundle bundle)
- {
- base.OnCreate (bundle);
-
- InputStream input = Assets.Open ("my_asset.txt");
- }
-}
-
-Additionally, some Android functions will automatically load asset files:
-
-Typeface tf = Typeface.CreateFromAsset (Context.Assets, "fonts/samplefont.ttf");
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/MainActivity.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/MainActivity.cs
deleted file mode 100644
index d8539d727..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/MainActivity.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-using System;
-
-using Android.App;
-using Android.Content.PM;
-using Android.Runtime;
-using Android.Views;
-using Android.Widget;
-using Android.OS;
-
-namespace XamarinDataChannelTest.Droid
-{
- [Activity(Label = "XamarinDataChannelTest", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
- public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
- {
- protected override void OnCreate(Bundle savedInstanceState)
- {
- TabLayoutResource = Resource.Layout.Tabbar;
- ToolbarResource = Resource.Layout.Toolbar;
-
- base.OnCreate(savedInstanceState);
-
- global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental");
- Xamarin.Essentials.Platform.Init(this, savedInstanceState);
- global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
- LoadApplication(new App());
- }
- public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
- {
- Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
-
- base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
- }
- }
-}
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Properties/AndroidManifest.xml b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Properties/AndroidManifest.xml
deleted file mode 100644
index d9e696aa8..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Properties/AndroidManifest.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Properties/AssemblyInfo.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Properties/AssemblyInfo.cs
deleted file mode 100644
index f791d7eb1..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using Android.App;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("XamarinDataChannelTest.Android")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("XamarinDataChannelTest.Android")]
-[assembly: AssemblyCopyright("Copyright © 2014")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-[assembly: ComVisible(false)]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
-
-// Add some common permissions, these can be removed if not needed
-[assembly: UsesPermission(Android.Manifest.Permission.Internet)]
-[assembly: UsesPermission(Android.Manifest.Permission.WriteExternalStorage)]
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/AboutResources.txt b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/AboutResources.txt
deleted file mode 100644
index 17ba653dd..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/AboutResources.txt
+++ /dev/null
@@ -1,50 +0,0 @@
-Images, layout descriptions, binary blobs and string dictionaries can be included
-in your application as resource files. Various Android APIs are designed to
-operate on the resource IDs instead of dealing with images, strings or binary blobs
-directly.
-
-For example, a sample Android app that contains a user interface layout (main.xml),
-an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png)
-would keep its resources in the "Resources" directory of the application:
-
-Resources/
- drawable-hdpi/
- icon.png
-
- drawable-ldpi/
- icon.png
-
- drawable-mdpi/
- icon.png
-
- layout/
- main.xml
-
- values/
- strings.xml
-
-In order to get the build system to recognize Android resources, set the build action to
-"AndroidResource". The native Android APIs do not operate directly with filenames, but
-instead operate on resource IDs. When you compile an Android application that uses resources,
-the build system will package the resources for distribution and generate a class called
-"Resource" that contains the tokens for each one of the resources included. For example,
-for the above Resources layout, this is what the Resource class would expose:
-
-public class Resource {
- public class drawable {
- public const int icon = 0x123;
- }
-
- public class layout {
- public const int main = 0x456;
- }
-
- public class strings {
- public const int first_string = 0xabc;
- public const int second_string = 0xbcd;
- }
-}
-
-You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main
-to reference the layout/main.xml file, or Resource.strings.first_string to reference the first
-string in the dictionary file values/strings.xml.
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/Resource.designer.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/Resource.designer.cs
deleted file mode 100644
index b80079f49..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/Resource.designer.cs
+++ /dev/null
@@ -1,14035 +0,0 @@
-#pragma warning disable 1591
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-[assembly: global::Android.Runtime.ResourceDesignerAttribute("XamarinDataChannelTest.Droid.Resource", IsApplication=true)]
-
-namespace XamarinDataChannelTest.Droid
-{
-
-
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
- public partial class Resource
- {
-
- static Resource()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- public static void UpdateIdValues()
- {
- global::Xamarin.Essentials.Resource.Attribute.alpha = global::XamarinDataChannelTest.Droid.Resource.Attribute.alpha;
- global::Xamarin.Essentials.Resource.Attribute.coordinatorLayoutStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.coordinatorLayoutStyle;
- global::Xamarin.Essentials.Resource.Attribute.font = global::XamarinDataChannelTest.Droid.Resource.Attribute.font;
- global::Xamarin.Essentials.Resource.Attribute.fontProviderAuthority = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderAuthority;
- global::Xamarin.Essentials.Resource.Attribute.fontProviderCerts = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderCerts;
- global::Xamarin.Essentials.Resource.Attribute.fontProviderFetchStrategy = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderFetchStrategy;
- global::Xamarin.Essentials.Resource.Attribute.fontProviderFetchTimeout = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderFetchTimeout;
- global::Xamarin.Essentials.Resource.Attribute.fontProviderPackage = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderPackage;
- global::Xamarin.Essentials.Resource.Attribute.fontProviderQuery = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderQuery;
- global::Xamarin.Essentials.Resource.Attribute.fontStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontStyle;
- global::Xamarin.Essentials.Resource.Attribute.fontVariationSettings = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontVariationSettings;
- global::Xamarin.Essentials.Resource.Attribute.fontWeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontWeight;
- global::Xamarin.Essentials.Resource.Attribute.keylines = global::XamarinDataChannelTest.Droid.Resource.Attribute.keylines;
- global::Xamarin.Essentials.Resource.Attribute.layout_anchor = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_anchor;
- global::Xamarin.Essentials.Resource.Attribute.layout_anchorGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_anchorGravity;
- global::Xamarin.Essentials.Resource.Attribute.layout_behavior = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_behavior;
- global::Xamarin.Essentials.Resource.Attribute.layout_dodgeInsetEdges = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_dodgeInsetEdges;
- global::Xamarin.Essentials.Resource.Attribute.layout_insetEdge = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_insetEdge;
- global::Xamarin.Essentials.Resource.Attribute.layout_keyline = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_keyline;
- global::Xamarin.Essentials.Resource.Attribute.statusBarBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.statusBarBackground;
- global::Xamarin.Essentials.Resource.Attribute.ttcIndex = global::XamarinDataChannelTest.Droid.Resource.Attribute.ttcIndex;
- global::Xamarin.Essentials.Resource.Color.browser_actions_bg_grey = global::XamarinDataChannelTest.Droid.Resource.Color.browser_actions_bg_grey;
- global::Xamarin.Essentials.Resource.Color.browser_actions_divider_color = global::XamarinDataChannelTest.Droid.Resource.Color.browser_actions_divider_color;
- global::Xamarin.Essentials.Resource.Color.browser_actions_text_color = global::XamarinDataChannelTest.Droid.Resource.Color.browser_actions_text_color;
- global::Xamarin.Essentials.Resource.Color.browser_actions_title_color = global::XamarinDataChannelTest.Droid.Resource.Color.browser_actions_title_color;
- global::Xamarin.Essentials.Resource.Color.notification_action_color_filter = global::XamarinDataChannelTest.Droid.Resource.Color.notification_action_color_filter;
- global::Xamarin.Essentials.Resource.Color.notification_icon_bg_color = global::XamarinDataChannelTest.Droid.Resource.Color.notification_icon_bg_color;
- global::Xamarin.Essentials.Resource.Color.ripple_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.ripple_material_light;
- global::Xamarin.Essentials.Resource.Color.secondary_text_default_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.secondary_text_default_material_light;
- global::Xamarin.Essentials.Resource.Dimension.browser_actions_context_menu_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.browser_actions_context_menu_max_width;
- global::Xamarin.Essentials.Resource.Dimension.browser_actions_context_menu_min_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.browser_actions_context_menu_min_padding;
- global::Xamarin.Essentials.Resource.Dimension.compat_button_inset_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_inset_horizontal_material;
- global::Xamarin.Essentials.Resource.Dimension.compat_button_inset_vertical_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_inset_vertical_material;
- global::Xamarin.Essentials.Resource.Dimension.compat_button_padding_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_padding_horizontal_material;
- global::Xamarin.Essentials.Resource.Dimension.compat_button_padding_vertical_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_padding_vertical_material;
- global::Xamarin.Essentials.Resource.Dimension.compat_control_corner_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_control_corner_material;
- global::Xamarin.Essentials.Resource.Dimension.compat_notification_large_icon_max_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_notification_large_icon_max_height;
- global::Xamarin.Essentials.Resource.Dimension.compat_notification_large_icon_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_notification_large_icon_max_width;
- global::Xamarin.Essentials.Resource.Dimension.notification_action_icon_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_action_icon_size;
- global::Xamarin.Essentials.Resource.Dimension.notification_action_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_action_text_size;
- global::Xamarin.Essentials.Resource.Dimension.notification_big_circle_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_big_circle_margin;
- global::Xamarin.Essentials.Resource.Dimension.notification_content_margin_start = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_content_margin_start;
- global::Xamarin.Essentials.Resource.Dimension.notification_large_icon_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_large_icon_height;
- global::Xamarin.Essentials.Resource.Dimension.notification_large_icon_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_large_icon_width;
- global::Xamarin.Essentials.Resource.Dimension.notification_main_column_padding_top = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_main_column_padding_top;
- global::Xamarin.Essentials.Resource.Dimension.notification_media_narrow_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_media_narrow_margin;
- global::Xamarin.Essentials.Resource.Dimension.notification_right_icon_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_right_icon_size;
- global::Xamarin.Essentials.Resource.Dimension.notification_right_side_padding_top = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_right_side_padding_top;
- global::Xamarin.Essentials.Resource.Dimension.notification_small_icon_background_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_small_icon_background_padding;
- global::Xamarin.Essentials.Resource.Dimension.notification_small_icon_size_as_large = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_small_icon_size_as_large;
- global::Xamarin.Essentials.Resource.Dimension.notification_subtext_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_subtext_size;
- global::Xamarin.Essentials.Resource.Dimension.notification_top_pad = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_top_pad;
- global::Xamarin.Essentials.Resource.Dimension.notification_top_pad_large_text = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_top_pad_large_text;
- global::Xamarin.Essentials.Resource.Drawable.notification_action_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_action_background;
- global::Xamarin.Essentials.Resource.Drawable.notification_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg;
- global::Xamarin.Essentials.Resource.Drawable.notification_bg_low = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_low;
- global::Xamarin.Essentials.Resource.Drawable.notification_bg_low_normal = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_low_normal;
- global::Xamarin.Essentials.Resource.Drawable.notification_bg_low_pressed = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_low_pressed;
- global::Xamarin.Essentials.Resource.Drawable.notification_bg_normal = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_normal;
- global::Xamarin.Essentials.Resource.Drawable.notification_bg_normal_pressed = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_normal_pressed;
- global::Xamarin.Essentials.Resource.Drawable.notification_icon_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_icon_background;
- global::Xamarin.Essentials.Resource.Drawable.notification_template_icon_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_template_icon_bg;
- global::Xamarin.Essentials.Resource.Drawable.notification_template_icon_low_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_template_icon_low_bg;
- global::Xamarin.Essentials.Resource.Drawable.notification_tile_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_tile_bg;
- global::Xamarin.Essentials.Resource.Drawable.notify_panel_notification_icon_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notify_panel_notification_icon_bg;
- global::Xamarin.Essentials.Resource.Id.actions = global::XamarinDataChannelTest.Droid.Resource.Id.actions;
- global::Xamarin.Essentials.Resource.Id.action_container = global::XamarinDataChannelTest.Droid.Resource.Id.action_container;
- global::Xamarin.Essentials.Resource.Id.action_divider = global::XamarinDataChannelTest.Droid.Resource.Id.action_divider;
- global::Xamarin.Essentials.Resource.Id.action_image = global::XamarinDataChannelTest.Droid.Resource.Id.action_image;
- global::Xamarin.Essentials.Resource.Id.action_text = global::XamarinDataChannelTest.Droid.Resource.Id.action_text;
- global::Xamarin.Essentials.Resource.Id.all = global::XamarinDataChannelTest.Droid.Resource.Id.all;
- global::Xamarin.Essentials.Resource.Id.async = global::XamarinDataChannelTest.Droid.Resource.Id.async;
- global::Xamarin.Essentials.Resource.Id.blocking = global::XamarinDataChannelTest.Droid.Resource.Id.blocking;
- global::Xamarin.Essentials.Resource.Id.bottom = global::XamarinDataChannelTest.Droid.Resource.Id.bottom;
- global::Xamarin.Essentials.Resource.Id.browser_actions_header_text = global::XamarinDataChannelTest.Droid.Resource.Id.browser_actions_header_text;
- global::Xamarin.Essentials.Resource.Id.browser_actions_menu_items = global::XamarinDataChannelTest.Droid.Resource.Id.browser_actions_menu_items;
- global::Xamarin.Essentials.Resource.Id.browser_actions_menu_item_icon = global::XamarinDataChannelTest.Droid.Resource.Id.browser_actions_menu_item_icon;
- global::Xamarin.Essentials.Resource.Id.browser_actions_menu_item_text = global::XamarinDataChannelTest.Droid.Resource.Id.browser_actions_menu_item_text;
- global::Xamarin.Essentials.Resource.Id.browser_actions_menu_view = global::XamarinDataChannelTest.Droid.Resource.Id.browser_actions_menu_view;
- global::Xamarin.Essentials.Resource.Id.center = global::XamarinDataChannelTest.Droid.Resource.Id.center;
- global::Xamarin.Essentials.Resource.Id.center_horizontal = global::XamarinDataChannelTest.Droid.Resource.Id.center_horizontal;
- global::Xamarin.Essentials.Resource.Id.center_vertical = global::XamarinDataChannelTest.Droid.Resource.Id.center_vertical;
- global::Xamarin.Essentials.Resource.Id.chronometer = global::XamarinDataChannelTest.Droid.Resource.Id.chronometer;
- global::Xamarin.Essentials.Resource.Id.clip_horizontal = global::XamarinDataChannelTest.Droid.Resource.Id.clip_horizontal;
- global::Xamarin.Essentials.Resource.Id.clip_vertical = global::XamarinDataChannelTest.Droid.Resource.Id.clip_vertical;
- global::Xamarin.Essentials.Resource.Id.end = global::XamarinDataChannelTest.Droid.Resource.Id.end;
- global::Xamarin.Essentials.Resource.Id.fill = global::XamarinDataChannelTest.Droid.Resource.Id.fill;
- global::Xamarin.Essentials.Resource.Id.fill_horizontal = global::XamarinDataChannelTest.Droid.Resource.Id.fill_horizontal;
- global::Xamarin.Essentials.Resource.Id.fill_vertical = global::XamarinDataChannelTest.Droid.Resource.Id.fill_vertical;
- global::Xamarin.Essentials.Resource.Id.forever = global::XamarinDataChannelTest.Droid.Resource.Id.forever;
- global::Xamarin.Essentials.Resource.Id.icon = global::XamarinDataChannelTest.Droid.Resource.Id.icon;
- global::Xamarin.Essentials.Resource.Id.icon_group = global::XamarinDataChannelTest.Droid.Resource.Id.icon_group;
- global::Xamarin.Essentials.Resource.Id.info = global::XamarinDataChannelTest.Droid.Resource.Id.info;
- global::Xamarin.Essentials.Resource.Id.italic = global::XamarinDataChannelTest.Droid.Resource.Id.italic;
- global::Xamarin.Essentials.Resource.Id.left = global::XamarinDataChannelTest.Droid.Resource.Id.left;
- global::Xamarin.Essentials.Resource.Id.line1 = global::XamarinDataChannelTest.Droid.Resource.Id.line1;
- global::Xamarin.Essentials.Resource.Id.line3 = global::XamarinDataChannelTest.Droid.Resource.Id.line3;
- global::Xamarin.Essentials.Resource.Id.none = global::XamarinDataChannelTest.Droid.Resource.Id.none;
- global::Xamarin.Essentials.Resource.Id.normal = global::XamarinDataChannelTest.Droid.Resource.Id.normal;
- global::Xamarin.Essentials.Resource.Id.notification_background = global::XamarinDataChannelTest.Droid.Resource.Id.notification_background;
- global::Xamarin.Essentials.Resource.Id.notification_main_column = global::XamarinDataChannelTest.Droid.Resource.Id.notification_main_column;
- global::Xamarin.Essentials.Resource.Id.notification_main_column_container = global::XamarinDataChannelTest.Droid.Resource.Id.notification_main_column_container;
- global::Xamarin.Essentials.Resource.Id.right = global::XamarinDataChannelTest.Droid.Resource.Id.right;
- global::Xamarin.Essentials.Resource.Id.right_icon = global::XamarinDataChannelTest.Droid.Resource.Id.right_icon;
- global::Xamarin.Essentials.Resource.Id.right_side = global::XamarinDataChannelTest.Droid.Resource.Id.right_side;
- global::Xamarin.Essentials.Resource.Id.start = global::XamarinDataChannelTest.Droid.Resource.Id.start;
- global::Xamarin.Essentials.Resource.Id.tag_transition_group = global::XamarinDataChannelTest.Droid.Resource.Id.tag_transition_group;
- global::Xamarin.Essentials.Resource.Id.tag_unhandled_key_event_manager = global::XamarinDataChannelTest.Droid.Resource.Id.tag_unhandled_key_event_manager;
- global::Xamarin.Essentials.Resource.Id.tag_unhandled_key_listeners = global::XamarinDataChannelTest.Droid.Resource.Id.tag_unhandled_key_listeners;
- global::Xamarin.Essentials.Resource.Id.text = global::XamarinDataChannelTest.Droid.Resource.Id.text;
- global::Xamarin.Essentials.Resource.Id.text2 = global::XamarinDataChannelTest.Droid.Resource.Id.text2;
- global::Xamarin.Essentials.Resource.Id.time = global::XamarinDataChannelTest.Droid.Resource.Id.time;
- global::Xamarin.Essentials.Resource.Id.title = global::XamarinDataChannelTest.Droid.Resource.Id.title;
- global::Xamarin.Essentials.Resource.Id.top = global::XamarinDataChannelTest.Droid.Resource.Id.top;
- global::Xamarin.Essentials.Resource.Integer.status_bar_notification_info_maxnum = global::XamarinDataChannelTest.Droid.Resource.Integer.status_bar_notification_info_maxnum;
- global::Xamarin.Essentials.Resource.Layout.browser_actions_context_menu_page = global::XamarinDataChannelTest.Droid.Resource.Layout.browser_actions_context_menu_page;
- global::Xamarin.Essentials.Resource.Layout.browser_actions_context_menu_row = global::XamarinDataChannelTest.Droid.Resource.Layout.browser_actions_context_menu_row;
- global::Xamarin.Essentials.Resource.Layout.notification_action = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_action;
- global::Xamarin.Essentials.Resource.Layout.notification_action_tombstone = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_action_tombstone;
- global::Xamarin.Essentials.Resource.Layout.notification_template_custom_big = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_custom_big;
- global::Xamarin.Essentials.Resource.Layout.notification_template_icon_group = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_icon_group;
- global::Xamarin.Essentials.Resource.Layout.notification_template_part_chronometer = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_part_chronometer;
- global::Xamarin.Essentials.Resource.Layout.notification_template_part_time = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_part_time;
- global::Xamarin.Essentials.Resource.String.status_bar_notification_info_overflow = global::XamarinDataChannelTest.Droid.Resource.String.status_bar_notification_info_overflow;
- global::Xamarin.Essentials.Resource.Style.TextAppearance_Compat_Notification = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification;
- global::Xamarin.Essentials.Resource.Style.TextAppearance_Compat_Notification_Info = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Info;
- global::Xamarin.Essentials.Resource.Style.TextAppearance_Compat_Notification_Line2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2;
- global::Xamarin.Essentials.Resource.Style.TextAppearance_Compat_Notification_Time = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Time;
- global::Xamarin.Essentials.Resource.Style.TextAppearance_Compat_Notification_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Title;
- global::Xamarin.Essentials.Resource.Style.Widget_Compat_NotificationActionContainer = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Compat_NotificationActionContainer;
- global::Xamarin.Essentials.Resource.Style.Widget_Compat_NotificationActionText = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Compat_NotificationActionText;
- global::Xamarin.Essentials.Resource.Style.Widget_Support_CoordinatorLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Support_CoordinatorLayout;
- global::Xamarin.Essentials.Resource.Styleable.ColorStateListItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem;
- global::Xamarin.Essentials.Resource.Styleable.ColorStateListItem_alpha = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem_alpha;
- global::Xamarin.Essentials.Resource.Styleable.ColorStateListItem_android_alpha = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem_android_alpha;
- global::Xamarin.Essentials.Resource.Styleable.ColorStateListItem_android_color = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem_android_color;
- global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout;
- global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_keylines = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_keylines;
- global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout;
- global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity;
- global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor;
- global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity;
- global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior;
- global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges;
- global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge;
- global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline;
- global::Xamarin.Essentials.Resource.Styleable.CoordinatorLayout_statusBarBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_statusBarBackground;
- global::Xamarin.Essentials.Resource.Styleable.FontFamily = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily;
- global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont;
- global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_android_font = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_font;
- global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_android_fontStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_fontStyle;
- global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_android_fontVariationSettings = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_fontVariationSettings;
- global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_android_fontWeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_fontWeight;
- global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_android_ttcIndex = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_ttcIndex;
- global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_font = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_font;
- global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_fontStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_fontStyle;
- global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_fontVariationSettings = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_fontVariationSettings;
- global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_fontWeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_fontWeight;
- global::Xamarin.Essentials.Resource.Styleable.FontFamilyFont_ttcIndex = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_ttcIndex;
- global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderAuthority = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderAuthority;
- global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderCerts = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderCerts;
- global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderFetchStrategy = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderFetchStrategy;
- global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderFetchTimeout = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderFetchTimeout;
- global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderPackage = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderPackage;
- global::Xamarin.Essentials.Resource.Styleable.FontFamily_fontProviderQuery = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderQuery;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor;
- global::Xamarin.Essentials.Resource.Styleable.GradientColorItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColorItem;
- global::Xamarin.Essentials.Resource.Styleable.GradientColorItem_android_color = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColorItem_android_color;
- global::Xamarin.Essentials.Resource.Styleable.GradientColorItem_android_offset = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColorItem_android_offset;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_centerColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_centerColor;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_centerX = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_centerX;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_centerY = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_centerY;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_endColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_endColor;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_endX = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_endX;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_endY = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_endY;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_gradientRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_gradientRadius;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_startColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_startColor;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_startX = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_startX;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_startY = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_startY;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_tileMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_tileMode;
- global::Xamarin.Essentials.Resource.Styleable.GradientColor_android_type = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_type;
- global::Xamarin.Essentials.Resource.Xml.xamarin_essentials_fileprovider_file_paths = global::XamarinDataChannelTest.Droid.Resource.Xml.xamarin_essentials_fileprovider_file_paths;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_fade_in = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_fade_in;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_fade_out = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_fade_out;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_grow_fade_in_from_bottom = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_grow_fade_in_from_bottom;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_popup_enter = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_popup_enter;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_popup_exit = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_popup_exit;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_shrink_fade_out_from_bottom = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_shrink_fade_out_from_bottom;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_in_bottom = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_slide_in_bottom;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_in_top = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_slide_in_top;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_out_bottom = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_slide_out_bottom;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_slide_out_top = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_slide_out_top;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_tooltip_enter = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_tooltip_enter;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.abc_tooltip_exit = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_tooltip_exit;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.design_bottom_sheet_slide_in = global::XamarinDataChannelTest.Droid.Resource.Animation.design_bottom_sheet_slide_in;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.design_bottom_sheet_slide_out = global::XamarinDataChannelTest.Droid.Resource.Animation.design_bottom_sheet_slide_out;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.design_snackbar_in = global::XamarinDataChannelTest.Droid.Resource.Animation.design_snackbar_in;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.design_snackbar_out = global::XamarinDataChannelTest.Droid.Resource.Animation.design_snackbar_out;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.EnterFromLeft = global::XamarinDataChannelTest.Droid.Resource.Animation.EnterFromLeft;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.EnterFromRight = global::XamarinDataChannelTest.Droid.Resource.Animation.EnterFromRight;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.ExitToLeft = global::XamarinDataChannelTest.Droid.Resource.Animation.ExitToLeft;
- global::Xamarin.Forms.Platform.Android.Resource.Animation.ExitToRight = global::XamarinDataChannelTest.Droid.Resource.Animation.ExitToRight;
- global::Xamarin.Forms.Platform.Android.Resource.Animator.design_appbar_state_list_animator = global::XamarinDataChannelTest.Droid.Resource.Animator.design_appbar_state_list_animator;
- global::Xamarin.Forms.Platform.Android.Resource.Animator.design_fab_hide_motion_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.design_fab_hide_motion_spec;
- global::Xamarin.Forms.Platform.Android.Resource.Animator.design_fab_show_motion_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.design_fab_show_motion_spec;
- global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_btn_state_list_anim = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_btn_state_list_anim;
- global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_btn_unelevated_state_list_anim = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_btn_unelevated_state_list_anim;
- global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_chip_state_list_anim = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_chip_state_list_anim;
- global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_hide_motion_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_fab_hide_motion_spec;
- global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_show_motion_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_fab_show_motion_spec;
- global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec;
- global::Xamarin.Forms.Platform.Android.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarDivider = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarDivider;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarItemBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarItemBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarPopupTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarPopupTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarSize;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarSplitStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarSplitStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTabBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarTabBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTabStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarTabStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTabTextStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarTabTextStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionBarWidgetTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarWidgetTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionDropDownStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionDropDownStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionMenuTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionMenuTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionMenuTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionMenuTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCloseButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeCloseButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCloseDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeCloseDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCopyDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeCopyDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeCutDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeCutDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeFindDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeFindDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModePasteDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModePasteDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModePopupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModePopupWindowStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeSelectAllDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeSelectAllDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeShareDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeShareDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeSplitBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeSplitBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionModeWebSearchDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeWebSearchDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionOverflowButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionOverflowButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionOverflowMenuStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionOverflowMenuStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionProviderClass = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionProviderClass;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.actionViewClass = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionViewClass;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.activityChooserViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.activityChooserViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogButtonGroupStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.alertDialogButtonGroupStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogCenterButtons = global::XamarinDataChannelTest.Droid.Resource.Attribute.alertDialogCenterButtons;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.alertDialogStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.alertDialogTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.alertDialogTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.allowStacking = global::XamarinDataChannelTest.Droid.Resource.Attribute.allowStacking;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.alpha = global::XamarinDataChannelTest.Droid.Resource.Attribute.alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.alphabeticModifiers = global::XamarinDataChannelTest.Droid.Resource.Attribute.alphabeticModifiers;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.arrowHeadLength = global::XamarinDataChannelTest.Droid.Resource.Attribute.arrowHeadLength;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.arrowShaftLength = global::XamarinDataChannelTest.Droid.Resource.Attribute.arrowShaftLength;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoCompleteTextViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoCompleteTextViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeMaxTextSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoSizeMaxTextSize;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeMinTextSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoSizeMinTextSize;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizePresetSizes = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoSizePresetSizes;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeStepGranularity = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoSizeStepGranularity;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.autoSizeTextType = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoSizeTextType;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.background = global::XamarinDataChannelTest.Droid.Resource.Attribute.background;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundSplit = global::XamarinDataChannelTest.Droid.Resource.Attribute.backgroundSplit;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundStacked = global::XamarinDataChannelTest.Droid.Resource.Attribute.backgroundStacked;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.backgroundTint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.backgroundTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.backgroundTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.barLength = global::XamarinDataChannelTest.Droid.Resource.Attribute.barLength;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_autoHide = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_autoHide;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_fitToContents = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_fitToContents;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_hideable = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_hideable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_overlapTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_overlapTop;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_peekHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_peekHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.behavior_skipCollapsed = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_skipCollapsed;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.borderlessButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.borderlessButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.borderWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.borderWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomAppBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.bottomAppBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomNavigationStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.bottomNavigationStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomSheetDialogTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.bottomSheetDialogTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.bottomSheetStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.bottomSheetStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxBackgroundColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxBackgroundMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxBackgroundMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCollapsedPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxCollapsedPaddingTop;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusBottomEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxCornerRadiusBottomEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusBottomStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxCornerRadiusBottomStart;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusTopEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxCornerRadiusTopEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxCornerRadiusTopStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxCornerRadiusTopStart;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxStrokeColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxStrokeColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.boxStrokeWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxStrokeWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonBarButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarNegativeButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonBarNegativeButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarNeutralButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonBarNeutralButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarPositiveButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonBarPositiveButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonIconDimen = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonIconDimen;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonPanelSideLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonPanelSideLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonStyleSmall = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonStyleSmall;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonTint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.buttonTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardBackgroundColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardCornerRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardElevation = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardElevation;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardMaxElevation = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardMaxElevation;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardPreventCornerOverlap = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardPreventCornerOverlap;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardUseCompatPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardUseCompatPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.cardViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkboxStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkboxStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedChip = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkedChip;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkedIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkedIconEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedIconVisible = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkedIconVisible;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.checkedTextViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkedTextViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipBackgroundColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipCornerRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipEndPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipEndPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipGroupStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipGroupStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipIconEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipIconSize;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipIconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipIconVisible = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipIconVisible;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipMinHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipMinHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipSpacing = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipSpacing;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipSpacingHorizontal = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipSpacingHorizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipSpacingVertical = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipSpacingVertical;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStandaloneStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipStandaloneStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStartPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipStartPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStrokeColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipStrokeColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStrokeWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipStrokeWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.chipStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconEndPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconEndPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconSize;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconStartPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconStartPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeIconVisible = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconVisible;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.closeItemLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeItemLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapseContentDescription = global::XamarinDataChannelTest.Droid.Resource.Attribute.collapseContentDescription;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapsedTitleGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.collapsedTitleGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapsedTitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.collapsedTitleTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.collapseIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.collapseIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.collectionViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.collectionViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.color = global::XamarinDataChannelTest.Droid.Resource.Attribute.color;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorAccent = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorAccent;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorBackgroundFloating = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorBackgroundFloating;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorButtonNormal = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorButtonNormal;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorControlActivated = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorControlActivated;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorControlHighlight = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorControlHighlight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorControlNormal = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorControlNormal;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorError = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorError;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorPrimary = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorPrimary;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorPrimaryDark = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorPrimaryDark;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorSecondary = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorSecondary;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.colorSwitchThumbNormal = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorSwitchThumbNormal;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.commitIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.commitIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentDescription = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentDescription;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetEndWithActions = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetEndWithActions;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetLeft = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetLeft;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetRight = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetRight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetStart;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentInsetStartWithNavigation = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetStartWithNavigation;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingBottom = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentPaddingBottom;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingLeft = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentPaddingLeft;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingRight = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentPaddingRight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentPaddingTop;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.contentScrim = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentScrim;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.controlBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.controlBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.coordinatorLayoutStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.coordinatorLayoutStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.cornerRadius = global::XamarinDataChannelTest.Droid.Resource.Attribute.cornerRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.counterEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterMaxLength = global::XamarinDataChannelTest.Droid.Resource.Attribute.counterMaxLength;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterOverflowTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.counterOverflowTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.counterTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.counterTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.customNavigationLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.customNavigationLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.defaultQueryHint = global::XamarinDataChannelTest.Droid.Resource.Attribute.defaultQueryHint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.dialogCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Attribute.dialogCornerRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.dialogPreferredPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.dialogPreferredPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.dialogTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.dialogTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.displayOptions = global::XamarinDataChannelTest.Droid.Resource.Attribute.displayOptions;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.divider = global::XamarinDataChannelTest.Droid.Resource.Attribute.divider;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.dividerHorizontal = global::XamarinDataChannelTest.Droid.Resource.Attribute.dividerHorizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.dividerPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.dividerPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.dividerVertical = global::XamarinDataChannelTest.Droid.Resource.Attribute.dividerVertical;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.drawableSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.drawableSize;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.drawerArrowStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.drawerArrowStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.dropdownListPreferredItemHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.dropdownListPreferredItemHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.dropDownListViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.dropDownListViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.editTextBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.editTextBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.editTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.editTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.editTextStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.editTextStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.elevation = global::XamarinDataChannelTest.Droid.Resource.Attribute.elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.enforceMaterialTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.enforceMaterialTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.enforceTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.enforceTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.errorEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.errorEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.errorTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.errorTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandActivityOverflowButtonDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandActivityOverflowButtonDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.expanded = global::XamarinDataChannelTest.Droid.Resource.Attribute.expanded;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMargin = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleMargin;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginBottom = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleMarginBottom;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleMarginEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleMarginStart;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleMarginTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleMarginTop;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.expandedTitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabAlignmentMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabAlignmentMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCradleMargin = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabCradleMargin;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCradleRoundedCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabCradleRoundedCornerRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCradleVerticalOffset = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabCradleVerticalOffset;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabCustomSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabCustomSize;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fabSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabSize;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.fastScrollEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollHorizontalThumbDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.fastScrollHorizontalThumbDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollHorizontalTrackDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.fastScrollHorizontalTrackDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollVerticalThumbDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.fastScrollVerticalThumbDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fastScrollVerticalTrackDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.fastScrollVerticalTrackDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.firstBaselineToTopHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.firstBaselineToTopHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.floatingActionButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.floatingActionButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.font = global::XamarinDataChannelTest.Droid.Resource.Attribute.font;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontFamily = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontFamily;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderAuthority = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderAuthority;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderCerts = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderCerts;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderFetchStrategy = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderFetchStrategy;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderFetchTimeout = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderFetchTimeout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderPackage = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderPackage;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontProviderQuery = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderQuery;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontVariationSettings = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontVariationSettings;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.fontWeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontWeight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.foregroundInsidePadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.foregroundInsidePadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.gapBetweenBars = global::XamarinDataChannelTest.Droid.Resource.Attribute.gapBetweenBars;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.goIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.goIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.headerLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.headerLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.height = global::XamarinDataChannelTest.Droid.Resource.Attribute.height;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.helperText = global::XamarinDataChannelTest.Droid.Resource.Attribute.helperText;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.helperTextEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.helperTextEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.helperTextTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.helperTextTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.hideMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Attribute.hideMotionSpec;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.hideOnContentScroll = global::XamarinDataChannelTest.Droid.Resource.Attribute.hideOnContentScroll;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.hideOnScroll = global::XamarinDataChannelTest.Droid.Resource.Attribute.hideOnScroll;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.hintAnimationEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.hintAnimationEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.hintEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.hintEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.hintTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.hintTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.homeAsUpIndicator = global::XamarinDataChannelTest.Droid.Resource.Attribute.homeAsUpIndicator;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.homeLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.homeLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.hoveredFocusedTranslationZ = global::XamarinDataChannelTest.Droid.Resource.Attribute.hoveredFocusedTranslationZ;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.icon = global::XamarinDataChannelTest.Droid.Resource.Attribute.icon;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconEndPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconEndPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconifiedByDefault = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconifiedByDefault;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconSize;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconStartPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconStartPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.iconTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.imageButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.imageButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.indeterminateProgressStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.indeterminateProgressStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.initialActivityCount = global::XamarinDataChannelTest.Droid.Resource.Attribute.initialActivityCount;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.insetForeground = global::XamarinDataChannelTest.Droid.Resource.Attribute.insetForeground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.isLightTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.isLightTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemHorizontalPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemHorizontalPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemHorizontalTranslationEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemHorizontalTranslationEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemIconPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemIconPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemIconSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemIconSize;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemIconTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemIconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemSpacing = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemSpacing;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextAppearanceActive = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemTextAppearanceActive;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextAppearanceInactive = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemTextAppearanceInactive;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.itemTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.keylines = global::XamarinDataChannelTest.Droid.Resource.Attribute.keylines;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.labelVisibilityMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.labelVisibilityMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.lastBaselineToBottomHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.lastBaselineToBottomHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layoutManager = global::XamarinDataChannelTest.Droid.Resource.Attribute.layoutManager;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_anchor = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_anchor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_anchorGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_anchorGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_behavior = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_behavior;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_collapseMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_collapseMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_collapseParallaxMultiplier = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_collapseParallaxMultiplier;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_dodgeInsetEdges = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_dodgeInsetEdges;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_insetEdge = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_insetEdge;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_keyline = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_keyline;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_scrollFlags = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_scrollFlags;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.layout_scrollInterpolator = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_scrollInterpolator;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.liftOnScroll = global::XamarinDataChannelTest.Droid.Resource.Attribute.liftOnScroll;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.lineHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.lineHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.lineSpacing = global::XamarinDataChannelTest.Droid.Resource.Attribute.lineSpacing;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.listChoiceBackgroundIndicator = global::XamarinDataChannelTest.Droid.Resource.Attribute.listChoiceBackgroundIndicator;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.listDividerAlertDialog = global::XamarinDataChannelTest.Droid.Resource.Attribute.listDividerAlertDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.listItemLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.listItemLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.listLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.listLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.listMenuViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.listMenuViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPopupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPopupWindowStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPreferredItemHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemHeightLarge = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPreferredItemHeightLarge;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemHeightSmall = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPreferredItemHeightSmall;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemPaddingLeft = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPreferredItemPaddingLeft;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.listPreferredItemPaddingRight = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPreferredItemPaddingRight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.logo = global::XamarinDataChannelTest.Droid.Resource.Attribute.logo;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.logoDescription = global::XamarinDataChannelTest.Droid.Resource.Attribute.logoDescription;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.materialButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.materialButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.materialCardViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.materialCardViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.maxActionInlineWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.maxActionInlineWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.maxButtonHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.maxButtonHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.maxImageSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.maxImageSize;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.measureWithLargestChild = global::XamarinDataChannelTest.Droid.Resource.Attribute.measureWithLargestChild;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.menu = global::XamarinDataChannelTest.Droid.Resource.Attribute.menu;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.multiChoiceItemLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.multiChoiceItemLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationContentDescription = global::XamarinDataChannelTest.Droid.Resource.Attribute.navigationContentDescription;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.navigationIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.navigationMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.navigationViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.navigationViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.numericModifiers = global::XamarinDataChannelTest.Droid.Resource.Attribute.numericModifiers;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.overlapAnchor = global::XamarinDataChannelTest.Droid.Resource.Attribute.overlapAnchor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingBottomNoButtons = global::XamarinDataChannelTest.Droid.Resource.Attribute.paddingBottomNoButtons;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.paddingEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.paddingStart;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.paddingTopNoTitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.paddingTopNoTitle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.panelBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.panelBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.panelMenuListTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.panelMenuListTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.panelMenuListWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.panelMenuListWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleContentDescription = global::XamarinDataChannelTest.Droid.Resource.Attribute.passwordToggleContentDescription;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.passwordToggleDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.passwordToggleEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.passwordToggleTint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.passwordToggleTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.passwordToggleTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.popupMenuStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.popupMenuStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.popupTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.popupTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.popupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.popupWindowStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.preserveIconSpacing = global::XamarinDataChannelTest.Droid.Resource.Attribute.preserveIconSpacing;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.pressedTranslationZ = global::XamarinDataChannelTest.Droid.Resource.Attribute.pressedTranslationZ;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.progressBarPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.progressBarPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.progressBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.progressBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.queryBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.queryBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.queryHint = global::XamarinDataChannelTest.Droid.Resource.Attribute.queryHint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.radioButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.radioButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.ratingBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.ratingBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.ratingBarStyleIndicator = global::XamarinDataChannelTest.Droid.Resource.Attribute.ratingBarStyleIndicator;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.ratingBarStyleSmall = global::XamarinDataChannelTest.Droid.Resource.Attribute.ratingBarStyleSmall;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.reverseLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.reverseLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.rippleColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.rippleColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.scrimAnimationDuration = global::XamarinDataChannelTest.Droid.Resource.Attribute.scrimAnimationDuration;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.scrimBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.scrimBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.scrimVisibleHeightTrigger = global::XamarinDataChannelTest.Droid.Resource.Attribute.scrimVisibleHeightTrigger;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.searchHintIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.searchHintIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.searchIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.searchIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.searchViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.searchViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.seekBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.seekBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.selectableItemBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.selectableItemBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.selectableItemBackgroundBorderless = global::XamarinDataChannelTest.Droid.Resource.Attribute.selectableItemBackgroundBorderless;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.showAsAction = global::XamarinDataChannelTest.Droid.Resource.Attribute.showAsAction;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.showDividers = global::XamarinDataChannelTest.Droid.Resource.Attribute.showDividers;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.showMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Attribute.showMotionSpec;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.showText = global::XamarinDataChannelTest.Droid.Resource.Attribute.showText;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.showTitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.showTitle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.singleChoiceItemLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.singleChoiceItemLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.singleLine = global::XamarinDataChannelTest.Droid.Resource.Attribute.singleLine;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.singleSelection = global::XamarinDataChannelTest.Droid.Resource.Attribute.singleSelection;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.snackbarButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.snackbarButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.snackbarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.snackbarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.spanCount = global::XamarinDataChannelTest.Droid.Resource.Attribute.spanCount;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.spinBars = global::XamarinDataChannelTest.Droid.Resource.Attribute.spinBars;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.spinnerDropDownItemStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.spinnerDropDownItemStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.spinnerStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.spinnerStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.splitTrack = global::XamarinDataChannelTest.Droid.Resource.Attribute.splitTrack;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.srcCompat = global::XamarinDataChannelTest.Droid.Resource.Attribute.srcCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.stackFromEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.stackFromEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_above_anchor = global::XamarinDataChannelTest.Droid.Resource.Attribute.state_above_anchor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_collapsed = global::XamarinDataChannelTest.Droid.Resource.Attribute.state_collapsed;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_collapsible = global::XamarinDataChannelTest.Droid.Resource.Attribute.state_collapsible;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_liftable = global::XamarinDataChannelTest.Droid.Resource.Attribute.state_liftable;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.state_lifted = global::XamarinDataChannelTest.Droid.Resource.Attribute.state_lifted;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.statusBarBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.statusBarBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.statusBarScrim = global::XamarinDataChannelTest.Droid.Resource.Attribute.statusBarScrim;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.strokeColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.strokeColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.strokeWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.strokeWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.subMenuArrow = global::XamarinDataChannelTest.Droid.Resource.Attribute.subMenuArrow;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.submitBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.submitBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.subtitleTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitleTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.subtitleTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.subtitleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.subtitleTextStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.suggestionRowLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.suggestionRowLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchMinWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.switchMinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.switchPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.switchStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.switchTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.switchTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabContentStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabContentStart;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIconTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIconTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIconTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicator = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicator;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorAnimationDuration = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicatorAnimationDuration;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicatorColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorFullWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicatorFullWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicatorGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabIndicatorHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicatorHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabInlineLabel = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabInlineLabel;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabMaxWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabMaxWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabMinWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabMinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingBottom = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabPaddingBottom;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabPaddingEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabPaddingStart;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabPaddingTop;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabRippleColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabRippleColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabSelectedTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabSelectedTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tabUnboundedRipple = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabUnboundedRipple;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAllCaps = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAllCaps;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceBody1 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceBody1;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceBody2 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceBody2;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceButton = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceButton;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceCaption = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceCaption;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline1 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline1;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline2 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline2;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline3 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline3;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline4 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline4;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline5 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline5;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceHeadline6 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline6;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceLargePopupMenu = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceLargePopupMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceListItem = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceListItem;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceListItemSecondary = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceListItemSecondary;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceListItemSmall = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceListItemSmall;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceOverline = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceOverline;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearancePopupMenuHeader = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearancePopupMenuHeader;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSearchResultSubtitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceSearchResultSubtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSearchResultTitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceSearchResultTitle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSmallPopupMenu = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceSmallPopupMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSubtitle1 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceSubtitle1;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textAppearanceSubtitle2 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceSubtitle2;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textColorAlertDialogListItem = global::XamarinDataChannelTest.Droid.Resource.Attribute.textColorAlertDialogListItem;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textColorSearchUrl = global::XamarinDataChannelTest.Droid.Resource.Attribute.textColorSearchUrl;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textEndPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.textEndPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textInputStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.textInputStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.textStartPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.textStartPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.theme = global::XamarinDataChannelTest.Droid.Resource.Attribute.theme;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.thickness = global::XamarinDataChannelTest.Droid.Resource.Attribute.thickness;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.thumbTextPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.thumbTextPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.thumbTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.thumbTint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.thumbTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.thumbTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tickMark = global::XamarinDataChannelTest.Droid.Resource.Attribute.tickMark;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tickMarkTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.tickMarkTint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tickMarkTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.tickMarkTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tint = global::XamarinDataChannelTest.Droid.Resource.Attribute.tint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.tintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.title = global::XamarinDataChannelTest.Droid.Resource.Attribute.title;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMargin = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMargin;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginBottom = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMarginBottom;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMarginEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMargins = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMargins;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMarginStart;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleMarginTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMarginTop;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.titleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleTextStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.toolbarId = global::XamarinDataChannelTest.Droid.Resource.Attribute.toolbarId;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.toolbarNavigationButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.toolbarNavigationButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.toolbarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.toolbarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tooltipForegroundColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.tooltipForegroundColor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tooltipFrameBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.tooltipFrameBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.tooltipText = global::XamarinDataChannelTest.Droid.Resource.Attribute.tooltipText;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.track = global::XamarinDataChannelTest.Droid.Resource.Attribute.track;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.trackTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.trackTint;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.trackTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.trackTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.ttcIndex = global::XamarinDataChannelTest.Droid.Resource.Attribute.ttcIndex;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.useCompatPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.useCompatPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.viewInflaterClass = global::XamarinDataChannelTest.Droid.Resource.Attribute.viewInflaterClass;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.voiceIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.voiceIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowActionBar = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowActionBarOverlay = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowActionBarOverlay;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowActionModeOverlay = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowActionModeOverlay;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedHeightMajor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowFixedHeightMajor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedHeightMinor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowFixedHeightMinor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedWidthMajor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowFixedWidthMajor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowFixedWidthMinor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowFixedWidthMinor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowMinWidthMajor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowMinWidthMajor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowMinWidthMinor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowMinWidthMinor;
- global::Xamarin.Forms.Platform.Android.Resource.Attribute.windowNoTitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowNoTitle;
- global::Xamarin.Forms.Platform.Android.Resource.Boolean.abc_action_bar_embed_tabs = global::XamarinDataChannelTest.Droid.Resource.Boolean.abc_action_bar_embed_tabs;
- global::Xamarin.Forms.Platform.Android.Resource.Boolean.abc_allow_stacked_button_bar = global::XamarinDataChannelTest.Droid.Resource.Boolean.abc_allow_stacked_button_bar;
- global::Xamarin.Forms.Platform.Android.Resource.Boolean.abc_config_actionMenuItemAllCaps = global::XamarinDataChannelTest.Droid.Resource.Boolean.abc_config_actionMenuItemAllCaps;
- global::Xamarin.Forms.Platform.Android.Resource.Boolean.mtrl_btn_textappearance_all_caps = global::XamarinDataChannelTest.Droid.Resource.Boolean.mtrl_btn_textappearance_all_caps;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_background_cache_hint_selector_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.abc_background_cache_hint_selector_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_background_cache_hint_selector_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.abc_background_cache_hint_selector_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_btn_colored_borderless_text_material = global::XamarinDataChannelTest.Droid.Resource.Color.abc_btn_colored_borderless_text_material;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_btn_colored_text_material = global::XamarinDataChannelTest.Droid.Resource.Color.abc_btn_colored_text_material;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_color_highlight_material = global::XamarinDataChannelTest.Droid.Resource.Color.abc_color_highlight_material;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_hint_foreground_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.abc_hint_foreground_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_hint_foreground_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.abc_hint_foreground_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_input_method_navigation_guard = global::XamarinDataChannelTest.Droid.Resource.Color.abc_input_method_navigation_guard;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_disable_only_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.abc_primary_text_disable_only_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_disable_only_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.abc_primary_text_disable_only_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.abc_primary_text_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_primary_text_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.abc_primary_text_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text = global::XamarinDataChannelTest.Droid.Resource.Color.abc_search_url_text;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text_normal = global::XamarinDataChannelTest.Droid.Resource.Color.abc_search_url_text_normal;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text_pressed = global::XamarinDataChannelTest.Droid.Resource.Color.abc_search_url_text_pressed;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_search_url_text_selected = global::XamarinDataChannelTest.Droid.Resource.Color.abc_search_url_text_selected;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_secondary_text_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.abc_secondary_text_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_secondary_text_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.abc_secondary_text_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_btn_checkable = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_btn_checkable;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_default = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_default;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_edittext = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_edittext;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_seek_thumb = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_seek_thumb;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_spinner = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_spinner;
- global::Xamarin.Forms.Platform.Android.Resource.Color.abc_tint_switch_track = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_switch_track;
- global::Xamarin.Forms.Platform.Android.Resource.Color.accent_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.accent_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.accent_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.accent_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.background_floating_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.background_floating_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.background_floating_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.background_floating_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.background_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.background_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.background_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.background_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_disabled_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_disabled_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_disabled_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_disabled_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_inverse_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_inverse_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_inverse_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_inverse_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.bright_foreground_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.button_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.button_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.button_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.button_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_dark_background = global::XamarinDataChannelTest.Droid.Resource.Color.cardview_dark_background;
- global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_light_background = global::XamarinDataChannelTest.Droid.Resource.Color.cardview_light_background;
- global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_shadow_end_color = global::XamarinDataChannelTest.Droid.Resource.Color.cardview_shadow_end_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.cardview_shadow_start_color = global::XamarinDataChannelTest.Droid.Resource.Color.cardview_shadow_start_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_bottom_navigation_shadow_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_bottom_navigation_shadow_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_default_color_primary = global::XamarinDataChannelTest.Droid.Resource.Color.design_default_color_primary;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_default_color_primary_dark = global::XamarinDataChannelTest.Droid.Resource.Color.design_default_color_primary_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_error = global::XamarinDataChannelTest.Droid.Resource.Color.design_error;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_shadow_end_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_shadow_end_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_shadow_mid_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_shadow_mid_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_shadow_start_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_shadow_start_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_end_inner_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_stroke_end_inner_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_end_outer_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_stroke_end_outer_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_top_inner_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_stroke_top_inner_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_fab_stroke_top_outer_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_stroke_top_outer_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_snackbar_background_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_snackbar_background_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.design_tint_password_toggle = global::XamarinDataChannelTest.Droid.Resource.Color.design_tint_password_toggle;
- global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_disabled_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.dim_foreground_disabled_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_disabled_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.dim_foreground_disabled_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.dim_foreground_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.dim_foreground_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.dim_foreground_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.error_color_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.error_color_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.error_color_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.error_color_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.foreground_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.foreground_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.foreground_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.foreground_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.highlighted_text_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.highlighted_text_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.highlighted_text_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.highlighted_text_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_blue_grey_800 = global::XamarinDataChannelTest.Droid.Resource.Color.material_blue_grey_800;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_blue_grey_900 = global::XamarinDataChannelTest.Droid.Resource.Color.material_blue_grey_900;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_blue_grey_950 = global::XamarinDataChannelTest.Droid.Resource.Color.material_blue_grey_950;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_deep_teal_200 = global::XamarinDataChannelTest.Droid.Resource.Color.material_deep_teal_200;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_deep_teal_500 = global::XamarinDataChannelTest.Droid.Resource.Color.material_deep_teal_500;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_100 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_100;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_300 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_300;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_50 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_50;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_600 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_600;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_800 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_800;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_850 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_850;
- global::Xamarin.Forms.Platform.Android.Resource.Color.material_grey_900 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_900;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_bottom_nav_colored_item_tint = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_bottom_nav_colored_item_tint;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_bottom_nav_item_tint = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_bottom_nav_item_tint;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_bg_color_disabled = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_bg_color_disabled;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_bg_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_bg_color_selector;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_ripple_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_stroke_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_stroke_color_selector;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_text_btn_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_text_btn_ripple_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_text_color_disabled = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_text_color_disabled;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_text_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_text_color_selector;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_btn_transparent_bg_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_transparent_bg_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_background_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_chip_background_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_close_icon_tint = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_chip_close_icon_tint;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_chip_ripple_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_chip_text_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_chip_text_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_fab_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_fab_ripple_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_scrim_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_scrim_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_colored_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_tabs_colored_ripple_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_icon_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_tabs_icon_color_selector;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_icon_color_selector_colored = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_tabs_icon_color_selector_colored;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_legacy_text_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_tabs_legacy_text_color_selector;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_tabs_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_tabs_ripple_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_default_box_stroke_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_textinput_default_box_stroke_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_disabled_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_textinput_disabled_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_filled_box_default_background_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_textinput_filled_box_default_background_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_textinput_hovered_box_stroke_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_textinput_hovered_box_stroke_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.mtrl_text_btn_text_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_text_btn_text_color_selector;
- global::Xamarin.Forms.Platform.Android.Resource.Color.notification_action_color_filter = global::XamarinDataChannelTest.Droid.Resource.Color.notification_action_color_filter;
- global::Xamarin.Forms.Platform.Android.Resource.Color.notification_icon_bg_color = global::XamarinDataChannelTest.Droid.Resource.Color.notification_icon_bg_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.notification_material_background_media_default_color = global::XamarinDataChannelTest.Droid.Resource.Color.notification_material_background_media_default_color;
- global::Xamarin.Forms.Platform.Android.Resource.Color.primary_dark_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.primary_dark_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.primary_dark_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.primary_dark_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.primary_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.primary_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.primary_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.primary_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_default_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.primary_text_default_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_default_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.primary_text_default_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_disabled_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.primary_text_disabled_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.primary_text_disabled_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.primary_text_disabled_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.ripple_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.ripple_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.ripple_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.ripple_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_default_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.secondary_text_default_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_default_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.secondary_text_default_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_disabled_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.secondary_text_disabled_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.secondary_text_disabled_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.secondary_text_disabled_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_disabled_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_disabled_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_disabled_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_disabled_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_normal_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_normal_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.switch_thumb_normal_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_normal_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Color.tooltip_background_dark = global::XamarinDataChannelTest.Droid.Resource.Color.tooltip_background_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Color.tooltip_background_light = global::XamarinDataChannelTest.Droid.Resource.Color.tooltip_background_light;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_content_inset_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_content_inset_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_content_inset_with_nav = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_content_inset_with_nav;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_default_height_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_default_height_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_default_padding_end_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_default_padding_end_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_default_padding_start_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_default_padding_start_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_elevation_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_elevation_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_icon_vertical_padding_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_icon_vertical_padding_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_overflow_padding_end_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_overflow_padding_end_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_overflow_padding_start_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_overflow_padding_start_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_stacked_max_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_stacked_max_height;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_stacked_tab_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_stacked_tab_max_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_bar_subtitle_top_margin_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_subtitle_top_margin_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_button_min_height_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_button_min_height_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_button_min_width_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_button_min_width_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_action_button_min_width_overflow_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_button_min_width_overflow_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_alert_dialog_button_bar_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_alert_dialog_button_bar_height;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_alert_dialog_button_dimen = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_alert_dialog_button_dimen;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_inset_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_button_inset_horizontal_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_inset_vertical_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_button_inset_vertical_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_padding_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_button_padding_horizontal_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_button_padding_vertical_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_button_padding_vertical_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_cascading_menus_min_smallest_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_cascading_menus_min_smallest_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_config_prefDialogWidth = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_config_prefDialogWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_control_corner_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_control_corner_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_control_inset_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_control_inset_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_control_padding_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_control_padding_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_corner_radius_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_corner_radius_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_height_major = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_fixed_height_major;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_height_minor = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_fixed_height_minor;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_width_major = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_fixed_width_major;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_fixed_width_minor = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_fixed_width_minor;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_list_padding_top_no_title = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_list_padding_top_no_title;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_min_width_major = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_min_width_major;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_min_width_minor = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_min_width_minor;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_padding_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_padding_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_padding_top_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_padding_top_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dialog_title_divider_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_title_divider_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_disabled_alpha_material_dark = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_disabled_alpha_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_disabled_alpha_material_light = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_disabled_alpha_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dropdownitem_icon_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dropdownitem_icon_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dropdownitem_text_padding_left = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dropdownitem_text_padding_left;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_dropdownitem_text_padding_right = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dropdownitem_text_padding_right;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_edit_text_inset_bottom_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_edit_text_inset_bottom_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_edit_text_inset_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_edit_text_inset_horizontal_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_edit_text_inset_top_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_edit_text_inset_top_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_floating_window_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_floating_window_z;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_list_item_padding_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_list_item_padding_horizontal_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_panel_menu_list_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_panel_menu_list_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_progress_bar_height_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_progress_bar_height_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_search_view_preferred_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_search_view_preferred_height;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_search_view_preferred_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_search_view_preferred_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_seekbar_track_background_height_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_seekbar_track_background_height_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_seekbar_track_progress_height_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_seekbar_track_progress_height_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_select_dialog_padding_start_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_select_dialog_padding_start_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_switch_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_switch_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_body_1_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_body_1_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_body_2_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_body_2_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_button_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_button_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_caption_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_caption_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_1_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_display_1_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_2_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_display_2_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_3_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_display_3_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_display_4_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_display_4_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_headline_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_headline_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_large_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_large_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_medium_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_medium_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_menu_header_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_menu_header_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_menu_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_menu_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_small_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_small_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_subhead_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_subhead_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_subtitle_material_toolbar = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_subtitle_material_toolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_title_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_title_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.abc_text_size_title_material_toolbar = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_title_material_toolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.cardview_compat_inset_shadow = global::XamarinDataChannelTest.Droid.Resource.Dimension.cardview_compat_inset_shadow;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.cardview_default_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.cardview_default_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.cardview_default_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.cardview_default_radius;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_inset_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_inset_horizontal_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_inset_vertical_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_inset_vertical_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_padding_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_padding_horizontal_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_button_padding_vertical_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_padding_vertical_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_control_corner_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_control_corner_material;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_notification_large_icon_max_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_notification_large_icon_max_height;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.compat_notification_large_icon_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_notification_large_icon_max_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_appbar_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_appbar_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_active_item_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_active_item_max_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_active_item_min_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_active_item_min_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_active_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_active_text_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_height;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_icon_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_icon_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_item_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_item_max_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_item_min_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_item_min_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_margin;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_shadow_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_shadow_height;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_navigation_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_text_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_sheet_modal_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_sheet_modal_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_bottom_sheet_peek_height_min = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_sheet_peek_height_min;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_border_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_border_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_image_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_image_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_size_mini = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_size_mini;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_size_normal = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_size_normal;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_translation_z_hovered_focused = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_translation_z_hovered_focused;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_fab_translation_z_pressed = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_translation_z_pressed;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_icon_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_icon_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_icon_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_icon_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_item_horizontal_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_item_horizontal_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_item_icon_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_item_icon_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_max_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_padding_bottom = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_padding_bottom;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_navigation_separator_vertical_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_separator_vertical_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_action_inline_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_action_inline_max_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_background_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_background_corner_radius;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_extra_spacing_horizontal = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_extra_spacing_horizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_max_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_min_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_min_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_padding_horizontal = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_padding_horizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_padding_vertical = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_padding_vertical;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_padding_vertical_2lines = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_padding_vertical_2lines;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_snackbar_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_text_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_tab_max_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_scrollable_min_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_tab_scrollable_min_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_tab_text_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_tab_text_size_2line = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_tab_text_size_2line;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.design_textinput_caption_translate_y = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_textinput_caption_translate_y;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.disabled_alpha_material_dark = global::XamarinDataChannelTest.Droid.Resource.Dimension.disabled_alpha_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.disabled_alpha_material_light = global::XamarinDataChannelTest.Droid.Resource.Dimension.disabled_alpha_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.fastscroll_default_thickness = global::XamarinDataChannelTest.Droid.Resource.Dimension.fastscroll_default_thickness;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.fastscroll_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.fastscroll_margin;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.fastscroll_minimum_range = global::XamarinDataChannelTest.Droid.Resource.Dimension.fastscroll_minimum_range;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.highlight_alpha_material_colored = global::XamarinDataChannelTest.Droid.Resource.Dimension.highlight_alpha_material_colored;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.highlight_alpha_material_dark = global::XamarinDataChannelTest.Droid.Resource.Dimension.highlight_alpha_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.highlight_alpha_material_light = global::XamarinDataChannelTest.Droid.Resource.Dimension.highlight_alpha_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_alpha_material_dark = global::XamarinDataChannelTest.Droid.Resource.Dimension.hint_alpha_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_alpha_material_light = global::XamarinDataChannelTest.Droid.Resource.Dimension.hint_alpha_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_pressed_alpha_material_dark = global::XamarinDataChannelTest.Droid.Resource.Dimension.hint_pressed_alpha_material_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.hint_pressed_alpha_material_light = global::XamarinDataChannelTest.Droid.Resource.Dimension.hint_pressed_alpha_material_light;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame = global::XamarinDataChannelTest.Droid.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity = global::XamarinDataChannelTest.Droid.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.item_touch_helper_swipe_escape_velocity = global::XamarinDataChannelTest.Droid.Resource.Dimension.item_touch_helper_swipe_escape_velocity;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_bottomappbar_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_bottomappbar_height;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_corner_radius;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_dialog_btn_min_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_dialog_btn_min_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_disabled_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_disabled_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_disabled_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_disabled_z;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_focused_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_focused_z;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_hovered_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_hovered_z;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_icon_btn_padding_left = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_icon_btn_padding_left;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_icon_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_icon_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_inset = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_inset;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_letter_spacing = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_letter_spacing;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_bottom = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_padding_bottom;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_left = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_padding_left;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_right = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_padding_right;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_padding_top = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_padding_top;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_pressed_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_pressed_z;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_stroke_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_stroke_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_btn_icon_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_text_btn_icon_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_btn_padding_left = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_left;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_btn_padding_right = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_right;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_text_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_btn_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_z;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_card_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_card_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_card_spacing = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_card_spacing;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_chip_pressed_translation_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_chip_pressed_translation_z;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_chip_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_chip_text_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_fab_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_fab_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_fab_translation_z_hovered_focused = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_fab_translation_z_hovered_focused;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_fab_translation_z_pressed = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_fab_translation_z_pressed;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_navigation_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_navigation_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_navigation_item_horizontal_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_navigation_item_horizontal_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_navigation_item_icon_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_navigation_item_icon_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_snackbar_background_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_snackbar_background_corner_radius;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_snackbar_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_snackbar_margin;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_bottom_offset = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_bottom_offset;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_corner_radius_medium = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_medium;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_corner_radius_small = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_small;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_label_cutout_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_label_cutout_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_padding_end = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_padding_end;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_stroke_width_default = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_default;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_box_stroke_width_focused = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_focused;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.mtrl_toolbar_default_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_toolbar_default_height;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_action_icon_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_action_icon_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_action_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_action_text_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_big_circle_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_big_circle_margin;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_content_margin_start = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_content_margin_start;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_large_icon_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_large_icon_height;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_large_icon_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_large_icon_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_main_column_padding_top = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_main_column_padding_top;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_media_narrow_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_media_narrow_margin;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_right_icon_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_right_icon_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_right_side_padding_top = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_right_side_padding_top;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_small_icon_background_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_small_icon_background_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_small_icon_size_as_large = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_small_icon_size_as_large;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_subtext_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_subtext_size;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_top_pad = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_top_pad;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.notification_top_pad_large_text = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_top_pad_large_text;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.subtitle_corner_radius;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_outline_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.subtitle_outline_width;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_shadow_offset = global::XamarinDataChannelTest.Droid.Resource.Dimension.subtitle_shadow_offset;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.subtitle_shadow_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.subtitle_shadow_radius;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_corner_radius;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_horizontal_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_horizontal_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_margin;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_precise_anchor_extra_offset = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_precise_anchor_extra_offset;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_precise_anchor_threshold = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_precise_anchor_threshold;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_vertical_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_vertical_padding;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_y_offset_non_touch = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_y_offset_non_touch;
- global::Xamarin.Forms.Platform.Android.Resource.Dimension.tooltip_y_offset_touch = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_y_offset_touch;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ab_share_pack_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ab_share_pack_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_action_bar_item_background_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_action_bar_item_background_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_borderless_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_borderless_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_check_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_check_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_check_to_on_mtrl_000 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_000;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_check_to_on_mtrl_015 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_015;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_colored_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_colored_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_default_mtrl_shape = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_default_mtrl_shape;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_radio_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_radio_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_radio_to_on_mtrl_000 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_000;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_radio_to_on_mtrl_015 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_015;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_cab_background_internal_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_cab_background_internal_bg;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_cab_background_top_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_cab_background_top_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_cab_background_top_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_cab_background_top_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_control_background_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_control_background_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_dialog_material_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_dialog_material_background;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_edit_text_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_edit_text_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_ab_back_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_ab_back_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_clear_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_clear_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_go_search_api_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_go_search_api_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_overflow_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_overflow_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_menu_share_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_share_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_search_api_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_search_api_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_black_16dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_black_16dp;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_black_36dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_black_36dp;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_black_48dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_black_48dp;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_half_black_16dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_half_black_16dp;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_half_black_36dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_half_black_36dp;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_star_half_black_48dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_half_black_48dp;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ic_voice_search_api_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_voice_search_api_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_item_background_holo_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_item_background_holo_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_item_background_holo_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_item_background_holo_light;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_divider_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_divider_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_divider_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_divider_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_focused_holo = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_focused_holo;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_longpressed_holo = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_longpressed_holo;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_pressed_holo_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_pressed_holo_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_pressed_holo_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_pressed_holo_light;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_background_transition_holo_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_background_transition_holo_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_light;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_disabled_holo_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_disabled_holo_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_disabled_holo_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_disabled_holo_light;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_holo_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_holo_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_list_selector_holo_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_holo_light;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_popup_background_mtrl_mult = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_popup_background_mtrl_mult;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ratingbar_indicator_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ratingbar_indicator_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ratingbar_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ratingbar_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_ratingbar_small_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ratingbar_small_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_primary_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_scrubber_primary_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_scrubber_track_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_scrubber_track_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_seekbar_thumb_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_seekbar_thumb_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_seekbar_tick_mark_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_seekbar_tick_mark_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_seekbar_track_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_seekbar_track_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_spinner_mtrl_am_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_spinner_mtrl_am_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_spinner_textfield_background_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_spinner_textfield_background_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_switch_thumb_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_switch_thumb_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_switch_track_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_switch_track_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_tab_indicator_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_tab_indicator_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_tab_indicator_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_tab_indicator_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_activated_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_textfield_activated_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_default_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_textfield_default_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_search_default_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_textfield_search_default_mtrl_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_textfield_search_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_textfield_search_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_cursor_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_cursor_material;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_left_mtrl_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_left_mtrl_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_light;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_middle_mtrl_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_light;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_right_mtrl_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_text_select_handle_right_mtrl_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_light;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.abc_vector_test = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_vector_test;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_hide_password = global::XamarinDataChannelTest.Droid.Resource.Drawable.avd_hide_password;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.avd_show_password = global::XamarinDataChannelTest.Droid.Resource.Drawable.avd_show_password;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_bottom_navigation_item_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_bottom_navigation_item_background;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_fab_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_fab_background;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_ic_visibility = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_ic_visibility;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_ic_visibility_off = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_ic_visibility_off;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_password_eye = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_password_eye;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.design_snackbar_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_snackbar_background;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.ic_mtrl_chip_checked_black = global::XamarinDataChannelTest.Droid.Resource.Drawable.ic_mtrl_chip_checked_black;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.ic_mtrl_chip_checked_circle = global::XamarinDataChannelTest.Droid.Resource.Drawable.ic_mtrl_chip_checked_circle;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.ic_mtrl_chip_close_circle = global::XamarinDataChannelTest.Droid.Resource.Drawable.ic_mtrl_chip_close_circle;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.mtrl_snackbar_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.mtrl_snackbar_background;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.mtrl_tabs_default_indicator = global::XamarinDataChannelTest.Droid.Resource.Drawable.mtrl_tabs_default_indicator;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.navigation_empty_icon = global::XamarinDataChannelTest.Droid.Resource.Drawable.navigation_empty_icon;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_action_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_action_background;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_low = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_low;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_low_normal = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_low_normal;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_low_pressed = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_low_pressed;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_normal = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_normal;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_bg_normal_pressed = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_normal_pressed;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_icon_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_icon_background;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_template_icon_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_template_icon_bg;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_template_icon_low_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_template_icon_low_bg;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notification_tile_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_tile_bg;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.notify_panel_notification_icon_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notify_panel_notification_icon_bg;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.tooltip_frame_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.tooltip_frame_dark;
- global::Xamarin.Forms.Platform.Android.Resource.Drawable.tooltip_frame_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.tooltip_frame_light;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action0 = global::XamarinDataChannelTest.Droid.Resource.Id.action0;
- global::Xamarin.Forms.Platform.Android.Resource.Id.actions = global::XamarinDataChannelTest.Droid.Resource.Id.actions;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_activity_content = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_activity_content;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_container = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_container;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_root = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_root;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_spinner = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_spinner;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_subtitle = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_bar_title = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_title;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_container = global::XamarinDataChannelTest.Droid.Resource.Id.action_container;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_context_bar = global::XamarinDataChannelTest.Droid.Resource.Id.action_context_bar;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_divider = global::XamarinDataChannelTest.Droid.Resource.Id.action_divider;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_image = global::XamarinDataChannelTest.Droid.Resource.Id.action_image;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_menu_divider = global::XamarinDataChannelTest.Droid.Resource.Id.action_menu_divider;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_menu_presenter = global::XamarinDataChannelTest.Droid.Resource.Id.action_menu_presenter;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_mode_bar = global::XamarinDataChannelTest.Droid.Resource.Id.action_mode_bar;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_mode_bar_stub = global::XamarinDataChannelTest.Droid.Resource.Id.action_mode_bar_stub;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_mode_close_button = global::XamarinDataChannelTest.Droid.Resource.Id.action_mode_close_button;
- global::Xamarin.Forms.Platform.Android.Resource.Id.action_text = global::XamarinDataChannelTest.Droid.Resource.Id.action_text;
- global::Xamarin.Forms.Platform.Android.Resource.Id.activity_chooser_view_content = global::XamarinDataChannelTest.Droid.Resource.Id.activity_chooser_view_content;
- global::Xamarin.Forms.Platform.Android.Resource.Id.add = global::XamarinDataChannelTest.Droid.Resource.Id.add;
- global::Xamarin.Forms.Platform.Android.Resource.Id.alertTitle = global::XamarinDataChannelTest.Droid.Resource.Id.alertTitle;
- global::Xamarin.Forms.Platform.Android.Resource.Id.all = global::XamarinDataChannelTest.Droid.Resource.Id.all;
- global::Xamarin.Forms.Platform.Android.Resource.Id.ALT = global::XamarinDataChannelTest.Droid.Resource.Id.ALT;
- global::Xamarin.Forms.Platform.Android.Resource.Id.always = global::XamarinDataChannelTest.Droid.Resource.Id.always;
- global::Xamarin.Forms.Platform.Android.Resource.Id.async = global::XamarinDataChannelTest.Droid.Resource.Id.async;
- global::Xamarin.Forms.Platform.Android.Resource.Id.auto = global::XamarinDataChannelTest.Droid.Resource.Id.auto;
- global::Xamarin.Forms.Platform.Android.Resource.Id.beginning = global::XamarinDataChannelTest.Droid.Resource.Id.beginning;
- global::Xamarin.Forms.Platform.Android.Resource.Id.blocking = global::XamarinDataChannelTest.Droid.Resource.Id.blocking;
- global::Xamarin.Forms.Platform.Android.Resource.Id.bottom = global::XamarinDataChannelTest.Droid.Resource.Id.bottom;
- global::Xamarin.Forms.Platform.Android.Resource.Id.bottomtab_navarea = global::XamarinDataChannelTest.Droid.Resource.Id.bottomtab_navarea;
- global::Xamarin.Forms.Platform.Android.Resource.Id.bottomtab_tabbar = global::XamarinDataChannelTest.Droid.Resource.Id.bottomtab_tabbar;
- global::Xamarin.Forms.Platform.Android.Resource.Id.buttonPanel = global::XamarinDataChannelTest.Droid.Resource.Id.buttonPanel;
- global::Xamarin.Forms.Platform.Android.Resource.Id.cancel_action = global::XamarinDataChannelTest.Droid.Resource.Id.cancel_action;
- global::Xamarin.Forms.Platform.Android.Resource.Id.center = global::XamarinDataChannelTest.Droid.Resource.Id.center;
- global::Xamarin.Forms.Platform.Android.Resource.Id.center_horizontal = global::XamarinDataChannelTest.Droid.Resource.Id.center_horizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Id.center_vertical = global::XamarinDataChannelTest.Droid.Resource.Id.center_vertical;
- global::Xamarin.Forms.Platform.Android.Resource.Id.checkbox = global::XamarinDataChannelTest.Droid.Resource.Id.checkbox;
- global::Xamarin.Forms.Platform.Android.Resource.Id.chronometer = global::XamarinDataChannelTest.Droid.Resource.Id.chronometer;
- global::Xamarin.Forms.Platform.Android.Resource.Id.clip_horizontal = global::XamarinDataChannelTest.Droid.Resource.Id.clip_horizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Id.clip_vertical = global::XamarinDataChannelTest.Droid.Resource.Id.clip_vertical;
- global::Xamarin.Forms.Platform.Android.Resource.Id.collapseActionView = global::XamarinDataChannelTest.Droid.Resource.Id.collapseActionView;
- global::Xamarin.Forms.Platform.Android.Resource.Id.container = global::XamarinDataChannelTest.Droid.Resource.Id.container;
- global::Xamarin.Forms.Platform.Android.Resource.Id.content = global::XamarinDataChannelTest.Droid.Resource.Id.content;
- global::Xamarin.Forms.Platform.Android.Resource.Id.contentPanel = global::XamarinDataChannelTest.Droid.Resource.Id.contentPanel;
- global::Xamarin.Forms.Platform.Android.Resource.Id.coordinator = global::XamarinDataChannelTest.Droid.Resource.Id.coordinator;
- global::Xamarin.Forms.Platform.Android.Resource.Id.CTRL = global::XamarinDataChannelTest.Droid.Resource.Id.CTRL;
- global::Xamarin.Forms.Platform.Android.Resource.Id.custom = global::XamarinDataChannelTest.Droid.Resource.Id.custom;
- global::Xamarin.Forms.Platform.Android.Resource.Id.customPanel = global::XamarinDataChannelTest.Droid.Resource.Id.customPanel;
- global::Xamarin.Forms.Platform.Android.Resource.Id.decor_content_parent = global::XamarinDataChannelTest.Droid.Resource.Id.decor_content_parent;
- global::Xamarin.Forms.Platform.Android.Resource.Id.default_activity_button = global::XamarinDataChannelTest.Droid.Resource.Id.default_activity_button;
- global::Xamarin.Forms.Platform.Android.Resource.Id.design_bottom_sheet = global::XamarinDataChannelTest.Droid.Resource.Id.design_bottom_sheet;
- global::Xamarin.Forms.Platform.Android.Resource.Id.design_menu_item_action_area = global::XamarinDataChannelTest.Droid.Resource.Id.design_menu_item_action_area;
- global::Xamarin.Forms.Platform.Android.Resource.Id.design_menu_item_action_area_stub = global::XamarinDataChannelTest.Droid.Resource.Id.design_menu_item_action_area_stub;
- global::Xamarin.Forms.Platform.Android.Resource.Id.design_menu_item_text = global::XamarinDataChannelTest.Droid.Resource.Id.design_menu_item_text;
- global::Xamarin.Forms.Platform.Android.Resource.Id.design_navigation_view = global::XamarinDataChannelTest.Droid.Resource.Id.design_navigation_view;
- global::Xamarin.Forms.Platform.Android.Resource.Id.disableHome = global::XamarinDataChannelTest.Droid.Resource.Id.disableHome;
- global::Xamarin.Forms.Platform.Android.Resource.Id.edit_query = global::XamarinDataChannelTest.Droid.Resource.Id.edit_query;
- global::Xamarin.Forms.Platform.Android.Resource.Id.end = global::XamarinDataChannelTest.Droid.Resource.Id.end;
- global::Xamarin.Forms.Platform.Android.Resource.Id.end_padder = global::XamarinDataChannelTest.Droid.Resource.Id.end_padder;
- global::Xamarin.Forms.Platform.Android.Resource.Id.enterAlways = global::XamarinDataChannelTest.Droid.Resource.Id.enterAlways;
- global::Xamarin.Forms.Platform.Android.Resource.Id.enterAlwaysCollapsed = global::XamarinDataChannelTest.Droid.Resource.Id.enterAlwaysCollapsed;
- global::Xamarin.Forms.Platform.Android.Resource.Id.exitUntilCollapsed = global::XamarinDataChannelTest.Droid.Resource.Id.exitUntilCollapsed;
- global::Xamarin.Forms.Platform.Android.Resource.Id.expanded_menu = global::XamarinDataChannelTest.Droid.Resource.Id.expanded_menu;
- global::Xamarin.Forms.Platform.Android.Resource.Id.expand_activities_button = global::XamarinDataChannelTest.Droid.Resource.Id.expand_activities_button;
- global::Xamarin.Forms.Platform.Android.Resource.Id.fill = global::XamarinDataChannelTest.Droid.Resource.Id.fill;
- global::Xamarin.Forms.Platform.Android.Resource.Id.filled = global::XamarinDataChannelTest.Droid.Resource.Id.filled;
- global::Xamarin.Forms.Platform.Android.Resource.Id.fill_horizontal = global::XamarinDataChannelTest.Droid.Resource.Id.fill_horizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Id.fill_vertical = global::XamarinDataChannelTest.Droid.Resource.Id.fill_vertical;
- global::Xamarin.Forms.Platform.Android.Resource.Id.@fixed = global::XamarinDataChannelTest.Droid.Resource.Id.@fixed;
- global::Xamarin.Forms.Platform.Android.Resource.Id.flyoutcontent_appbar = global::XamarinDataChannelTest.Droid.Resource.Id.flyoutcontent_appbar;
- global::Xamarin.Forms.Platform.Android.Resource.Id.flyoutcontent_recycler = global::XamarinDataChannelTest.Droid.Resource.Id.flyoutcontent_recycler;
- global::Xamarin.Forms.Platform.Android.Resource.Id.forever = global::XamarinDataChannelTest.Droid.Resource.Id.forever;
- global::Xamarin.Forms.Platform.Android.Resource.Id.FUNCTION = global::XamarinDataChannelTest.Droid.Resource.Id.FUNCTION;
- global::Xamarin.Forms.Platform.Android.Resource.Id.ghost_view = global::XamarinDataChannelTest.Droid.Resource.Id.ghost_view;
- global::Xamarin.Forms.Platform.Android.Resource.Id.group_divider = global::XamarinDataChannelTest.Droid.Resource.Id.group_divider;
- global::Xamarin.Forms.Platform.Android.Resource.Id.home = global::XamarinDataChannelTest.Droid.Resource.Id.home;
- global::Xamarin.Forms.Platform.Android.Resource.Id.homeAsUp = global::XamarinDataChannelTest.Droid.Resource.Id.homeAsUp;
- global::Xamarin.Forms.Platform.Android.Resource.Id.icon = global::XamarinDataChannelTest.Droid.Resource.Id.icon;
- global::Xamarin.Forms.Platform.Android.Resource.Id.icon_group = global::XamarinDataChannelTest.Droid.Resource.Id.icon_group;
- global::Xamarin.Forms.Platform.Android.Resource.Id.ifRoom = global::XamarinDataChannelTest.Droid.Resource.Id.ifRoom;
- global::Xamarin.Forms.Platform.Android.Resource.Id.image = global::XamarinDataChannelTest.Droid.Resource.Id.image;
- global::Xamarin.Forms.Platform.Android.Resource.Id.info = global::XamarinDataChannelTest.Droid.Resource.Id.info;
- global::Xamarin.Forms.Platform.Android.Resource.Id.italic = global::XamarinDataChannelTest.Droid.Resource.Id.italic;
- global::Xamarin.Forms.Platform.Android.Resource.Id.item_touch_helper_previous_elevation = global::XamarinDataChannelTest.Droid.Resource.Id.item_touch_helper_previous_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Id.labeled = global::XamarinDataChannelTest.Droid.Resource.Id.labeled;
- global::Xamarin.Forms.Platform.Android.Resource.Id.largeLabel = global::XamarinDataChannelTest.Droid.Resource.Id.largeLabel;
- global::Xamarin.Forms.Platform.Android.Resource.Id.left = global::XamarinDataChannelTest.Droid.Resource.Id.left;
- global::Xamarin.Forms.Platform.Android.Resource.Id.line1 = global::XamarinDataChannelTest.Droid.Resource.Id.line1;
- global::Xamarin.Forms.Platform.Android.Resource.Id.line3 = global::XamarinDataChannelTest.Droid.Resource.Id.line3;
- global::Xamarin.Forms.Platform.Android.Resource.Id.listMode = global::XamarinDataChannelTest.Droid.Resource.Id.listMode;
- global::Xamarin.Forms.Platform.Android.Resource.Id.list_item = global::XamarinDataChannelTest.Droid.Resource.Id.list_item;
- global::Xamarin.Forms.Platform.Android.Resource.Id.main_appbar = global::XamarinDataChannelTest.Droid.Resource.Id.main_appbar;
- global::Xamarin.Forms.Platform.Android.Resource.Id.main_tablayout = global::XamarinDataChannelTest.Droid.Resource.Id.main_tablayout;
- global::Xamarin.Forms.Platform.Android.Resource.Id.main_toolbar = global::XamarinDataChannelTest.Droid.Resource.Id.main_toolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Id.main_viewpager = global::XamarinDataChannelTest.Droid.Resource.Id.main_viewpager;
- global::Xamarin.Forms.Platform.Android.Resource.Id.masked = global::XamarinDataChannelTest.Droid.Resource.Id.masked;
- global::Xamarin.Forms.Platform.Android.Resource.Id.media_actions = global::XamarinDataChannelTest.Droid.Resource.Id.media_actions;
- global::Xamarin.Forms.Platform.Android.Resource.Id.message = global::XamarinDataChannelTest.Droid.Resource.Id.message;
- global::Xamarin.Forms.Platform.Android.Resource.Id.META = global::XamarinDataChannelTest.Droid.Resource.Id.META;
- global::Xamarin.Forms.Platform.Android.Resource.Id.middle = global::XamarinDataChannelTest.Droid.Resource.Id.middle;
- global::Xamarin.Forms.Platform.Android.Resource.Id.mini = global::XamarinDataChannelTest.Droid.Resource.Id.mini;
- global::Xamarin.Forms.Platform.Android.Resource.Id.mtrl_child_content_container = global::XamarinDataChannelTest.Droid.Resource.Id.mtrl_child_content_container;
- global::Xamarin.Forms.Platform.Android.Resource.Id.mtrl_internal_children_alpha_tag = global::XamarinDataChannelTest.Droid.Resource.Id.mtrl_internal_children_alpha_tag;
- global::Xamarin.Forms.Platform.Android.Resource.Id.multiply = global::XamarinDataChannelTest.Droid.Resource.Id.multiply;
- global::Xamarin.Forms.Platform.Android.Resource.Id.navigation_header_container = global::XamarinDataChannelTest.Droid.Resource.Id.navigation_header_container;
- global::Xamarin.Forms.Platform.Android.Resource.Id.never = global::XamarinDataChannelTest.Droid.Resource.Id.never;
- global::Xamarin.Forms.Platform.Android.Resource.Id.none = global::XamarinDataChannelTest.Droid.Resource.Id.none;
- global::Xamarin.Forms.Platform.Android.Resource.Id.normal = global::XamarinDataChannelTest.Droid.Resource.Id.normal;
- global::Xamarin.Forms.Platform.Android.Resource.Id.notification_background = global::XamarinDataChannelTest.Droid.Resource.Id.notification_background;
- global::Xamarin.Forms.Platform.Android.Resource.Id.notification_main_column = global::XamarinDataChannelTest.Droid.Resource.Id.notification_main_column;
- global::Xamarin.Forms.Platform.Android.Resource.Id.notification_main_column_container = global::XamarinDataChannelTest.Droid.Resource.Id.notification_main_column_container;
- global::Xamarin.Forms.Platform.Android.Resource.Id.outline = global::XamarinDataChannelTest.Droid.Resource.Id.outline;
- global::Xamarin.Forms.Platform.Android.Resource.Id.parallax = global::XamarinDataChannelTest.Droid.Resource.Id.parallax;
- global::Xamarin.Forms.Platform.Android.Resource.Id.parentPanel = global::XamarinDataChannelTest.Droid.Resource.Id.parentPanel;
- global::Xamarin.Forms.Platform.Android.Resource.Id.parent_matrix = global::XamarinDataChannelTest.Droid.Resource.Id.parent_matrix;
- global::Xamarin.Forms.Platform.Android.Resource.Id.pin = global::XamarinDataChannelTest.Droid.Resource.Id.pin;
- global::Xamarin.Forms.Platform.Android.Resource.Id.progress_circular = global::XamarinDataChannelTest.Droid.Resource.Id.progress_circular;
- global::Xamarin.Forms.Platform.Android.Resource.Id.progress_horizontal = global::XamarinDataChannelTest.Droid.Resource.Id.progress_horizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Id.radio = global::XamarinDataChannelTest.Droid.Resource.Id.radio;
- global::Xamarin.Forms.Platform.Android.Resource.Id.right = global::XamarinDataChannelTest.Droid.Resource.Id.right;
- global::Xamarin.Forms.Platform.Android.Resource.Id.right_icon = global::XamarinDataChannelTest.Droid.Resource.Id.right_icon;
- global::Xamarin.Forms.Platform.Android.Resource.Id.right_side = global::XamarinDataChannelTest.Droid.Resource.Id.right_side;
- global::Xamarin.Forms.Platform.Android.Resource.Id.save_image_matrix = global::XamarinDataChannelTest.Droid.Resource.Id.save_image_matrix;
- global::Xamarin.Forms.Platform.Android.Resource.Id.save_non_transition_alpha = global::XamarinDataChannelTest.Droid.Resource.Id.save_non_transition_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Id.save_scale_type = global::XamarinDataChannelTest.Droid.Resource.Id.save_scale_type;
- global::Xamarin.Forms.Platform.Android.Resource.Id.screen = global::XamarinDataChannelTest.Droid.Resource.Id.screen;
- global::Xamarin.Forms.Platform.Android.Resource.Id.scroll = global::XamarinDataChannelTest.Droid.Resource.Id.scroll;
- global::Xamarin.Forms.Platform.Android.Resource.Id.scrollable = global::XamarinDataChannelTest.Droid.Resource.Id.scrollable;
- global::Xamarin.Forms.Platform.Android.Resource.Id.scrollIndicatorDown = global::XamarinDataChannelTest.Droid.Resource.Id.scrollIndicatorDown;
- global::Xamarin.Forms.Platform.Android.Resource.Id.scrollIndicatorUp = global::XamarinDataChannelTest.Droid.Resource.Id.scrollIndicatorUp;
- global::Xamarin.Forms.Platform.Android.Resource.Id.scrollView = global::XamarinDataChannelTest.Droid.Resource.Id.scrollView;
- global::Xamarin.Forms.Platform.Android.Resource.Id.search_badge = global::XamarinDataChannelTest.Droid.Resource.Id.search_badge;
- global::Xamarin.Forms.Platform.Android.Resource.Id.search_bar = global::XamarinDataChannelTest.Droid.Resource.Id.search_bar;
- global::Xamarin.Forms.Platform.Android.Resource.Id.search_button = global::XamarinDataChannelTest.Droid.Resource.Id.search_button;
- global::Xamarin.Forms.Platform.Android.Resource.Id.search_close_btn = global::XamarinDataChannelTest.Droid.Resource.Id.search_close_btn;
- global::Xamarin.Forms.Platform.Android.Resource.Id.search_edit_frame = global::XamarinDataChannelTest.Droid.Resource.Id.search_edit_frame;
- global::Xamarin.Forms.Platform.Android.Resource.Id.search_go_btn = global::XamarinDataChannelTest.Droid.Resource.Id.search_go_btn;
- global::Xamarin.Forms.Platform.Android.Resource.Id.search_mag_icon = global::XamarinDataChannelTest.Droid.Resource.Id.search_mag_icon;
- global::Xamarin.Forms.Platform.Android.Resource.Id.search_plate = global::XamarinDataChannelTest.Droid.Resource.Id.search_plate;
- global::Xamarin.Forms.Platform.Android.Resource.Id.search_src_text = global::XamarinDataChannelTest.Droid.Resource.Id.search_src_text;
- global::Xamarin.Forms.Platform.Android.Resource.Id.search_voice_btn = global::XamarinDataChannelTest.Droid.Resource.Id.search_voice_btn;
- global::Xamarin.Forms.Platform.Android.Resource.Id.selected = global::XamarinDataChannelTest.Droid.Resource.Id.selected;
- global::Xamarin.Forms.Platform.Android.Resource.Id.select_dialog_listview = global::XamarinDataChannelTest.Droid.Resource.Id.select_dialog_listview;
- global::Xamarin.Forms.Platform.Android.Resource.Id.shellcontent_appbar = global::XamarinDataChannelTest.Droid.Resource.Id.shellcontent_appbar;
- global::Xamarin.Forms.Platform.Android.Resource.Id.shellcontent_toolbar = global::XamarinDataChannelTest.Droid.Resource.Id.shellcontent_toolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Id.SHIFT = global::XamarinDataChannelTest.Droid.Resource.Id.SHIFT;
- global::Xamarin.Forms.Platform.Android.Resource.Id.shortcut = global::XamarinDataChannelTest.Droid.Resource.Id.shortcut;
- global::Xamarin.Forms.Platform.Android.Resource.Id.showCustom = global::XamarinDataChannelTest.Droid.Resource.Id.showCustom;
- global::Xamarin.Forms.Platform.Android.Resource.Id.showHome = global::XamarinDataChannelTest.Droid.Resource.Id.showHome;
- global::Xamarin.Forms.Platform.Android.Resource.Id.showTitle = global::XamarinDataChannelTest.Droid.Resource.Id.showTitle;
- global::Xamarin.Forms.Platform.Android.Resource.Id.smallLabel = global::XamarinDataChannelTest.Droid.Resource.Id.smallLabel;
- global::Xamarin.Forms.Platform.Android.Resource.Id.snackbar_action = global::XamarinDataChannelTest.Droid.Resource.Id.snackbar_action;
- global::Xamarin.Forms.Platform.Android.Resource.Id.snackbar_text = global::XamarinDataChannelTest.Droid.Resource.Id.snackbar_text;
- global::Xamarin.Forms.Platform.Android.Resource.Id.snap = global::XamarinDataChannelTest.Droid.Resource.Id.snap;
- global::Xamarin.Forms.Platform.Android.Resource.Id.snapMargins = global::XamarinDataChannelTest.Droid.Resource.Id.snapMargins;
- global::Xamarin.Forms.Platform.Android.Resource.Id.spacer = global::XamarinDataChannelTest.Droid.Resource.Id.spacer;
- global::Xamarin.Forms.Platform.Android.Resource.Id.split_action_bar = global::XamarinDataChannelTest.Droid.Resource.Id.split_action_bar;
- global::Xamarin.Forms.Platform.Android.Resource.Id.src_atop = global::XamarinDataChannelTest.Droid.Resource.Id.src_atop;
- global::Xamarin.Forms.Platform.Android.Resource.Id.src_in = global::XamarinDataChannelTest.Droid.Resource.Id.src_in;
- global::Xamarin.Forms.Platform.Android.Resource.Id.src_over = global::XamarinDataChannelTest.Droid.Resource.Id.src_over;
- global::Xamarin.Forms.Platform.Android.Resource.Id.start = global::XamarinDataChannelTest.Droid.Resource.Id.start;
- global::Xamarin.Forms.Platform.Android.Resource.Id.status_bar_latest_event_content = global::XamarinDataChannelTest.Droid.Resource.Id.status_bar_latest_event_content;
- global::Xamarin.Forms.Platform.Android.Resource.Id.stretch = global::XamarinDataChannelTest.Droid.Resource.Id.stretch;
- global::Xamarin.Forms.Platform.Android.Resource.Id.submenuarrow = global::XamarinDataChannelTest.Droid.Resource.Id.submenuarrow;
- global::Xamarin.Forms.Platform.Android.Resource.Id.submit_area = global::XamarinDataChannelTest.Droid.Resource.Id.submit_area;
- global::Xamarin.Forms.Platform.Android.Resource.Id.SYM = global::XamarinDataChannelTest.Droid.Resource.Id.SYM;
- global::Xamarin.Forms.Platform.Android.Resource.Id.tabMode = global::XamarinDataChannelTest.Droid.Resource.Id.tabMode;
- global::Xamarin.Forms.Platform.Android.Resource.Id.tag_transition_group = global::XamarinDataChannelTest.Droid.Resource.Id.tag_transition_group;
- global::Xamarin.Forms.Platform.Android.Resource.Id.tag_unhandled_key_event_manager = global::XamarinDataChannelTest.Droid.Resource.Id.tag_unhandled_key_event_manager;
- global::Xamarin.Forms.Platform.Android.Resource.Id.tag_unhandled_key_listeners = global::XamarinDataChannelTest.Droid.Resource.Id.tag_unhandled_key_listeners;
- global::Xamarin.Forms.Platform.Android.Resource.Id.text = global::XamarinDataChannelTest.Droid.Resource.Id.text;
- global::Xamarin.Forms.Platform.Android.Resource.Id.text2 = global::XamarinDataChannelTest.Droid.Resource.Id.text2;
- global::Xamarin.Forms.Platform.Android.Resource.Id.textinput_counter = global::XamarinDataChannelTest.Droid.Resource.Id.textinput_counter;
- global::Xamarin.Forms.Platform.Android.Resource.Id.textinput_error = global::XamarinDataChannelTest.Droid.Resource.Id.textinput_error;
- global::Xamarin.Forms.Platform.Android.Resource.Id.textinput_helper_text = global::XamarinDataChannelTest.Droid.Resource.Id.textinput_helper_text;
- global::Xamarin.Forms.Platform.Android.Resource.Id.textSpacerNoButtons = global::XamarinDataChannelTest.Droid.Resource.Id.textSpacerNoButtons;
- global::Xamarin.Forms.Platform.Android.Resource.Id.textSpacerNoTitle = global::XamarinDataChannelTest.Droid.Resource.Id.textSpacerNoTitle;
- global::Xamarin.Forms.Platform.Android.Resource.Id.textStart = global::XamarinDataChannelTest.Droid.Resource.Id.textStart;
- global::Xamarin.Forms.Platform.Android.Resource.Id.text_input_password_toggle = global::XamarinDataChannelTest.Droid.Resource.Id.text_input_password_toggle;
- global::Xamarin.Forms.Platform.Android.Resource.Id.time = global::XamarinDataChannelTest.Droid.Resource.Id.time;
- global::Xamarin.Forms.Platform.Android.Resource.Id.title = global::XamarinDataChannelTest.Droid.Resource.Id.title;
- global::Xamarin.Forms.Platform.Android.Resource.Id.titleDividerNoCustom = global::XamarinDataChannelTest.Droid.Resource.Id.titleDividerNoCustom;
- global::Xamarin.Forms.Platform.Android.Resource.Id.title_template = global::XamarinDataChannelTest.Droid.Resource.Id.title_template;
- global::Xamarin.Forms.Platform.Android.Resource.Id.top = global::XamarinDataChannelTest.Droid.Resource.Id.top;
- global::Xamarin.Forms.Platform.Android.Resource.Id.topPanel = global::XamarinDataChannelTest.Droid.Resource.Id.topPanel;
- global::Xamarin.Forms.Platform.Android.Resource.Id.touch_outside = global::XamarinDataChannelTest.Droid.Resource.Id.touch_outside;
- global::Xamarin.Forms.Platform.Android.Resource.Id.transition_current_scene = global::XamarinDataChannelTest.Droid.Resource.Id.transition_current_scene;
- global::Xamarin.Forms.Platform.Android.Resource.Id.transition_layout_save = global::XamarinDataChannelTest.Droid.Resource.Id.transition_layout_save;
- global::Xamarin.Forms.Platform.Android.Resource.Id.transition_position = global::XamarinDataChannelTest.Droid.Resource.Id.transition_position;
- global::Xamarin.Forms.Platform.Android.Resource.Id.transition_scene_layoutid_cache = global::XamarinDataChannelTest.Droid.Resource.Id.transition_scene_layoutid_cache;
- global::Xamarin.Forms.Platform.Android.Resource.Id.transition_transform = global::XamarinDataChannelTest.Droid.Resource.Id.transition_transform;
- global::Xamarin.Forms.Platform.Android.Resource.Id.uniform = global::XamarinDataChannelTest.Droid.Resource.Id.uniform;
- global::Xamarin.Forms.Platform.Android.Resource.Id.unlabeled = global::XamarinDataChannelTest.Droid.Resource.Id.unlabeled;
- global::Xamarin.Forms.Platform.Android.Resource.Id.up = global::XamarinDataChannelTest.Droid.Resource.Id.up;
- global::Xamarin.Forms.Platform.Android.Resource.Id.useLogo = global::XamarinDataChannelTest.Droid.Resource.Id.useLogo;
- global::Xamarin.Forms.Platform.Android.Resource.Id.view_offset_helper = global::XamarinDataChannelTest.Droid.Resource.Id.view_offset_helper;
- global::Xamarin.Forms.Platform.Android.Resource.Id.visible = global::XamarinDataChannelTest.Droid.Resource.Id.visible;
- global::Xamarin.Forms.Platform.Android.Resource.Id.withText = global::XamarinDataChannelTest.Droid.Resource.Id.withText;
- global::Xamarin.Forms.Platform.Android.Resource.Id.wrap_content = global::XamarinDataChannelTest.Droid.Resource.Id.wrap_content;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.abc_config_activityDefaultDur = global::XamarinDataChannelTest.Droid.Resource.Integer.abc_config_activityDefaultDur;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.abc_config_activityShortDur = global::XamarinDataChannelTest.Droid.Resource.Integer.abc_config_activityShortDur;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.app_bar_elevation_anim_duration = global::XamarinDataChannelTest.Droid.Resource.Integer.app_bar_elevation_anim_duration;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.bottom_sheet_slide_duration = global::XamarinDataChannelTest.Droid.Resource.Integer.bottom_sheet_slide_duration;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.cancel_button_image_alpha = global::XamarinDataChannelTest.Droid.Resource.Integer.cancel_button_image_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.config_tooltipAnimTime = global::XamarinDataChannelTest.Droid.Resource.Integer.config_tooltipAnimTime;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.design_snackbar_text_max_lines = global::XamarinDataChannelTest.Droid.Resource.Integer.design_snackbar_text_max_lines;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.design_tab_indicator_anim_duration_ms = global::XamarinDataChannelTest.Droid.Resource.Integer.design_tab_indicator_anim_duration_ms;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.hide_password_duration = global::XamarinDataChannelTest.Droid.Resource.Integer.hide_password_duration;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_btn_anim_delay_ms = global::XamarinDataChannelTest.Droid.Resource.Integer.mtrl_btn_anim_delay_ms;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_btn_anim_duration_ms = global::XamarinDataChannelTest.Droid.Resource.Integer.mtrl_btn_anim_duration_ms;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_chip_anim_duration = global::XamarinDataChannelTest.Droid.Resource.Integer.mtrl_chip_anim_duration;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.mtrl_tab_indicator_anim_duration_ms = global::XamarinDataChannelTest.Droid.Resource.Integer.mtrl_tab_indicator_anim_duration_ms;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.show_password_duration = global::XamarinDataChannelTest.Droid.Resource.Integer.show_password_duration;
- global::Xamarin.Forms.Platform.Android.Resource.Integer.status_bar_notification_info_maxnum = global::XamarinDataChannelTest.Droid.Resource.Integer.status_bar_notification_info_maxnum;
- global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_fast_out_linear_in = global::XamarinDataChannelTest.Droid.Resource.Interpolator.mtrl_fast_out_linear_in;
- global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_fast_out_slow_in = global::XamarinDataChannelTest.Droid.Resource.Interpolator.mtrl_fast_out_slow_in;
- global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_linear = global::XamarinDataChannelTest.Droid.Resource.Interpolator.mtrl_linear;
- global::Xamarin.Forms.Platform.Android.Resource.Interpolator.mtrl_linear_out_slow_in = global::XamarinDataChannelTest.Droid.Resource.Interpolator.mtrl_linear_out_slow_in;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_bar_title_item = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_bar_title_item;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_bar_up_container = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_bar_up_container;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_menu_item_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_menu_item_layout;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_menu_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_menu_layout;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_mode_bar = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_mode_bar;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_action_mode_close_item_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_mode_close_item_material;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_activity_chooser_view = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_activity_chooser_view;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_activity_chooser_view_list_item = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_activity_chooser_view_list_item;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_alert_dialog_button_bar_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_alert_dialog_button_bar_material;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_alert_dialog_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_alert_dialog_material;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_alert_dialog_title_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_alert_dialog_title_material;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_cascading_menu_item_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_cascading_menu_item_layout;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_dialog_title_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_dialog_title_material;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_expanded_menu_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_expanded_menu_layout;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_checkbox = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_list_menu_item_checkbox;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_icon = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_list_menu_item_icon;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_list_menu_item_layout;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_list_menu_item_radio = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_list_menu_item_radio;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_popup_menu_header_item_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_popup_menu_header_item_layout;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_popup_menu_item_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_popup_menu_item_layout;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_content_include = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_screen_content_include;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_simple = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_screen_simple;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_simple_overlay_action_mode = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_screen_simple_overlay_action_mode;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_screen_toolbar = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_screen_toolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_search_dropdown_item_icons_2line = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_search_dropdown_item_icons_2line;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_search_view = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_search_view;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_select_dialog_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_select_dialog_material;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.abc_tooltip = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_tooltip;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.BottomTabLayout = global::XamarinDataChannelTest.Droid.Resource.Layout.BottomTabLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_bottom_navigation_item = global::XamarinDataChannelTest.Droid.Resource.Layout.design_bottom_navigation_item;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_bottom_sheet_dialog = global::XamarinDataChannelTest.Droid.Resource.Layout.design_bottom_sheet_dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_snackbar = global::XamarinDataChannelTest.Droid.Resource.Layout.design_layout_snackbar;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_snackbar_include = global::XamarinDataChannelTest.Droid.Resource.Layout.design_layout_snackbar_include;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_tab_icon = global::XamarinDataChannelTest.Droid.Resource.Layout.design_layout_tab_icon;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_layout_tab_text = global::XamarinDataChannelTest.Droid.Resource.Layout.design_layout_tab_text;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_menu_item_action_area = global::XamarinDataChannelTest.Droid.Resource.Layout.design_menu_item_action_area;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_item;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item_header = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_item_header;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item_separator = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_item_separator;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_item_subheader = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_item_subheader;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_menu = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_menu;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_navigation_menu_item = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_menu_item;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.design_text_input_password_icon = global::XamarinDataChannelTest.Droid.Resource.Layout.design_text_input_password_icon;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.FlyoutContent = global::XamarinDataChannelTest.Droid.Resource.Layout.FlyoutContent;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.mtrl_layout_snackbar = global::XamarinDataChannelTest.Droid.Resource.Layout.mtrl_layout_snackbar;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.mtrl_layout_snackbar_include = global::XamarinDataChannelTest.Droid.Resource.Layout.mtrl_layout_snackbar_include;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_action = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_action;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_action_tombstone = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_action_tombstone;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_media_action = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_media_action;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_media_cancel_action = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_media_cancel_action;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_big_media;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media_custom = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_big_media_custom;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media_narrow = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_big_media_narrow;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_big_media_narrow_custom = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_big_media_narrow_custom;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_custom_big = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_custom_big;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_icon_group = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_icon_group;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_lines_media = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_lines_media;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_media = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_media;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_media_custom = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_media_custom;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_part_chronometer = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_part_chronometer;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.notification_template_part_time = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_part_time;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.RootLayout = global::XamarinDataChannelTest.Droid.Resource.Layout.RootLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.select_dialog_item_material = global::XamarinDataChannelTest.Droid.Resource.Layout.select_dialog_item_material;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.select_dialog_multichoice_material = global::XamarinDataChannelTest.Droid.Resource.Layout.select_dialog_multichoice_material;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.select_dialog_singlechoice_material = global::XamarinDataChannelTest.Droid.Resource.Layout.select_dialog_singlechoice_material;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.ShellContent = global::XamarinDataChannelTest.Droid.Resource.Layout.ShellContent;
- global::Xamarin.Forms.Platform.Android.Resource.Layout.support_simple_spinner_dropdown_item = global::XamarinDataChannelTest.Droid.Resource.Layout.support_simple_spinner_dropdown_item;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_bar_home_description = global::XamarinDataChannelTest.Droid.Resource.String.abc_action_bar_home_description;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_bar_up_description = global::XamarinDataChannelTest.Droid.Resource.String.abc_action_bar_up_description;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_menu_overflow_description = global::XamarinDataChannelTest.Droid.Resource.String.abc_action_menu_overflow_description;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_action_mode_done = global::XamarinDataChannelTest.Droid.Resource.String.abc_action_mode_done;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_activitychooserview_choose_application = global::XamarinDataChannelTest.Droid.Resource.String.abc_activitychooserview_choose_application;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_activity_chooser_view_see_all = global::XamarinDataChannelTest.Droid.Resource.String.abc_activity_chooser_view_see_all;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_capital_off = global::XamarinDataChannelTest.Droid.Resource.String.abc_capital_off;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_capital_on = global::XamarinDataChannelTest.Droid.Resource.String.abc_capital_on;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_body_1_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_body_1_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_body_2_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_body_2_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_button_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_button_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_caption_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_caption_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_1_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_display_1_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_2_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_display_2_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_3_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_display_3_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_display_4_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_display_4_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_headline_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_headline_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_menu_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_menu_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_subhead_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_subhead_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_font_family_title_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_title_material;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_alt_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_alt_shortcut_label;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_ctrl_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_ctrl_shortcut_label;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_delete_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_delete_shortcut_label;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_enter_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_enter_shortcut_label;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_function_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_function_shortcut_label;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_meta_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_meta_shortcut_label;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_shift_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_shift_shortcut_label;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_space_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_space_shortcut_label;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_menu_sym_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_sym_shortcut_label;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_prepend_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_prepend_shortcut_label;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_clear = global::XamarinDataChannelTest.Droid.Resource.String.abc_searchview_description_clear;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_query = global::XamarinDataChannelTest.Droid.Resource.String.abc_searchview_description_query;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_search = global::XamarinDataChannelTest.Droid.Resource.String.abc_searchview_description_search;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_submit = global::XamarinDataChannelTest.Droid.Resource.String.abc_searchview_description_submit;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_searchview_description_voice = global::XamarinDataChannelTest.Droid.Resource.String.abc_searchview_description_voice;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_search_hint = global::XamarinDataChannelTest.Droid.Resource.String.abc_search_hint;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_shareactionprovider_share_with = global::XamarinDataChannelTest.Droid.Resource.String.abc_shareactionprovider_share_with;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_shareactionprovider_share_with_application = global::XamarinDataChannelTest.Droid.Resource.String.abc_shareactionprovider_share_with_application;
- global::Xamarin.Forms.Platform.Android.Resource.String.abc_toolbar_collapse_description = global::XamarinDataChannelTest.Droid.Resource.String.abc_toolbar_collapse_description;
- global::Xamarin.Forms.Platform.Android.Resource.String.appbar_scrolling_view_behavior = global::XamarinDataChannelTest.Droid.Resource.String.appbar_scrolling_view_behavior;
- global::Xamarin.Forms.Platform.Android.Resource.String.bottom_sheet_behavior = global::XamarinDataChannelTest.Droid.Resource.String.bottom_sheet_behavior;
- global::Xamarin.Forms.Platform.Android.Resource.String.character_counter_content_description = global::XamarinDataChannelTest.Droid.Resource.String.character_counter_content_description;
- global::Xamarin.Forms.Platform.Android.Resource.String.character_counter_pattern = global::XamarinDataChannelTest.Droid.Resource.String.character_counter_pattern;
- global::Xamarin.Forms.Platform.Android.Resource.String.fab_transformation_scrim_behavior = global::XamarinDataChannelTest.Droid.Resource.String.fab_transformation_scrim_behavior;
- global::Xamarin.Forms.Platform.Android.Resource.String.fab_transformation_sheet_behavior = global::XamarinDataChannelTest.Droid.Resource.String.fab_transformation_sheet_behavior;
- global::Xamarin.Forms.Platform.Android.Resource.String.hide_bottom_view_on_scroll_behavior = global::XamarinDataChannelTest.Droid.Resource.String.hide_bottom_view_on_scroll_behavior;
- global::Xamarin.Forms.Platform.Android.Resource.String.mtrl_chip_close_icon_content_description = global::XamarinDataChannelTest.Droid.Resource.String.mtrl_chip_close_icon_content_description;
- global::Xamarin.Forms.Platform.Android.Resource.String.overflow_tab_title = global::XamarinDataChannelTest.Droid.Resource.String.overflow_tab_title;
- global::Xamarin.Forms.Platform.Android.Resource.String.password_toggle_content_description = global::XamarinDataChannelTest.Droid.Resource.String.password_toggle_content_description;
- global::Xamarin.Forms.Platform.Android.Resource.String.path_password_eye = global::XamarinDataChannelTest.Droid.Resource.String.path_password_eye;
- global::Xamarin.Forms.Platform.Android.Resource.String.path_password_eye_mask_strike_through = global::XamarinDataChannelTest.Droid.Resource.String.path_password_eye_mask_strike_through;
- global::Xamarin.Forms.Platform.Android.Resource.String.path_password_eye_mask_visible = global::XamarinDataChannelTest.Droid.Resource.String.path_password_eye_mask_visible;
- global::Xamarin.Forms.Platform.Android.Resource.String.path_password_strike_through = global::XamarinDataChannelTest.Droid.Resource.String.path_password_strike_through;
- global::Xamarin.Forms.Platform.Android.Resource.String.search_menu_title = global::XamarinDataChannelTest.Droid.Resource.String.search_menu_title;
- global::Xamarin.Forms.Platform.Android.Resource.String.status_bar_notification_info_overflow = global::XamarinDataChannelTest.Droid.Resource.String.status_bar_notification_info_overflow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.AlertDialog_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.AlertDialog_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.AlertDialog_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.AlertDialog_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Animation_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_AppCompat_DropDownUp = global::XamarinDataChannelTest.Droid.Resource.Style.Animation_AppCompat_DropDownUp;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_AppCompat_Tooltip = global::XamarinDataChannelTest.Droid.Resource.Style.Animation_AppCompat_Tooltip;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Animation_Design_BottomSheetDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Animation_Design_BottomSheetDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.AppCompatDialogStyle = global::XamarinDataChannelTest.Droid.Resource.Style.AppCompatDialogStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_AlertDialog_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_AlertDialog_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_AlertDialog_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_AlertDialog_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Animation_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Animation_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Animation_AppCompat_DropDownUp = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Animation_AppCompat_DropDownUp;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Animation_AppCompat_Tooltip = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Animation_AppCompat_Tooltip;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_CardView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_CardView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_DialogWindowTitleBackground_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_DialogWindowTitleBackground_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_DialogWindowTitle_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_DialogWindowTitle_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Body1 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body1;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Body2 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body2;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Button = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Button;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Caption = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Caption;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display1 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display1;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display2 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display2;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display3 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display3;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Display4 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display4;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Headline = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Headline;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Large = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Medium = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Menu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_SearchResult = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Subhead = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Title = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Tooltip = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Tooltip;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dark = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_CompactMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_CompactMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Bridge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_CompactMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_CompactMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V21_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V21_Theme_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V22_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V22_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V22_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V22_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V23_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V23_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V23_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V23_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V26_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V26_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V26_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V26_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V26_Widget_AppCompat_Toolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V26_Widget_AppCompat_Toolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V28_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V28_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V28_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V28_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Theme_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Widget_AppCompat_EditText = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Widget_AppCompat_EditText;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_V7_Widget_AppCompat_Toolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Widget_AppCompat_Toolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActionMode = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionMode;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ActivityChooserView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActivityChooserView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ButtonBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Borderless = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button_Colored;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Button_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button_Small;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_EditText = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_EditText;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ImageButton = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ImageButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListMenuView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ListMenuView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListPopupWindow = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ListPopupWindow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ListView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListView_DropDown = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ListView_DropDown;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ListView_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ListView_Menu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_PopupMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_PopupWindow = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_PopupWindow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ProgressBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_RatingBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_RatingBar_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Small;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SearchView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_SearchView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SeekBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Spinner;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Toolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_Design_TabLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_Design_TabLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_MaterialComponents_Chip = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_MaterialComponents_Chip;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Style.CardView = global::XamarinDataChannelTest.Droid.Resource.Style.CardView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.CardView_Dark = global::XamarinDataChannelTest.Droid.Resource.Style.CardView_Dark;
- global::Xamarin.Forms.Platform.Android.Resource.Style.CardView_Light = global::XamarinDataChannelTest.Droid.Resource.Style.CardView_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.collectionViewScrollBars = global::XamarinDataChannelTest.Droid.Resource.Style.collectionViewScrollBars;
- global::Xamarin.Forms.Platform.Android.Resource.Style.collectionViewTheme = global::XamarinDataChannelTest.Droid.Resource.Style.collectionViewTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Style.MainTheme = global::XamarinDataChannelTest.Droid.Resource.Style.MainTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Style.MainTheme_Base = global::XamarinDataChannelTest.Droid.Resource.Style.MainTheme_Base;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_MaterialComponents;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_MaterialComponents_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_MaterialComponents_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_MaterialComponents_Light_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_ThemeOverlay_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_ThemeOverlay_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V21_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_V21_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V21_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_V21_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V25_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_V25_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_V25_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_V25_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Platform_Widget_AppCompat_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_Widget_AppCompat_Spinner;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Body1 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Body1;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Body2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Body2;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Button = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Button;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Caption = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Caption;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display1 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Display1;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Display2;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display3 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Display3;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Display4 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Display4;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Headline = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Headline;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Large = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Large;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Large_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Large_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Medium = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Medium;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Medium_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Medium_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Menu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_SearchResult_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Small = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Small;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Small_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Small_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Subhead = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Subhead;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Title_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Title_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Tooltip = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Tooltip;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_Switch = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Switch;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Info = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Info;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Info_Media = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Info_Media;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Line2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Line2_Media = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2_Media;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Media = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Media;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Time = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Time;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Time_Media = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Time_Media;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Compat_Notification_Title_Media = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Title_Media;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Counter = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Counter;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Counter_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Counter_Overflow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Error = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Error;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_HelperText = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_HelperText;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Hint = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Hint;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Snackbar_Message = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Snackbar_Message;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Design_Tab = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Tab;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Body1 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Body1;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Body2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Body2;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Button = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Button;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Caption = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Caption;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Chip = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Chip;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline1 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline1;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline2;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline3 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline3;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline4 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline4;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline5 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline5;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Headline6 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline6;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Overline = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Overline;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Subtitle1 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle1;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Subtitle2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle2;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_MaterialComponents_Tab = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Tab;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dark = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dark = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_Light = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox;
- global::Xamarin.Forms.Platform.Android.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_CompactMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_CompactMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DayNight_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_NoActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_DarkActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_DarkActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_Light_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_NoActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_AppCompat_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_NoActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_BottomSheetDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design_BottomSheetDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_Light_BottomSheetDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design_Light_BottomSheetDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_Light_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design_Light_NoActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_Design_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design_NoActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_BottomSheetDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_BottomSheetDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Bridge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_CompactMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_CompactMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_Bridge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_Solid = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionBar_Solid;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_TabBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_TabText = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabText;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionBar_TabView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionButton_CloseMode = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionButton_CloseMode;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionButton_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionButton_Overflow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActionMode = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionMode;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ActivityChooserView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActivityChooserView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_AutoCompleteTextView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_AutoCompleteTextView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ButtonBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ButtonBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Borderless = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button_Borderless;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Borderless_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button_Borderless_Colored;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button_Colored;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Button_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button_Small;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_CompoundButton_Switch = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_CompoundButton_Switch;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_DrawerArrowToggle = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_DrawerArrowToggle;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_DropDownItem_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_DropDownItem_Spinner;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_EditText = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_EditText;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ImageButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ImageButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ActivityChooserView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActivityChooserView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ListPopupWindow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ListPopupWindow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_ListView_DropDown = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ListView_DropDown;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_PopupMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_SearchView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_SearchView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListMenuView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ListMenuView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListPopupWindow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ListPopupWindow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ListView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListView_DropDown = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ListView_DropDown;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ListView_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ListView_Menu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_PopupMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_PopupMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_PopupMenu_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_PopupMenu_Overflow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_PopupWindow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_PopupWindow;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ProgressBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ProgressBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_RatingBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_RatingBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_RatingBar_Indicator = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_RatingBar_Indicator;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_RatingBar_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_RatingBar_Small;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SearchView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_SearchView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SearchView_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_SearchView_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SeekBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_SeekBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_SeekBar_Discrete = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_SeekBar_Discrete;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Spinner;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner_DropDown = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Spinner_Underlined = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Spinner_Underlined;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_TextView_SpinnerItem = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_TextView_SpinnerItem;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Toolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Toolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Compat_NotificationActionContainer = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Compat_NotificationActionContainer;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Compat_NotificationActionText = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Compat_NotificationActionText;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_AppBarLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_AppBarLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_BottomNavigationView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_BottomNavigationView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_BottomSheet_Modal = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_BottomSheet_Modal;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_CollapsingToolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_CollapsingToolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_FloatingActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_FloatingActionButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_NavigationView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_NavigationView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_ScrimInsetsFrameLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_ScrimInsetsFrameLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_Snackbar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_Snackbar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_TabLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_TabLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Design_TextInputLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_TextInputLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomAppBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomNavigationView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_Icon;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_CardView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_CardView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_ChipGroup = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_ChipGroup;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Action = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Chip_Action;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Choice = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Chip_Choice;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Entry = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Chip_Entry;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Chip_Filter = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Chip_Filter;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_FloatingActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_FloatingActionButton;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_NavigationView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_NavigationView;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Snackbar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Snackbar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TabLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TabLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TabLayout_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TabLayout_Colored;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_MaterialComponents_Toolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Toolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Style.Widget_Support_CoordinatorLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Support_CoordinatorLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBarLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBarLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBarLayout_android_layout_gravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBarLayout_android_layout_gravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_background = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_background;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_backgroundSplit = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_backgroundSplit;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_backgroundStacked = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_backgroundStacked;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetEndWithActions = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetEndWithActions;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetLeft;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetRight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetStart;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_contentInsetStartWithNavigation = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetStartWithNavigation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_customNavigationLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_customNavigationLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_displayOptions = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_displayOptions;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_divider = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_divider;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_height = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_height;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_hideOnContentScroll = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_hideOnContentScroll;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_homeAsUpIndicator = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_homeAsUpIndicator;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_homeLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_homeLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_icon = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_icon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_indeterminateProgressStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_indeterminateProgressStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_itemPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_itemPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_logo = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_logo;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_navigationMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_navigationMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_popupTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_popupTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_progressBarPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_progressBarPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_progressBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_progressBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_subtitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_subtitleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_subtitleTextStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_title = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_title;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionBar_titleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_titleTextStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMenuItemView = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMenuItemView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMenuItemView_android_minWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMenuItemView_android_minWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMenuView = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMenuView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_background = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_background;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_backgroundSplit = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_backgroundSplit;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_closeItemLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_closeItemLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_height = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_height;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_subtitleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_subtitleTextStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActionMode_titleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_titleTextStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActivityChooserView = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActivityChooserView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ActivityChooserView_initialActivityCount = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActivityChooserView_initialActivityCount;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_android_layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_android_layout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_buttonIconDimen = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_buttonIconDimen;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_buttonPanelSideLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_buttonPanelSideLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_listItemLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_listItemLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_listLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_listLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_multiChoiceItemLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_multiChoiceItemLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_showTitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_showTitle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AlertDialog_singleChoiceItemLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_singleChoiceItemLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableItem;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableItem_android_id = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_id;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableTransition;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayoutStates;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_collapsed = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsed;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_collapsible = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsible;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_liftable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayoutStates_state_liftable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayoutStates_state_lifted = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayoutStates_state_lifted;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_android_background = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_android_background;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_expanded = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_expanded;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_Layout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppBarLayout_liftOnScroll = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_liftOnScroll;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatImageView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_android_src = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatImageView_android_src;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_srcCompat = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatImageView_srcCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_tint = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatImageView_tint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatImageView_tintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatImageView_tintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatSeekBar;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_android_thumb = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatSeekBar_android_thumb;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_tickMark = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatSeekBar_tickMark;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_tickMarkTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableBottom;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableLeft;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableRight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableStart;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_drawableTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableTop;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextHelper_android_textAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_textAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_android_textAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_android_textAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizePresetSizes = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_autoSizePresetSizes;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_autoSizeTextType = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_autoSizeTextType;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_fontFamily = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_fontFamily;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_lineHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_lineHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTextView_textAllCaps = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_textAllCaps;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarDivider = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarDivider;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarItemBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarItemBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarPopupTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarPopupTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarSplitStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarSplitStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTabStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarTabStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionDropDownStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionDropDownStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionMenuTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeCutDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeCutDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeFindDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeFindDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModePasteDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModePasteDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeShareDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeShareDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeSplitBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeSplitBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_activityChooserViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_activityChooserViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_alertDialogStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_alertDialogTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_alertDialogTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_android_windowIsFloating = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_android_windowIsFloating;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_borderlessButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_borderlessButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_buttonStyleSmall = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonStyleSmall;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_checkboxStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_checkboxStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_checkedTextViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_checkedTextViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorAccent = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorAccent;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorBackgroundFloating = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorBackgroundFloating;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorButtonNormal = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorButtonNormal;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorControlActivated = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorControlActivated;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorControlHighlight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorControlHighlight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorControlNormal = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorControlNormal;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorError = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorError;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorPrimary = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorPrimary;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorPrimaryDark = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorPrimaryDark;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_controlBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_controlBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dialogCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dialogCornerRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dialogPreferredPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dialogPreferredPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dialogTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dialogTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dividerHorizontal = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dividerHorizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dividerVertical = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dividerVertical;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_dropDownListViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dropDownListViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_editTextBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_editTextBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_editTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_editTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_editTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_editTextStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_homeAsUpIndicator = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_homeAsUpIndicator;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_imageButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_imageButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listDividerAlertDialog = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listDividerAlertDialog;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listMenuViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listMenuViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPopupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPopupWindowStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_panelBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_panelBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_panelMenuListTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_panelMenuListTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_panelMenuListWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_panelMenuListWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_popupMenuStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_popupMenuStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_popupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_popupWindowStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_radioButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_radioButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_ratingBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_searchViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_searchViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_seekBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_seekBarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_selectableItemBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_spinnerStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_spinnerStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_switchStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_switchStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceListItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItem;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_textColorSearchUrl = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textColorSearchUrl;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_toolbarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_toolbarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_tooltipForegroundColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_tooltipForegroundColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_tooltipFrameBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_tooltipFrameBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_viewInflaterClass = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_viewInflaterClass;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowActionBar = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowActionBar;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowActionBarOverlay = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowActionBarOverlay;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowActionModeOverlay = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowActionModeOverlay;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowMinWidthMajor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMajor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowMinWidthMinor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMinor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.AppCompatTheme_windowNoTitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowNoTitle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_backgroundTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_backgroundTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabAlignmentMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_fabAlignmentMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabCradleMargin = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_fabCradleMargin;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomAppBar_hideOnScroll = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_hideOnScroll;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemIconSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemIconSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemIconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemIconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_itemTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_labelVisibilityMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_labelVisibilityMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomNavigationView_menu = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_menu;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomSheetBehavior_Layout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ButtonBarLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ButtonBarLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ButtonBarLayout_allowStacking = global::XamarinDataChannelTest.Droid.Resource.Styleable.ButtonBarLayout_allowStacking;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_android_minHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_android_minHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_android_minWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_android_minWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardBackgroundColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardCornerRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardElevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardElevation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardMaxElevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardMaxElevation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardPreventCornerOverlap = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardPreventCornerOverlap;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_cardUseCompatPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardUseCompatPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_contentPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_contentPaddingBottom;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_contentPaddingLeft;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_contentPaddingRight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CardView_contentPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_contentPaddingTop;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_checkedChip = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_checkedChip;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_chipSpacing = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_chipSpacing;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_chipSpacingHorizontal = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_chipSpacingHorizontal;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_chipSpacingVertical = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_chipSpacingVertical;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_singleLine = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_singleLine;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ChipGroup_singleSelection = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_singleSelection;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_checkable = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_android_checkable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_ellipsize = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_android_ellipsize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_maxWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_android_maxWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_text = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_android_text;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_android_textAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_android_textAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_checkedIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_checkedIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_checkedIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_checkedIconEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_checkedIconVisible = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_checkedIconVisible;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipBackgroundColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipCornerRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipEndPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipEndPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipIconEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipIconSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipIconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipIconVisible = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipIconVisible;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipMinHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipMinHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipStartPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipStartPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipStrokeColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipStrokeColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_chipStrokeWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipStrokeWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconEndPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconEndPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconStartPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconStartPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_closeIconVisible = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconVisible;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_hideMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_hideMotionSpec;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_iconEndPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_iconEndPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_iconStartPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_iconStartPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_rippleColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_rippleColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_showMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_showMotionSpec;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_textEndPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_textEndPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Chip_textStartPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_textStartPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_contentScrim = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_contentScrim;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_title = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_title;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_titleEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_titleEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CollapsingToolbarLayout_toolbarId = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_toolbarId;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem_alpha = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem_android_alpha = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem_android_alpha;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ColorStateListItem_android_color = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem_android_color;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton = global::XamarinDataChannelTest.Droid.Resource.Styleable.CompoundButton;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton_android_button = global::XamarinDataChannelTest.Droid.Resource.Styleable.CompoundButton_android_button;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton_buttonTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.CompoundButton_buttonTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CompoundButton_buttonTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.CompoundButton_buttonTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_keylines = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_keylines;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.CoordinatorLayout_statusBarBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_statusBarBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DesignTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.DesignTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DesignTheme_bottomSheetDialogTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.DesignTheme_bottomSheetDialogTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DesignTheme_bottomSheetStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.DesignTheme_bottomSheetStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_arrowHeadLength = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_arrowHeadLength;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_arrowShaftLength = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_arrowShaftLength;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_barLength = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_barLength;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_color = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_color;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_drawableSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_drawableSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_gapBetweenBars = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_gapBetweenBars;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_spinBars = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_spinBars;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.DrawerArrowToggle_thickness = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_thickness;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_backgroundTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_backgroundTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_backgroundTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_backgroundTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_Behavior_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_borderWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_borderWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_fabCustomSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_fabCustomSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_fabSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_fabSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_hideMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_hideMotionSpec;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_maxImageSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_maxImageSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_pressedTranslationZ = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_pressedTranslationZ;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_rippleColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_rippleColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_showMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_showMotionSpec;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FloatingActionButton_useCompatPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_useCompatPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FlowLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.FlowLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FlowLayout_itemSpacing = global::XamarinDataChannelTest.Droid.Resource.Styleable.FlowLayout_itemSpacing;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FlowLayout_lineSpacing = global::XamarinDataChannelTest.Droid.Resource.Styleable.FlowLayout_lineSpacing;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_font = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_font;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_fontStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_fontStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_fontVariationSettings = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_fontVariationSettings;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_fontWeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_fontWeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_android_ttcIndex = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_ttcIndex;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_font = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_font;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_fontStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_fontStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_fontVariationSettings = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_fontVariationSettings;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_fontWeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_fontWeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamilyFont_ttcIndex = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_ttcIndex;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderAuthority = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderAuthority;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderCerts = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderCerts;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderFetchStrategy = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderFetchStrategy;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderFetchTimeout = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderFetchTimeout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderPackage = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderPackage;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.FontFamily_fontProviderQuery = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderQuery;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ForegroundLinearLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout_android_foreground = global::XamarinDataChannelTest.Droid.Resource.Styleable.ForegroundLinearLayout_android_foreground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColorItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColorItem;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColorItem_android_color = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColorItem_android_color;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColorItem_android_offset = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColorItem_android_offset;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_centerColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_centerColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_centerX = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_centerX;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_centerY = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_centerY;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_endColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_endColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_endX = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_endX;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_endY = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_endY;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_gradientRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_gradientRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_startColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_startColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_startX = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_startX;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_startY = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_startY;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_tileMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_tileMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.GradientColor_android_type = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_type;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ItemsViewRendererTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.ItemsViewRendererTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ItemsViewRendererTheme_collectionViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ItemsViewRendererTheme_collectionViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_baselineAligned = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAligned;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_gravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_android_gravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_orientation = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_android_orientation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_android_weightSum = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_android_weightSum;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_divider = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_divider;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_dividerPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_dividerPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_Layout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.LinearLayoutCompat_showDividers = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_showDividers;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ListPopupWindow = global::XamarinDataChannelTest.Droid.Resource.Styleable.ListPopupWindow;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset = global::XamarinDataChannelTest.Droid.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset = global::XamarinDataChannelTest.Droid.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_android_insetBottom;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_android_insetLeft;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_android_insetRight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_android_insetTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_android_insetTop;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_backgroundTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_backgroundTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_backgroundTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_backgroundTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_cornerRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_cornerRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_icon = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_icon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_iconGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_iconPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_iconSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_iconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_iconTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_iconTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_rippleColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_rippleColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_strokeColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_strokeColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialButton_strokeWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_strokeWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialCardView = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialCardView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialCardView_strokeColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialCardView_strokeColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialCardView_strokeWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialCardView_strokeWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_chipStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_chipStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorAccent = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_colorAccent;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorPrimary = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimary;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_colorSecondary = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_colorSecondary;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_editTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_editTextStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_scrimBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_scrimBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_tabStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_tabStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MaterialComponentsTheme_textInputStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textInputStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_checkableBehavior = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_checkableBehavior;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_enabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_enabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_id = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_id;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_menuCategory = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_menuCategory;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_orderInCategory = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_orderInCategory;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuGroup_android_visible = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_visible;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_actionLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_actionLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_actionProviderClass = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_actionProviderClass;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_actionViewClass = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_actionViewClass;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_alphabeticModifiers = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_alphabeticModifiers;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_alphabeticShortcut = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_alphabeticShortcut;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_checkable = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_checkable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_checked = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_checked;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_enabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_enabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_icon = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_icon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_id = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_id;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_menuCategory = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_menuCategory;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_numericShortcut = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_numericShortcut;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_onClick = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_onClick;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_orderInCategory = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_orderInCategory;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_title = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_title;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_titleCondensed = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_titleCondensed;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_android_visible = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_visible;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_contentDescription = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_contentDescription;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_iconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_iconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_iconTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_iconTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_numericModifiers = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_numericModifiers;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_showAsAction = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_showAsAction;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuItem_tooltipText = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_tooltipText;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_headerBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_headerBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_horizontalDivider = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_horizontalDivider;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_itemBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_itemBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_itemIconDisabledAlpha = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_itemIconDisabledAlpha;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_itemTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_itemTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_verticalDivider = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_verticalDivider;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_android_windowAnimationStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_windowAnimationStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_preserveIconSpacing = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_preserveIconSpacing;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.MenuView_subMenuArrow = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_subMenuArrow;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_android_background = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_android_background;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_android_fitsSystemWindows = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_android_fitsSystemWindows;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_android_maxWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_android_maxWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_headerLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_headerLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemHorizontalPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemHorizontalPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemIconPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemIconPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemIconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemIconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_itemTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.NavigationView_menu = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_menu;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindow;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindowBackgroundState = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindowBackgroundState;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow_android_popupAnimationStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindow_android_popupAnimationStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow_android_popupBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindow_android_popupBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.PopupWindow_overlapAnchor = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindow_overlapAnchor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecycleListView = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecycleListView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecycleListView_paddingBottomNoButtons = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecycleListView_paddingBottomNoButtons;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecycleListView_paddingTopNoTitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecycleListView_paddingTopNoTitle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_android_descendantFocusability = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_android_descendantFocusability;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_android_orientation = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_android_orientation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_fastScrollEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_layoutManager = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_layoutManager;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_reverseLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_reverseLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_spanCount = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_spanCount;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.RecyclerView_stackFromEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_stackFromEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrimInsetsFrameLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ScrimInsetsFrameLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground = global::XamarinDataChannelTest.Droid.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrollingViewBehavior_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ScrollingViewBehavior_Layout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_focusable = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_android_focusable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_imeOptions = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_android_imeOptions;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_inputType = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_android_inputType;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_android_maxWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_android_maxWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_closeIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_closeIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_commitIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_commitIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_defaultQueryHint = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_defaultQueryHint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_goIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_goIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_iconifiedByDefault = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_iconifiedByDefault;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_layout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_queryBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_queryBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_queryHint = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_queryHint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_searchHintIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_searchHintIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_searchIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_searchIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_submitBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_submitBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_suggestionRowLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_suggestionRowLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SearchView_voiceIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_voiceIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Snackbar = global::XamarinDataChannelTest.Droid.Resource.Styleable.Snackbar;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.SnackbarLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout_android_maxWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.SnackbarLayout_android_maxWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.SnackbarLayout_elevation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SnackbarLayout_maxActionInlineWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.SnackbarLayout_maxActionInlineWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Snackbar_snackbarButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.Snackbar_snackbarButtonStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Snackbar_snackbarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.Snackbar_snackbarStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_dropDownWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner_android_dropDownWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_entries = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner_android_entries;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_popupBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner_android_popupBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_android_prompt = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner_android_prompt;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Spinner_popupTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner_popupTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawableItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawableItem;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawableItem_android_drawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawableItem_android_drawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_constantSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_constantSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_dither = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_dither;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_enterFadeDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_enterFadeDuration;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_exitFadeDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_exitFadeDuration;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_variablePadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_variablePadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.StateListDrawable_android_visible = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_visible;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_android_textOff = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_android_textOff;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_android_textOn = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_android_textOn;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_android_thumb = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_android_thumb;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_showText = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_showText;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_splitTrack = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_splitTrack;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_switchMinWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_switchMinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_switchPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_switchPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_switchTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_switchTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_thumbTextPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_thumbTextPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_thumbTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_thumbTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_thumbTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_thumbTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_track = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_track;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_trackTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_trackTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.SwitchCompat_trackTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_trackTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabItem;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem_android_icon = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabItem_android_icon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem_android_layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabItem_android_layout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabItem_android_text = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabItem_android_text;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabBackground;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabContentStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabContentStart;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIconTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIconTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIconTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicator = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicator;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicatorColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorFullWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicatorFullWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicatorGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabIndicatorHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicatorHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabInlineLabel = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabInlineLabel;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabMaxWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabMaxWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabMinWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabMinWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabPadding;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabPaddingBottom;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabPaddingEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabPaddingStart;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabPaddingTop;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabRippleColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabRippleColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabSelectedTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabSelectedTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TabLayout_tabUnboundedRipple = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabUnboundedRipple;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_fontFamily = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_fontFamily;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_shadowColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowDx = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_shadowDx;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowDy = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_shadowDy;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_shadowRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_shadowRadius;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_textColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textColorHint = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_textColorHint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textColorLink = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_textColorLink;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_textSize;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_textStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_textStyle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_android_typeface = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_typeface;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_fontFamily = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_fontFamily;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextAppearance_textAllCaps = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_textAllCaps;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_android_hint = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_android_hint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_android_textColorHint = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_android_textColorHint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxBackgroundColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxBackgroundMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxBackgroundMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxStrokeColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxStrokeColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_boxStrokeWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxStrokeWidth;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_counterEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterMaxLength = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_counterMaxLength;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_counterTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_counterTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_errorEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_errorEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_errorTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_errorTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_helperText = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_helperText;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_helperTextEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_helperTextEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_helperTextTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_helperTextTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_hintAnimationEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_hintAnimationEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_hintEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_hintEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_hintTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_hintTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleContentDescription = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_passwordToggleContentDescription;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_passwordToggleDrawable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_passwordToggleEnabled;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_passwordToggleTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.TextInputLayout_passwordToggleTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_passwordToggleTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement = global::XamarinDataChannelTest.Droid.Resource.Styleable.ThemeEnforcement;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement_android_textAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.ThemeEnforcement_android_textAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ThemeEnforcement_enforceTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.ThemeEnforcement_enforceTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_android_gravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_android_gravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_android_minHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_android_minHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_buttonGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_buttonGravity;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_collapseContentDescription = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_collapseContentDescription;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_collapseIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_collapseIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetEndWithActions = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetEndWithActions;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetLeft;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetRight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetStart;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_contentInsetStartWithNavigation = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetStartWithNavigation;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_logo = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_logo;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_logoDescription = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_logoDescription;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_maxButtonHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_maxButtonHeight;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_navigationContentDescription = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_navigationContentDescription;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_navigationIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_navigationIcon;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_popupTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_popupTheme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_subtitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_subtitle;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_subtitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_subtitleTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_subtitleTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_subtitleTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_title = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_title;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMargin = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMargin;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMarginBottom;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMarginEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMargins = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMargins;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMarginStart;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleMarginTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMarginTop;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleTextAppearance;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.Toolbar_titleTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleTextColor;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.View = global::XamarinDataChannelTest.Droid.Resource.Styleable.View;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewBackgroundHelper;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper_android_background = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewBackgroundHelper_android_background;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper_backgroundTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTint;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewStubCompat;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat_android_id = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewStubCompat_android_id;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat_android_inflatedId = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewStubCompat_android_inflatedId;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.ViewStubCompat_android_layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewStubCompat_android_layout;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_android_focusable = global::XamarinDataChannelTest.Droid.Resource.Styleable.View_android_focusable;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_android_theme = global::XamarinDataChannelTest.Droid.Resource.Styleable.View_android_theme;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_paddingEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.View_paddingEnd;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_paddingStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.View_paddingStart;
- global::Xamarin.Forms.Platform.Android.Resource.Styleable.View_theme = global::XamarinDataChannelTest.Droid.Resource.Styleable.View_theme;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_fade_in = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_fade_in;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_fade_out = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_fade_out;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_grow_fade_in_from_bottom = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_grow_fade_in_from_bottom;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_popup_enter = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_popup_enter;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_popup_exit = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_popup_exit;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_shrink_fade_out_from_bottom = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_shrink_fade_out_from_bottom;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_slide_in_bottom = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_slide_in_bottom;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_slide_in_top = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_slide_in_top;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_slide_out_bottom = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_slide_out_bottom;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_slide_out_top = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_slide_out_top;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_tooltip_enter = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_tooltip_enter;
- global::Xamarin.Forms.Platform.Resource.Animation.abc_tooltip_exit = global::XamarinDataChannelTest.Droid.Resource.Animation.abc_tooltip_exit;
- global::Xamarin.Forms.Platform.Resource.Animation.design_bottom_sheet_slide_in = global::XamarinDataChannelTest.Droid.Resource.Animation.design_bottom_sheet_slide_in;
- global::Xamarin.Forms.Platform.Resource.Animation.design_bottom_sheet_slide_out = global::XamarinDataChannelTest.Droid.Resource.Animation.design_bottom_sheet_slide_out;
- global::Xamarin.Forms.Platform.Resource.Animation.design_snackbar_in = global::XamarinDataChannelTest.Droid.Resource.Animation.design_snackbar_in;
- global::Xamarin.Forms.Platform.Resource.Animation.design_snackbar_out = global::XamarinDataChannelTest.Droid.Resource.Animation.design_snackbar_out;
- global::Xamarin.Forms.Platform.Resource.Animation.EnterFromLeft = global::XamarinDataChannelTest.Droid.Resource.Animation.EnterFromLeft;
- global::Xamarin.Forms.Platform.Resource.Animation.EnterFromRight = global::XamarinDataChannelTest.Droid.Resource.Animation.EnterFromRight;
- global::Xamarin.Forms.Platform.Resource.Animation.ExitToLeft = global::XamarinDataChannelTest.Droid.Resource.Animation.ExitToLeft;
- global::Xamarin.Forms.Platform.Resource.Animation.ExitToRight = global::XamarinDataChannelTest.Droid.Resource.Animation.ExitToRight;
- global::Xamarin.Forms.Platform.Resource.Animator.design_appbar_state_list_animator = global::XamarinDataChannelTest.Droid.Resource.Animator.design_appbar_state_list_animator;
- global::Xamarin.Forms.Platform.Resource.Animator.design_fab_hide_motion_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.design_fab_hide_motion_spec;
- global::Xamarin.Forms.Platform.Resource.Animator.design_fab_show_motion_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.design_fab_show_motion_spec;
- global::Xamarin.Forms.Platform.Resource.Animator.mtrl_btn_state_list_anim = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_btn_state_list_anim;
- global::Xamarin.Forms.Platform.Resource.Animator.mtrl_btn_unelevated_state_list_anim = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_btn_unelevated_state_list_anim;
- global::Xamarin.Forms.Platform.Resource.Animator.mtrl_chip_state_list_anim = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_chip_state_list_anim;
- global::Xamarin.Forms.Platform.Resource.Animator.mtrl_fab_hide_motion_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_fab_hide_motion_spec;
- global::Xamarin.Forms.Platform.Resource.Animator.mtrl_fab_show_motion_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_fab_show_motion_spec;
- global::Xamarin.Forms.Platform.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_fab_transformation_sheet_collapse_spec;
- global::Xamarin.Forms.Platform.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec = global::XamarinDataChannelTest.Droid.Resource.Animator.mtrl_fab_transformation_sheet_expand_spec;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionBarDivider = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarDivider;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionBarItemBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarItemBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionBarPopupTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarPopupTheme;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionBarSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarSize;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionBarSplitStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarSplitStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionBarTabBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarTabBarStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionBarTabStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarTabStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionBarTabTextStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarTabTextStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionBarTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarTheme;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionBarWidgetTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionBarWidgetTheme;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionDropDownStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionDropDownStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionMenuTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionMenuTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionMenuTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionMenuTextColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModeBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModeCloseButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeCloseButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModeCloseDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeCloseDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModeCopyDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeCopyDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModeCutDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeCutDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModeFindDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeFindDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModePasteDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModePasteDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModePopupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModePopupWindowStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModeSelectAllDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeSelectAllDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModeShareDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeShareDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModeSplitBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeSplitBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModeStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionModeWebSearchDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionModeWebSearchDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionOverflowButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionOverflowButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionOverflowMenuStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionOverflowMenuStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionProviderClass = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionProviderClass;
- global::Xamarin.Forms.Platform.Resource.Attribute.actionViewClass = global::XamarinDataChannelTest.Droid.Resource.Attribute.actionViewClass;
- global::Xamarin.Forms.Platform.Resource.Attribute.activityChooserViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.activityChooserViewStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.alertDialogButtonGroupStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.alertDialogButtonGroupStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.alertDialogCenterButtons = global::XamarinDataChannelTest.Droid.Resource.Attribute.alertDialogCenterButtons;
- global::Xamarin.Forms.Platform.Resource.Attribute.alertDialogStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.alertDialogStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.alertDialogTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.alertDialogTheme;
- global::Xamarin.Forms.Platform.Resource.Attribute.allowStacking = global::XamarinDataChannelTest.Droid.Resource.Attribute.allowStacking;
- global::Xamarin.Forms.Platform.Resource.Attribute.alpha = global::XamarinDataChannelTest.Droid.Resource.Attribute.alpha;
- global::Xamarin.Forms.Platform.Resource.Attribute.alphabeticModifiers = global::XamarinDataChannelTest.Droid.Resource.Attribute.alphabeticModifiers;
- global::Xamarin.Forms.Platform.Resource.Attribute.arrowHeadLength = global::XamarinDataChannelTest.Droid.Resource.Attribute.arrowHeadLength;
- global::Xamarin.Forms.Platform.Resource.Attribute.arrowShaftLength = global::XamarinDataChannelTest.Droid.Resource.Attribute.arrowShaftLength;
- global::Xamarin.Forms.Platform.Resource.Attribute.autoCompleteTextViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoCompleteTextViewStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.autoSizeMaxTextSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoSizeMaxTextSize;
- global::Xamarin.Forms.Platform.Resource.Attribute.autoSizeMinTextSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoSizeMinTextSize;
- global::Xamarin.Forms.Platform.Resource.Attribute.autoSizePresetSizes = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoSizePresetSizes;
- global::Xamarin.Forms.Platform.Resource.Attribute.autoSizeStepGranularity = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoSizeStepGranularity;
- global::Xamarin.Forms.Platform.Resource.Attribute.autoSizeTextType = global::XamarinDataChannelTest.Droid.Resource.Attribute.autoSizeTextType;
- global::Xamarin.Forms.Platform.Resource.Attribute.background = global::XamarinDataChannelTest.Droid.Resource.Attribute.background;
- global::Xamarin.Forms.Platform.Resource.Attribute.backgroundSplit = global::XamarinDataChannelTest.Droid.Resource.Attribute.backgroundSplit;
- global::Xamarin.Forms.Platform.Resource.Attribute.backgroundStacked = global::XamarinDataChannelTest.Droid.Resource.Attribute.backgroundStacked;
- global::Xamarin.Forms.Platform.Resource.Attribute.backgroundTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.backgroundTint;
- global::Xamarin.Forms.Platform.Resource.Attribute.backgroundTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.backgroundTintMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.barLength = global::XamarinDataChannelTest.Droid.Resource.Attribute.barLength;
- global::Xamarin.Forms.Platform.Resource.Attribute.behavior_autoHide = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_autoHide;
- global::Xamarin.Forms.Platform.Resource.Attribute.behavior_fitToContents = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_fitToContents;
- global::Xamarin.Forms.Platform.Resource.Attribute.behavior_hideable = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_hideable;
- global::Xamarin.Forms.Platform.Resource.Attribute.behavior_overlapTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_overlapTop;
- global::Xamarin.Forms.Platform.Resource.Attribute.behavior_peekHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_peekHeight;
- global::Xamarin.Forms.Platform.Resource.Attribute.behavior_skipCollapsed = global::XamarinDataChannelTest.Droid.Resource.Attribute.behavior_skipCollapsed;
- global::Xamarin.Forms.Platform.Resource.Attribute.borderlessButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.borderlessButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.borderWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.borderWidth;
- global::Xamarin.Forms.Platform.Resource.Attribute.bottomAppBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.bottomAppBarStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.bottomNavigationStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.bottomNavigationStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.bottomSheetDialogTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.bottomSheetDialogTheme;
- global::Xamarin.Forms.Platform.Resource.Attribute.bottomSheetStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.bottomSheetStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.boxBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxBackgroundColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.boxBackgroundMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxBackgroundMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.boxCollapsedPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxCollapsedPaddingTop;
- global::Xamarin.Forms.Platform.Resource.Attribute.boxCornerRadiusBottomEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxCornerRadiusBottomEnd;
- global::Xamarin.Forms.Platform.Resource.Attribute.boxCornerRadiusBottomStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxCornerRadiusBottomStart;
- global::Xamarin.Forms.Platform.Resource.Attribute.boxCornerRadiusTopEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxCornerRadiusTopEnd;
- global::Xamarin.Forms.Platform.Resource.Attribute.boxCornerRadiusTopStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxCornerRadiusTopStart;
- global::Xamarin.Forms.Platform.Resource.Attribute.boxStrokeColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxStrokeColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.boxStrokeWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.boxStrokeWidth;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonBarButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonBarButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonBarNegativeButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonBarNegativeButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonBarNeutralButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonBarNeutralButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonBarPositiveButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonBarPositiveButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonBarStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonGravity;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonIconDimen = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonIconDimen;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonPanelSideLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonPanelSideLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonStyleSmall = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonStyleSmall;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonTint;
- global::Xamarin.Forms.Platform.Resource.Attribute.buttonTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.buttonTintMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.cardBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardBackgroundColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.cardCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardCornerRadius;
- global::Xamarin.Forms.Platform.Resource.Attribute.cardElevation = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardElevation;
- global::Xamarin.Forms.Platform.Resource.Attribute.cardMaxElevation = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardMaxElevation;
- global::Xamarin.Forms.Platform.Resource.Attribute.cardPreventCornerOverlap = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardPreventCornerOverlap;
- global::Xamarin.Forms.Platform.Resource.Attribute.cardUseCompatPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardUseCompatPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.cardViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.cardViewStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.checkboxStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkboxStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.checkedChip = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkedChip;
- global::Xamarin.Forms.Platform.Resource.Attribute.checkedIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkedIcon;
- global::Xamarin.Forms.Platform.Resource.Attribute.checkedIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkedIconEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.checkedIconVisible = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkedIconVisible;
- global::Xamarin.Forms.Platform.Resource.Attribute.checkedTextViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.checkedTextViewStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipBackgroundColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipCornerRadius;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipEndPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipEndPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipGroupStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipGroupStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipIcon;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipIconEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipIconSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipIconSize;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipIconTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipIconTint;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipIconVisible = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipIconVisible;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipMinHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipMinHeight;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipSpacing = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipSpacing;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipSpacingHorizontal = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipSpacingHorizontal;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipSpacingVertical = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipSpacingVertical;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipStandaloneStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipStandaloneStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipStartPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipStartPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipStrokeColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipStrokeColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipStrokeWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipStrokeWidth;
- global::Xamarin.Forms.Platform.Resource.Attribute.chipStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.chipStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.closeIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIcon;
- global::Xamarin.Forms.Platform.Resource.Attribute.closeIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.closeIconEndPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconEndPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.closeIconSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconSize;
- global::Xamarin.Forms.Platform.Resource.Attribute.closeIconStartPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconStartPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.closeIconTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconTint;
- global::Xamarin.Forms.Platform.Resource.Attribute.closeIconVisible = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeIconVisible;
- global::Xamarin.Forms.Platform.Resource.Attribute.closeItemLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.closeItemLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.collapseContentDescription = global::XamarinDataChannelTest.Droid.Resource.Attribute.collapseContentDescription;
- global::Xamarin.Forms.Platform.Resource.Attribute.collapsedTitleGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.collapsedTitleGravity;
- global::Xamarin.Forms.Platform.Resource.Attribute.collapsedTitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.collapsedTitleTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.collapseIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.collapseIcon;
- global::Xamarin.Forms.Platform.Resource.Attribute.collectionViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.collectionViewStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.color = global::XamarinDataChannelTest.Droid.Resource.Attribute.color;
- global::Xamarin.Forms.Platform.Resource.Attribute.colorAccent = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorAccent;
- global::Xamarin.Forms.Platform.Resource.Attribute.colorBackgroundFloating = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorBackgroundFloating;
- global::Xamarin.Forms.Platform.Resource.Attribute.colorButtonNormal = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorButtonNormal;
- global::Xamarin.Forms.Platform.Resource.Attribute.colorControlActivated = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorControlActivated;
- global::Xamarin.Forms.Platform.Resource.Attribute.colorControlHighlight = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorControlHighlight;
- global::Xamarin.Forms.Platform.Resource.Attribute.colorControlNormal = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorControlNormal;
- global::Xamarin.Forms.Platform.Resource.Attribute.colorError = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorError;
- global::Xamarin.Forms.Platform.Resource.Attribute.colorPrimary = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorPrimary;
- global::Xamarin.Forms.Platform.Resource.Attribute.colorPrimaryDark = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorPrimaryDark;
- global::Xamarin.Forms.Platform.Resource.Attribute.colorSecondary = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorSecondary;
- global::Xamarin.Forms.Platform.Resource.Attribute.colorSwitchThumbNormal = global::XamarinDataChannelTest.Droid.Resource.Attribute.colorSwitchThumbNormal;
- global::Xamarin.Forms.Platform.Resource.Attribute.commitIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.commitIcon;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentDescription = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentDescription;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetEnd;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetEndWithActions = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetEndWithActions;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetLeft = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetLeft;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetRight = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetRight;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetStart;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentInsetStartWithNavigation = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentInsetStartWithNavigation;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentPaddingBottom = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentPaddingBottom;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentPaddingLeft = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentPaddingLeft;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentPaddingRight = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentPaddingRight;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentPaddingTop;
- global::Xamarin.Forms.Platform.Resource.Attribute.contentScrim = global::XamarinDataChannelTest.Droid.Resource.Attribute.contentScrim;
- global::Xamarin.Forms.Platform.Resource.Attribute.controlBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.controlBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.coordinatorLayoutStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.coordinatorLayoutStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.cornerRadius = global::XamarinDataChannelTest.Droid.Resource.Attribute.cornerRadius;
- global::Xamarin.Forms.Platform.Resource.Attribute.counterEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.counterEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.counterMaxLength = global::XamarinDataChannelTest.Droid.Resource.Attribute.counterMaxLength;
- global::Xamarin.Forms.Platform.Resource.Attribute.counterOverflowTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.counterOverflowTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.counterTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.counterTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.customNavigationLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.customNavigationLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.defaultQueryHint = global::XamarinDataChannelTest.Droid.Resource.Attribute.defaultQueryHint;
- global::Xamarin.Forms.Platform.Resource.Attribute.dialogCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Attribute.dialogCornerRadius;
- global::Xamarin.Forms.Platform.Resource.Attribute.dialogPreferredPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.dialogPreferredPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.dialogTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.dialogTheme;
- global::Xamarin.Forms.Platform.Resource.Attribute.displayOptions = global::XamarinDataChannelTest.Droid.Resource.Attribute.displayOptions;
- global::Xamarin.Forms.Platform.Resource.Attribute.divider = global::XamarinDataChannelTest.Droid.Resource.Attribute.divider;
- global::Xamarin.Forms.Platform.Resource.Attribute.dividerHorizontal = global::XamarinDataChannelTest.Droid.Resource.Attribute.dividerHorizontal;
- global::Xamarin.Forms.Platform.Resource.Attribute.dividerPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.dividerPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.dividerVertical = global::XamarinDataChannelTest.Droid.Resource.Attribute.dividerVertical;
- global::Xamarin.Forms.Platform.Resource.Attribute.drawableSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.drawableSize;
- global::Xamarin.Forms.Platform.Resource.Attribute.drawerArrowStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.drawerArrowStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.dropdownListPreferredItemHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.dropdownListPreferredItemHeight;
- global::Xamarin.Forms.Platform.Resource.Attribute.dropDownListViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.dropDownListViewStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.editTextBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.editTextBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.editTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.editTextColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.editTextStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.editTextStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.elevation = global::XamarinDataChannelTest.Droid.Resource.Attribute.elevation;
- global::Xamarin.Forms.Platform.Resource.Attribute.enforceMaterialTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.enforceMaterialTheme;
- global::Xamarin.Forms.Platform.Resource.Attribute.enforceTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.enforceTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.errorEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.errorEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.errorTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.errorTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.expandActivityOverflowButtonDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandActivityOverflowButtonDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.expanded = global::XamarinDataChannelTest.Droid.Resource.Attribute.expanded;
- global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleGravity;
- global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleMargin = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleMargin;
- global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleMarginBottom = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleMarginBottom;
- global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleMarginEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleMarginEnd;
- global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleMarginStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleMarginStart;
- global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleMarginTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleMarginTop;
- global::Xamarin.Forms.Platform.Resource.Attribute.expandedTitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.expandedTitleTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.fabAlignmentMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabAlignmentMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.fabCradleMargin = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabCradleMargin;
- global::Xamarin.Forms.Platform.Resource.Attribute.fabCradleRoundedCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabCradleRoundedCornerRadius;
- global::Xamarin.Forms.Platform.Resource.Attribute.fabCradleVerticalOffset = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabCradleVerticalOffset;
- global::Xamarin.Forms.Platform.Resource.Attribute.fabCustomSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabCustomSize;
- global::Xamarin.Forms.Platform.Resource.Attribute.fabSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.fabSize;
- global::Xamarin.Forms.Platform.Resource.Attribute.fastScrollEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.fastScrollEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.fastScrollHorizontalThumbDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.fastScrollHorizontalThumbDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.fastScrollHorizontalTrackDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.fastScrollHorizontalTrackDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.fastScrollVerticalThumbDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.fastScrollVerticalThumbDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.fastScrollVerticalTrackDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.fastScrollVerticalTrackDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.firstBaselineToTopHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.firstBaselineToTopHeight;
- global::Xamarin.Forms.Platform.Resource.Attribute.floatingActionButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.floatingActionButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.font = global::XamarinDataChannelTest.Droid.Resource.Attribute.font;
- global::Xamarin.Forms.Platform.Resource.Attribute.fontFamily = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontFamily;
- global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderAuthority = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderAuthority;
- global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderCerts = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderCerts;
- global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderFetchStrategy = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderFetchStrategy;
- global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderFetchTimeout = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderFetchTimeout;
- global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderPackage = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderPackage;
- global::Xamarin.Forms.Platform.Resource.Attribute.fontProviderQuery = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontProviderQuery;
- global::Xamarin.Forms.Platform.Resource.Attribute.fontStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.fontVariationSettings = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontVariationSettings;
- global::Xamarin.Forms.Platform.Resource.Attribute.fontWeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.fontWeight;
- global::Xamarin.Forms.Platform.Resource.Attribute.foregroundInsidePadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.foregroundInsidePadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.gapBetweenBars = global::XamarinDataChannelTest.Droid.Resource.Attribute.gapBetweenBars;
- global::Xamarin.Forms.Platform.Resource.Attribute.goIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.goIcon;
- global::Xamarin.Forms.Platform.Resource.Attribute.headerLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.headerLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.height = global::XamarinDataChannelTest.Droid.Resource.Attribute.height;
- global::Xamarin.Forms.Platform.Resource.Attribute.helperText = global::XamarinDataChannelTest.Droid.Resource.Attribute.helperText;
- global::Xamarin.Forms.Platform.Resource.Attribute.helperTextEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.helperTextEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.helperTextTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.helperTextTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.hideMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Attribute.hideMotionSpec;
- global::Xamarin.Forms.Platform.Resource.Attribute.hideOnContentScroll = global::XamarinDataChannelTest.Droid.Resource.Attribute.hideOnContentScroll;
- global::Xamarin.Forms.Platform.Resource.Attribute.hideOnScroll = global::XamarinDataChannelTest.Droid.Resource.Attribute.hideOnScroll;
- global::Xamarin.Forms.Platform.Resource.Attribute.hintAnimationEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.hintAnimationEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.hintEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.hintEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.hintTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.hintTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.homeAsUpIndicator = global::XamarinDataChannelTest.Droid.Resource.Attribute.homeAsUpIndicator;
- global::Xamarin.Forms.Platform.Resource.Attribute.homeLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.homeLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.hoveredFocusedTranslationZ = global::XamarinDataChannelTest.Droid.Resource.Attribute.hoveredFocusedTranslationZ;
- global::Xamarin.Forms.Platform.Resource.Attribute.icon = global::XamarinDataChannelTest.Droid.Resource.Attribute.icon;
- global::Xamarin.Forms.Platform.Resource.Attribute.iconEndPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconEndPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.iconGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconGravity;
- global::Xamarin.Forms.Platform.Resource.Attribute.iconifiedByDefault = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconifiedByDefault;
- global::Xamarin.Forms.Platform.Resource.Attribute.iconPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.iconSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconSize;
- global::Xamarin.Forms.Platform.Resource.Attribute.iconStartPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconStartPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.iconTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconTint;
- global::Xamarin.Forms.Platform.Resource.Attribute.iconTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.iconTintMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.imageButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.imageButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.indeterminateProgressStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.indeterminateProgressStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.initialActivityCount = global::XamarinDataChannelTest.Droid.Resource.Attribute.initialActivityCount;
- global::Xamarin.Forms.Platform.Resource.Attribute.insetForeground = global::XamarinDataChannelTest.Droid.Resource.Attribute.insetForeground;
- global::Xamarin.Forms.Platform.Resource.Attribute.isLightTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.isLightTheme;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemHorizontalPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemHorizontalPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemHorizontalTranslationEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemHorizontalTranslationEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemIconPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemIconPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemIconSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemIconSize;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemIconTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemIconTint;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemSpacing = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemSpacing;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemTextAppearanceActive = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemTextAppearanceActive;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemTextAppearanceInactive = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemTextAppearanceInactive;
- global::Xamarin.Forms.Platform.Resource.Attribute.itemTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.itemTextColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.keylines = global::XamarinDataChannelTest.Droid.Resource.Attribute.keylines;
- global::Xamarin.Forms.Platform.Resource.Attribute.labelVisibilityMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.labelVisibilityMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.lastBaselineToBottomHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.lastBaselineToBottomHeight;
- global::Xamarin.Forms.Platform.Resource.Attribute.layout = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout;
- global::Xamarin.Forms.Platform.Resource.Attribute.layoutManager = global::XamarinDataChannelTest.Droid.Resource.Attribute.layoutManager;
- global::Xamarin.Forms.Platform.Resource.Attribute.layout_anchor = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_anchor;
- global::Xamarin.Forms.Platform.Resource.Attribute.layout_anchorGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_anchorGravity;
- global::Xamarin.Forms.Platform.Resource.Attribute.layout_behavior = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_behavior;
- global::Xamarin.Forms.Platform.Resource.Attribute.layout_collapseMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_collapseMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.layout_collapseParallaxMultiplier = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_collapseParallaxMultiplier;
- global::Xamarin.Forms.Platform.Resource.Attribute.layout_dodgeInsetEdges = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_dodgeInsetEdges;
- global::Xamarin.Forms.Platform.Resource.Attribute.layout_insetEdge = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_insetEdge;
- global::Xamarin.Forms.Platform.Resource.Attribute.layout_keyline = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_keyline;
- global::Xamarin.Forms.Platform.Resource.Attribute.layout_scrollFlags = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_scrollFlags;
- global::Xamarin.Forms.Platform.Resource.Attribute.layout_scrollInterpolator = global::XamarinDataChannelTest.Droid.Resource.Attribute.layout_scrollInterpolator;
- global::Xamarin.Forms.Platform.Resource.Attribute.liftOnScroll = global::XamarinDataChannelTest.Droid.Resource.Attribute.liftOnScroll;
- global::Xamarin.Forms.Platform.Resource.Attribute.lineHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.lineHeight;
- global::Xamarin.Forms.Platform.Resource.Attribute.lineSpacing = global::XamarinDataChannelTest.Droid.Resource.Attribute.lineSpacing;
- global::Xamarin.Forms.Platform.Resource.Attribute.listChoiceBackgroundIndicator = global::XamarinDataChannelTest.Droid.Resource.Attribute.listChoiceBackgroundIndicator;
- global::Xamarin.Forms.Platform.Resource.Attribute.listDividerAlertDialog = global::XamarinDataChannelTest.Droid.Resource.Attribute.listDividerAlertDialog;
- global::Xamarin.Forms.Platform.Resource.Attribute.listItemLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.listItemLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.listLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.listLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.listMenuViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.listMenuViewStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.listPopupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPopupWindowStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.listPreferredItemHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPreferredItemHeight;
- global::Xamarin.Forms.Platform.Resource.Attribute.listPreferredItemHeightLarge = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPreferredItemHeightLarge;
- global::Xamarin.Forms.Platform.Resource.Attribute.listPreferredItemHeightSmall = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPreferredItemHeightSmall;
- global::Xamarin.Forms.Platform.Resource.Attribute.listPreferredItemPaddingLeft = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPreferredItemPaddingLeft;
- global::Xamarin.Forms.Platform.Resource.Attribute.listPreferredItemPaddingRight = global::XamarinDataChannelTest.Droid.Resource.Attribute.listPreferredItemPaddingRight;
- global::Xamarin.Forms.Platform.Resource.Attribute.logo = global::XamarinDataChannelTest.Droid.Resource.Attribute.logo;
- global::Xamarin.Forms.Platform.Resource.Attribute.logoDescription = global::XamarinDataChannelTest.Droid.Resource.Attribute.logoDescription;
- global::Xamarin.Forms.Platform.Resource.Attribute.materialButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.materialButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.materialCardViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.materialCardViewStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.maxActionInlineWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.maxActionInlineWidth;
- global::Xamarin.Forms.Platform.Resource.Attribute.maxButtonHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.maxButtonHeight;
- global::Xamarin.Forms.Platform.Resource.Attribute.maxImageSize = global::XamarinDataChannelTest.Droid.Resource.Attribute.maxImageSize;
- global::Xamarin.Forms.Platform.Resource.Attribute.measureWithLargestChild = global::XamarinDataChannelTest.Droid.Resource.Attribute.measureWithLargestChild;
- global::Xamarin.Forms.Platform.Resource.Attribute.menu = global::XamarinDataChannelTest.Droid.Resource.Attribute.menu;
- global::Xamarin.Forms.Platform.Resource.Attribute.multiChoiceItemLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.multiChoiceItemLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.navigationContentDescription = global::XamarinDataChannelTest.Droid.Resource.Attribute.navigationContentDescription;
- global::Xamarin.Forms.Platform.Resource.Attribute.navigationIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.navigationIcon;
- global::Xamarin.Forms.Platform.Resource.Attribute.navigationMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.navigationMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.navigationViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.navigationViewStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.numericModifiers = global::XamarinDataChannelTest.Droid.Resource.Attribute.numericModifiers;
- global::Xamarin.Forms.Platform.Resource.Attribute.overlapAnchor = global::XamarinDataChannelTest.Droid.Resource.Attribute.overlapAnchor;
- global::Xamarin.Forms.Platform.Resource.Attribute.paddingBottomNoButtons = global::XamarinDataChannelTest.Droid.Resource.Attribute.paddingBottomNoButtons;
- global::Xamarin.Forms.Platform.Resource.Attribute.paddingEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.paddingEnd;
- global::Xamarin.Forms.Platform.Resource.Attribute.paddingStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.paddingStart;
- global::Xamarin.Forms.Platform.Resource.Attribute.paddingTopNoTitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.paddingTopNoTitle;
- global::Xamarin.Forms.Platform.Resource.Attribute.panelBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.panelBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.panelMenuListTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.panelMenuListTheme;
- global::Xamarin.Forms.Platform.Resource.Attribute.panelMenuListWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.panelMenuListWidth;
- global::Xamarin.Forms.Platform.Resource.Attribute.passwordToggleContentDescription = global::XamarinDataChannelTest.Droid.Resource.Attribute.passwordToggleContentDescription;
- global::Xamarin.Forms.Platform.Resource.Attribute.passwordToggleDrawable = global::XamarinDataChannelTest.Droid.Resource.Attribute.passwordToggleDrawable;
- global::Xamarin.Forms.Platform.Resource.Attribute.passwordToggleEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.passwordToggleEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.passwordToggleTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.passwordToggleTint;
- global::Xamarin.Forms.Platform.Resource.Attribute.passwordToggleTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.passwordToggleTintMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.popupMenuStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.popupMenuStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.popupTheme = global::XamarinDataChannelTest.Droid.Resource.Attribute.popupTheme;
- global::Xamarin.Forms.Platform.Resource.Attribute.popupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.popupWindowStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.preserveIconSpacing = global::XamarinDataChannelTest.Droid.Resource.Attribute.preserveIconSpacing;
- global::Xamarin.Forms.Platform.Resource.Attribute.pressedTranslationZ = global::XamarinDataChannelTest.Droid.Resource.Attribute.pressedTranslationZ;
- global::Xamarin.Forms.Platform.Resource.Attribute.progressBarPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.progressBarPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.progressBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.progressBarStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.queryBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.queryBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.queryHint = global::XamarinDataChannelTest.Droid.Resource.Attribute.queryHint;
- global::Xamarin.Forms.Platform.Resource.Attribute.radioButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.radioButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.ratingBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.ratingBarStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.ratingBarStyleIndicator = global::XamarinDataChannelTest.Droid.Resource.Attribute.ratingBarStyleIndicator;
- global::Xamarin.Forms.Platform.Resource.Attribute.ratingBarStyleSmall = global::XamarinDataChannelTest.Droid.Resource.Attribute.ratingBarStyleSmall;
- global::Xamarin.Forms.Platform.Resource.Attribute.reverseLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.reverseLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.rippleColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.rippleColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.scrimAnimationDuration = global::XamarinDataChannelTest.Droid.Resource.Attribute.scrimAnimationDuration;
- global::Xamarin.Forms.Platform.Resource.Attribute.scrimBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.scrimBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.scrimVisibleHeightTrigger = global::XamarinDataChannelTest.Droid.Resource.Attribute.scrimVisibleHeightTrigger;
- global::Xamarin.Forms.Platform.Resource.Attribute.searchHintIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.searchHintIcon;
- global::Xamarin.Forms.Platform.Resource.Attribute.searchIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.searchIcon;
- global::Xamarin.Forms.Platform.Resource.Attribute.searchViewStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.searchViewStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.seekBarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.seekBarStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.selectableItemBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.selectableItemBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.selectableItemBackgroundBorderless = global::XamarinDataChannelTest.Droid.Resource.Attribute.selectableItemBackgroundBorderless;
- global::Xamarin.Forms.Platform.Resource.Attribute.showAsAction = global::XamarinDataChannelTest.Droid.Resource.Attribute.showAsAction;
- global::Xamarin.Forms.Platform.Resource.Attribute.showDividers = global::XamarinDataChannelTest.Droid.Resource.Attribute.showDividers;
- global::Xamarin.Forms.Platform.Resource.Attribute.showMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Attribute.showMotionSpec;
- global::Xamarin.Forms.Platform.Resource.Attribute.showText = global::XamarinDataChannelTest.Droid.Resource.Attribute.showText;
- global::Xamarin.Forms.Platform.Resource.Attribute.showTitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.showTitle;
- global::Xamarin.Forms.Platform.Resource.Attribute.singleChoiceItemLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.singleChoiceItemLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.singleLine = global::XamarinDataChannelTest.Droid.Resource.Attribute.singleLine;
- global::Xamarin.Forms.Platform.Resource.Attribute.singleSelection = global::XamarinDataChannelTest.Droid.Resource.Attribute.singleSelection;
- global::Xamarin.Forms.Platform.Resource.Attribute.snackbarButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.snackbarButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.snackbarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.snackbarStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.spanCount = global::XamarinDataChannelTest.Droid.Resource.Attribute.spanCount;
- global::Xamarin.Forms.Platform.Resource.Attribute.spinBars = global::XamarinDataChannelTest.Droid.Resource.Attribute.spinBars;
- global::Xamarin.Forms.Platform.Resource.Attribute.spinnerDropDownItemStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.spinnerDropDownItemStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.spinnerStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.spinnerStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.splitTrack = global::XamarinDataChannelTest.Droid.Resource.Attribute.splitTrack;
- global::Xamarin.Forms.Platform.Resource.Attribute.srcCompat = global::XamarinDataChannelTest.Droid.Resource.Attribute.srcCompat;
- global::Xamarin.Forms.Platform.Resource.Attribute.stackFromEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.stackFromEnd;
- global::Xamarin.Forms.Platform.Resource.Attribute.state_above_anchor = global::XamarinDataChannelTest.Droid.Resource.Attribute.state_above_anchor;
- global::Xamarin.Forms.Platform.Resource.Attribute.state_collapsed = global::XamarinDataChannelTest.Droid.Resource.Attribute.state_collapsed;
- global::Xamarin.Forms.Platform.Resource.Attribute.state_collapsible = global::XamarinDataChannelTest.Droid.Resource.Attribute.state_collapsible;
- global::Xamarin.Forms.Platform.Resource.Attribute.state_liftable = global::XamarinDataChannelTest.Droid.Resource.Attribute.state_liftable;
- global::Xamarin.Forms.Platform.Resource.Attribute.state_lifted = global::XamarinDataChannelTest.Droid.Resource.Attribute.state_lifted;
- global::Xamarin.Forms.Platform.Resource.Attribute.statusBarBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.statusBarBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.statusBarScrim = global::XamarinDataChannelTest.Droid.Resource.Attribute.statusBarScrim;
- global::Xamarin.Forms.Platform.Resource.Attribute.strokeColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.strokeColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.strokeWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.strokeWidth;
- global::Xamarin.Forms.Platform.Resource.Attribute.subMenuArrow = global::XamarinDataChannelTest.Droid.Resource.Attribute.subMenuArrow;
- global::Xamarin.Forms.Platform.Resource.Attribute.submitBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.submitBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.subtitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.subtitle;
- global::Xamarin.Forms.Platform.Resource.Attribute.subtitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.subtitleTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.subtitleTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.subtitleTextColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.subtitleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.subtitleTextStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.suggestionRowLayout = global::XamarinDataChannelTest.Droid.Resource.Attribute.suggestionRowLayout;
- global::Xamarin.Forms.Platform.Resource.Attribute.switchMinWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.switchMinWidth;
- global::Xamarin.Forms.Platform.Resource.Attribute.switchPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.switchPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.switchStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.switchStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.switchTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.switchTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabContentStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabContentStart;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabGravity;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabIconTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIconTint;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabIconTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIconTintMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicator = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicator;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicatorAnimationDuration = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicatorAnimationDuration;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicatorColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicatorColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicatorFullWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicatorFullWidth;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicatorGravity = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicatorGravity;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabIndicatorHeight = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabIndicatorHeight;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabInlineLabel = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabInlineLabel;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabMaxWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabMaxWidth;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabMinWidth = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabMinWidth;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabPaddingBottom = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabPaddingBottom;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabPaddingEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabPaddingEnd;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabPaddingStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabPaddingStart;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabPaddingTop;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabRippleColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabRippleColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabSelectedTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabSelectedTextColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabTextColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.tabUnboundedRipple = global::XamarinDataChannelTest.Droid.Resource.Attribute.tabUnboundedRipple;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAllCaps = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAllCaps;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceBody1 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceBody1;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceBody2 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceBody2;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceButton = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceButton;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceCaption = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceCaption;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline1 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline1;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline2 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline2;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline3 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline3;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline4 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline4;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline5 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline5;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceHeadline6 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceHeadline6;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceLargePopupMenu = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceLargePopupMenu;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceListItem = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceListItem;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceListItemSecondary = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceListItemSecondary;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceListItemSmall = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceListItemSmall;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceOverline = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceOverline;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearancePopupMenuHeader = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearancePopupMenuHeader;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceSearchResultSubtitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceSearchResultSubtitle;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceSearchResultTitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceSearchResultTitle;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceSmallPopupMenu = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceSmallPopupMenu;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceSubtitle1 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceSubtitle1;
- global::Xamarin.Forms.Platform.Resource.Attribute.textAppearanceSubtitle2 = global::XamarinDataChannelTest.Droid.Resource.Attribute.textAppearanceSubtitle2;
- global::Xamarin.Forms.Platform.Resource.Attribute.textColorAlertDialogListItem = global::XamarinDataChannelTest.Droid.Resource.Attribute.textColorAlertDialogListItem;
- global::Xamarin.Forms.Platform.Resource.Attribute.textColorSearchUrl = global::XamarinDataChannelTest.Droid.Resource.Attribute.textColorSearchUrl;
- global::Xamarin.Forms.Platform.Resource.Attribute.textEndPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.textEndPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.textInputStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.textInputStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.textStartPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.textStartPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.theme = global::XamarinDataChannelTest.Droid.Resource.Attribute.theme;
- global::Xamarin.Forms.Platform.Resource.Attribute.thickness = global::XamarinDataChannelTest.Droid.Resource.Attribute.thickness;
- global::Xamarin.Forms.Platform.Resource.Attribute.thumbTextPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.thumbTextPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.thumbTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.thumbTint;
- global::Xamarin.Forms.Platform.Resource.Attribute.thumbTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.thumbTintMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.tickMark = global::XamarinDataChannelTest.Droid.Resource.Attribute.tickMark;
- global::Xamarin.Forms.Platform.Resource.Attribute.tickMarkTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.tickMarkTint;
- global::Xamarin.Forms.Platform.Resource.Attribute.tickMarkTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.tickMarkTintMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.tint = global::XamarinDataChannelTest.Droid.Resource.Attribute.tint;
- global::Xamarin.Forms.Platform.Resource.Attribute.tintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.tintMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.title = global::XamarinDataChannelTest.Droid.Resource.Attribute.title;
- global::Xamarin.Forms.Platform.Resource.Attribute.titleEnabled = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleEnabled;
- global::Xamarin.Forms.Platform.Resource.Attribute.titleMargin = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMargin;
- global::Xamarin.Forms.Platform.Resource.Attribute.titleMarginBottom = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMarginBottom;
- global::Xamarin.Forms.Platform.Resource.Attribute.titleMarginEnd = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMarginEnd;
- global::Xamarin.Forms.Platform.Resource.Attribute.titleMargins = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMargins;
- global::Xamarin.Forms.Platform.Resource.Attribute.titleMarginStart = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMarginStart;
- global::Xamarin.Forms.Platform.Resource.Attribute.titleMarginTop = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleMarginTop;
- global::Xamarin.Forms.Platform.Resource.Attribute.titleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Attribute.titleTextColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleTextColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.titleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.titleTextStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.toolbarId = global::XamarinDataChannelTest.Droid.Resource.Attribute.toolbarId;
- global::Xamarin.Forms.Platform.Resource.Attribute.toolbarNavigationButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.toolbarNavigationButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.toolbarStyle = global::XamarinDataChannelTest.Droid.Resource.Attribute.toolbarStyle;
- global::Xamarin.Forms.Platform.Resource.Attribute.tooltipForegroundColor = global::XamarinDataChannelTest.Droid.Resource.Attribute.tooltipForegroundColor;
- global::Xamarin.Forms.Platform.Resource.Attribute.tooltipFrameBackground = global::XamarinDataChannelTest.Droid.Resource.Attribute.tooltipFrameBackground;
- global::Xamarin.Forms.Platform.Resource.Attribute.tooltipText = global::XamarinDataChannelTest.Droid.Resource.Attribute.tooltipText;
- global::Xamarin.Forms.Platform.Resource.Attribute.track = global::XamarinDataChannelTest.Droid.Resource.Attribute.track;
- global::Xamarin.Forms.Platform.Resource.Attribute.trackTint = global::XamarinDataChannelTest.Droid.Resource.Attribute.trackTint;
- global::Xamarin.Forms.Platform.Resource.Attribute.trackTintMode = global::XamarinDataChannelTest.Droid.Resource.Attribute.trackTintMode;
- global::Xamarin.Forms.Platform.Resource.Attribute.ttcIndex = global::XamarinDataChannelTest.Droid.Resource.Attribute.ttcIndex;
- global::Xamarin.Forms.Platform.Resource.Attribute.useCompatPadding = global::XamarinDataChannelTest.Droid.Resource.Attribute.useCompatPadding;
- global::Xamarin.Forms.Platform.Resource.Attribute.viewInflaterClass = global::XamarinDataChannelTest.Droid.Resource.Attribute.viewInflaterClass;
- global::Xamarin.Forms.Platform.Resource.Attribute.voiceIcon = global::XamarinDataChannelTest.Droid.Resource.Attribute.voiceIcon;
- global::Xamarin.Forms.Platform.Resource.Attribute.windowActionBar = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowActionBar;
- global::Xamarin.Forms.Platform.Resource.Attribute.windowActionBarOverlay = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowActionBarOverlay;
- global::Xamarin.Forms.Platform.Resource.Attribute.windowActionModeOverlay = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowActionModeOverlay;
- global::Xamarin.Forms.Platform.Resource.Attribute.windowFixedHeightMajor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowFixedHeightMajor;
- global::Xamarin.Forms.Platform.Resource.Attribute.windowFixedHeightMinor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowFixedHeightMinor;
- global::Xamarin.Forms.Platform.Resource.Attribute.windowFixedWidthMajor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowFixedWidthMajor;
- global::Xamarin.Forms.Platform.Resource.Attribute.windowFixedWidthMinor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowFixedWidthMinor;
- global::Xamarin.Forms.Platform.Resource.Attribute.windowMinWidthMajor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowMinWidthMajor;
- global::Xamarin.Forms.Platform.Resource.Attribute.windowMinWidthMinor = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowMinWidthMinor;
- global::Xamarin.Forms.Platform.Resource.Attribute.windowNoTitle = global::XamarinDataChannelTest.Droid.Resource.Attribute.windowNoTitle;
- global::Xamarin.Forms.Platform.Resource.Boolean.abc_action_bar_embed_tabs = global::XamarinDataChannelTest.Droid.Resource.Boolean.abc_action_bar_embed_tabs;
- global::Xamarin.Forms.Platform.Resource.Boolean.abc_allow_stacked_button_bar = global::XamarinDataChannelTest.Droid.Resource.Boolean.abc_allow_stacked_button_bar;
- global::Xamarin.Forms.Platform.Resource.Boolean.abc_config_actionMenuItemAllCaps = global::XamarinDataChannelTest.Droid.Resource.Boolean.abc_config_actionMenuItemAllCaps;
- global::Xamarin.Forms.Platform.Resource.Boolean.mtrl_btn_textappearance_all_caps = global::XamarinDataChannelTest.Droid.Resource.Boolean.mtrl_btn_textappearance_all_caps;
- global::Xamarin.Forms.Platform.Resource.Color.abc_background_cache_hint_selector_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.abc_background_cache_hint_selector_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.abc_background_cache_hint_selector_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.abc_background_cache_hint_selector_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.abc_btn_colored_borderless_text_material = global::XamarinDataChannelTest.Droid.Resource.Color.abc_btn_colored_borderless_text_material;
- global::Xamarin.Forms.Platform.Resource.Color.abc_btn_colored_text_material = global::XamarinDataChannelTest.Droid.Resource.Color.abc_btn_colored_text_material;
- global::Xamarin.Forms.Platform.Resource.Color.abc_color_highlight_material = global::XamarinDataChannelTest.Droid.Resource.Color.abc_color_highlight_material;
- global::Xamarin.Forms.Platform.Resource.Color.abc_hint_foreground_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.abc_hint_foreground_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.abc_hint_foreground_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.abc_hint_foreground_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.abc_input_method_navigation_guard = global::XamarinDataChannelTest.Droid.Resource.Color.abc_input_method_navigation_guard;
- global::Xamarin.Forms.Platform.Resource.Color.abc_primary_text_disable_only_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.abc_primary_text_disable_only_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.abc_primary_text_disable_only_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.abc_primary_text_disable_only_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.abc_primary_text_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.abc_primary_text_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.abc_primary_text_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.abc_primary_text_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.abc_search_url_text = global::XamarinDataChannelTest.Droid.Resource.Color.abc_search_url_text;
- global::Xamarin.Forms.Platform.Resource.Color.abc_search_url_text_normal = global::XamarinDataChannelTest.Droid.Resource.Color.abc_search_url_text_normal;
- global::Xamarin.Forms.Platform.Resource.Color.abc_search_url_text_pressed = global::XamarinDataChannelTest.Droid.Resource.Color.abc_search_url_text_pressed;
- global::Xamarin.Forms.Platform.Resource.Color.abc_search_url_text_selected = global::XamarinDataChannelTest.Droid.Resource.Color.abc_search_url_text_selected;
- global::Xamarin.Forms.Platform.Resource.Color.abc_secondary_text_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.abc_secondary_text_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.abc_secondary_text_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.abc_secondary_text_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.abc_tint_btn_checkable = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_btn_checkable;
- global::Xamarin.Forms.Platform.Resource.Color.abc_tint_default = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_default;
- global::Xamarin.Forms.Platform.Resource.Color.abc_tint_edittext = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_edittext;
- global::Xamarin.Forms.Platform.Resource.Color.abc_tint_seek_thumb = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_seek_thumb;
- global::Xamarin.Forms.Platform.Resource.Color.abc_tint_spinner = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_spinner;
- global::Xamarin.Forms.Platform.Resource.Color.abc_tint_switch_track = global::XamarinDataChannelTest.Droid.Resource.Color.abc_tint_switch_track;
- global::Xamarin.Forms.Platform.Resource.Color.accent_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.accent_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.accent_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.accent_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.background_floating_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.background_floating_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.background_floating_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.background_floating_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.background_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.background_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.background_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.background_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_disabled_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_disabled_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_disabled_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_disabled_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_inverse_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_inverse_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_inverse_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_inverse_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.bright_foreground_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.bright_foreground_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.button_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.button_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.button_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.button_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.cardview_dark_background = global::XamarinDataChannelTest.Droid.Resource.Color.cardview_dark_background;
- global::Xamarin.Forms.Platform.Resource.Color.cardview_light_background = global::XamarinDataChannelTest.Droid.Resource.Color.cardview_light_background;
- global::Xamarin.Forms.Platform.Resource.Color.cardview_shadow_end_color = global::XamarinDataChannelTest.Droid.Resource.Color.cardview_shadow_end_color;
- global::Xamarin.Forms.Platform.Resource.Color.cardview_shadow_start_color = global::XamarinDataChannelTest.Droid.Resource.Color.cardview_shadow_start_color;
- global::Xamarin.Forms.Platform.Resource.Color.design_bottom_navigation_shadow_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_bottom_navigation_shadow_color;
- global::Xamarin.Forms.Platform.Resource.Color.design_default_color_primary = global::XamarinDataChannelTest.Droid.Resource.Color.design_default_color_primary;
- global::Xamarin.Forms.Platform.Resource.Color.design_default_color_primary_dark = global::XamarinDataChannelTest.Droid.Resource.Color.design_default_color_primary_dark;
- global::Xamarin.Forms.Platform.Resource.Color.design_error = global::XamarinDataChannelTest.Droid.Resource.Color.design_error;
- global::Xamarin.Forms.Platform.Resource.Color.design_fab_shadow_end_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_shadow_end_color;
- global::Xamarin.Forms.Platform.Resource.Color.design_fab_shadow_mid_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_shadow_mid_color;
- global::Xamarin.Forms.Platform.Resource.Color.design_fab_shadow_start_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_shadow_start_color;
- global::Xamarin.Forms.Platform.Resource.Color.design_fab_stroke_end_inner_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_stroke_end_inner_color;
- global::Xamarin.Forms.Platform.Resource.Color.design_fab_stroke_end_outer_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_stroke_end_outer_color;
- global::Xamarin.Forms.Platform.Resource.Color.design_fab_stroke_top_inner_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_stroke_top_inner_color;
- global::Xamarin.Forms.Platform.Resource.Color.design_fab_stroke_top_outer_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_fab_stroke_top_outer_color;
- global::Xamarin.Forms.Platform.Resource.Color.design_snackbar_background_color = global::XamarinDataChannelTest.Droid.Resource.Color.design_snackbar_background_color;
- global::Xamarin.Forms.Platform.Resource.Color.design_tint_password_toggle = global::XamarinDataChannelTest.Droid.Resource.Color.design_tint_password_toggle;
- global::Xamarin.Forms.Platform.Resource.Color.dim_foreground_disabled_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.dim_foreground_disabled_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.dim_foreground_disabled_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.dim_foreground_disabled_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.dim_foreground_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.dim_foreground_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.dim_foreground_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.dim_foreground_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.error_color_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.error_color_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.error_color_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.error_color_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.foreground_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.foreground_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.foreground_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.foreground_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.highlighted_text_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.highlighted_text_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.highlighted_text_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.highlighted_text_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.material_blue_grey_800 = global::XamarinDataChannelTest.Droid.Resource.Color.material_blue_grey_800;
- global::Xamarin.Forms.Platform.Resource.Color.material_blue_grey_900 = global::XamarinDataChannelTest.Droid.Resource.Color.material_blue_grey_900;
- global::Xamarin.Forms.Platform.Resource.Color.material_blue_grey_950 = global::XamarinDataChannelTest.Droid.Resource.Color.material_blue_grey_950;
- global::Xamarin.Forms.Platform.Resource.Color.material_deep_teal_200 = global::XamarinDataChannelTest.Droid.Resource.Color.material_deep_teal_200;
- global::Xamarin.Forms.Platform.Resource.Color.material_deep_teal_500 = global::XamarinDataChannelTest.Droid.Resource.Color.material_deep_teal_500;
- global::Xamarin.Forms.Platform.Resource.Color.material_grey_100 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_100;
- global::Xamarin.Forms.Platform.Resource.Color.material_grey_300 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_300;
- global::Xamarin.Forms.Platform.Resource.Color.material_grey_50 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_50;
- global::Xamarin.Forms.Platform.Resource.Color.material_grey_600 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_600;
- global::Xamarin.Forms.Platform.Resource.Color.material_grey_800 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_800;
- global::Xamarin.Forms.Platform.Resource.Color.material_grey_850 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_850;
- global::Xamarin.Forms.Platform.Resource.Color.material_grey_900 = global::XamarinDataChannelTest.Droid.Resource.Color.material_grey_900;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_bottom_nav_colored_item_tint = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_bottom_nav_colored_item_tint;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_bottom_nav_item_tint = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_bottom_nav_item_tint;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_bg_color_disabled = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_bg_color_disabled;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_bg_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_bg_color_selector;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_ripple_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_stroke_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_stroke_color_selector;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_text_btn_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_text_btn_ripple_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_text_color_disabled = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_text_color_disabled;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_text_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_text_color_selector;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_btn_transparent_bg_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_btn_transparent_bg_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_chip_background_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_chip_background_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_chip_close_icon_tint = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_chip_close_icon_tint;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_chip_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_chip_ripple_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_chip_text_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_chip_text_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_fab_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_fab_ripple_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_scrim_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_scrim_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_tabs_colored_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_tabs_colored_ripple_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_tabs_icon_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_tabs_icon_color_selector;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_tabs_icon_color_selector_colored = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_tabs_icon_color_selector_colored;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_tabs_legacy_text_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_tabs_legacy_text_color_selector;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_tabs_ripple_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_tabs_ripple_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_textinput_default_box_stroke_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_textinput_default_box_stroke_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_textinput_disabled_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_textinput_disabled_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_textinput_filled_box_default_background_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_textinput_filled_box_default_background_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_textinput_hovered_box_stroke_color = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_textinput_hovered_box_stroke_color;
- global::Xamarin.Forms.Platform.Resource.Color.mtrl_text_btn_text_color_selector = global::XamarinDataChannelTest.Droid.Resource.Color.mtrl_text_btn_text_color_selector;
- global::Xamarin.Forms.Platform.Resource.Color.notification_action_color_filter = global::XamarinDataChannelTest.Droid.Resource.Color.notification_action_color_filter;
- global::Xamarin.Forms.Platform.Resource.Color.notification_icon_bg_color = global::XamarinDataChannelTest.Droid.Resource.Color.notification_icon_bg_color;
- global::Xamarin.Forms.Platform.Resource.Color.notification_material_background_media_default_color = global::XamarinDataChannelTest.Droid.Resource.Color.notification_material_background_media_default_color;
- global::Xamarin.Forms.Platform.Resource.Color.primary_dark_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.primary_dark_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.primary_dark_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.primary_dark_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.primary_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.primary_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.primary_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.primary_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.primary_text_default_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.primary_text_default_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.primary_text_default_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.primary_text_default_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.primary_text_disabled_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.primary_text_disabled_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.primary_text_disabled_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.primary_text_disabled_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.ripple_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.ripple_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.ripple_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.ripple_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.secondary_text_default_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.secondary_text_default_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.secondary_text_default_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.secondary_text_default_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.secondary_text_disabled_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.secondary_text_disabled_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.secondary_text_disabled_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.secondary_text_disabled_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_disabled_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_disabled_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_disabled_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_disabled_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_normal_material_dark = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_normal_material_dark;
- global::Xamarin.Forms.Platform.Resource.Color.switch_thumb_normal_material_light = global::XamarinDataChannelTest.Droid.Resource.Color.switch_thumb_normal_material_light;
- global::Xamarin.Forms.Platform.Resource.Color.tooltip_background_dark = global::XamarinDataChannelTest.Droid.Resource.Color.tooltip_background_dark;
- global::Xamarin.Forms.Platform.Resource.Color.tooltip_background_light = global::XamarinDataChannelTest.Droid.Resource.Color.tooltip_background_light;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_content_inset_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_content_inset_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_content_inset_with_nav = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_content_inset_with_nav;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_default_height_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_default_height_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_default_padding_end_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_default_padding_end_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_default_padding_start_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_default_padding_start_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_elevation_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_elevation_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_icon_vertical_padding_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_icon_vertical_padding_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_overflow_padding_end_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_overflow_padding_end_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_overflow_padding_start_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_overflow_padding_start_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_stacked_max_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_stacked_max_height;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_stacked_tab_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_stacked_tab_max_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_subtitle_bottom_margin_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_bar_subtitle_top_margin_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_bar_subtitle_top_margin_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_button_min_height_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_button_min_height_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_button_min_width_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_button_min_width_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_action_button_min_width_overflow_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_action_button_min_width_overflow_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_alert_dialog_button_bar_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_alert_dialog_button_bar_height;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_alert_dialog_button_dimen = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_alert_dialog_button_dimen;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_button_inset_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_button_inset_horizontal_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_button_inset_vertical_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_button_inset_vertical_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_button_padding_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_button_padding_horizontal_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_button_padding_vertical_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_button_padding_vertical_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_cascading_menus_min_smallest_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_cascading_menus_min_smallest_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_config_prefDialogWidth = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_config_prefDialogWidth;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_control_corner_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_control_corner_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_control_inset_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_control_inset_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_control_padding_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_control_padding_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_corner_radius_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_corner_radius_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_fixed_height_major = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_fixed_height_major;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_fixed_height_minor = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_fixed_height_minor;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_fixed_width_major = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_fixed_width_major;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_fixed_width_minor = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_fixed_width_minor;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_list_padding_bottom_no_buttons;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_list_padding_top_no_title = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_list_padding_top_no_title;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_min_width_major = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_min_width_major;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_min_width_minor = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_min_width_minor;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_padding_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_padding_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_padding_top_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_padding_top_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dialog_title_divider_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dialog_title_divider_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_disabled_alpha_material_dark = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_disabled_alpha_material_dark;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_disabled_alpha_material_light = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_disabled_alpha_material_light;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dropdownitem_icon_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dropdownitem_icon_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dropdownitem_text_padding_left = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dropdownitem_text_padding_left;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_dropdownitem_text_padding_right = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_dropdownitem_text_padding_right;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_edit_text_inset_bottom_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_edit_text_inset_bottom_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_edit_text_inset_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_edit_text_inset_horizontal_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_edit_text_inset_top_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_edit_text_inset_top_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_floating_window_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_floating_window_z;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_list_item_padding_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_list_item_padding_horizontal_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_panel_menu_list_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_panel_menu_list_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_progress_bar_height_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_progress_bar_height_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_search_view_preferred_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_search_view_preferred_height;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_search_view_preferred_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_search_view_preferred_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_seekbar_track_background_height_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_seekbar_track_background_height_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_seekbar_track_progress_height_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_seekbar_track_progress_height_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_select_dialog_padding_start_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_select_dialog_padding_start_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_switch_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_switch_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_body_1_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_body_1_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_body_2_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_body_2_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_button_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_button_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_caption_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_caption_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_display_1_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_display_1_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_display_2_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_display_2_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_display_3_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_display_3_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_display_4_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_display_4_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_headline_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_headline_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_large_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_large_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_medium_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_medium_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_menu_header_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_menu_header_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_menu_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_menu_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_small_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_small_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_subhead_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_subhead_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_subtitle_material_toolbar = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_subtitle_material_toolbar;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_title_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_title_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.abc_text_size_title_material_toolbar = global::XamarinDataChannelTest.Droid.Resource.Dimension.abc_text_size_title_material_toolbar;
- global::Xamarin.Forms.Platform.Resource.Dimension.cardview_compat_inset_shadow = global::XamarinDataChannelTest.Droid.Resource.Dimension.cardview_compat_inset_shadow;
- global::Xamarin.Forms.Platform.Resource.Dimension.cardview_default_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.cardview_default_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.cardview_default_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.cardview_default_radius;
- global::Xamarin.Forms.Platform.Resource.Dimension.compat_button_inset_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_inset_horizontal_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.compat_button_inset_vertical_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_inset_vertical_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.compat_button_padding_horizontal_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_padding_horizontal_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.compat_button_padding_vertical_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_button_padding_vertical_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.compat_control_corner_material = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_control_corner_material;
- global::Xamarin.Forms.Platform.Resource.Dimension.compat_notification_large_icon_max_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_notification_large_icon_max_height;
- global::Xamarin.Forms.Platform.Resource.Dimension.compat_notification_large_icon_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.compat_notification_large_icon_max_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_appbar_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_appbar_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_active_item_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_active_item_max_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_active_item_min_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_active_item_min_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_active_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_active_text_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_height;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_icon_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_icon_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_item_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_item_max_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_item_min_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_item_min_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_margin;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_shadow_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_shadow_height;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_navigation_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_navigation_text_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_sheet_modal_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_sheet_modal_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_bottom_sheet_peek_height_min = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_bottom_sheet_peek_height_min;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_border_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_border_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_image_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_image_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_size_mini = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_size_mini;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_size_normal = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_size_normal;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_translation_z_hovered_focused = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_translation_z_hovered_focused;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_fab_translation_z_pressed = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_fab_translation_z_pressed;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_icon_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_icon_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_icon_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_icon_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_item_horizontal_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_item_horizontal_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_item_icon_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_item_icon_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_max_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_padding_bottom = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_padding_bottom;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_navigation_separator_vertical_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_navigation_separator_vertical_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_action_inline_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_action_inline_max_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_background_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_background_corner_radius;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_extra_spacing_horizontal = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_extra_spacing_horizontal;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_max_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_min_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_min_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_padding_horizontal = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_padding_horizontal;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_padding_vertical = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_padding_vertical;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_padding_vertical_2lines = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_padding_vertical_2lines;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_snackbar_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_snackbar_text_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_tab_max_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_tab_max_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_tab_scrollable_min_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_tab_scrollable_min_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_tab_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_tab_text_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_tab_text_size_2line = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_tab_text_size_2line;
- global::Xamarin.Forms.Platform.Resource.Dimension.design_textinput_caption_translate_y = global::XamarinDataChannelTest.Droid.Resource.Dimension.design_textinput_caption_translate_y;
- global::Xamarin.Forms.Platform.Resource.Dimension.disabled_alpha_material_dark = global::XamarinDataChannelTest.Droid.Resource.Dimension.disabled_alpha_material_dark;
- global::Xamarin.Forms.Platform.Resource.Dimension.disabled_alpha_material_light = global::XamarinDataChannelTest.Droid.Resource.Dimension.disabled_alpha_material_light;
- global::Xamarin.Forms.Platform.Resource.Dimension.fastscroll_default_thickness = global::XamarinDataChannelTest.Droid.Resource.Dimension.fastscroll_default_thickness;
- global::Xamarin.Forms.Platform.Resource.Dimension.fastscroll_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.fastscroll_margin;
- global::Xamarin.Forms.Platform.Resource.Dimension.fastscroll_minimum_range = global::XamarinDataChannelTest.Droid.Resource.Dimension.fastscroll_minimum_range;
- global::Xamarin.Forms.Platform.Resource.Dimension.highlight_alpha_material_colored = global::XamarinDataChannelTest.Droid.Resource.Dimension.highlight_alpha_material_colored;
- global::Xamarin.Forms.Platform.Resource.Dimension.highlight_alpha_material_dark = global::XamarinDataChannelTest.Droid.Resource.Dimension.highlight_alpha_material_dark;
- global::Xamarin.Forms.Platform.Resource.Dimension.highlight_alpha_material_light = global::XamarinDataChannelTest.Droid.Resource.Dimension.highlight_alpha_material_light;
- global::Xamarin.Forms.Platform.Resource.Dimension.hint_alpha_material_dark = global::XamarinDataChannelTest.Droid.Resource.Dimension.hint_alpha_material_dark;
- global::Xamarin.Forms.Platform.Resource.Dimension.hint_alpha_material_light = global::XamarinDataChannelTest.Droid.Resource.Dimension.hint_alpha_material_light;
- global::Xamarin.Forms.Platform.Resource.Dimension.hint_pressed_alpha_material_dark = global::XamarinDataChannelTest.Droid.Resource.Dimension.hint_pressed_alpha_material_dark;
- global::Xamarin.Forms.Platform.Resource.Dimension.hint_pressed_alpha_material_light = global::XamarinDataChannelTest.Droid.Resource.Dimension.hint_pressed_alpha_material_light;
- global::Xamarin.Forms.Platform.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame = global::XamarinDataChannelTest.Droid.Resource.Dimension.item_touch_helper_max_drag_scroll_per_frame;
- global::Xamarin.Forms.Platform.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity = global::XamarinDataChannelTest.Droid.Resource.Dimension.item_touch_helper_swipe_escape_max_velocity;
- global::Xamarin.Forms.Platform.Resource.Dimension.item_touch_helper_swipe_escape_velocity = global::XamarinDataChannelTest.Droid.Resource.Dimension.item_touch_helper_swipe_escape_velocity;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_bottomappbar_fabOffsetEndMode;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_margin;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_rounded_corner_radius;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_bottomappbar_fab_cradle_vertical_offset;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_bottomappbar_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_bottomappbar_height;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_corner_radius;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_dialog_btn_min_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_dialog_btn_min_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_disabled_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_disabled_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_disabled_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_disabled_z;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_focused_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_focused_z;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_hovered_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_hovered_z;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_icon_btn_padding_left = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_icon_btn_padding_left;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_icon_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_icon_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_inset = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_inset;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_letter_spacing = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_letter_spacing;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_padding_bottom = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_padding_bottom;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_padding_left = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_padding_left;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_padding_right = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_padding_right;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_padding_top = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_padding_top;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_pressed_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_pressed_z;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_stroke_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_stroke_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_text_btn_icon_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_text_btn_icon_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_text_btn_padding_left = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_left;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_text_btn_padding_right = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_text_btn_padding_right;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_text_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_btn_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_btn_z;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_card_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_card_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_card_spacing = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_card_spacing;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_chip_pressed_translation_z = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_chip_pressed_translation_z;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_chip_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_chip_text_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_fab_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_fab_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_fab_translation_z_hovered_focused = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_fab_translation_z_hovered_focused;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_fab_translation_z_pressed = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_fab_translation_z_pressed;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_navigation_elevation = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_navigation_elevation;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_navigation_item_horizontal_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_navigation_item_horizontal_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_navigation_item_icon_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_navigation_item_icon_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_snackbar_background_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_snackbar_background_corner_radius;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_snackbar_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_snackbar_margin;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_bottom_offset = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_bottom_offset;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_corner_radius_medium = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_medium;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_corner_radius_small = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_corner_radius_small;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_label_cutout_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_label_cutout_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_padding_end = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_padding_end;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_stroke_width_default = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_default;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_box_stroke_width_focused = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_box_stroke_width_focused;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_textinput_outline_box_expanded_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.mtrl_toolbar_default_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.mtrl_toolbar_default_height;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_action_icon_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_action_icon_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_action_text_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_action_text_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_big_circle_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_big_circle_margin;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_content_margin_start = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_content_margin_start;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_large_icon_height = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_large_icon_height;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_large_icon_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_large_icon_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_main_column_padding_top = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_main_column_padding_top;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_media_narrow_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_media_narrow_margin;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_right_icon_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_right_icon_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_right_side_padding_top = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_right_side_padding_top;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_small_icon_background_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_small_icon_background_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_small_icon_size_as_large = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_small_icon_size_as_large;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_subtext_size = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_subtext_size;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_top_pad = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_top_pad;
- global::Xamarin.Forms.Platform.Resource.Dimension.notification_top_pad_large_text = global::XamarinDataChannelTest.Droid.Resource.Dimension.notification_top_pad_large_text;
- global::Xamarin.Forms.Platform.Resource.Dimension.subtitle_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.subtitle_corner_radius;
- global::Xamarin.Forms.Platform.Resource.Dimension.subtitle_outline_width = global::XamarinDataChannelTest.Droid.Resource.Dimension.subtitle_outline_width;
- global::Xamarin.Forms.Platform.Resource.Dimension.subtitle_shadow_offset = global::XamarinDataChannelTest.Droid.Resource.Dimension.subtitle_shadow_offset;
- global::Xamarin.Forms.Platform.Resource.Dimension.subtitle_shadow_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.subtitle_shadow_radius;
- global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_corner_radius = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_corner_radius;
- global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_horizontal_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_horizontal_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_margin = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_margin;
- global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_precise_anchor_extra_offset = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_precise_anchor_extra_offset;
- global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_precise_anchor_threshold = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_precise_anchor_threshold;
- global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_vertical_padding = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_vertical_padding;
- global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_y_offset_non_touch = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_y_offset_non_touch;
- global::Xamarin.Forms.Platform.Resource.Dimension.tooltip_y_offset_touch = global::XamarinDataChannelTest.Droid.Resource.Dimension.tooltip_y_offset_touch;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ab_share_pack_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ab_share_pack_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_action_bar_item_background_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_action_bar_item_background_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_borderless_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_borderless_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_check_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_check_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_check_to_on_mtrl_000 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_000;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_check_to_on_mtrl_015 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_check_to_on_mtrl_015;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_colored_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_colored_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_default_mtrl_shape = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_default_mtrl_shape;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_radio_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_radio_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_radio_to_on_mtrl_000 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_000;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_radio_to_on_mtrl_015 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_radio_to_on_mtrl_015;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00001;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_btn_switch_to_on_mtrl_00012;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_cab_background_internal_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_cab_background_internal_bg;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_cab_background_top_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_cab_background_top_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_cab_background_top_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_cab_background_top_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_control_background_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_control_background_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_dialog_material_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_dialog_material_background;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_edit_text_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_edit_text_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_ab_back_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_ab_back_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_arrow_drop_right_black_24dp;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_clear_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_clear_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_commit_search_api_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_go_search_api_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_go_search_api_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_copy_mtrl_am_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_cut_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_overflow_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_overflow_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_paste_mtrl_am_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_selectall_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_menu_share_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_menu_share_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_search_api_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_search_api_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_black_16dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_black_16dp;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_black_36dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_black_36dp;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_black_48dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_black_48dp;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_half_black_16dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_half_black_16dp;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_half_black_36dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_half_black_36dp;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_star_half_black_48dp = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_star_half_black_48dp;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ic_voice_search_api_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ic_voice_search_api_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_item_background_holo_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_item_background_holo_dark;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_item_background_holo_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_item_background_holo_light;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_divider_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_divider_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_divider_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_divider_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_focused_holo = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_focused_holo;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_longpressed_holo = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_longpressed_holo;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_pressed_holo_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_pressed_holo_dark;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_pressed_holo_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_pressed_holo_light;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_background_transition_holo_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_dark;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_background_transition_holo_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_background_transition_holo_light;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_disabled_holo_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_disabled_holo_dark;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_disabled_holo_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_disabled_holo_light;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_holo_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_holo_dark;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_list_selector_holo_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_list_selector_holo_light;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_menu_hardkey_panel_mtrl_mult;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_popup_background_mtrl_mult = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_popup_background_mtrl_mult;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ratingbar_indicator_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ratingbar_indicator_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ratingbar_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ratingbar_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_ratingbar_small_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_ratingbar_small_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_scrubber_control_off_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_000;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005 = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_scrubber_control_to_pressed_mtrl_005;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_scrubber_primary_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_scrubber_primary_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_scrubber_track_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_scrubber_track_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_seekbar_thumb_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_seekbar_thumb_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_seekbar_tick_mark_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_seekbar_tick_mark_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_seekbar_track_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_seekbar_track_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_spinner_mtrl_am_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_spinner_mtrl_am_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_spinner_textfield_background_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_spinner_textfield_background_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_switch_thumb_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_switch_thumb_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_switch_track_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_switch_track_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_tab_indicator_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_tab_indicator_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_tab_indicator_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_tab_indicator_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_textfield_activated_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_textfield_activated_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_textfield_default_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_textfield_default_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_textfield_search_activated_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_textfield_search_default_mtrl_alpha = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_textfield_search_default_mtrl_alpha;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_textfield_search_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_textfield_search_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_cursor_material = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_cursor_material;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_left_mtrl_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_dark;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_left_mtrl_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_left_mtrl_light;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_dark;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_middle_mtrl_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_middle_mtrl_light;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_right_mtrl_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_dark;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_text_select_handle_right_mtrl_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_text_select_handle_right_mtrl_light;
- global::Xamarin.Forms.Platform.Resource.Drawable.abc_vector_test = global::XamarinDataChannelTest.Droid.Resource.Drawable.abc_vector_test;
- global::Xamarin.Forms.Platform.Resource.Drawable.avd_hide_password = global::XamarinDataChannelTest.Droid.Resource.Drawable.avd_hide_password;
- global::Xamarin.Forms.Platform.Resource.Drawable.avd_show_password = global::XamarinDataChannelTest.Droid.Resource.Drawable.avd_show_password;
- global::Xamarin.Forms.Platform.Resource.Drawable.design_bottom_navigation_item_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_bottom_navigation_item_background;
- global::Xamarin.Forms.Platform.Resource.Drawable.design_fab_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_fab_background;
- global::Xamarin.Forms.Platform.Resource.Drawable.design_ic_visibility = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_ic_visibility;
- global::Xamarin.Forms.Platform.Resource.Drawable.design_ic_visibility_off = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_ic_visibility_off;
- global::Xamarin.Forms.Platform.Resource.Drawable.design_password_eye = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_password_eye;
- global::Xamarin.Forms.Platform.Resource.Drawable.design_snackbar_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.design_snackbar_background;
- global::Xamarin.Forms.Platform.Resource.Drawable.ic_mtrl_chip_checked_black = global::XamarinDataChannelTest.Droid.Resource.Drawable.ic_mtrl_chip_checked_black;
- global::Xamarin.Forms.Platform.Resource.Drawable.ic_mtrl_chip_checked_circle = global::XamarinDataChannelTest.Droid.Resource.Drawable.ic_mtrl_chip_checked_circle;
- global::Xamarin.Forms.Platform.Resource.Drawable.ic_mtrl_chip_close_circle = global::XamarinDataChannelTest.Droid.Resource.Drawable.ic_mtrl_chip_close_circle;
- global::Xamarin.Forms.Platform.Resource.Drawable.mtrl_snackbar_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.mtrl_snackbar_background;
- global::Xamarin.Forms.Platform.Resource.Drawable.mtrl_tabs_default_indicator = global::XamarinDataChannelTest.Droid.Resource.Drawable.mtrl_tabs_default_indicator;
- global::Xamarin.Forms.Platform.Resource.Drawable.navigation_empty_icon = global::XamarinDataChannelTest.Droid.Resource.Drawable.navigation_empty_icon;
- global::Xamarin.Forms.Platform.Resource.Drawable.notification_action_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_action_background;
- global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg;
- global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg_low = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_low;
- global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg_low_normal = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_low_normal;
- global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg_low_pressed = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_low_pressed;
- global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg_normal = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_normal;
- global::Xamarin.Forms.Platform.Resource.Drawable.notification_bg_normal_pressed = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_bg_normal_pressed;
- global::Xamarin.Forms.Platform.Resource.Drawable.notification_icon_background = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_icon_background;
- global::Xamarin.Forms.Platform.Resource.Drawable.notification_template_icon_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_template_icon_bg;
- global::Xamarin.Forms.Platform.Resource.Drawable.notification_template_icon_low_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_template_icon_low_bg;
- global::Xamarin.Forms.Platform.Resource.Drawable.notification_tile_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notification_tile_bg;
- global::Xamarin.Forms.Platform.Resource.Drawable.notify_panel_notification_icon_bg = global::XamarinDataChannelTest.Droid.Resource.Drawable.notify_panel_notification_icon_bg;
- global::Xamarin.Forms.Platform.Resource.Drawable.tooltip_frame_dark = global::XamarinDataChannelTest.Droid.Resource.Drawable.tooltip_frame_dark;
- global::Xamarin.Forms.Platform.Resource.Drawable.tooltip_frame_light = global::XamarinDataChannelTest.Droid.Resource.Drawable.tooltip_frame_light;
- global::Xamarin.Forms.Platform.Resource.Id.action0 = global::XamarinDataChannelTest.Droid.Resource.Id.action0;
- global::Xamarin.Forms.Platform.Resource.Id.actions = global::XamarinDataChannelTest.Droid.Resource.Id.actions;
- global::Xamarin.Forms.Platform.Resource.Id.action_bar = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar;
- global::Xamarin.Forms.Platform.Resource.Id.action_bar_activity_content = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_activity_content;
- global::Xamarin.Forms.Platform.Resource.Id.action_bar_container = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_container;
- global::Xamarin.Forms.Platform.Resource.Id.action_bar_root = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_root;
- global::Xamarin.Forms.Platform.Resource.Id.action_bar_spinner = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_spinner;
- global::Xamarin.Forms.Platform.Resource.Id.action_bar_subtitle = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_subtitle;
- global::Xamarin.Forms.Platform.Resource.Id.action_bar_title = global::XamarinDataChannelTest.Droid.Resource.Id.action_bar_title;
- global::Xamarin.Forms.Platform.Resource.Id.action_container = global::XamarinDataChannelTest.Droid.Resource.Id.action_container;
- global::Xamarin.Forms.Platform.Resource.Id.action_context_bar = global::XamarinDataChannelTest.Droid.Resource.Id.action_context_bar;
- global::Xamarin.Forms.Platform.Resource.Id.action_divider = global::XamarinDataChannelTest.Droid.Resource.Id.action_divider;
- global::Xamarin.Forms.Platform.Resource.Id.action_image = global::XamarinDataChannelTest.Droid.Resource.Id.action_image;
- global::Xamarin.Forms.Platform.Resource.Id.action_menu_divider = global::XamarinDataChannelTest.Droid.Resource.Id.action_menu_divider;
- global::Xamarin.Forms.Platform.Resource.Id.action_menu_presenter = global::XamarinDataChannelTest.Droid.Resource.Id.action_menu_presenter;
- global::Xamarin.Forms.Platform.Resource.Id.action_mode_bar = global::XamarinDataChannelTest.Droid.Resource.Id.action_mode_bar;
- global::Xamarin.Forms.Platform.Resource.Id.action_mode_bar_stub = global::XamarinDataChannelTest.Droid.Resource.Id.action_mode_bar_stub;
- global::Xamarin.Forms.Platform.Resource.Id.action_mode_close_button = global::XamarinDataChannelTest.Droid.Resource.Id.action_mode_close_button;
- global::Xamarin.Forms.Platform.Resource.Id.action_text = global::XamarinDataChannelTest.Droid.Resource.Id.action_text;
- global::Xamarin.Forms.Platform.Resource.Id.activity_chooser_view_content = global::XamarinDataChannelTest.Droid.Resource.Id.activity_chooser_view_content;
- global::Xamarin.Forms.Platform.Resource.Id.add = global::XamarinDataChannelTest.Droid.Resource.Id.add;
- global::Xamarin.Forms.Platform.Resource.Id.alertTitle = global::XamarinDataChannelTest.Droid.Resource.Id.alertTitle;
- global::Xamarin.Forms.Platform.Resource.Id.all = global::XamarinDataChannelTest.Droid.Resource.Id.all;
- global::Xamarin.Forms.Platform.Resource.Id.ALT = global::XamarinDataChannelTest.Droid.Resource.Id.ALT;
- global::Xamarin.Forms.Platform.Resource.Id.always = global::XamarinDataChannelTest.Droid.Resource.Id.always;
- global::Xamarin.Forms.Platform.Resource.Id.async = global::XamarinDataChannelTest.Droid.Resource.Id.async;
- global::Xamarin.Forms.Platform.Resource.Id.auto = global::XamarinDataChannelTest.Droid.Resource.Id.auto;
- global::Xamarin.Forms.Platform.Resource.Id.beginning = global::XamarinDataChannelTest.Droid.Resource.Id.beginning;
- global::Xamarin.Forms.Platform.Resource.Id.blocking = global::XamarinDataChannelTest.Droid.Resource.Id.blocking;
- global::Xamarin.Forms.Platform.Resource.Id.bottom = global::XamarinDataChannelTest.Droid.Resource.Id.bottom;
- global::Xamarin.Forms.Platform.Resource.Id.bottomtab_navarea = global::XamarinDataChannelTest.Droid.Resource.Id.bottomtab_navarea;
- global::Xamarin.Forms.Platform.Resource.Id.bottomtab_tabbar = global::XamarinDataChannelTest.Droid.Resource.Id.bottomtab_tabbar;
- global::Xamarin.Forms.Platform.Resource.Id.buttonPanel = global::XamarinDataChannelTest.Droid.Resource.Id.buttonPanel;
- global::Xamarin.Forms.Platform.Resource.Id.cancel_action = global::XamarinDataChannelTest.Droid.Resource.Id.cancel_action;
- global::Xamarin.Forms.Platform.Resource.Id.center = global::XamarinDataChannelTest.Droid.Resource.Id.center;
- global::Xamarin.Forms.Platform.Resource.Id.center_horizontal = global::XamarinDataChannelTest.Droid.Resource.Id.center_horizontal;
- global::Xamarin.Forms.Platform.Resource.Id.center_vertical = global::XamarinDataChannelTest.Droid.Resource.Id.center_vertical;
- global::Xamarin.Forms.Platform.Resource.Id.checkbox = global::XamarinDataChannelTest.Droid.Resource.Id.checkbox;
- global::Xamarin.Forms.Platform.Resource.Id.chronometer = global::XamarinDataChannelTest.Droid.Resource.Id.chronometer;
- global::Xamarin.Forms.Platform.Resource.Id.clip_horizontal = global::XamarinDataChannelTest.Droid.Resource.Id.clip_horizontal;
- global::Xamarin.Forms.Platform.Resource.Id.clip_vertical = global::XamarinDataChannelTest.Droid.Resource.Id.clip_vertical;
- global::Xamarin.Forms.Platform.Resource.Id.collapseActionView = global::XamarinDataChannelTest.Droid.Resource.Id.collapseActionView;
- global::Xamarin.Forms.Platform.Resource.Id.container = global::XamarinDataChannelTest.Droid.Resource.Id.container;
- global::Xamarin.Forms.Platform.Resource.Id.content = global::XamarinDataChannelTest.Droid.Resource.Id.content;
- global::Xamarin.Forms.Platform.Resource.Id.contentPanel = global::XamarinDataChannelTest.Droid.Resource.Id.contentPanel;
- global::Xamarin.Forms.Platform.Resource.Id.coordinator = global::XamarinDataChannelTest.Droid.Resource.Id.coordinator;
- global::Xamarin.Forms.Platform.Resource.Id.CTRL = global::XamarinDataChannelTest.Droid.Resource.Id.CTRL;
- global::Xamarin.Forms.Platform.Resource.Id.custom = global::XamarinDataChannelTest.Droid.Resource.Id.custom;
- global::Xamarin.Forms.Platform.Resource.Id.customPanel = global::XamarinDataChannelTest.Droid.Resource.Id.customPanel;
- global::Xamarin.Forms.Platform.Resource.Id.decor_content_parent = global::XamarinDataChannelTest.Droid.Resource.Id.decor_content_parent;
- global::Xamarin.Forms.Platform.Resource.Id.default_activity_button = global::XamarinDataChannelTest.Droid.Resource.Id.default_activity_button;
- global::Xamarin.Forms.Platform.Resource.Id.design_bottom_sheet = global::XamarinDataChannelTest.Droid.Resource.Id.design_bottom_sheet;
- global::Xamarin.Forms.Platform.Resource.Id.design_menu_item_action_area = global::XamarinDataChannelTest.Droid.Resource.Id.design_menu_item_action_area;
- global::Xamarin.Forms.Platform.Resource.Id.design_menu_item_action_area_stub = global::XamarinDataChannelTest.Droid.Resource.Id.design_menu_item_action_area_stub;
- global::Xamarin.Forms.Platform.Resource.Id.design_menu_item_text = global::XamarinDataChannelTest.Droid.Resource.Id.design_menu_item_text;
- global::Xamarin.Forms.Platform.Resource.Id.design_navigation_view = global::XamarinDataChannelTest.Droid.Resource.Id.design_navigation_view;
- global::Xamarin.Forms.Platform.Resource.Id.disableHome = global::XamarinDataChannelTest.Droid.Resource.Id.disableHome;
- global::Xamarin.Forms.Platform.Resource.Id.edit_query = global::XamarinDataChannelTest.Droid.Resource.Id.edit_query;
- global::Xamarin.Forms.Platform.Resource.Id.end = global::XamarinDataChannelTest.Droid.Resource.Id.end;
- global::Xamarin.Forms.Platform.Resource.Id.end_padder = global::XamarinDataChannelTest.Droid.Resource.Id.end_padder;
- global::Xamarin.Forms.Platform.Resource.Id.enterAlways = global::XamarinDataChannelTest.Droid.Resource.Id.enterAlways;
- global::Xamarin.Forms.Platform.Resource.Id.enterAlwaysCollapsed = global::XamarinDataChannelTest.Droid.Resource.Id.enterAlwaysCollapsed;
- global::Xamarin.Forms.Platform.Resource.Id.exitUntilCollapsed = global::XamarinDataChannelTest.Droid.Resource.Id.exitUntilCollapsed;
- global::Xamarin.Forms.Platform.Resource.Id.expanded_menu = global::XamarinDataChannelTest.Droid.Resource.Id.expanded_menu;
- global::Xamarin.Forms.Platform.Resource.Id.expand_activities_button = global::XamarinDataChannelTest.Droid.Resource.Id.expand_activities_button;
- global::Xamarin.Forms.Platform.Resource.Id.fill = global::XamarinDataChannelTest.Droid.Resource.Id.fill;
- global::Xamarin.Forms.Platform.Resource.Id.filled = global::XamarinDataChannelTest.Droid.Resource.Id.filled;
- global::Xamarin.Forms.Platform.Resource.Id.fill_horizontal = global::XamarinDataChannelTest.Droid.Resource.Id.fill_horizontal;
- global::Xamarin.Forms.Platform.Resource.Id.fill_vertical = global::XamarinDataChannelTest.Droid.Resource.Id.fill_vertical;
- global::Xamarin.Forms.Platform.Resource.Id.@fixed = global::XamarinDataChannelTest.Droid.Resource.Id.@fixed;
- global::Xamarin.Forms.Platform.Resource.Id.flyoutcontent_appbar = global::XamarinDataChannelTest.Droid.Resource.Id.flyoutcontent_appbar;
- global::Xamarin.Forms.Platform.Resource.Id.flyoutcontent_recycler = global::XamarinDataChannelTest.Droid.Resource.Id.flyoutcontent_recycler;
- global::Xamarin.Forms.Platform.Resource.Id.forever = global::XamarinDataChannelTest.Droid.Resource.Id.forever;
- global::Xamarin.Forms.Platform.Resource.Id.FUNCTION = global::XamarinDataChannelTest.Droid.Resource.Id.FUNCTION;
- global::Xamarin.Forms.Platform.Resource.Id.ghost_view = global::XamarinDataChannelTest.Droid.Resource.Id.ghost_view;
- global::Xamarin.Forms.Platform.Resource.Id.group_divider = global::XamarinDataChannelTest.Droid.Resource.Id.group_divider;
- global::Xamarin.Forms.Platform.Resource.Id.home = global::XamarinDataChannelTest.Droid.Resource.Id.home;
- global::Xamarin.Forms.Platform.Resource.Id.homeAsUp = global::XamarinDataChannelTest.Droid.Resource.Id.homeAsUp;
- global::Xamarin.Forms.Platform.Resource.Id.icon = global::XamarinDataChannelTest.Droid.Resource.Id.icon;
- global::Xamarin.Forms.Platform.Resource.Id.icon_group = global::XamarinDataChannelTest.Droid.Resource.Id.icon_group;
- global::Xamarin.Forms.Platform.Resource.Id.ifRoom = global::XamarinDataChannelTest.Droid.Resource.Id.ifRoom;
- global::Xamarin.Forms.Platform.Resource.Id.image = global::XamarinDataChannelTest.Droid.Resource.Id.image;
- global::Xamarin.Forms.Platform.Resource.Id.info = global::XamarinDataChannelTest.Droid.Resource.Id.info;
- global::Xamarin.Forms.Platform.Resource.Id.italic = global::XamarinDataChannelTest.Droid.Resource.Id.italic;
- global::Xamarin.Forms.Platform.Resource.Id.item_touch_helper_previous_elevation = global::XamarinDataChannelTest.Droid.Resource.Id.item_touch_helper_previous_elevation;
- global::Xamarin.Forms.Platform.Resource.Id.labeled = global::XamarinDataChannelTest.Droid.Resource.Id.labeled;
- global::Xamarin.Forms.Platform.Resource.Id.largeLabel = global::XamarinDataChannelTest.Droid.Resource.Id.largeLabel;
- global::Xamarin.Forms.Platform.Resource.Id.left = global::XamarinDataChannelTest.Droid.Resource.Id.left;
- global::Xamarin.Forms.Platform.Resource.Id.line1 = global::XamarinDataChannelTest.Droid.Resource.Id.line1;
- global::Xamarin.Forms.Platform.Resource.Id.line3 = global::XamarinDataChannelTest.Droid.Resource.Id.line3;
- global::Xamarin.Forms.Platform.Resource.Id.listMode = global::XamarinDataChannelTest.Droid.Resource.Id.listMode;
- global::Xamarin.Forms.Platform.Resource.Id.list_item = global::XamarinDataChannelTest.Droid.Resource.Id.list_item;
- global::Xamarin.Forms.Platform.Resource.Id.main_appbar = global::XamarinDataChannelTest.Droid.Resource.Id.main_appbar;
- global::Xamarin.Forms.Platform.Resource.Id.main_tablayout = global::XamarinDataChannelTest.Droid.Resource.Id.main_tablayout;
- global::Xamarin.Forms.Platform.Resource.Id.main_toolbar = global::XamarinDataChannelTest.Droid.Resource.Id.main_toolbar;
- global::Xamarin.Forms.Platform.Resource.Id.main_viewpager = global::XamarinDataChannelTest.Droid.Resource.Id.main_viewpager;
- global::Xamarin.Forms.Platform.Resource.Id.masked = global::XamarinDataChannelTest.Droid.Resource.Id.masked;
- global::Xamarin.Forms.Platform.Resource.Id.media_actions = global::XamarinDataChannelTest.Droid.Resource.Id.media_actions;
- global::Xamarin.Forms.Platform.Resource.Id.message = global::XamarinDataChannelTest.Droid.Resource.Id.message;
- global::Xamarin.Forms.Platform.Resource.Id.META = global::XamarinDataChannelTest.Droid.Resource.Id.META;
- global::Xamarin.Forms.Platform.Resource.Id.middle = global::XamarinDataChannelTest.Droid.Resource.Id.middle;
- global::Xamarin.Forms.Platform.Resource.Id.mini = global::XamarinDataChannelTest.Droid.Resource.Id.mini;
- global::Xamarin.Forms.Platform.Resource.Id.mtrl_child_content_container = global::XamarinDataChannelTest.Droid.Resource.Id.mtrl_child_content_container;
- global::Xamarin.Forms.Platform.Resource.Id.mtrl_internal_children_alpha_tag = global::XamarinDataChannelTest.Droid.Resource.Id.mtrl_internal_children_alpha_tag;
- global::Xamarin.Forms.Platform.Resource.Id.multiply = global::XamarinDataChannelTest.Droid.Resource.Id.multiply;
- global::Xamarin.Forms.Platform.Resource.Id.navigation_header_container = global::XamarinDataChannelTest.Droid.Resource.Id.navigation_header_container;
- global::Xamarin.Forms.Platform.Resource.Id.never = global::XamarinDataChannelTest.Droid.Resource.Id.never;
- global::Xamarin.Forms.Platform.Resource.Id.none = global::XamarinDataChannelTest.Droid.Resource.Id.none;
- global::Xamarin.Forms.Platform.Resource.Id.normal = global::XamarinDataChannelTest.Droid.Resource.Id.normal;
- global::Xamarin.Forms.Platform.Resource.Id.notification_background = global::XamarinDataChannelTest.Droid.Resource.Id.notification_background;
- global::Xamarin.Forms.Platform.Resource.Id.notification_main_column = global::XamarinDataChannelTest.Droid.Resource.Id.notification_main_column;
- global::Xamarin.Forms.Platform.Resource.Id.notification_main_column_container = global::XamarinDataChannelTest.Droid.Resource.Id.notification_main_column_container;
- global::Xamarin.Forms.Platform.Resource.Id.outline = global::XamarinDataChannelTest.Droid.Resource.Id.outline;
- global::Xamarin.Forms.Platform.Resource.Id.parallax = global::XamarinDataChannelTest.Droid.Resource.Id.parallax;
- global::Xamarin.Forms.Platform.Resource.Id.parentPanel = global::XamarinDataChannelTest.Droid.Resource.Id.parentPanel;
- global::Xamarin.Forms.Platform.Resource.Id.parent_matrix = global::XamarinDataChannelTest.Droid.Resource.Id.parent_matrix;
- global::Xamarin.Forms.Platform.Resource.Id.pin = global::XamarinDataChannelTest.Droid.Resource.Id.pin;
- global::Xamarin.Forms.Platform.Resource.Id.progress_circular = global::XamarinDataChannelTest.Droid.Resource.Id.progress_circular;
- global::Xamarin.Forms.Platform.Resource.Id.progress_horizontal = global::XamarinDataChannelTest.Droid.Resource.Id.progress_horizontal;
- global::Xamarin.Forms.Platform.Resource.Id.radio = global::XamarinDataChannelTest.Droid.Resource.Id.radio;
- global::Xamarin.Forms.Platform.Resource.Id.right = global::XamarinDataChannelTest.Droid.Resource.Id.right;
- global::Xamarin.Forms.Platform.Resource.Id.right_icon = global::XamarinDataChannelTest.Droid.Resource.Id.right_icon;
- global::Xamarin.Forms.Platform.Resource.Id.right_side = global::XamarinDataChannelTest.Droid.Resource.Id.right_side;
- global::Xamarin.Forms.Platform.Resource.Id.save_image_matrix = global::XamarinDataChannelTest.Droid.Resource.Id.save_image_matrix;
- global::Xamarin.Forms.Platform.Resource.Id.save_non_transition_alpha = global::XamarinDataChannelTest.Droid.Resource.Id.save_non_transition_alpha;
- global::Xamarin.Forms.Platform.Resource.Id.save_scale_type = global::XamarinDataChannelTest.Droid.Resource.Id.save_scale_type;
- global::Xamarin.Forms.Platform.Resource.Id.screen = global::XamarinDataChannelTest.Droid.Resource.Id.screen;
- global::Xamarin.Forms.Platform.Resource.Id.scroll = global::XamarinDataChannelTest.Droid.Resource.Id.scroll;
- global::Xamarin.Forms.Platform.Resource.Id.scrollable = global::XamarinDataChannelTest.Droid.Resource.Id.scrollable;
- global::Xamarin.Forms.Platform.Resource.Id.scrollIndicatorDown = global::XamarinDataChannelTest.Droid.Resource.Id.scrollIndicatorDown;
- global::Xamarin.Forms.Platform.Resource.Id.scrollIndicatorUp = global::XamarinDataChannelTest.Droid.Resource.Id.scrollIndicatorUp;
- global::Xamarin.Forms.Platform.Resource.Id.scrollView = global::XamarinDataChannelTest.Droid.Resource.Id.scrollView;
- global::Xamarin.Forms.Platform.Resource.Id.search_badge = global::XamarinDataChannelTest.Droid.Resource.Id.search_badge;
- global::Xamarin.Forms.Platform.Resource.Id.search_bar = global::XamarinDataChannelTest.Droid.Resource.Id.search_bar;
- global::Xamarin.Forms.Platform.Resource.Id.search_button = global::XamarinDataChannelTest.Droid.Resource.Id.search_button;
- global::Xamarin.Forms.Platform.Resource.Id.search_close_btn = global::XamarinDataChannelTest.Droid.Resource.Id.search_close_btn;
- global::Xamarin.Forms.Platform.Resource.Id.search_edit_frame = global::XamarinDataChannelTest.Droid.Resource.Id.search_edit_frame;
- global::Xamarin.Forms.Platform.Resource.Id.search_go_btn = global::XamarinDataChannelTest.Droid.Resource.Id.search_go_btn;
- global::Xamarin.Forms.Platform.Resource.Id.search_mag_icon = global::XamarinDataChannelTest.Droid.Resource.Id.search_mag_icon;
- global::Xamarin.Forms.Platform.Resource.Id.search_plate = global::XamarinDataChannelTest.Droid.Resource.Id.search_plate;
- global::Xamarin.Forms.Platform.Resource.Id.search_src_text = global::XamarinDataChannelTest.Droid.Resource.Id.search_src_text;
- global::Xamarin.Forms.Platform.Resource.Id.search_voice_btn = global::XamarinDataChannelTest.Droid.Resource.Id.search_voice_btn;
- global::Xamarin.Forms.Platform.Resource.Id.selected = global::XamarinDataChannelTest.Droid.Resource.Id.selected;
- global::Xamarin.Forms.Platform.Resource.Id.select_dialog_listview = global::XamarinDataChannelTest.Droid.Resource.Id.select_dialog_listview;
- global::Xamarin.Forms.Platform.Resource.Id.shellcontent_appbar = global::XamarinDataChannelTest.Droid.Resource.Id.shellcontent_appbar;
- global::Xamarin.Forms.Platform.Resource.Id.shellcontent_toolbar = global::XamarinDataChannelTest.Droid.Resource.Id.shellcontent_toolbar;
- global::Xamarin.Forms.Platform.Resource.Id.SHIFT = global::XamarinDataChannelTest.Droid.Resource.Id.SHIFT;
- global::Xamarin.Forms.Platform.Resource.Id.shortcut = global::XamarinDataChannelTest.Droid.Resource.Id.shortcut;
- global::Xamarin.Forms.Platform.Resource.Id.showCustom = global::XamarinDataChannelTest.Droid.Resource.Id.showCustom;
- global::Xamarin.Forms.Platform.Resource.Id.showHome = global::XamarinDataChannelTest.Droid.Resource.Id.showHome;
- global::Xamarin.Forms.Platform.Resource.Id.showTitle = global::XamarinDataChannelTest.Droid.Resource.Id.showTitle;
- global::Xamarin.Forms.Platform.Resource.Id.smallLabel = global::XamarinDataChannelTest.Droid.Resource.Id.smallLabel;
- global::Xamarin.Forms.Platform.Resource.Id.snackbar_action = global::XamarinDataChannelTest.Droid.Resource.Id.snackbar_action;
- global::Xamarin.Forms.Platform.Resource.Id.snackbar_text = global::XamarinDataChannelTest.Droid.Resource.Id.snackbar_text;
- global::Xamarin.Forms.Platform.Resource.Id.snap = global::XamarinDataChannelTest.Droid.Resource.Id.snap;
- global::Xamarin.Forms.Platform.Resource.Id.snapMargins = global::XamarinDataChannelTest.Droid.Resource.Id.snapMargins;
- global::Xamarin.Forms.Platform.Resource.Id.spacer = global::XamarinDataChannelTest.Droid.Resource.Id.spacer;
- global::Xamarin.Forms.Platform.Resource.Id.split_action_bar = global::XamarinDataChannelTest.Droid.Resource.Id.split_action_bar;
- global::Xamarin.Forms.Platform.Resource.Id.src_atop = global::XamarinDataChannelTest.Droid.Resource.Id.src_atop;
- global::Xamarin.Forms.Platform.Resource.Id.src_in = global::XamarinDataChannelTest.Droid.Resource.Id.src_in;
- global::Xamarin.Forms.Platform.Resource.Id.src_over = global::XamarinDataChannelTest.Droid.Resource.Id.src_over;
- global::Xamarin.Forms.Platform.Resource.Id.start = global::XamarinDataChannelTest.Droid.Resource.Id.start;
- global::Xamarin.Forms.Platform.Resource.Id.status_bar_latest_event_content = global::XamarinDataChannelTest.Droid.Resource.Id.status_bar_latest_event_content;
- global::Xamarin.Forms.Platform.Resource.Id.stretch = global::XamarinDataChannelTest.Droid.Resource.Id.stretch;
- global::Xamarin.Forms.Platform.Resource.Id.submenuarrow = global::XamarinDataChannelTest.Droid.Resource.Id.submenuarrow;
- global::Xamarin.Forms.Platform.Resource.Id.submit_area = global::XamarinDataChannelTest.Droid.Resource.Id.submit_area;
- global::Xamarin.Forms.Platform.Resource.Id.SYM = global::XamarinDataChannelTest.Droid.Resource.Id.SYM;
- global::Xamarin.Forms.Platform.Resource.Id.tabMode = global::XamarinDataChannelTest.Droid.Resource.Id.tabMode;
- global::Xamarin.Forms.Platform.Resource.Id.tag_transition_group = global::XamarinDataChannelTest.Droid.Resource.Id.tag_transition_group;
- global::Xamarin.Forms.Platform.Resource.Id.tag_unhandled_key_event_manager = global::XamarinDataChannelTest.Droid.Resource.Id.tag_unhandled_key_event_manager;
- global::Xamarin.Forms.Platform.Resource.Id.tag_unhandled_key_listeners = global::XamarinDataChannelTest.Droid.Resource.Id.tag_unhandled_key_listeners;
- global::Xamarin.Forms.Platform.Resource.Id.text = global::XamarinDataChannelTest.Droid.Resource.Id.text;
- global::Xamarin.Forms.Platform.Resource.Id.text2 = global::XamarinDataChannelTest.Droid.Resource.Id.text2;
- global::Xamarin.Forms.Platform.Resource.Id.textinput_counter = global::XamarinDataChannelTest.Droid.Resource.Id.textinput_counter;
- global::Xamarin.Forms.Platform.Resource.Id.textinput_error = global::XamarinDataChannelTest.Droid.Resource.Id.textinput_error;
- global::Xamarin.Forms.Platform.Resource.Id.textinput_helper_text = global::XamarinDataChannelTest.Droid.Resource.Id.textinput_helper_text;
- global::Xamarin.Forms.Platform.Resource.Id.textSpacerNoButtons = global::XamarinDataChannelTest.Droid.Resource.Id.textSpacerNoButtons;
- global::Xamarin.Forms.Platform.Resource.Id.textSpacerNoTitle = global::XamarinDataChannelTest.Droid.Resource.Id.textSpacerNoTitle;
- global::Xamarin.Forms.Platform.Resource.Id.textStart = global::XamarinDataChannelTest.Droid.Resource.Id.textStart;
- global::Xamarin.Forms.Platform.Resource.Id.text_input_password_toggle = global::XamarinDataChannelTest.Droid.Resource.Id.text_input_password_toggle;
- global::Xamarin.Forms.Platform.Resource.Id.time = global::XamarinDataChannelTest.Droid.Resource.Id.time;
- global::Xamarin.Forms.Platform.Resource.Id.title = global::XamarinDataChannelTest.Droid.Resource.Id.title;
- global::Xamarin.Forms.Platform.Resource.Id.titleDividerNoCustom = global::XamarinDataChannelTest.Droid.Resource.Id.titleDividerNoCustom;
- global::Xamarin.Forms.Platform.Resource.Id.title_template = global::XamarinDataChannelTest.Droid.Resource.Id.title_template;
- global::Xamarin.Forms.Platform.Resource.Id.top = global::XamarinDataChannelTest.Droid.Resource.Id.top;
- global::Xamarin.Forms.Platform.Resource.Id.topPanel = global::XamarinDataChannelTest.Droid.Resource.Id.topPanel;
- global::Xamarin.Forms.Platform.Resource.Id.touch_outside = global::XamarinDataChannelTest.Droid.Resource.Id.touch_outside;
- global::Xamarin.Forms.Platform.Resource.Id.transition_current_scene = global::XamarinDataChannelTest.Droid.Resource.Id.transition_current_scene;
- global::Xamarin.Forms.Platform.Resource.Id.transition_layout_save = global::XamarinDataChannelTest.Droid.Resource.Id.transition_layout_save;
- global::Xamarin.Forms.Platform.Resource.Id.transition_position = global::XamarinDataChannelTest.Droid.Resource.Id.transition_position;
- global::Xamarin.Forms.Platform.Resource.Id.transition_scene_layoutid_cache = global::XamarinDataChannelTest.Droid.Resource.Id.transition_scene_layoutid_cache;
- global::Xamarin.Forms.Platform.Resource.Id.transition_transform = global::XamarinDataChannelTest.Droid.Resource.Id.transition_transform;
- global::Xamarin.Forms.Platform.Resource.Id.uniform = global::XamarinDataChannelTest.Droid.Resource.Id.uniform;
- global::Xamarin.Forms.Platform.Resource.Id.unlabeled = global::XamarinDataChannelTest.Droid.Resource.Id.unlabeled;
- global::Xamarin.Forms.Platform.Resource.Id.up = global::XamarinDataChannelTest.Droid.Resource.Id.up;
- global::Xamarin.Forms.Platform.Resource.Id.useLogo = global::XamarinDataChannelTest.Droid.Resource.Id.useLogo;
- global::Xamarin.Forms.Platform.Resource.Id.view_offset_helper = global::XamarinDataChannelTest.Droid.Resource.Id.view_offset_helper;
- global::Xamarin.Forms.Platform.Resource.Id.visible = global::XamarinDataChannelTest.Droid.Resource.Id.visible;
- global::Xamarin.Forms.Platform.Resource.Id.withText = global::XamarinDataChannelTest.Droid.Resource.Id.withText;
- global::Xamarin.Forms.Platform.Resource.Id.wrap_content = global::XamarinDataChannelTest.Droid.Resource.Id.wrap_content;
- global::Xamarin.Forms.Platform.Resource.Integer.abc_config_activityDefaultDur = global::XamarinDataChannelTest.Droid.Resource.Integer.abc_config_activityDefaultDur;
- global::Xamarin.Forms.Platform.Resource.Integer.abc_config_activityShortDur = global::XamarinDataChannelTest.Droid.Resource.Integer.abc_config_activityShortDur;
- global::Xamarin.Forms.Platform.Resource.Integer.app_bar_elevation_anim_duration = global::XamarinDataChannelTest.Droid.Resource.Integer.app_bar_elevation_anim_duration;
- global::Xamarin.Forms.Platform.Resource.Integer.bottom_sheet_slide_duration = global::XamarinDataChannelTest.Droid.Resource.Integer.bottom_sheet_slide_duration;
- global::Xamarin.Forms.Platform.Resource.Integer.cancel_button_image_alpha = global::XamarinDataChannelTest.Droid.Resource.Integer.cancel_button_image_alpha;
- global::Xamarin.Forms.Platform.Resource.Integer.config_tooltipAnimTime = global::XamarinDataChannelTest.Droid.Resource.Integer.config_tooltipAnimTime;
- global::Xamarin.Forms.Platform.Resource.Integer.design_snackbar_text_max_lines = global::XamarinDataChannelTest.Droid.Resource.Integer.design_snackbar_text_max_lines;
- global::Xamarin.Forms.Platform.Resource.Integer.design_tab_indicator_anim_duration_ms = global::XamarinDataChannelTest.Droid.Resource.Integer.design_tab_indicator_anim_duration_ms;
- global::Xamarin.Forms.Platform.Resource.Integer.hide_password_duration = global::XamarinDataChannelTest.Droid.Resource.Integer.hide_password_duration;
- global::Xamarin.Forms.Platform.Resource.Integer.mtrl_btn_anim_delay_ms = global::XamarinDataChannelTest.Droid.Resource.Integer.mtrl_btn_anim_delay_ms;
- global::Xamarin.Forms.Platform.Resource.Integer.mtrl_btn_anim_duration_ms = global::XamarinDataChannelTest.Droid.Resource.Integer.mtrl_btn_anim_duration_ms;
- global::Xamarin.Forms.Platform.Resource.Integer.mtrl_chip_anim_duration = global::XamarinDataChannelTest.Droid.Resource.Integer.mtrl_chip_anim_duration;
- global::Xamarin.Forms.Platform.Resource.Integer.mtrl_tab_indicator_anim_duration_ms = global::XamarinDataChannelTest.Droid.Resource.Integer.mtrl_tab_indicator_anim_duration_ms;
- global::Xamarin.Forms.Platform.Resource.Integer.show_password_duration = global::XamarinDataChannelTest.Droid.Resource.Integer.show_password_duration;
- global::Xamarin.Forms.Platform.Resource.Integer.status_bar_notification_info_maxnum = global::XamarinDataChannelTest.Droid.Resource.Integer.status_bar_notification_info_maxnum;
- global::Xamarin.Forms.Platform.Resource.Interpolator.mtrl_fast_out_linear_in = global::XamarinDataChannelTest.Droid.Resource.Interpolator.mtrl_fast_out_linear_in;
- global::Xamarin.Forms.Platform.Resource.Interpolator.mtrl_fast_out_slow_in = global::XamarinDataChannelTest.Droid.Resource.Interpolator.mtrl_fast_out_slow_in;
- global::Xamarin.Forms.Platform.Resource.Interpolator.mtrl_linear = global::XamarinDataChannelTest.Droid.Resource.Interpolator.mtrl_linear;
- global::Xamarin.Forms.Platform.Resource.Interpolator.mtrl_linear_out_slow_in = global::XamarinDataChannelTest.Droid.Resource.Interpolator.mtrl_linear_out_slow_in;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_action_bar_title_item = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_bar_title_item;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_action_bar_up_container = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_bar_up_container;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_action_menu_item_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_menu_item_layout;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_action_menu_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_menu_layout;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_action_mode_bar = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_mode_bar;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_action_mode_close_item_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_action_mode_close_item_material;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_activity_chooser_view = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_activity_chooser_view;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_activity_chooser_view_list_item = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_activity_chooser_view_list_item;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_alert_dialog_button_bar_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_alert_dialog_button_bar_material;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_alert_dialog_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_alert_dialog_material;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_alert_dialog_title_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_alert_dialog_title_material;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_cascading_menu_item_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_cascading_menu_item_layout;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_dialog_title_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_dialog_title_material;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_expanded_menu_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_expanded_menu_layout;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_list_menu_item_checkbox = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_list_menu_item_checkbox;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_list_menu_item_icon = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_list_menu_item_icon;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_list_menu_item_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_list_menu_item_layout;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_list_menu_item_radio = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_list_menu_item_radio;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_popup_menu_header_item_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_popup_menu_header_item_layout;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_popup_menu_item_layout = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_popup_menu_item_layout;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_screen_content_include = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_screen_content_include;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_screen_simple = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_screen_simple;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_screen_simple_overlay_action_mode = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_screen_simple_overlay_action_mode;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_screen_toolbar = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_screen_toolbar;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_search_dropdown_item_icons_2line = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_search_dropdown_item_icons_2line;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_search_view = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_search_view;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_select_dialog_material = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_select_dialog_material;
- global::Xamarin.Forms.Platform.Resource.Layout.abc_tooltip = global::XamarinDataChannelTest.Droid.Resource.Layout.abc_tooltip;
- global::Xamarin.Forms.Platform.Resource.Layout.BottomTabLayout = global::XamarinDataChannelTest.Droid.Resource.Layout.BottomTabLayout;
- global::Xamarin.Forms.Platform.Resource.Layout.design_bottom_navigation_item = global::XamarinDataChannelTest.Droid.Resource.Layout.design_bottom_navigation_item;
- global::Xamarin.Forms.Platform.Resource.Layout.design_bottom_sheet_dialog = global::XamarinDataChannelTest.Droid.Resource.Layout.design_bottom_sheet_dialog;
- global::Xamarin.Forms.Platform.Resource.Layout.design_layout_snackbar = global::XamarinDataChannelTest.Droid.Resource.Layout.design_layout_snackbar;
- global::Xamarin.Forms.Platform.Resource.Layout.design_layout_snackbar_include = global::XamarinDataChannelTest.Droid.Resource.Layout.design_layout_snackbar_include;
- global::Xamarin.Forms.Platform.Resource.Layout.design_layout_tab_icon = global::XamarinDataChannelTest.Droid.Resource.Layout.design_layout_tab_icon;
- global::Xamarin.Forms.Platform.Resource.Layout.design_layout_tab_text = global::XamarinDataChannelTest.Droid.Resource.Layout.design_layout_tab_text;
- global::Xamarin.Forms.Platform.Resource.Layout.design_menu_item_action_area = global::XamarinDataChannelTest.Droid.Resource.Layout.design_menu_item_action_area;
- global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_item = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_item;
- global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_item_header = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_item_header;
- global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_item_separator = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_item_separator;
- global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_item_subheader = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_item_subheader;
- global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_menu = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_menu;
- global::Xamarin.Forms.Platform.Resource.Layout.design_navigation_menu_item = global::XamarinDataChannelTest.Droid.Resource.Layout.design_navigation_menu_item;
- global::Xamarin.Forms.Platform.Resource.Layout.design_text_input_password_icon = global::XamarinDataChannelTest.Droid.Resource.Layout.design_text_input_password_icon;
- global::Xamarin.Forms.Platform.Resource.Layout.FlyoutContent = global::XamarinDataChannelTest.Droid.Resource.Layout.FlyoutContent;
- global::Xamarin.Forms.Platform.Resource.Layout.mtrl_layout_snackbar = global::XamarinDataChannelTest.Droid.Resource.Layout.mtrl_layout_snackbar;
- global::Xamarin.Forms.Platform.Resource.Layout.mtrl_layout_snackbar_include = global::XamarinDataChannelTest.Droid.Resource.Layout.mtrl_layout_snackbar_include;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_action = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_action;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_action_tombstone = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_action_tombstone;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_media_action = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_media_action;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_media_cancel_action = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_media_cancel_action;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_template_big_media = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_big_media;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_template_big_media_custom = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_big_media_custom;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_template_big_media_narrow = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_big_media_narrow;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_template_big_media_narrow_custom = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_big_media_narrow_custom;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_template_custom_big = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_custom_big;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_template_icon_group = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_icon_group;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_template_lines_media = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_lines_media;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_template_media = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_media;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_template_media_custom = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_media_custom;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_template_part_chronometer = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_part_chronometer;
- global::Xamarin.Forms.Platform.Resource.Layout.notification_template_part_time = global::XamarinDataChannelTest.Droid.Resource.Layout.notification_template_part_time;
- global::Xamarin.Forms.Platform.Resource.Layout.RootLayout = global::XamarinDataChannelTest.Droid.Resource.Layout.RootLayout;
- global::Xamarin.Forms.Platform.Resource.Layout.select_dialog_item_material = global::XamarinDataChannelTest.Droid.Resource.Layout.select_dialog_item_material;
- global::Xamarin.Forms.Platform.Resource.Layout.select_dialog_multichoice_material = global::XamarinDataChannelTest.Droid.Resource.Layout.select_dialog_multichoice_material;
- global::Xamarin.Forms.Platform.Resource.Layout.select_dialog_singlechoice_material = global::XamarinDataChannelTest.Droid.Resource.Layout.select_dialog_singlechoice_material;
- global::Xamarin.Forms.Platform.Resource.Layout.ShellContent = global::XamarinDataChannelTest.Droid.Resource.Layout.ShellContent;
- global::Xamarin.Forms.Platform.Resource.Layout.support_simple_spinner_dropdown_item = global::XamarinDataChannelTest.Droid.Resource.Layout.support_simple_spinner_dropdown_item;
- global::Xamarin.Forms.Platform.Resource.String.abc_action_bar_home_description = global::XamarinDataChannelTest.Droid.Resource.String.abc_action_bar_home_description;
- global::Xamarin.Forms.Platform.Resource.String.abc_action_bar_up_description = global::XamarinDataChannelTest.Droid.Resource.String.abc_action_bar_up_description;
- global::Xamarin.Forms.Platform.Resource.String.abc_action_menu_overflow_description = global::XamarinDataChannelTest.Droid.Resource.String.abc_action_menu_overflow_description;
- global::Xamarin.Forms.Platform.Resource.String.abc_action_mode_done = global::XamarinDataChannelTest.Droid.Resource.String.abc_action_mode_done;
- global::Xamarin.Forms.Platform.Resource.String.abc_activitychooserview_choose_application = global::XamarinDataChannelTest.Droid.Resource.String.abc_activitychooserview_choose_application;
- global::Xamarin.Forms.Platform.Resource.String.abc_activity_chooser_view_see_all = global::XamarinDataChannelTest.Droid.Resource.String.abc_activity_chooser_view_see_all;
- global::Xamarin.Forms.Platform.Resource.String.abc_capital_off = global::XamarinDataChannelTest.Droid.Resource.String.abc_capital_off;
- global::Xamarin.Forms.Platform.Resource.String.abc_capital_on = global::XamarinDataChannelTest.Droid.Resource.String.abc_capital_on;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_body_1_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_body_1_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_body_2_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_body_2_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_button_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_button_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_caption_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_caption_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_display_1_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_display_1_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_display_2_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_display_2_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_display_3_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_display_3_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_display_4_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_display_4_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_headline_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_headline_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_menu_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_menu_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_subhead_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_subhead_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_font_family_title_material = global::XamarinDataChannelTest.Droid.Resource.String.abc_font_family_title_material;
- global::Xamarin.Forms.Platform.Resource.String.abc_menu_alt_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_alt_shortcut_label;
- global::Xamarin.Forms.Platform.Resource.String.abc_menu_ctrl_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_ctrl_shortcut_label;
- global::Xamarin.Forms.Platform.Resource.String.abc_menu_delete_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_delete_shortcut_label;
- global::Xamarin.Forms.Platform.Resource.String.abc_menu_enter_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_enter_shortcut_label;
- global::Xamarin.Forms.Platform.Resource.String.abc_menu_function_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_function_shortcut_label;
- global::Xamarin.Forms.Platform.Resource.String.abc_menu_meta_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_meta_shortcut_label;
- global::Xamarin.Forms.Platform.Resource.String.abc_menu_shift_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_shift_shortcut_label;
- global::Xamarin.Forms.Platform.Resource.String.abc_menu_space_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_space_shortcut_label;
- global::Xamarin.Forms.Platform.Resource.String.abc_menu_sym_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_menu_sym_shortcut_label;
- global::Xamarin.Forms.Platform.Resource.String.abc_prepend_shortcut_label = global::XamarinDataChannelTest.Droid.Resource.String.abc_prepend_shortcut_label;
- global::Xamarin.Forms.Platform.Resource.String.abc_searchview_description_clear = global::XamarinDataChannelTest.Droid.Resource.String.abc_searchview_description_clear;
- global::Xamarin.Forms.Platform.Resource.String.abc_searchview_description_query = global::XamarinDataChannelTest.Droid.Resource.String.abc_searchview_description_query;
- global::Xamarin.Forms.Platform.Resource.String.abc_searchview_description_search = global::XamarinDataChannelTest.Droid.Resource.String.abc_searchview_description_search;
- global::Xamarin.Forms.Platform.Resource.String.abc_searchview_description_submit = global::XamarinDataChannelTest.Droid.Resource.String.abc_searchview_description_submit;
- global::Xamarin.Forms.Platform.Resource.String.abc_searchview_description_voice = global::XamarinDataChannelTest.Droid.Resource.String.abc_searchview_description_voice;
- global::Xamarin.Forms.Platform.Resource.String.abc_search_hint = global::XamarinDataChannelTest.Droid.Resource.String.abc_search_hint;
- global::Xamarin.Forms.Platform.Resource.String.abc_shareactionprovider_share_with = global::XamarinDataChannelTest.Droid.Resource.String.abc_shareactionprovider_share_with;
- global::Xamarin.Forms.Platform.Resource.String.abc_shareactionprovider_share_with_application = global::XamarinDataChannelTest.Droid.Resource.String.abc_shareactionprovider_share_with_application;
- global::Xamarin.Forms.Platform.Resource.String.abc_toolbar_collapse_description = global::XamarinDataChannelTest.Droid.Resource.String.abc_toolbar_collapse_description;
- global::Xamarin.Forms.Platform.Resource.String.appbar_scrolling_view_behavior = global::XamarinDataChannelTest.Droid.Resource.String.appbar_scrolling_view_behavior;
- global::Xamarin.Forms.Platform.Resource.String.bottom_sheet_behavior = global::XamarinDataChannelTest.Droid.Resource.String.bottom_sheet_behavior;
- global::Xamarin.Forms.Platform.Resource.String.character_counter_content_description = global::XamarinDataChannelTest.Droid.Resource.String.character_counter_content_description;
- global::Xamarin.Forms.Platform.Resource.String.character_counter_pattern = global::XamarinDataChannelTest.Droid.Resource.String.character_counter_pattern;
- global::Xamarin.Forms.Platform.Resource.String.fab_transformation_scrim_behavior = global::XamarinDataChannelTest.Droid.Resource.String.fab_transformation_scrim_behavior;
- global::Xamarin.Forms.Platform.Resource.String.fab_transformation_sheet_behavior = global::XamarinDataChannelTest.Droid.Resource.String.fab_transformation_sheet_behavior;
- global::Xamarin.Forms.Platform.Resource.String.hide_bottom_view_on_scroll_behavior = global::XamarinDataChannelTest.Droid.Resource.String.hide_bottom_view_on_scroll_behavior;
- global::Xamarin.Forms.Platform.Resource.String.mtrl_chip_close_icon_content_description = global::XamarinDataChannelTest.Droid.Resource.String.mtrl_chip_close_icon_content_description;
- global::Xamarin.Forms.Platform.Resource.String.overflow_tab_title = global::XamarinDataChannelTest.Droid.Resource.String.overflow_tab_title;
- global::Xamarin.Forms.Platform.Resource.String.password_toggle_content_description = global::XamarinDataChannelTest.Droid.Resource.String.password_toggle_content_description;
- global::Xamarin.Forms.Platform.Resource.String.path_password_eye = global::XamarinDataChannelTest.Droid.Resource.String.path_password_eye;
- global::Xamarin.Forms.Platform.Resource.String.path_password_eye_mask_strike_through = global::XamarinDataChannelTest.Droid.Resource.String.path_password_eye_mask_strike_through;
- global::Xamarin.Forms.Platform.Resource.String.path_password_eye_mask_visible = global::XamarinDataChannelTest.Droid.Resource.String.path_password_eye_mask_visible;
- global::Xamarin.Forms.Platform.Resource.String.path_password_strike_through = global::XamarinDataChannelTest.Droid.Resource.String.path_password_strike_through;
- global::Xamarin.Forms.Platform.Resource.String.search_menu_title = global::XamarinDataChannelTest.Droid.Resource.String.search_menu_title;
- global::Xamarin.Forms.Platform.Resource.String.status_bar_notification_info_overflow = global::XamarinDataChannelTest.Droid.Resource.String.status_bar_notification_info_overflow;
- global::Xamarin.Forms.Platform.Resource.Style.AlertDialog_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.AlertDialog_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.AlertDialog_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.AlertDialog_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Animation_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Animation_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Animation_AppCompat_DropDownUp = global::XamarinDataChannelTest.Droid.Resource.Style.Animation_AppCompat_DropDownUp;
- global::Xamarin.Forms.Platform.Resource.Style.Animation_AppCompat_Tooltip = global::XamarinDataChannelTest.Droid.Resource.Style.Animation_AppCompat_Tooltip;
- global::Xamarin.Forms.Platform.Resource.Style.Animation_Design_BottomSheetDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Animation_Design_BottomSheetDialog;
- global::Xamarin.Forms.Platform.Resource.Style.AppCompatDialogStyle = global::XamarinDataChannelTest.Droid.Resource.Style.AppCompatDialogStyle;
- global::Xamarin.Forms.Platform.Resource.Style.Base_AlertDialog_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_AlertDialog_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_AlertDialog_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_AlertDialog_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Animation_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Animation_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Animation_AppCompat_DropDownUp = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Animation_AppCompat_DropDownUp;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Animation_AppCompat_Tooltip = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Animation_AppCompat_Tooltip;
- global::Xamarin.Forms.Platform.Resource.Style.Base_CardView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_CardView;
- global::Xamarin.Forms.Platform.Resource.Style.Base_DialogWindowTitleBackground_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_DialogWindowTitleBackground_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_DialogWindowTitle_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_DialogWindowTitle_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Body1 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body1;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Body2 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Body2;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Button = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Button;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Caption = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Caption;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Display1 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display1;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Display2 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display2;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Display3 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display3;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Display4 = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Display4;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Headline = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Headline;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Large = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Large_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Medium = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Medium_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Menu;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_SearchResult = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Subtitle;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_SearchResult_Title;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Small_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Subhead = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Subhead_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Title = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Title_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Tooltip = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Tooltip;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Menu;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_ActionMode_Title;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Colored;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Button_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_DropDownItem;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Header;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Large;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_PopupMenu_Small;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_Switch;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle;
- global::Xamarin.Forms.Platform.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title = global::XamarinDataChannelTest.Droid.Resource.Style.Base_TextAppearance_Widget_AppCompat_Toolbar_Title;
- global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_Dark = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark;
- global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dark_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_ThemeOverlay_MaterialComponents_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_CompactMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_CompactMenu;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_FixedSize;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_DarkActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_FixedSize;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_AppCompat_Light_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Bridge;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_CompactMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_CompactMenu;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_FixedSize;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Bridge;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_FixedSize;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Theme_MaterialComponents_Light_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Bridge;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Bridge;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V14_Theme_MaterialComponents_Light_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V21_ThemeOverlay_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V21_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V21_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V21_Theme_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V21_Theme_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V21_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V21_Theme_AppCompat_Light_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V22_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V22_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V22_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V22_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V23_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V23_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V23_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V23_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V26_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V26_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V26_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V26_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V26_Widget_AppCompat_Toolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V26_Widget_AppCompat_Toolbar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V28_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V28_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V28_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V28_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_ThemeOverlay_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Theme_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Theme_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Theme_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Theme_AppCompat_Light_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Widget_AppCompat_AutoCompleteTextView;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Widget_AppCompat_EditText = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Widget_AppCompat_EditText;
- global::Xamarin.Forms.Platform.Resource.Style.Base_V7_Widget_AppCompat_Toolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_V7_Widget_AppCompat_Toolbar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_Solid;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabText;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionBar_TabView;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_CloseMode;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionButton_Overflow;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActionMode = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActionMode;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ActivityChooserView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ActivityChooserView;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_AutoCompleteTextView;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ButtonBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ButtonBar_AlertDialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button_Borderless = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button_Borderless_Colored;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button_ButtonBar_AlertDialog;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button_Colored;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Button_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Button_Small;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_CheckBox;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_RadioButton;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_CompoundButton_Switch;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_DrawerArrowToggle_Common;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_DropDownItem_Spinner;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_EditText = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_EditText;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ImageButton = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ImageButton;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_Solid;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_ActionBar_TabView;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Light_PopupMenu_Overflow;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ListMenuView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ListMenuView;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ListPopupWindow = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ListPopupWindow;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ListView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ListView;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ListView_DropDown = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ListView_DropDown;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ListView_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ListView_Menu;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_PopupMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_PopupMenu_Overflow;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_PopupWindow = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_PopupWindow;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ProgressBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_ProgressBar_Horizontal;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_RatingBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Indicator;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_RatingBar_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_RatingBar_Small;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_SearchView = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_SearchView;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_SearchView_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_SeekBar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_SeekBar_Discrete;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Spinner;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Spinner_Underlined;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_TextView_SpinnerItem;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Toolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_AppCompat_Toolbar_Button_Navigation;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_Design_TabLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_Design_TabLayout;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_MaterialComponents_Chip = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_MaterialComponents_Chip;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputEditText;
- global::Xamarin.Forms.Platform.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Base_Widget_MaterialComponents_TextInputLayout;
- global::Xamarin.Forms.Platform.Resource.Style.CardView = global::XamarinDataChannelTest.Droid.Resource.Style.CardView;
- global::Xamarin.Forms.Platform.Resource.Style.CardView_Dark = global::XamarinDataChannelTest.Droid.Resource.Style.CardView_Dark;
- global::Xamarin.Forms.Platform.Resource.Style.CardView_Light = global::XamarinDataChannelTest.Droid.Resource.Style.CardView_Light;
- global::Xamarin.Forms.Platform.Resource.Style.collectionViewScrollBars = global::XamarinDataChannelTest.Droid.Resource.Style.collectionViewScrollBars;
- global::Xamarin.Forms.Platform.Resource.Style.collectionViewTheme = global::XamarinDataChannelTest.Droid.Resource.Style.collectionViewTheme;
- global::Xamarin.Forms.Platform.Resource.Style.MainTheme = global::XamarinDataChannelTest.Droid.Resource.Style.MainTheme;
- global::Xamarin.Forms.Platform.Resource.Style.MainTheme_Base = global::XamarinDataChannelTest.Droid.Resource.Style.MainTheme_Base;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_MaterialComponents = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_MaterialComponents;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_MaterialComponents_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_MaterialComponents_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_MaterialComponents_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_MaterialComponents_Light_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_ThemeOverlay_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Dark;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_ThemeOverlay_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_ThemeOverlay_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_V21_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_V21_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_V21_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_V21_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_V25_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_V25_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_V25_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_V25_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Platform_Widget_AppCompat_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Platform_Widget_AppCompat_Spinner;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_DialogWindowTitle_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_ActionBar_TitleItem;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_DialogTitle_Icon;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Text;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_PopupMenuItem_Title;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_SearchView_MagIcon;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Query;
- global::Xamarin.Forms.Platform.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text = global::XamarinDataChannelTest.Droid.Resource.Style.RtlOverlay_Widget_AppCompat_Search_DropDown_Text;
- global::Xamarin.Forms.Platform.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton;
- global::Xamarin.Forms.Platform.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.RtlUnderlay_Widget_AppCompat_ActionButton_Overflow;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Body1 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Body1;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Body2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Body2;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Button = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Button;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Caption = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Caption;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Display1 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Display1;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Display2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Display2;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Display3 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Display3;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Display4 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Display4;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Headline = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Headline;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Large = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Large;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Large_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Large_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Subtitle;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Light_SearchResult_Title;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Large;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Light_Widget_PopupMenu_Small;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Medium = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Medium;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Medium_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Medium_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Menu;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Subtitle;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_SearchResult_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_SearchResult_Title;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Small = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Small;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Small_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Small_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Subhead = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Subhead;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Subhead_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Title;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Title_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Title_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Tooltip = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Tooltip;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Menu;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_Button = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Borderless_Colored;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Colored;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Button_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_DropDownItem;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Header;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Large;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_PopupMenu_Small;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_Switch = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_Switch;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_AppCompat_Widget_TextView_SpinnerItem;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Info = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Info;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Info_Media = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Info_Media;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Line2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Line2_Media = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Line2_Media;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Media = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Media;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Time = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Time;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Time_Media = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Time_Media;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Title;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Compat_Notification_Title_Media = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Compat_Notification_Title_Media;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_CollapsingToolbar_Expanded;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Counter = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Counter;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Counter_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Counter_Overflow;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Error = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Error;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_HelperText = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_HelperText;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Hint = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Hint;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Snackbar_Message = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Snackbar_Message;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Design_Tab = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Design_Tab;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Body1 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Body1;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Body2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Body2;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Button = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Button;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Caption = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Caption;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Chip = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Chip;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline1 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline1;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline2;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline3 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline3;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline4 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline4;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline5 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline5;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Headline6 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Headline6;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Overline = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Overline;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Subtitle1 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle1;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Subtitle2 = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Subtitle2;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_MaterialComponents_Tab = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_MaterialComponents_Tab;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Widget_AppCompat_ExpandedMenu_Item;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Subtitle;
- global::Xamarin.Forms.Platform.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title = global::XamarinDataChannelTest.Droid.Resource.Style.TextAppearance_Widget_AppCompat_Toolbar_Title;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_Dark = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_Dark_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_Dark = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dark_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_Light = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_Light;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox;
- global::Xamarin.Forms.Platform.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_CompactMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_CompactMenu;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_DarkActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DayNight_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DayNight_NoActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_DarkActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_DarkActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_Light_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_Light_NoActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_AppCompat_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_AppCompat_NoActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_Design = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_Design_BottomSheetDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design_BottomSheetDialog;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_Design_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_Design_Light_BottomSheetDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design_Light_BottomSheetDialog;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_Design_Light_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design_Light_NoActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_Design_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_Design_NoActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_BottomSheetDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_BottomSheetDialog;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Bridge;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_CompactMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_CompactMenu;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_BottomSheetDialog;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_Bridge;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_DarkActionBar_Bridge;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_DialogWhenLarge;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_Alert;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_Dialog_MinWidth;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_Light_NoActionBar_Bridge;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_NoActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge = global::XamarinDataChannelTest.Droid.Resource.Style.Theme_MaterialComponents_NoActionBar_Bridge;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionBar_Solid = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionBar_Solid;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionBar_TabBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionBar_TabText = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabText;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionBar_TabView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionBar_TabView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionButton;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionButton_CloseMode = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionButton_CloseMode;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionButton_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionButton_Overflow;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActionMode = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActionMode;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ActivityChooserView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ActivityChooserView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_AutoCompleteTextView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_AutoCompleteTextView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ButtonBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ButtonBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ButtonBar_AlertDialog;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button_Borderless = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button_Borderless;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button_Borderless_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button_Borderless_Colored;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button_ButtonBar_AlertDialog;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button_Colored;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Button_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Button_Small;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_CompoundButton_CheckBox;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_CompoundButton_RadioButton;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_CompoundButton_Switch = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_CompoundButton_Switch;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_DrawerArrowToggle = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_DrawerArrowToggle;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_DropDownItem_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_DropDownItem_Spinner;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_EditText = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_EditText;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ImageButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ImageButton;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_Solid_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabBar_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabText_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionBar_TabView_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_CloseMode;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionButton_Overflow;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActionMode_Inverse;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ActivityChooserView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ActivityChooserView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_AutoCompleteTextView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_DropDownItem_Spinner;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ListPopupWindow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ListPopupWindow;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_ListView_DropDown = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_ListView_DropDown;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_PopupMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_PopupMenu_Overflow;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_SearchView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_SearchView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Light_Spinner_DropDown_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ListMenuView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ListMenuView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ListPopupWindow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ListPopupWindow;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ListView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ListView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ListView_DropDown = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ListView_DropDown;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ListView_Menu = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ListView_Menu;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_PopupMenu = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_PopupMenu;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_PopupMenu_Overflow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_PopupMenu_Overflow;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_PopupWindow = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_PopupWindow;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ProgressBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ProgressBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_ProgressBar_Horizontal;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_RatingBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_RatingBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_RatingBar_Indicator = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_RatingBar_Indicator;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_RatingBar_Small = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_RatingBar_Small;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_SearchView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_SearchView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_SearchView_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_SearchView_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_SeekBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_SeekBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_SeekBar_Discrete = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_SeekBar_Discrete;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Spinner = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Spinner;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Spinner_DropDown = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Spinner_DropDown_ActionBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Spinner_Underlined = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Spinner_Underlined;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_TextView_SpinnerItem = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_TextView_SpinnerItem;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Toolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Toolbar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_AppCompat_Toolbar_Button_Navigation;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Compat_NotificationActionContainer = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Compat_NotificationActionContainer;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Compat_NotificationActionText = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Compat_NotificationActionText;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_AppBarLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_AppBarLayout;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_BottomNavigationView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_BottomNavigationView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_BottomSheet_Modal = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_BottomSheet_Modal;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_CollapsingToolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_CollapsingToolbar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_FloatingActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_FloatingActionButton;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_NavigationView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_NavigationView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_ScrimInsetsFrameLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_ScrimInsetsFrameLayout;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_Snackbar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_Snackbar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_TabLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_TabLayout;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Design_TextInputLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Design_TextInputLayout;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_BottomAppBar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_BottomAppBar_Colored;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_BottomNavigationView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_BottomNavigationView_Colored;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_BottomSheet_Modal;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_Icon;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_OutlinedButton_Icon;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_TextButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Dialog_Icon;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_TextButton_Icon;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Button_UnelevatedButton_Icon;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_CardView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_CardView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_ChipGroup = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_ChipGroup;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Chip_Action = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Chip_Action;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Chip_Choice = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Chip_Choice;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Chip_Entry = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Chip_Entry;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Chip_Filter = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Chip_Filter;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_FloatingActionButton = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_FloatingActionButton;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_NavigationView = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_NavigationView;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Snackbar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Snackbar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Snackbar_FullWidth;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TabLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TabLayout;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TabLayout_Colored = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TabLayout_Colored;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_FilledBox_Dense;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_FilledBox_Dense;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_MaterialComponents_Toolbar = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_MaterialComponents_Toolbar;
- global::Xamarin.Forms.Platform.Resource.Style.Widget_Support_CoordinatorLayout = global::XamarinDataChannelTest.Droid.Resource.Style.Widget_Support_CoordinatorLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBarLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBarLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBarLayout_android_layout_gravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBarLayout_android_layout_gravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_background = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_background;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_backgroundSplit = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_backgroundSplit;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_backgroundStacked = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_backgroundStacked;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetEnd;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetEndWithActions = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetEndWithActions;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetLeft;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetRight;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetStart;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_contentInsetStartWithNavigation = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_contentInsetStartWithNavigation;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_customNavigationLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_customNavigationLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_displayOptions = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_displayOptions;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_divider = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_divider;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_elevation;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_height = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_height;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_hideOnContentScroll = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_hideOnContentScroll;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_homeAsUpIndicator = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_homeAsUpIndicator;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_homeLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_homeLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_icon = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_icon;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_indeterminateProgressStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_indeterminateProgressStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_itemPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_itemPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_logo = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_logo;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_navigationMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_navigationMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_popupTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_popupTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_progressBarPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_progressBarPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_progressBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_progressBarStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_subtitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_subtitle;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_subtitleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_subtitleTextStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_title = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_title;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionBar_titleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionBar_titleTextStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionMenuItemView = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMenuItemView;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionMenuItemView_android_minWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMenuItemView_android_minWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionMenuView = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMenuView;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_background = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_background;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_backgroundSplit = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_backgroundSplit;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_closeItemLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_closeItemLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_height = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_height;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_subtitleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_subtitleTextStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActionMode_titleTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActionMode_titleTextStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActivityChooserView = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActivityChooserView;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActivityChooserView_expandActivityOverflowButtonDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.ActivityChooserView_initialActivityCount = global::XamarinDataChannelTest.Droid.Resource.Styleable.ActivityChooserView_initialActivityCount;
- global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog;
- global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_android_layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_android_layout;
- global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_buttonIconDimen = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_buttonIconDimen;
- global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_buttonPanelSideLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_buttonPanelSideLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_listItemLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_listItemLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_listLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_listLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_multiChoiceItemLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_multiChoiceItemLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_showTitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_showTitle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AlertDialog_singleChoiceItemLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AlertDialog_singleChoiceItemLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_constantSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_dither;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_enterFadeDuration;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_exitFadeDuration;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_variablePadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableCompat_android_visible;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableItem;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_drawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableItem_android_id = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableItem_android_id;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableTransition = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableTransition;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_drawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_fromId;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_reversible;
- global::Xamarin.Forms.Platform.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId = global::XamarinDataChannelTest.Droid.Resource.Styleable.AnimatedStateListDrawableTransition_android_toId;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayoutStates = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayoutStates;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayoutStates_state_collapsed = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsed;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayoutStates_state_collapsible = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayoutStates_state_collapsible;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayoutStates_state_liftable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayoutStates_state_liftable;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayoutStates_state_lifted = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayoutStates_state_lifted;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_android_background = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_android_background;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_android_keyboardNavigationCluster;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_android_touchscreenBlocksFocus;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_elevation;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_expanded = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_expanded;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_Layout;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollFlags;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_Layout_layout_scrollInterpolator;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppBarLayout_liftOnScroll = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppBarLayout_liftOnScroll;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatImageView = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatImageView;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatImageView_android_src = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatImageView_android_src;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatImageView_srcCompat = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatImageView_srcCompat;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatImageView_tint = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatImageView_tint;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatImageView_tintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatImageView_tintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatSeekBar = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatSeekBar;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatSeekBar_android_thumb = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatSeekBar_android_thumb;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatSeekBar_tickMark = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatSeekBar_tickMark;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatSeekBar_tickMarkTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatSeekBar_tickMarkTintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableBottom;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableEnd;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableLeft;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableRight;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableStart;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_drawableTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_drawableTop;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextHelper_android_textAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextHelper_android_textAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_android_textAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_android_textAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_autoSizeMaxTextSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_autoSizeMinTextSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_autoSizePresetSizes = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_autoSizePresetSizes;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_autoSizeStepGranularity;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_autoSizeTextType = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_autoSizeTextType;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_firstBaselineToTopHeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_fontFamily = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_fontFamily;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_lastBaselineToBottomHeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_lineHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_lineHeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTextView_textAllCaps = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTextView_textAllCaps;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarDivider = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarDivider;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarItemBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarItemBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarPopupTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarPopupTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarSplitStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarSplitStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarTabBarStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarTabStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarTabStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarTabTextStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionBarWidgetTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionDropDownStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionDropDownStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionMenuTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionMenuTextColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeCloseDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeCopyDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeCutDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeCutDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeFindDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeFindDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModePasteDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModePasteDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModePopupWindowStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeSelectAllDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeShareDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeShareDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeSplitBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeSplitBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionModeWebSearchDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionOverflowButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_actionOverflowMenuStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_activityChooserViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_activityChooserViewStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_alertDialogButtonGroupStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_alertDialogCenterButtons;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_alertDialogStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_alertDialogStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_alertDialogTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_alertDialogTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_android_windowAnimationStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_android_windowIsFloating = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_android_windowIsFloating;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_autoCompleteTextViewStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_borderlessButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_borderlessButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonBarButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonBarNegativeButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonBarNeutralButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonBarPositiveButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonBarStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_buttonStyleSmall = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_buttonStyleSmall;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_checkboxStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_checkboxStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_checkedTextViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_checkedTextViewStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorAccent = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorAccent;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorBackgroundFloating = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorBackgroundFloating;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorButtonNormal = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorButtonNormal;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorControlActivated = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorControlActivated;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorControlHighlight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorControlHighlight;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorControlNormal = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorControlNormal;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorError = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorError;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorPrimary = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorPrimary;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorPrimaryDark = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorPrimaryDark;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_colorSwitchThumbNormal;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_controlBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_controlBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dialogCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dialogCornerRadius;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dialogPreferredPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dialogPreferredPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dialogTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dialogTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dividerHorizontal = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dividerHorizontal;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dividerVertical = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dividerVertical;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dropdownListPreferredItemHeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_dropDownListViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_dropDownListViewStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_editTextBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_editTextBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_editTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_editTextColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_editTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_editTextStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_homeAsUpIndicator = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_homeAsUpIndicator;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_imageButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_imageButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listChoiceBackgroundIndicator;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listDividerAlertDialog = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listDividerAlertDialog;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listMenuViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listMenuViewStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPopupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPopupWindowStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPreferredItemHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightLarge;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemHeightSmall;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingLeft;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_listPreferredItemPaddingRight;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_panelBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_panelBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_panelMenuListTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_panelMenuListTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_panelMenuListWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_panelMenuListWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_popupMenuStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_popupMenuStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_popupWindowStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_popupWindowStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_radioButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_radioButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_ratingBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleIndicator;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_ratingBarStyleSmall;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_searchViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_searchViewStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_seekBarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_seekBarStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_selectableItemBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_selectableItemBackgroundBorderless;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_spinnerDropDownItemStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_spinnerStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_spinnerStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_switchStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_switchStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceLargePopupMenu;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceListItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItem;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSecondary;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceListItemSmall;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearancePopupMenuHeader;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultSubtitle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSearchResultTitle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textAppearanceSmallPopupMenu;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textColorAlertDialogListItem;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_textColorSearchUrl = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_textColorSearchUrl;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_toolbarNavigationButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_toolbarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_toolbarStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_tooltipForegroundColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_tooltipForegroundColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_tooltipFrameBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_tooltipFrameBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_viewInflaterClass = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_viewInflaterClass;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowActionBar = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowActionBar;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowActionBarOverlay = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowActionBarOverlay;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowActionModeOverlay = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowActionModeOverlay;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMajor;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowFixedHeightMinor;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMajor;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowFixedWidthMinor;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowMinWidthMajor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMajor;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowMinWidthMinor = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowMinWidthMinor;
- global::Xamarin.Forms.Platform.Resource.Styleable.AppCompatTheme_windowNoTitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.AppCompatTheme_windowNoTitle;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_backgroundTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_backgroundTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_fabAlignmentMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_fabAlignmentMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_fabCradleMargin = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_fabCradleMargin;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_fabCradleRoundedCornerRadius;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_fabCradleVerticalOffset;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomAppBar_hideOnScroll = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomAppBar_hideOnScroll;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_elevation;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemHorizontalTranslationEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemIconSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemIconSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemIconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemIconTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceActive;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemTextAppearanceInactive;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_itemTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_itemTextColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_labelVisibilityMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_labelVisibilityMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomNavigationView_menu = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomNavigationView_menu;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomSheetBehavior_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomSheetBehavior_Layout;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_fitToContents;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_hideable;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_peekHeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed = global::XamarinDataChannelTest.Droid.Resource.Styleable.BottomSheetBehavior_Layout_behavior_skipCollapsed;
- global::Xamarin.Forms.Platform.Resource.Styleable.ButtonBarLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ButtonBarLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.ButtonBarLayout_allowStacking = global::XamarinDataChannelTest.Droid.Resource.Styleable.ButtonBarLayout_allowStacking;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_android_minHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_android_minHeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_android_minWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_android_minWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardBackgroundColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardCornerRadius;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardElevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardElevation;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardMaxElevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardMaxElevation;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardPreventCornerOverlap = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardPreventCornerOverlap;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_cardUseCompatPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_cardUseCompatPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_contentPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_contentPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_contentPaddingBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_contentPaddingBottom;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_contentPaddingLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_contentPaddingLeft;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_contentPaddingRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_contentPaddingRight;
- global::Xamarin.Forms.Platform.Resource.Styleable.CardView_contentPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.CardView_contentPaddingTop;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip;
- global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup;
- global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_checkedChip = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_checkedChip;
- global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_chipSpacing = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_chipSpacing;
- global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_chipSpacingHorizontal = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_chipSpacingHorizontal;
- global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_chipSpacingVertical = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_chipSpacingVertical;
- global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_singleLine = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_singleLine;
- global::Xamarin.Forms.Platform.Resource.Styleable.ChipGroup_singleSelection = global::XamarinDataChannelTest.Droid.Resource.Styleable.ChipGroup_singleSelection;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_android_checkable = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_android_checkable;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_android_ellipsize = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_android_ellipsize;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_android_maxWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_android_maxWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_android_text = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_android_text;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_android_textAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_android_textAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_checkedIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_checkedIcon;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_checkedIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_checkedIconEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_checkedIconVisible = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_checkedIconVisible;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipBackgroundColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipCornerRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipCornerRadius;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipEndPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipEndPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipIcon;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipIconEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipIconSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipIconSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipIconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipIconTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipIconVisible = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipIconVisible;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipMinHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipMinHeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipStartPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipStartPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipStrokeColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipStrokeColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_chipStrokeWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_chipStrokeWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIcon;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconEndPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconEndPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconStartPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconStartPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_closeIconVisible = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_closeIconVisible;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_hideMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_hideMotionSpec;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_iconEndPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_iconEndPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_iconStartPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_iconStartPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_rippleColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_rippleColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_showMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_showMotionSpec;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_textEndPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_textEndPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.Chip_textStartPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.Chip_textStartPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleGravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_collapsedTitleTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_contentScrim = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_contentScrim;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleGravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMargin;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginBottom;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginEnd;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginStart;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleMarginTop;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_expandedTitleTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimAnimationDuration;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_scrimVisibleHeightTrigger;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_statusBarScrim;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_title = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_title;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_titleEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_titleEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.CollapsingToolbarLayout_toolbarId = global::XamarinDataChannelTest.Droid.Resource.Styleable.CollapsingToolbarLayout_toolbarId;
- global::Xamarin.Forms.Platform.Resource.Styleable.ColorStateListItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem;
- global::Xamarin.Forms.Platform.Resource.Styleable.ColorStateListItem_alpha = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem_alpha;
- global::Xamarin.Forms.Platform.Resource.Styleable.ColorStateListItem_android_alpha = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem_android_alpha;
- global::Xamarin.Forms.Platform.Resource.Styleable.ColorStateListItem_android_color = global::XamarinDataChannelTest.Droid.Resource.Styleable.ColorStateListItem_android_color;
- global::Xamarin.Forms.Platform.Resource.Styleable.CompoundButton = global::XamarinDataChannelTest.Droid.Resource.Styleable.CompoundButton;
- global::Xamarin.Forms.Platform.Resource.Styleable.CompoundButton_android_button = global::XamarinDataChannelTest.Droid.Resource.Styleable.CompoundButton_android_button;
- global::Xamarin.Forms.Platform.Resource.Styleable.CompoundButton_buttonTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.CompoundButton_buttonTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.CompoundButton_buttonTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.CompoundButton_buttonTintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_keylines = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_keylines;
- global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout;
- global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_android_layout_gravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchor;
- global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_anchorGravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_behavior;
- global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges;
- global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_insetEdge;
- global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_Layout_layout_keyline;
- global::Xamarin.Forms.Platform.Resource.Styleable.CoordinatorLayout_statusBarBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.CoordinatorLayout_statusBarBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.DesignTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.DesignTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.DesignTheme_bottomSheetDialogTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.DesignTheme_bottomSheetDialogTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.DesignTheme_bottomSheetStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.DesignTheme_bottomSheetStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle;
- global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_arrowHeadLength = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_arrowHeadLength;
- global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_arrowShaftLength = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_arrowShaftLength;
- global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_barLength = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_barLength;
- global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_color = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_color;
- global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_drawableSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_drawableSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_gapBetweenBars = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_gapBetweenBars;
- global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_spinBars = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_spinBars;
- global::Xamarin.Forms.Platform.Resource.Styleable.DrawerArrowToggle_thickness = global::XamarinDataChannelTest.Droid.Resource.Styleable.DrawerArrowToggle_thickness;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_backgroundTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_backgroundTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_backgroundTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_backgroundTintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_Behavior_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_Behavior_Layout_behavior_autoHide;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_borderWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_borderWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_elevation;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_fabCustomSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_fabCustomSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_fabSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_fabSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_hideMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_hideMotionSpec;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_hoveredFocusedTranslationZ;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_maxImageSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_maxImageSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_pressedTranslationZ = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_pressedTranslationZ;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_rippleColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_rippleColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_showMotionSpec = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_showMotionSpec;
- global::Xamarin.Forms.Platform.Resource.Styleable.FloatingActionButton_useCompatPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.FloatingActionButton_useCompatPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.FlowLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.FlowLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.FlowLayout_itemSpacing = global::XamarinDataChannelTest.Droid.Resource.Styleable.FlowLayout_itemSpacing;
- global::Xamarin.Forms.Platform.Resource.Styleable.FlowLayout_lineSpacing = global::XamarinDataChannelTest.Droid.Resource.Styleable.FlowLayout_lineSpacing;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_android_font = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_font;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_android_fontStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_fontStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_android_fontVariationSettings = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_fontVariationSettings;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_android_fontWeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_fontWeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_android_ttcIndex = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_android_ttcIndex;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_font = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_font;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_fontStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_fontStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_fontVariationSettings = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_fontVariationSettings;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_fontWeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_fontWeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamilyFont_ttcIndex = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamilyFont_ttcIndex;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderAuthority = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderAuthority;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderCerts = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderCerts;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderFetchStrategy = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderFetchStrategy;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderFetchTimeout = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderFetchTimeout;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderPackage = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderPackage;
- global::Xamarin.Forms.Platform.Resource.Styleable.FontFamily_fontProviderQuery = global::XamarinDataChannelTest.Droid.Resource.Styleable.FontFamily_fontProviderQuery;
- global::Xamarin.Forms.Platform.Resource.Styleable.ForegroundLinearLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ForegroundLinearLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.ForegroundLinearLayout_android_foreground = global::XamarinDataChannelTest.Droid.Resource.Styleable.ForegroundLinearLayout_android_foreground;
- global::Xamarin.Forms.Platform.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.ForegroundLinearLayout_android_foregroundGravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.ForegroundLinearLayout_foregroundInsidePadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColorItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColorItem;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColorItem_android_color = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColorItem_android_color;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColorItem_android_offset = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColorItem_android_offset;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_centerColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_centerColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_centerX = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_centerX;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_centerY = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_centerY;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_endColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_endColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_endX = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_endX;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_endY = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_endY;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_gradientRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_gradientRadius;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_startColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_startColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_startX = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_startX;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_startY = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_startY;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_tileMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_tileMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.GradientColor_android_type = global::XamarinDataChannelTest.Droid.Resource.Styleable.GradientColor_android_type;
- global::Xamarin.Forms.Platform.Resource.Styleable.ItemsViewRendererTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.ItemsViewRendererTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.ItemsViewRendererTheme_collectionViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.ItemsViewRendererTheme_collectionViewStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_android_baselineAligned = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAligned;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_android_baselineAlignedChildIndex;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_android_gravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_android_gravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_android_orientation = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_android_orientation;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_android_weightSum = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_android_weightSum;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_divider = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_divider;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_dividerPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_dividerPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_Layout;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_gravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_height;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_weight;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_Layout_android_layout_width;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_measureWithLargestChild;
- global::Xamarin.Forms.Platform.Resource.Styleable.LinearLayoutCompat_showDividers = global::XamarinDataChannelTest.Droid.Resource.Styleable.LinearLayoutCompat_showDividers;
- global::Xamarin.Forms.Platform.Resource.Styleable.ListPopupWindow = global::XamarinDataChannelTest.Droid.Resource.Styleable.ListPopupWindow;
- global::Xamarin.Forms.Platform.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset = global::XamarinDataChannelTest.Droid.Resource.Styleable.ListPopupWindow_android_dropDownHorizontalOffset;
- global::Xamarin.Forms.Platform.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset = global::XamarinDataChannelTest.Droid.Resource.Styleable.ListPopupWindow_android_dropDownVerticalOffset;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_android_insetBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_android_insetBottom;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_android_insetLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_android_insetLeft;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_android_insetRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_android_insetRight;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_android_insetTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_android_insetTop;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_backgroundTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_backgroundTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_backgroundTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_backgroundTintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_cornerRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_cornerRadius;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_icon = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_icon;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_iconGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_iconGravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_iconPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_iconPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_iconSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_iconSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_iconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_iconTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_iconTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_iconTintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_rippleColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_rippleColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_strokeColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_strokeColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialButton_strokeWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialButton_strokeWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialCardView = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialCardView;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialCardView_strokeColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialCardView_strokeColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialCardView_strokeWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialCardView_strokeWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetDialogTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_bottomSheetStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_chipGroupStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_chipStandaloneStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_chipStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_chipStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_colorAccent = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_colorAccent;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_colorBackgroundFloating;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_colorPrimary = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimary;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_colorPrimaryDark;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_colorSecondary = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_colorSecondary;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_editTextStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_editTextStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_floatingActionButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_materialButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_materialCardViewStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_navigationViewStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_scrimBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_scrimBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_snackbarButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_tabStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_tabStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody1;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceBody2;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceButton;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceCaption;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline1;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline2;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline3;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline4;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline5;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceHeadline6;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceOverline;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle1;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2 = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textAppearanceSubtitle2;
- global::Xamarin.Forms.Platform.Resource.Styleable.MaterialComponentsTheme_textInputStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MaterialComponentsTheme_textInputStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_checkableBehavior = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_checkableBehavior;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_enabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_enabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_id = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_id;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_menuCategory = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_menuCategory;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_orderInCategory = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_orderInCategory;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuGroup_android_visible = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuGroup_android_visible;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_actionLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_actionLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_actionProviderClass = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_actionProviderClass;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_actionViewClass = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_actionViewClass;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_alphabeticModifiers = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_alphabeticModifiers;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_alphabeticShortcut = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_alphabeticShortcut;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_checkable = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_checkable;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_checked = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_checked;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_enabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_enabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_icon = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_icon;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_id = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_id;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_menuCategory = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_menuCategory;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_numericShortcut = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_numericShortcut;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_onClick = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_onClick;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_orderInCategory = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_orderInCategory;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_title = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_title;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_titleCondensed = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_titleCondensed;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_android_visible = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_android_visible;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_contentDescription = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_contentDescription;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_iconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_iconTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_iconTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_iconTintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_numericModifiers = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_numericModifiers;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_showAsAction = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_showAsAction;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuItem_tooltipText = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuItem_tooltipText;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuView = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_headerBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_headerBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_horizontalDivider = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_horizontalDivider;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_itemBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_itemBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_itemIconDisabledAlpha = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_itemIconDisabledAlpha;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_itemTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_itemTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_verticalDivider = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_verticalDivider;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_android_windowAnimationStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_android_windowAnimationStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_preserveIconSpacing = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_preserveIconSpacing;
- global::Xamarin.Forms.Platform.Resource.Styleable.MenuView_subMenuArrow = global::XamarinDataChannelTest.Droid.Resource.Styleable.MenuView_subMenuArrow;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_android_background = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_android_background;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_android_fitsSystemWindows = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_android_fitsSystemWindows;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_android_maxWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_android_maxWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_elevation;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_headerLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_headerLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemHorizontalPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemHorizontalPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemIconPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemIconPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemIconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemIconTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_itemTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_itemTextColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.NavigationView_menu = global::XamarinDataChannelTest.Droid.Resource.Styleable.NavigationView_menu;
- global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindow = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindow;
- global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindowBackgroundState = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindowBackgroundState;
- global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindowBackgroundState_state_above_anchor;
- global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindow_android_popupAnimationStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindow_android_popupAnimationStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindow_android_popupBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindow_android_popupBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.PopupWindow_overlapAnchor = global::XamarinDataChannelTest.Droid.Resource.Styleable.PopupWindow_overlapAnchor;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecycleListView = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecycleListView;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecycleListView_paddingBottomNoButtons = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecycleListView_paddingBottomNoButtons;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecycleListView_paddingTopNoTitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecycleListView_paddingTopNoTitle;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_android_descendantFocusability = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_android_descendantFocusability;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_android_orientation = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_android_orientation;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_fastScrollEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_fastScrollEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalThumbDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_fastScrollHorizontalTrackDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalThumbDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_fastScrollVerticalTrackDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_layoutManager = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_layoutManager;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_reverseLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_reverseLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_spanCount = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_spanCount;
- global::Xamarin.Forms.Platform.Resource.Styleable.RecyclerView_stackFromEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.RecyclerView_stackFromEnd;
- global::Xamarin.Forms.Platform.Resource.Styleable.ScrimInsetsFrameLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ScrimInsetsFrameLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground = global::XamarinDataChannelTest.Droid.Resource.Styleable.ScrimInsetsFrameLayout_insetForeground;
- global::Xamarin.Forms.Platform.Resource.Styleable.ScrollingViewBehavior_Layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ScrollingViewBehavior_Layout;
- global::Xamarin.Forms.Platform.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.ScrollingViewBehavior_Layout_behavior_overlapTop;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_android_focusable = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_android_focusable;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_android_imeOptions = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_android_imeOptions;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_android_inputType = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_android_inputType;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_android_maxWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_android_maxWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_closeIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_closeIcon;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_commitIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_commitIcon;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_defaultQueryHint = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_defaultQueryHint;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_goIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_goIcon;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_iconifiedByDefault = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_iconifiedByDefault;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_layout;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_queryBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_queryBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_queryHint = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_queryHint;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_searchHintIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_searchHintIcon;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_searchIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_searchIcon;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_submitBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_submitBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_suggestionRowLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_suggestionRowLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.SearchView_voiceIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.SearchView_voiceIcon;
- global::Xamarin.Forms.Platform.Resource.Styleable.Snackbar = global::XamarinDataChannelTest.Droid.Resource.Styleable.Snackbar;
- global::Xamarin.Forms.Platform.Resource.Styleable.SnackbarLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.SnackbarLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.SnackbarLayout_android_maxWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.SnackbarLayout_android_maxWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.SnackbarLayout_elevation = global::XamarinDataChannelTest.Droid.Resource.Styleable.SnackbarLayout_elevation;
- global::Xamarin.Forms.Platform.Resource.Styleable.SnackbarLayout_maxActionInlineWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.SnackbarLayout_maxActionInlineWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.Snackbar_snackbarButtonStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.Snackbar_snackbarButtonStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.Snackbar_snackbarStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.Snackbar_snackbarStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.Spinner = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner;
- global::Xamarin.Forms.Platform.Resource.Styleable.Spinner_android_dropDownWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner_android_dropDownWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.Spinner_android_entries = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner_android_entries;
- global::Xamarin.Forms.Platform.Resource.Styleable.Spinner_android_popupBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner_android_popupBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.Spinner_android_prompt = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner_android_prompt;
- global::Xamarin.Forms.Platform.Resource.Styleable.Spinner_popupTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.Spinner_popupTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawableItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawableItem;
- global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawableItem_android_drawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawableItem_android_drawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_constantSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_constantSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_dither = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_dither;
- global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_enterFadeDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_enterFadeDuration;
- global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_exitFadeDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_exitFadeDuration;
- global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_variablePadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_variablePadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.StateListDrawable_android_visible = global::XamarinDataChannelTest.Droid.Resource.Styleable.StateListDrawable_android_visible;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_android_textOff = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_android_textOff;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_android_textOn = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_android_textOn;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_android_thumb = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_android_thumb;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_showText = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_showText;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_splitTrack = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_splitTrack;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_switchMinWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_switchMinWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_switchPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_switchPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_switchTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_switchTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_thumbTextPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_thumbTextPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_thumbTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_thumbTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_thumbTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_thumbTintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_track = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_track;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_trackTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_trackTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.SwitchCompat_trackTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.SwitchCompat_trackTintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabItem = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabItem;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabItem_android_icon = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabItem_android_icon;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabItem_android_layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabItem_android_layout;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabItem_android_text = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabItem_android_text;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabBackground = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabBackground;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabContentStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabContentStart;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabGravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIconTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIconTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIconTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIconTintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicator = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicator;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicatorAnimationDuration;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicatorColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicatorColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicatorFullWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicatorFullWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicatorGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicatorGravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabIndicatorHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabIndicatorHeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabInlineLabel = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabInlineLabel;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabMaxWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabMaxWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabMinWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabMinWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabPadding = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabPadding;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabPaddingBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabPaddingBottom;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabPaddingEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabPaddingEnd;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabPaddingStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabPaddingStart;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabPaddingTop;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabRippleColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabRippleColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabSelectedTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabSelectedTextColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabTextColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.TabLayout_tabUnboundedRipple = global::XamarinDataChannelTest.Droid.Resource.Styleable.TabLayout_tabUnboundedRipple;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_fontFamily = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_fontFamily;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_shadowColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_shadowColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_shadowDx = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_shadowDx;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_shadowDy = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_shadowDy;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_shadowRadius = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_shadowRadius;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_textColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_textColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_textColorHint = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_textColorHint;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_textColorLink = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_textColorLink;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_textSize = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_textSize;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_textStyle = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_textStyle;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_android_typeface = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_android_typeface;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_fontFamily = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_fontFamily;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextAppearance_textAllCaps = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextAppearance_textAllCaps;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_android_hint = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_android_hint;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_android_textColorHint = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_android_textColorHint;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxBackgroundColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxBackgroundColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxBackgroundMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxBackgroundMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxCollapsedPaddingTop;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomEnd;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusBottomStart;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopEnd;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxCornerRadiusTopStart;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxStrokeColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxStrokeColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_boxStrokeWidth = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_boxStrokeWidth;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_counterEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_counterEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_counterMaxLength = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_counterMaxLength;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_counterOverflowTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_counterTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_counterTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_errorEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_errorEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_errorTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_errorTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_helperText = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_helperText;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_helperTextEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_helperTextEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_helperTextTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_helperTextTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_hintAnimationEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_hintAnimationEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_hintEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_hintEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_hintTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_hintTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_passwordToggleContentDescription = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_passwordToggleContentDescription;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_passwordToggleDrawable = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_passwordToggleDrawable;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_passwordToggleEnabled = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_passwordToggleEnabled;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_passwordToggleTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_passwordToggleTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.TextInputLayout_passwordToggleTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.TextInputLayout_passwordToggleTintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.ThemeEnforcement = global::XamarinDataChannelTest.Droid.Resource.Styleable.ThemeEnforcement;
- global::Xamarin.Forms.Platform.Resource.Styleable.ThemeEnforcement_android_textAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.ThemeEnforcement_android_textAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.ThemeEnforcement_enforceMaterialTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.ThemeEnforcement_enforceTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.ThemeEnforcement_enforceTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_android_gravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_android_gravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_android_minHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_android_minHeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_buttonGravity = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_buttonGravity;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_collapseContentDescription = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_collapseContentDescription;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_collapseIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_collapseIcon;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetEnd;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetEndWithActions = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetEndWithActions;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetLeft = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetLeft;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetRight = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetRight;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetStart;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_contentInsetStartWithNavigation = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_contentInsetStartWithNavigation;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_logo = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_logo;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_logoDescription = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_logoDescription;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_maxButtonHeight = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_maxButtonHeight;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_navigationContentDescription = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_navigationContentDescription;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_navigationIcon = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_navigationIcon;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_popupTheme = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_popupTheme;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_subtitle = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_subtitle;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_subtitleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_subtitleTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_subtitleTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_subtitleTextColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_title = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_title;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMargin = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMargin;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMarginBottom = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMarginBottom;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMarginEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMarginEnd;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMargins = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMargins;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMarginStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMarginStart;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleMarginTop = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleMarginTop;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleTextAppearance = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleTextAppearance;
- global::Xamarin.Forms.Platform.Resource.Styleable.Toolbar_titleTextColor = global::XamarinDataChannelTest.Droid.Resource.Styleable.Toolbar_titleTextColor;
- global::Xamarin.Forms.Platform.Resource.Styleable.View = global::XamarinDataChannelTest.Droid.Resource.Styleable.View;
- global::Xamarin.Forms.Platform.Resource.Styleable.ViewBackgroundHelper = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewBackgroundHelper;
- global::Xamarin.Forms.Platform.Resource.Styleable.ViewBackgroundHelper_android_background = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewBackgroundHelper_android_background;
- global::Xamarin.Forms.Platform.Resource.Styleable.ViewBackgroundHelper_backgroundTint = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTint;
- global::Xamarin.Forms.Platform.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewBackgroundHelper_backgroundTintMode;
- global::Xamarin.Forms.Platform.Resource.Styleable.ViewStubCompat = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewStubCompat;
- global::Xamarin.Forms.Platform.Resource.Styleable.ViewStubCompat_android_id = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewStubCompat_android_id;
- global::Xamarin.Forms.Platform.Resource.Styleable.ViewStubCompat_android_inflatedId = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewStubCompat_android_inflatedId;
- global::Xamarin.Forms.Platform.Resource.Styleable.ViewStubCompat_android_layout = global::XamarinDataChannelTest.Droid.Resource.Styleable.ViewStubCompat_android_layout;
- global::Xamarin.Forms.Platform.Resource.Styleable.View_android_focusable = global::XamarinDataChannelTest.Droid.Resource.Styleable.View_android_focusable;
- global::Xamarin.Forms.Platform.Resource.Styleable.View_android_theme = global::XamarinDataChannelTest.Droid.Resource.Styleable.View_android_theme;
- global::Xamarin.Forms.Platform.Resource.Styleable.View_paddingEnd = global::XamarinDataChannelTest.Droid.Resource.Styleable.View_paddingEnd;
- global::Xamarin.Forms.Platform.Resource.Styleable.View_paddingStart = global::XamarinDataChannelTest.Droid.Resource.Styleable.View_paddingStart;
- global::Xamarin.Forms.Platform.Resource.Styleable.View_theme = global::XamarinDataChannelTest.Droid.Resource.Styleable.View_theme;
- }
-
- public partial class Animation
- {
-
- // aapt resource value: 0x7F010000
- public const int abc_fade_in = 2130771968;
-
- // aapt resource value: 0x7F010001
- public const int abc_fade_out = 2130771969;
-
- // aapt resource value: 0x7F010002
- public const int abc_grow_fade_in_from_bottom = 2130771970;
-
- // aapt resource value: 0x7F010003
- public const int abc_popup_enter = 2130771971;
-
- // aapt resource value: 0x7F010004
- public const int abc_popup_exit = 2130771972;
-
- // aapt resource value: 0x7F010005
- public const int abc_shrink_fade_out_from_bottom = 2130771973;
-
- // aapt resource value: 0x7F010006
- public const int abc_slide_in_bottom = 2130771974;
-
- // aapt resource value: 0x7F010007
- public const int abc_slide_in_top = 2130771975;
-
- // aapt resource value: 0x7F010008
- public const int abc_slide_out_bottom = 2130771976;
-
- // aapt resource value: 0x7F010009
- public const int abc_slide_out_top = 2130771977;
-
- // aapt resource value: 0x7F01000A
- public const int abc_tooltip_enter = 2130771978;
-
- // aapt resource value: 0x7F01000B
- public const int abc_tooltip_exit = 2130771979;
-
- // aapt resource value: 0x7F01000C
- public const int design_bottom_sheet_slide_in = 2130771980;
-
- // aapt resource value: 0x7F01000D
- public const int design_bottom_sheet_slide_out = 2130771981;
-
- // aapt resource value: 0x7F01000E
- public const int design_snackbar_in = 2130771982;
-
- // aapt resource value: 0x7F01000F
- public const int design_snackbar_out = 2130771983;
-
- // aapt resource value: 0x7F010010
- public const int EnterFromLeft = 2130771984;
-
- // aapt resource value: 0x7F010011
- public const int EnterFromRight = 2130771985;
-
- // aapt resource value: 0x7F010012
- public const int ExitToLeft = 2130771986;
-
- // aapt resource value: 0x7F010013
- public const int ExitToRight = 2130771987;
-
- static Animation()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Animation()
- {
- }
- }
-
- public partial class Animator
- {
-
- // aapt resource value: 0x7F020000
- public const int design_appbar_state_list_animator = 2130837504;
-
- // aapt resource value: 0x7F020001
- public const int design_fab_hide_motion_spec = 2130837505;
-
- // aapt resource value: 0x7F020002
- public const int design_fab_show_motion_spec = 2130837506;
-
- // aapt resource value: 0x7F020003
- public const int mtrl_btn_state_list_anim = 2130837507;
-
- // aapt resource value: 0x7F020004
- public const int mtrl_btn_unelevated_state_list_anim = 2130837508;
-
- // aapt resource value: 0x7F020005
- public const int mtrl_chip_state_list_anim = 2130837509;
-
- // aapt resource value: 0x7F020006
- public const int mtrl_fab_hide_motion_spec = 2130837510;
-
- // aapt resource value: 0x7F020007
- public const int mtrl_fab_show_motion_spec = 2130837511;
-
- // aapt resource value: 0x7F020008
- public const int mtrl_fab_transformation_sheet_collapse_spec = 2130837512;
-
- // aapt resource value: 0x7F020009
- public const int mtrl_fab_transformation_sheet_expand_spec = 2130837513;
-
- static Animator()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Animator()
- {
- }
- }
-
- public partial class Attribute
- {
-
- // aapt resource value: 0x7F030000
- public const int actionBarDivider = 2130903040;
-
- // aapt resource value: 0x7F030001
- public const int actionBarItemBackground = 2130903041;
-
- // aapt resource value: 0x7F030002
- public const int actionBarPopupTheme = 2130903042;
-
- // aapt resource value: 0x7F030003
- public const int actionBarSize = 2130903043;
-
- // aapt resource value: 0x7F030004
- public const int actionBarSplitStyle = 2130903044;
-
- // aapt resource value: 0x7F030005
- public const int actionBarStyle = 2130903045;
-
- // aapt resource value: 0x7F030006
- public const int actionBarTabBarStyle = 2130903046;
-
- // aapt resource value: 0x7F030007
- public const int actionBarTabStyle = 2130903047;
-
- // aapt resource value: 0x7F030008
- public const int actionBarTabTextStyle = 2130903048;
-
- // aapt resource value: 0x7F030009
- public const int actionBarTheme = 2130903049;
-
- // aapt resource value: 0x7F03000A
- public const int actionBarWidgetTheme = 2130903050;
-
- // aapt resource value: 0x7F03000B
- public const int actionButtonStyle = 2130903051;
-
- // aapt resource value: 0x7F03000C
- public const int actionDropDownStyle = 2130903052;
-
- // aapt resource value: 0x7F03000D
- public const int actionLayout = 2130903053;
-
- // aapt resource value: 0x7F03000E
- public const int actionMenuTextAppearance = 2130903054;
-
- // aapt resource value: 0x7F03000F
- public const int actionMenuTextColor = 2130903055;
-
- // aapt resource value: 0x7F030010
- public const int actionModeBackground = 2130903056;
-
- // aapt resource value: 0x7F030011
- public const int actionModeCloseButtonStyle = 2130903057;
-
- // aapt resource value: 0x7F030012
- public const int actionModeCloseDrawable = 2130903058;
-
- // aapt resource value: 0x7F030013
- public const int actionModeCopyDrawable = 2130903059;
-
- // aapt resource value: 0x7F030014
- public const int actionModeCutDrawable = 2130903060;
-
- // aapt resource value: 0x7F030015
- public const int actionModeFindDrawable = 2130903061;
-
- // aapt resource value: 0x7F030016
- public const int actionModePasteDrawable = 2130903062;
-
- // aapt resource value: 0x7F030017
- public const int actionModePopupWindowStyle = 2130903063;
-
- // aapt resource value: 0x7F030018
- public const int actionModeSelectAllDrawable = 2130903064;
-
- // aapt resource value: 0x7F030019
- public const int actionModeShareDrawable = 2130903065;
-
- // aapt resource value: 0x7F03001A
- public const int actionModeSplitBackground = 2130903066;
-
- // aapt resource value: 0x7F03001B
- public const int actionModeStyle = 2130903067;
-
- // aapt resource value: 0x7F03001C
- public const int actionModeWebSearchDrawable = 2130903068;
-
- // aapt resource value: 0x7F03001D
- public const int actionOverflowButtonStyle = 2130903069;
-
- // aapt resource value: 0x7F03001E
- public const int actionOverflowMenuStyle = 2130903070;
-
- // aapt resource value: 0x7F03001F
- public const int actionProviderClass = 2130903071;
-
- // aapt resource value: 0x7F030020
- public const int actionViewClass = 2130903072;
-
- // aapt resource value: 0x7F030021
- public const int activityChooserViewStyle = 2130903073;
-
- // aapt resource value: 0x7F030022
- public const int alertDialogButtonGroupStyle = 2130903074;
-
- // aapt resource value: 0x7F030023
- public const int alertDialogCenterButtons = 2130903075;
-
- // aapt resource value: 0x7F030024
- public const int alertDialogStyle = 2130903076;
-
- // aapt resource value: 0x7F030025
- public const int alertDialogTheme = 2130903077;
-
- // aapt resource value: 0x7F030026
- public const int allowStacking = 2130903078;
-
- // aapt resource value: 0x7F030027
- public const int alpha = 2130903079;
-
- // aapt resource value: 0x7F030028
- public const int alphabeticModifiers = 2130903080;
-
- // aapt resource value: 0x7F030029
- public const int arrowHeadLength = 2130903081;
-
- // aapt resource value: 0x7F03002A
- public const int arrowShaftLength = 2130903082;
-
- // aapt resource value: 0x7F03002B
- public const int autoCompleteTextViewStyle = 2130903083;
-
- // aapt resource value: 0x7F03002C
- public const int autoSizeMaxTextSize = 2130903084;
-
- // aapt resource value: 0x7F03002D
- public const int autoSizeMinTextSize = 2130903085;
-
- // aapt resource value: 0x7F03002E
- public const int autoSizePresetSizes = 2130903086;
-
- // aapt resource value: 0x7F03002F
- public const int autoSizeStepGranularity = 2130903087;
-
- // aapt resource value: 0x7F030030
- public const int autoSizeTextType = 2130903088;
-
- // aapt resource value: 0x7F030031
- public const int background = 2130903089;
-
- // aapt resource value: 0x7F030032
- public const int backgroundSplit = 2130903090;
-
- // aapt resource value: 0x7F030033
- public const int backgroundStacked = 2130903091;
-
- // aapt resource value: 0x7F030034
- public const int backgroundTint = 2130903092;
-
- // aapt resource value: 0x7F030035
- public const int backgroundTintMode = 2130903093;
-
- // aapt resource value: 0x7F030036
- public const int barLength = 2130903094;
-
- // aapt resource value: 0x7F030037
- public const int behavior_autoHide = 2130903095;
-
- // aapt resource value: 0x7F030038
- public const int behavior_fitToContents = 2130903096;
-
- // aapt resource value: 0x7F030039
- public const int behavior_hideable = 2130903097;
-
- // aapt resource value: 0x7F03003A
- public const int behavior_overlapTop = 2130903098;
-
- // aapt resource value: 0x7F03003B
- public const int behavior_peekHeight = 2130903099;
-
- // aapt resource value: 0x7F03003C
- public const int behavior_skipCollapsed = 2130903100;
-
- // aapt resource value: 0x7F03003E
- public const int borderlessButtonStyle = 2130903102;
-
- // aapt resource value: 0x7F03003D
- public const int borderWidth = 2130903101;
-
- // aapt resource value: 0x7F03003F
- public const int bottomAppBarStyle = 2130903103;
-
- // aapt resource value: 0x7F030040
- public const int bottomNavigationStyle = 2130903104;
-
- // aapt resource value: 0x7F030041
- public const int bottomSheetDialogTheme = 2130903105;
-
- // aapt resource value: 0x7F030042
- public const int bottomSheetStyle = 2130903106;
-
- // aapt resource value: 0x7F030043
- public const int boxBackgroundColor = 2130903107;
-
- // aapt resource value: 0x7F030044
- public const int boxBackgroundMode = 2130903108;
-
- // aapt resource value: 0x7F030045
- public const int boxCollapsedPaddingTop = 2130903109;
-
- // aapt resource value: 0x7F030046
- public const int boxCornerRadiusBottomEnd = 2130903110;
-
- // aapt resource value: 0x7F030047
- public const int boxCornerRadiusBottomStart = 2130903111;
-
- // aapt resource value: 0x7F030048
- public const int boxCornerRadiusTopEnd = 2130903112;
-
- // aapt resource value: 0x7F030049
- public const int boxCornerRadiusTopStart = 2130903113;
-
- // aapt resource value: 0x7F03004A
- public const int boxStrokeColor = 2130903114;
-
- // aapt resource value: 0x7F03004B
- public const int boxStrokeWidth = 2130903115;
-
- // aapt resource value: 0x7F03004C
- public const int buttonBarButtonStyle = 2130903116;
-
- // aapt resource value: 0x7F03004D
- public const int buttonBarNegativeButtonStyle = 2130903117;
-
- // aapt resource value: 0x7F03004E
- public const int buttonBarNeutralButtonStyle = 2130903118;
-
- // aapt resource value: 0x7F03004F
- public const int buttonBarPositiveButtonStyle = 2130903119;
-
- // aapt resource value: 0x7F030050
- public const int buttonBarStyle = 2130903120;
-
- // aapt resource value: 0x7F030051
- public const int buttonGravity = 2130903121;
-
- // aapt resource value: 0x7F030052
- public const int buttonIconDimen = 2130903122;
-
- // aapt resource value: 0x7F030053
- public const int buttonPanelSideLayout = 2130903123;
-
- // aapt resource value: 0x7F030054
- public const int buttonStyle = 2130903124;
-
- // aapt resource value: 0x7F030055
- public const int buttonStyleSmall = 2130903125;
-
- // aapt resource value: 0x7F030056
- public const int buttonTint = 2130903126;
-
- // aapt resource value: 0x7F030057
- public const int buttonTintMode = 2130903127;
-
- // aapt resource value: 0x7F030058
- public const int cardBackgroundColor = 2130903128;
-
- // aapt resource value: 0x7F030059
- public const int cardCornerRadius = 2130903129;
-
- // aapt resource value: 0x7F03005A
- public const int cardElevation = 2130903130;
-
- // aapt resource value: 0x7F03005B
- public const int cardMaxElevation = 2130903131;
-
- // aapt resource value: 0x7F03005C
- public const int cardPreventCornerOverlap = 2130903132;
-
- // aapt resource value: 0x7F03005D
- public const int cardUseCompatPadding = 2130903133;
-
- // aapt resource value: 0x7F03005E
- public const int cardViewStyle = 2130903134;
-
- // aapt resource value: 0x7F03005F
- public const int checkboxStyle = 2130903135;
-
- // aapt resource value: 0x7F030060
- public const int checkedChip = 2130903136;
-
- // aapt resource value: 0x7F030061
- public const int checkedIcon = 2130903137;
-
- // aapt resource value: 0x7F030062
- public const int checkedIconEnabled = 2130903138;
-
- // aapt resource value: 0x7F030063
- public const int checkedIconVisible = 2130903139;
-
- // aapt resource value: 0x7F030064
- public const int checkedTextViewStyle = 2130903140;
-
- // aapt resource value: 0x7F030065
- public const int chipBackgroundColor = 2130903141;
-
- // aapt resource value: 0x7F030066
- public const int chipCornerRadius = 2130903142;
-
- // aapt resource value: 0x7F030067
- public const int chipEndPadding = 2130903143;
-
- // aapt resource value: 0x7F030068
- public const int chipGroupStyle = 2130903144;
-
- // aapt resource value: 0x7F030069
- public const int chipIcon = 2130903145;
-
- // aapt resource value: 0x7F03006A
- public const int chipIconEnabled = 2130903146;
-
- // aapt resource value: 0x7F03006B
- public const int chipIconSize = 2130903147;
-
- // aapt resource value: 0x7F03006C
- public const int chipIconTint = 2130903148;
-
- // aapt resource value: 0x7F03006D
- public const int chipIconVisible = 2130903149;
-
- // aapt resource value: 0x7F03006E
- public const int chipMinHeight = 2130903150;
-
- // aapt resource value: 0x7F03006F
- public const int chipSpacing = 2130903151;
-
- // aapt resource value: 0x7F030070
- public const int chipSpacingHorizontal = 2130903152;
-
- // aapt resource value: 0x7F030071
- public const int chipSpacingVertical = 2130903153;
-
- // aapt resource value: 0x7F030072
- public const int chipStandaloneStyle = 2130903154;
-
- // aapt resource value: 0x7F030073
- public const int chipStartPadding = 2130903155;
-
- // aapt resource value: 0x7F030074
- public const int chipStrokeColor = 2130903156;
-
- // aapt resource value: 0x7F030075
- public const int chipStrokeWidth = 2130903157;
-
- // aapt resource value: 0x7F030076
- public const int chipStyle = 2130903158;
-
- // aapt resource value: 0x7F030077
- public const int closeIcon = 2130903159;
-
- // aapt resource value: 0x7F030078
- public const int closeIconEnabled = 2130903160;
-
- // aapt resource value: 0x7F030079
- public const int closeIconEndPadding = 2130903161;
-
- // aapt resource value: 0x7F03007A
- public const int closeIconSize = 2130903162;
-
- // aapt resource value: 0x7F03007B
- public const int closeIconStartPadding = 2130903163;
-
- // aapt resource value: 0x7F03007C
- public const int closeIconTint = 2130903164;
-
- // aapt resource value: 0x7F03007D
- public const int closeIconVisible = 2130903165;
-
- // aapt resource value: 0x7F03007E
- public const int closeItemLayout = 2130903166;
-
- // aapt resource value: 0x7F03007F
- public const int collapseContentDescription = 2130903167;
-
- // aapt resource value: 0x7F030081
- public const int collapsedTitleGravity = 2130903169;
-
- // aapt resource value: 0x7F030082
- public const int collapsedTitleTextAppearance = 2130903170;
-
- // aapt resource value: 0x7F030080
- public const int collapseIcon = 2130903168;
-
- // aapt resource value: 0x7F030083
- public const int collectionViewStyle = 2130903171;
-
- // aapt resource value: 0x7F030084
- public const int color = 2130903172;
-
- // aapt resource value: 0x7F030085
- public const int colorAccent = 2130903173;
-
- // aapt resource value: 0x7F030086
- public const int colorBackgroundFloating = 2130903174;
-
- // aapt resource value: 0x7F030087
- public const int colorButtonNormal = 2130903175;
-
- // aapt resource value: 0x7F030088
- public const int colorControlActivated = 2130903176;
-
- // aapt resource value: 0x7F030089
- public const int colorControlHighlight = 2130903177;
-
- // aapt resource value: 0x7F03008A
- public const int colorControlNormal = 2130903178;
-
- // aapt resource value: 0x7F03008B
- public const int colorError = 2130903179;
-
- // aapt resource value: 0x7F03008C
- public const int colorPrimary = 2130903180;
-
- // aapt resource value: 0x7F03008D
- public const int colorPrimaryDark = 2130903181;
-
- // aapt resource value: 0x7F03008E
- public const int colorSecondary = 2130903182;
-
- // aapt resource value: 0x7F03008F
- public const int colorSwitchThumbNormal = 2130903183;
-
- // aapt resource value: 0x7F030090
- public const int commitIcon = 2130903184;
-
- // aapt resource value: 0x7F030091
- public const int contentDescription = 2130903185;
-
- // aapt resource value: 0x7F030092
- public const int contentInsetEnd = 2130903186;
-
- // aapt resource value: 0x7F030093
- public const int contentInsetEndWithActions = 2130903187;
-
- // aapt resource value: 0x7F030094
- public const int contentInsetLeft = 2130903188;
-
- // aapt resource value: 0x7F030095
- public const int contentInsetRight = 2130903189;
-
- // aapt resource value: 0x7F030096
- public const int contentInsetStart = 2130903190;
-
- // aapt resource value: 0x7F030097
- public const int contentInsetStartWithNavigation = 2130903191;
-
- // aapt resource value: 0x7F030098
- public const int contentPadding = 2130903192;
-
- // aapt resource value: 0x7F030099
- public const int contentPaddingBottom = 2130903193;
-
- // aapt resource value: 0x7F03009A
- public const int contentPaddingLeft = 2130903194;
-
- // aapt resource value: 0x7F03009B
- public const int contentPaddingRight = 2130903195;
-
- // aapt resource value: 0x7F03009C
- public const int contentPaddingTop = 2130903196;
-
- // aapt resource value: 0x7F03009D
- public const int contentScrim = 2130903197;
-
- // aapt resource value: 0x7F03009E
- public const int controlBackground = 2130903198;
-
- // aapt resource value: 0x7F03009F
- public const int coordinatorLayoutStyle = 2130903199;
-
- // aapt resource value: 0x7F0300A0
- public const int cornerRadius = 2130903200;
-
- // aapt resource value: 0x7F0300A1
- public const int counterEnabled = 2130903201;
-
- // aapt resource value: 0x7F0300A2
- public const int counterMaxLength = 2130903202;
-
- // aapt resource value: 0x7F0300A3
- public const int counterOverflowTextAppearance = 2130903203;
-
- // aapt resource value: 0x7F0300A4
- public const int counterTextAppearance = 2130903204;
-
- // aapt resource value: 0x7F0300A5
- public const int customNavigationLayout = 2130903205;
-
- // aapt resource value: 0x7F0300A6
- public const int defaultQueryHint = 2130903206;
-
- // aapt resource value: 0x7F0300A7
- public const int dialogCornerRadius = 2130903207;
-
- // aapt resource value: 0x7F0300A8
- public const int dialogPreferredPadding = 2130903208;
-
- // aapt resource value: 0x7F0300A9
- public const int dialogTheme = 2130903209;
-
- // aapt resource value: 0x7F0300AA
- public const int displayOptions = 2130903210;
-
- // aapt resource value: 0x7F0300AB
- public const int divider = 2130903211;
-
- // aapt resource value: 0x7F0300AC
- public const int dividerHorizontal = 2130903212;
-
- // aapt resource value: 0x7F0300AD
- public const int dividerPadding = 2130903213;
-
- // aapt resource value: 0x7F0300AE
- public const int dividerVertical = 2130903214;
-
- // aapt resource value: 0x7F0300AF
- public const int drawableSize = 2130903215;
-
- // aapt resource value: 0x7F0300B0
- public const int drawerArrowStyle = 2130903216;
-
- // aapt resource value: 0x7F0300B2
- public const int dropdownListPreferredItemHeight = 2130903218;
-
- // aapt resource value: 0x7F0300B1
- public const int dropDownListViewStyle = 2130903217;
-
- // aapt resource value: 0x7F0300B3
- public const int editTextBackground = 2130903219;
-
- // aapt resource value: 0x7F0300B4
- public const int editTextColor = 2130903220;
-
- // aapt resource value: 0x7F0300B5
- public const int editTextStyle = 2130903221;
-
- // aapt resource value: 0x7F0300B6
- public const int elevation = 2130903222;
-
- // aapt resource value: 0x7F0300B7
- public const int enforceMaterialTheme = 2130903223;
-
- // aapt resource value: 0x7F0300B8
- public const int enforceTextAppearance = 2130903224;
-
- // aapt resource value: 0x7F0300B9
- public const int errorEnabled = 2130903225;
-
- // aapt resource value: 0x7F0300BA
- public const int errorTextAppearance = 2130903226;
-
- // aapt resource value: 0x7F0300BB
- public const int expandActivityOverflowButtonDrawable = 2130903227;
-
- // aapt resource value: 0x7F0300BC
- public const int expanded = 2130903228;
-
- // aapt resource value: 0x7F0300BD
- public const int expandedTitleGravity = 2130903229;
-
- // aapt resource value: 0x7F0300BE
- public const int expandedTitleMargin = 2130903230;
-
- // aapt resource value: 0x7F0300BF
- public const int expandedTitleMarginBottom = 2130903231;
-
- // aapt resource value: 0x7F0300C0
- public const int expandedTitleMarginEnd = 2130903232;
-
- // aapt resource value: 0x7F0300C1
- public const int expandedTitleMarginStart = 2130903233;
-
- // aapt resource value: 0x7F0300C2
- public const int expandedTitleMarginTop = 2130903234;
-
- // aapt resource value: 0x7F0300C3
- public const int expandedTitleTextAppearance = 2130903235;
-
- // aapt resource value: 0x7F0300C4
- public const int fabAlignmentMode = 2130903236;
-
- // aapt resource value: 0x7F0300C5
- public const int fabCradleMargin = 2130903237;
-
- // aapt resource value: 0x7F0300C6
- public const int fabCradleRoundedCornerRadius = 2130903238;
-
- // aapt resource value: 0x7F0300C7
- public const int fabCradleVerticalOffset = 2130903239;
-
- // aapt resource value: 0x7F0300C8
- public const int fabCustomSize = 2130903240;
-
- // aapt resource value: 0x7F0300C9
- public const int fabSize = 2130903241;
-
- // aapt resource value: 0x7F0300CA
- public const int fastScrollEnabled = 2130903242;
-
- // aapt resource value: 0x7F0300CB
- public const int fastScrollHorizontalThumbDrawable = 2130903243;
-
- // aapt resource value: 0x7F0300CC
- public const int fastScrollHorizontalTrackDrawable = 2130903244;
-
- // aapt resource value: 0x7F0300CD
- public const int fastScrollVerticalThumbDrawable = 2130903245;
-
- // aapt resource value: 0x7F0300CE
- public const int fastScrollVerticalTrackDrawable = 2130903246;
-
- // aapt resource value: 0x7F0300CF
- public const int firstBaselineToTopHeight = 2130903247;
-
- // aapt resource value: 0x7F0300D0
- public const int floatingActionButtonStyle = 2130903248;
-
- // aapt resource value: 0x7F0300D1
- public const int font = 2130903249;
-
- // aapt resource value: 0x7F0300D2
- public const int fontFamily = 2130903250;
-
- // aapt resource value: 0x7F0300D3
- public const int fontProviderAuthority = 2130903251;
-
- // aapt resource value: 0x7F0300D4
- public const int fontProviderCerts = 2130903252;
-
- // aapt resource value: 0x7F0300D5
- public const int fontProviderFetchStrategy = 2130903253;
-
- // aapt resource value: 0x7F0300D6
- public const int fontProviderFetchTimeout = 2130903254;
-
- // aapt resource value: 0x7F0300D7
- public const int fontProviderPackage = 2130903255;
-
- // aapt resource value: 0x7F0300D8
- public const int fontProviderQuery = 2130903256;
-
- // aapt resource value: 0x7F0300D9
- public const int fontStyle = 2130903257;
-
- // aapt resource value: 0x7F0300DA
- public const int fontVariationSettings = 2130903258;
-
- // aapt resource value: 0x7F0300DB
- public const int fontWeight = 2130903259;
-
- // aapt resource value: 0x7F0300DC
- public const int foregroundInsidePadding = 2130903260;
-
- // aapt resource value: 0x7F0300DD
- public const int gapBetweenBars = 2130903261;
-
- // aapt resource value: 0x7F0300DE
- public const int goIcon = 2130903262;
-
- // aapt resource value: 0x7F0300DF
- public const int headerLayout = 2130903263;
-
- // aapt resource value: 0x7F0300E0
- public const int height = 2130903264;
-
- // aapt resource value: 0x7F0300E1
- public const int helperText = 2130903265;
-
- // aapt resource value: 0x7F0300E2
- public const int helperTextEnabled = 2130903266;
-
- // aapt resource value: 0x7F0300E3
- public const int helperTextTextAppearance = 2130903267;
-
- // aapt resource value: 0x7F0300E4
- public const int hideMotionSpec = 2130903268;
-
- // aapt resource value: 0x7F0300E5
- public const int hideOnContentScroll = 2130903269;
-
- // aapt resource value: 0x7F0300E6
- public const int hideOnScroll = 2130903270;
-
- // aapt resource value: 0x7F0300E7
- public const int hintAnimationEnabled = 2130903271;
-
- // aapt resource value: 0x7F0300E8
- public const int hintEnabled = 2130903272;
-
- // aapt resource value: 0x7F0300E9
- public const int hintTextAppearance = 2130903273;
-
- // aapt resource value: 0x7F0300EA
- public const int homeAsUpIndicator = 2130903274;
-
- // aapt resource value: 0x7F0300EB
- public const int homeLayout = 2130903275;
-
- // aapt resource value: 0x7F0300EC
- public const int hoveredFocusedTranslationZ = 2130903276;
-
- // aapt resource value: 0x7F0300ED
- public const int icon = 2130903277;
-
- // aapt resource value: 0x7F0300EE
- public const int iconEndPadding = 2130903278;
-
- // aapt resource value: 0x7F0300EF
- public const int iconGravity = 2130903279;
-
- // aapt resource value: 0x7F0300F5
- public const int iconifiedByDefault = 2130903285;
-
- // aapt resource value: 0x7F0300F0
- public const int iconPadding = 2130903280;
-
- // aapt resource value: 0x7F0300F1
- public const int iconSize = 2130903281;
-
- // aapt resource value: 0x7F0300F2
- public const int iconStartPadding = 2130903282;
-
- // aapt resource value: 0x7F0300F3
- public const int iconTint = 2130903283;
-
- // aapt resource value: 0x7F0300F4
- public const int iconTintMode = 2130903284;
-
- // aapt resource value: 0x7F0300F6
- public const int imageButtonStyle = 2130903286;
-
- // aapt resource value: 0x7F0300F7
- public const int indeterminateProgressStyle = 2130903287;
-
- // aapt resource value: 0x7F0300F8
- public const int initialActivityCount = 2130903288;
-
- // aapt resource value: 0x7F0300F9
- public const int insetForeground = 2130903289;
-
- // aapt resource value: 0x7F0300FA
- public const int isLightTheme = 2130903290;
-
- // aapt resource value: 0x7F0300FB
- public const int itemBackground = 2130903291;
-
- // aapt resource value: 0x7F0300FC
- public const int itemHorizontalPadding = 2130903292;
-
- // aapt resource value: 0x7F0300FD
- public const int itemHorizontalTranslationEnabled = 2130903293;
-
- // aapt resource value: 0x7F0300FE
- public const int itemIconPadding = 2130903294;
-
- // aapt resource value: 0x7F0300FF
- public const int itemIconSize = 2130903295;
-
- // aapt resource value: 0x7F030100
- public const int itemIconTint = 2130903296;
-
- // aapt resource value: 0x7F030101
- public const int itemPadding = 2130903297;
-
- // aapt resource value: 0x7F030102
- public const int itemSpacing = 2130903298;
-
- // aapt resource value: 0x7F030103
- public const int itemTextAppearance = 2130903299;
-
- // aapt resource value: 0x7F030104
- public const int itemTextAppearanceActive = 2130903300;
-
- // aapt resource value: 0x7F030105
- public const int itemTextAppearanceInactive = 2130903301;
-
- // aapt resource value: 0x7F030106
- public const int itemTextColor = 2130903302;
-
- // aapt resource value: 0x7F030107
- public const int keylines = 2130903303;
-
- // aapt resource value: 0x7F030108
- public const int labelVisibilityMode = 2130903304;
-
- // aapt resource value: 0x7F030109
- public const int lastBaselineToBottomHeight = 2130903305;
-
- // aapt resource value: 0x7F03010A
- public const int layout = 2130903306;
-
- // aapt resource value: 0x7F03010B
- public const int layoutManager = 2130903307;
-
- // aapt resource value: 0x7F03010C
- public const int layout_anchor = 2130903308;
-
- // aapt resource value: 0x7F03010D
- public const int layout_anchorGravity = 2130903309;
-
- // aapt resource value: 0x7F03010E
- public const int layout_behavior = 2130903310;
-
- // aapt resource value: 0x7F03010F
- public const int layout_collapseMode = 2130903311;
-
- // aapt resource value: 0x7F030110
- public const int layout_collapseParallaxMultiplier = 2130903312;
-
- // aapt resource value: 0x7F030111
- public const int layout_dodgeInsetEdges = 2130903313;
-
- // aapt resource value: 0x7F030112
- public const int layout_insetEdge = 2130903314;
-
- // aapt resource value: 0x7F030113
- public const int layout_keyline = 2130903315;
-
- // aapt resource value: 0x7F030114
- public const int layout_scrollFlags = 2130903316;
-
- // aapt resource value: 0x7F030115
- public const int layout_scrollInterpolator = 2130903317;
-
- // aapt resource value: 0x7F030116
- public const int liftOnScroll = 2130903318;
-
- // aapt resource value: 0x7F030117
- public const int lineHeight = 2130903319;
-
- // aapt resource value: 0x7F030118
- public const int lineSpacing = 2130903320;
-
- // aapt resource value: 0x7F030119
- public const int listChoiceBackgroundIndicator = 2130903321;
-
- // aapt resource value: 0x7F03011A
- public const int listDividerAlertDialog = 2130903322;
-
- // aapt resource value: 0x7F03011B
- public const int listItemLayout = 2130903323;
-
- // aapt resource value: 0x7F03011C
- public const int listLayout = 2130903324;
-
- // aapt resource value: 0x7F03011D
- public const int listMenuViewStyle = 2130903325;
-
- // aapt resource value: 0x7F03011E
- public const int listPopupWindowStyle = 2130903326;
-
- // aapt resource value: 0x7F03011F
- public const int listPreferredItemHeight = 2130903327;
-
- // aapt resource value: 0x7F030120
- public const int listPreferredItemHeightLarge = 2130903328;
-
- // aapt resource value: 0x7F030121
- public const int listPreferredItemHeightSmall = 2130903329;
-
- // aapt resource value: 0x7F030122
- public const int listPreferredItemPaddingLeft = 2130903330;
-
- // aapt resource value: 0x7F030123
- public const int listPreferredItemPaddingRight = 2130903331;
-
- // aapt resource value: 0x7F030124
- public const int logo = 2130903332;
-
- // aapt resource value: 0x7F030125
- public const int logoDescription = 2130903333;
-
- // aapt resource value: 0x7F030126
- public const int materialButtonStyle = 2130903334;
-
- // aapt resource value: 0x7F030127
- public const int materialCardViewStyle = 2130903335;
-
- // aapt resource value: 0x7F030128
- public const int maxActionInlineWidth = 2130903336;
-
- // aapt resource value: 0x7F030129
- public const int maxButtonHeight = 2130903337;
-
- // aapt resource value: 0x7F03012A
- public const int maxImageSize = 2130903338;
-
- // aapt resource value: 0x7F03012B
- public const int measureWithLargestChild = 2130903339;
-
- // aapt resource value: 0x7F03012C
- public const int menu = 2130903340;
-
- // aapt resource value: 0x7F03012D
- public const int multiChoiceItemLayout = 2130903341;
-
- // aapt resource value: 0x7F03012E
- public const int navigationContentDescription = 2130903342;
-
- // aapt resource value: 0x7F03012F
- public const int navigationIcon = 2130903343;
-
- // aapt resource value: 0x7F030130
- public const int navigationMode = 2130903344;
-
- // aapt resource value: 0x7F030131
- public const int navigationViewStyle = 2130903345;
-
- // aapt resource value: 0x7F030132
- public const int numericModifiers = 2130903346;
-
- // aapt resource value: 0x7F030133
- public const int overlapAnchor = 2130903347;
-
- // aapt resource value: 0x7F030134
- public const int paddingBottomNoButtons = 2130903348;
-
- // aapt resource value: 0x7F030135
- public const int paddingEnd = 2130903349;
-
- // aapt resource value: 0x7F030136
- public const int paddingStart = 2130903350;
-
- // aapt resource value: 0x7F030137
- public const int paddingTopNoTitle = 2130903351;
-
- // aapt resource value: 0x7F030138
- public const int panelBackground = 2130903352;
-
- // aapt resource value: 0x7F030139
- public const int panelMenuListTheme = 2130903353;
-
- // aapt resource value: 0x7F03013A
- public const int panelMenuListWidth = 2130903354;
-
- // aapt resource value: 0x7F03013B
- public const int passwordToggleContentDescription = 2130903355;
-
- // aapt resource value: 0x7F03013C
- public const int passwordToggleDrawable = 2130903356;
-
- // aapt resource value: 0x7F03013D
- public const int passwordToggleEnabled = 2130903357;
-
- // aapt resource value: 0x7F03013E
- public const int passwordToggleTint = 2130903358;
-
- // aapt resource value: 0x7F03013F
- public const int passwordToggleTintMode = 2130903359;
-
- // aapt resource value: 0x7F030140
- public const int popupMenuStyle = 2130903360;
-
- // aapt resource value: 0x7F030141
- public const int popupTheme = 2130903361;
-
- // aapt resource value: 0x7F030142
- public const int popupWindowStyle = 2130903362;
-
- // aapt resource value: 0x7F030143
- public const int preserveIconSpacing = 2130903363;
-
- // aapt resource value: 0x7F030144
- public const int pressedTranslationZ = 2130903364;
-
- // aapt resource value: 0x7F030145
- public const int progressBarPadding = 2130903365;
-
- // aapt resource value: 0x7F030146
- public const int progressBarStyle = 2130903366;
-
- // aapt resource value: 0x7F030147
- public const int queryBackground = 2130903367;
-
- // aapt resource value: 0x7F030148
- public const int queryHint = 2130903368;
-
- // aapt resource value: 0x7F030149
- public const int radioButtonStyle = 2130903369;
-
- // aapt resource value: 0x7F03014A
- public const int ratingBarStyle = 2130903370;
-
- // aapt resource value: 0x7F03014B
- public const int ratingBarStyleIndicator = 2130903371;
-
- // aapt resource value: 0x7F03014C
- public const int ratingBarStyleSmall = 2130903372;
-
- // aapt resource value: 0x7F03014D
- public const int reverseLayout = 2130903373;
-
- // aapt resource value: 0x7F03014E
- public const int rippleColor = 2130903374;
-
- // aapt resource value: 0x7F03014F
- public const int scrimAnimationDuration = 2130903375;
-
- // aapt resource value: 0x7F030150
- public const int scrimBackground = 2130903376;
-
- // aapt resource value: 0x7F030151
- public const int scrimVisibleHeightTrigger = 2130903377;
-
- // aapt resource value: 0x7F030152
- public const int searchHintIcon = 2130903378;
-
- // aapt resource value: 0x7F030153
- public const int searchIcon = 2130903379;
-
- // aapt resource value: 0x7F030154
- public const int searchViewStyle = 2130903380;
-
- // aapt resource value: 0x7F030155
- public const int seekBarStyle = 2130903381;
-
- // aapt resource value: 0x7F030156
- public const int selectableItemBackground = 2130903382;
-
- // aapt resource value: 0x7F030157
- public const int selectableItemBackgroundBorderless = 2130903383;
-
- // aapt resource value: 0x7F030158
- public const int showAsAction = 2130903384;
-
- // aapt resource value: 0x7F030159
- public const int showDividers = 2130903385;
-
- // aapt resource value: 0x7F03015A
- public const int showMotionSpec = 2130903386;
-
- // aapt resource value: 0x7F03015B
- public const int showText = 2130903387;
-
- // aapt resource value: 0x7F03015C
- public const int showTitle = 2130903388;
-
- // aapt resource value: 0x7F03015D
- public const int singleChoiceItemLayout = 2130903389;
-
- // aapt resource value: 0x7F03015E
- public const int singleLine = 2130903390;
-
- // aapt resource value: 0x7F03015F
- public const int singleSelection = 2130903391;
-
- // aapt resource value: 0x7F030160
- public const int snackbarButtonStyle = 2130903392;
-
- // aapt resource value: 0x7F030161
- public const int snackbarStyle = 2130903393;
-
- // aapt resource value: 0x7F030162
- public const int spanCount = 2130903394;
-
- // aapt resource value: 0x7F030163
- public const int spinBars = 2130903395;
-
- // aapt resource value: 0x7F030164
- public const int spinnerDropDownItemStyle = 2130903396;
-
- // aapt resource value: 0x7F030165
- public const int spinnerStyle = 2130903397;
-
- // aapt resource value: 0x7F030166
- public const int splitTrack = 2130903398;
-
- // aapt resource value: 0x7F030167
- public const int srcCompat = 2130903399;
-
- // aapt resource value: 0x7F030168
- public const int stackFromEnd = 2130903400;
-
- // aapt resource value: 0x7F030169
- public const int state_above_anchor = 2130903401;
-
- // aapt resource value: 0x7F03016A
- public const int state_collapsed = 2130903402;
-
- // aapt resource value: 0x7F03016B
- public const int state_collapsible = 2130903403;
-
- // aapt resource value: 0x7F03016C
- public const int state_liftable = 2130903404;
-
- // aapt resource value: 0x7F03016D
- public const int state_lifted = 2130903405;
-
- // aapt resource value: 0x7F03016E
- public const int statusBarBackground = 2130903406;
-
- // aapt resource value: 0x7F03016F
- public const int statusBarScrim = 2130903407;
-
- // aapt resource value: 0x7F030170
- public const int strokeColor = 2130903408;
-
- // aapt resource value: 0x7F030171
- public const int strokeWidth = 2130903409;
-
- // aapt resource value: 0x7F030172
- public const int subMenuArrow = 2130903410;
-
- // aapt resource value: 0x7F030173
- public const int submitBackground = 2130903411;
-
- // aapt resource value: 0x7F030174
- public const int subtitle = 2130903412;
-
- // aapt resource value: 0x7F030175
- public const int subtitleTextAppearance = 2130903413;
-
- // aapt resource value: 0x7F030176
- public const int subtitleTextColor = 2130903414;
-
- // aapt resource value: 0x7F030177
- public const int subtitleTextStyle = 2130903415;
-
- // aapt resource value: 0x7F030178
- public const int suggestionRowLayout = 2130903416;
-
- // aapt resource value: 0x7F030179
- public const int switchMinWidth = 2130903417;
-
- // aapt resource value: 0x7F03017A
- public const int switchPadding = 2130903418;
-
- // aapt resource value: 0x7F03017B
- public const int switchStyle = 2130903419;
-
- // aapt resource value: 0x7F03017C
- public const int switchTextAppearance = 2130903420;
-
- // aapt resource value: 0x7F03017D
- public const int tabBackground = 2130903421;
-
- // aapt resource value: 0x7F03017E
- public const int tabContentStart = 2130903422;
-
- // aapt resource value: 0x7F03017F
- public const int tabGravity = 2130903423;
-
- // aapt resource value: 0x7F030180
- public const int tabIconTint = 2130903424;
-
- // aapt resource value: 0x7F030181
- public const int tabIconTintMode = 2130903425;
-
- // aapt resource value: 0x7F030182
- public const int tabIndicator = 2130903426;
-
- // aapt resource value: 0x7F030183
- public const int tabIndicatorAnimationDuration = 2130903427;
-
- // aapt resource value: 0x7F030184
- public const int tabIndicatorColor = 2130903428;
-
- // aapt resource value: 0x7F030185
- public const int tabIndicatorFullWidth = 2130903429;
-
- // aapt resource value: 0x7F030186
- public const int tabIndicatorGravity = 2130903430;
-
- // aapt resource value: 0x7F030187
- public const int tabIndicatorHeight = 2130903431;
-
- // aapt resource value: 0x7F030188
- public const int tabInlineLabel = 2130903432;
-
- // aapt resource value: 0x7F030189
- public const int tabMaxWidth = 2130903433;
-
- // aapt resource value: 0x7F03018A
- public const int tabMinWidth = 2130903434;
-
- // aapt resource value: 0x7F03018B
- public const int tabMode = 2130903435;
-
- // aapt resource value: 0x7F03018C
- public const int tabPadding = 2130903436;
-
- // aapt resource value: 0x7F03018D
- public const int tabPaddingBottom = 2130903437;
-
- // aapt resource value: 0x7F03018E
- public const int tabPaddingEnd = 2130903438;
-
- // aapt resource value: 0x7F03018F
- public const int tabPaddingStart = 2130903439;
-
- // aapt resource value: 0x7F030190
- public const int tabPaddingTop = 2130903440;
-
- // aapt resource value: 0x7F030191
- public const int tabRippleColor = 2130903441;
-
- // aapt resource value: 0x7F030192
- public const int tabSelectedTextColor = 2130903442;
-
- // aapt resource value: 0x7F030193
- public const int tabStyle = 2130903443;
-
- // aapt resource value: 0x7F030194
- public const int tabTextAppearance = 2130903444;
-
- // aapt resource value: 0x7F030195
- public const int tabTextColor = 2130903445;
-
- // aapt resource value: 0x7F030196
- public const int tabUnboundedRipple = 2130903446;
-
- // aapt resource value: 0x7F030197
- public const int textAllCaps = 2130903447;
-
- // aapt resource value: 0x7F030198
- public const int textAppearanceBody1 = 2130903448;
-
- // aapt resource value: 0x7F030199
- public const int textAppearanceBody2 = 2130903449;
-
- // aapt resource value: 0x7F03019A
- public const int textAppearanceButton = 2130903450;
-
- // aapt resource value: 0x7F03019B
- public const int textAppearanceCaption = 2130903451;
-
- // aapt resource value: 0x7F03019C
- public const int textAppearanceHeadline1 = 2130903452;
-
- // aapt resource value: 0x7F03019D
- public const int textAppearanceHeadline2 = 2130903453;
-
- // aapt resource value: 0x7F03019E
- public const int textAppearanceHeadline3 = 2130903454;
-
- // aapt resource value: 0x7F03019F
- public const int textAppearanceHeadline4 = 2130903455;
-
- // aapt resource value: 0x7F0301A0
- public const int textAppearanceHeadline5 = 2130903456;
-
- // aapt resource value: 0x7F0301A1
- public const int textAppearanceHeadline6 = 2130903457;
-
- // aapt resource value: 0x7F0301A2
- public const int textAppearanceLargePopupMenu = 2130903458;
-
- // aapt resource value: 0x7F0301A3
- public const int textAppearanceListItem = 2130903459;
-
- // aapt resource value: 0x7F0301A4
- public const int textAppearanceListItemSecondary = 2130903460;
-
- // aapt resource value: 0x7F0301A5
- public const int textAppearanceListItemSmall = 2130903461;
-
- // aapt resource value: 0x7F0301A6
- public const int textAppearanceOverline = 2130903462;
-
- // aapt resource value: 0x7F0301A7
- public const int textAppearancePopupMenuHeader = 2130903463;
-
- // aapt resource value: 0x7F0301A8
- public const int textAppearanceSearchResultSubtitle = 2130903464;
-
- // aapt resource value: 0x7F0301A9
- public const int textAppearanceSearchResultTitle = 2130903465;
-
- // aapt resource value: 0x7F0301AA
- public const int textAppearanceSmallPopupMenu = 2130903466;
-
- // aapt resource value: 0x7F0301AB
- public const int textAppearanceSubtitle1 = 2130903467;
-
- // aapt resource value: 0x7F0301AC
- public const int textAppearanceSubtitle2 = 2130903468;
-
- // aapt resource value: 0x7F0301AD
- public const int textColorAlertDialogListItem = 2130903469;
-
- // aapt resource value: 0x7F0301AE
- public const int textColorSearchUrl = 2130903470;
-
- // aapt resource value: 0x7F0301AF
- public const int textEndPadding = 2130903471;
-
- // aapt resource value: 0x7F0301B0
- public const int textInputStyle = 2130903472;
-
- // aapt resource value: 0x7F0301B1
- public const int textStartPadding = 2130903473;
-
- // aapt resource value: 0x7F0301B2
- public const int theme = 2130903474;
-
- // aapt resource value: 0x7F0301B3
- public const int thickness = 2130903475;
-
- // aapt resource value: 0x7F0301B4
- public const int thumbTextPadding = 2130903476;
-
- // aapt resource value: 0x7F0301B5
- public const int thumbTint = 2130903477;
-
- // aapt resource value: 0x7F0301B6
- public const int thumbTintMode = 2130903478;
-
- // aapt resource value: 0x7F0301B7
- public const int tickMark = 2130903479;
-
- // aapt resource value: 0x7F0301B8
- public const int tickMarkTint = 2130903480;
-
- // aapt resource value: 0x7F0301B9
- public const int tickMarkTintMode = 2130903481;
-
- // aapt resource value: 0x7F0301BA
- public const int tint = 2130903482;
-
- // aapt resource value: 0x7F0301BB
- public const int tintMode = 2130903483;
-
- // aapt resource value: 0x7F0301BC
- public const int title = 2130903484;
-
- // aapt resource value: 0x7F0301BD
- public const int titleEnabled = 2130903485;
-
- // aapt resource value: 0x7F0301BE
- public const int titleMargin = 2130903486;
-
- // aapt resource value: 0x7F0301BF
- public const int titleMarginBottom = 2130903487;
-
- // aapt resource value: 0x7F0301C0
- public const int titleMarginEnd = 2130903488;
-
- // aapt resource value: 0x7F0301C3
- public const int titleMargins = 2130903491;
-
- // aapt resource value: 0x7F0301C1
- public const int titleMarginStart = 2130903489;
-
- // aapt resource value: 0x7F0301C2
- public const int titleMarginTop = 2130903490;
-
- // aapt resource value: 0x7F0301C4
- public const int titleTextAppearance = 2130903492;
-
- // aapt resource value: 0x7F0301C5
- public const int titleTextColor = 2130903493;
-
- // aapt resource value: 0x7F0301C6
- public const int titleTextStyle = 2130903494;
-
- // aapt resource value: 0x7F0301C7
- public const int toolbarId = 2130903495;
-
- // aapt resource value: 0x7F0301C8
- public const int toolbarNavigationButtonStyle = 2130903496;
-
- // aapt resource value: 0x7F0301C9
- public const int toolbarStyle = 2130903497;
-
- // aapt resource value: 0x7F0301CA
- public const int tooltipForegroundColor = 2130903498;
-
- // aapt resource value: 0x7F0301CB
- public const int tooltipFrameBackground = 2130903499;
-
- // aapt resource value: 0x7F0301CC
- public const int tooltipText = 2130903500;
-
- // aapt resource value: 0x7F0301CD
- public const int track = 2130903501;
-
- // aapt resource value: 0x7F0301CE
- public const int trackTint = 2130903502;
-
- // aapt resource value: 0x7F0301CF
- public const int trackTintMode = 2130903503;
-
- // aapt resource value: 0x7F0301D0
- public const int ttcIndex = 2130903504;
-
- // aapt resource value: 0x7F0301D1
- public const int useCompatPadding = 2130903505;
-
- // aapt resource value: 0x7F0301D2
- public const int viewInflaterClass = 2130903506;
-
- // aapt resource value: 0x7F0301D3
- public const int voiceIcon = 2130903507;
-
- // aapt resource value: 0x7F0301D4
- public const int windowActionBar = 2130903508;
-
- // aapt resource value: 0x7F0301D5
- public const int windowActionBarOverlay = 2130903509;
-
- // aapt resource value: 0x7F0301D6
- public const int windowActionModeOverlay = 2130903510;
-
- // aapt resource value: 0x7F0301D7
- public const int windowFixedHeightMajor = 2130903511;
-
- // aapt resource value: 0x7F0301D8
- public const int windowFixedHeightMinor = 2130903512;
-
- // aapt resource value: 0x7F0301D9
- public const int windowFixedWidthMajor = 2130903513;
-
- // aapt resource value: 0x7F0301DA
- public const int windowFixedWidthMinor = 2130903514;
-
- // aapt resource value: 0x7F0301DB
- public const int windowMinWidthMajor = 2130903515;
-
- // aapt resource value: 0x7F0301DC
- public const int windowMinWidthMinor = 2130903516;
-
- // aapt resource value: 0x7F0301DD
- public const int windowNoTitle = 2130903517;
-
- static Attribute()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Attribute()
- {
- }
- }
-
- public partial class Boolean
- {
-
- // aapt resource value: 0x7F040000
- public const int abc_action_bar_embed_tabs = 2130968576;
-
- // aapt resource value: 0x7F040001
- public const int abc_allow_stacked_button_bar = 2130968577;
-
- // aapt resource value: 0x7F040002
- public const int abc_config_actionMenuItemAllCaps = 2130968578;
-
- // aapt resource value: 0x7F040003
- public const int mtrl_btn_textappearance_all_caps = 2130968579;
-
- static Boolean()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Boolean()
- {
- }
- }
-
- public partial class Color
- {
-
- // aapt resource value: 0x7F050000
- public const int abc_background_cache_hint_selector_material_dark = 2131034112;
-
- // aapt resource value: 0x7F050001
- public const int abc_background_cache_hint_selector_material_light = 2131034113;
-
- // aapt resource value: 0x7F050002
- public const int abc_btn_colored_borderless_text_material = 2131034114;
-
- // aapt resource value: 0x7F050003
- public const int abc_btn_colored_text_material = 2131034115;
-
- // aapt resource value: 0x7F050004
- public const int abc_color_highlight_material = 2131034116;
-
- // aapt resource value: 0x7F050005
- public const int abc_hint_foreground_material_dark = 2131034117;
-
- // aapt resource value: 0x7F050006
- public const int abc_hint_foreground_material_light = 2131034118;
-
- // aapt resource value: 0x7F050007
- public const int abc_input_method_navigation_guard = 2131034119;
-
- // aapt resource value: 0x7F050008
- public const int abc_primary_text_disable_only_material_dark = 2131034120;
-
- // aapt resource value: 0x7F050009
- public const int abc_primary_text_disable_only_material_light = 2131034121;
-
- // aapt resource value: 0x7F05000A
- public const int abc_primary_text_material_dark = 2131034122;
-
- // aapt resource value: 0x7F05000B
- public const int abc_primary_text_material_light = 2131034123;
-
- // aapt resource value: 0x7F05000C
- public const int abc_search_url_text = 2131034124;
-
- // aapt resource value: 0x7F05000D
- public const int abc_search_url_text_normal = 2131034125;
-
- // aapt resource value: 0x7F05000E
- public const int abc_search_url_text_pressed = 2131034126;
-
- // aapt resource value: 0x7F05000F
- public const int abc_search_url_text_selected = 2131034127;
-
- // aapt resource value: 0x7F050010
- public const int abc_secondary_text_material_dark = 2131034128;
-
- // aapt resource value: 0x7F050011
- public const int abc_secondary_text_material_light = 2131034129;
-
- // aapt resource value: 0x7F050012
- public const int abc_tint_btn_checkable = 2131034130;
-
- // aapt resource value: 0x7F050013
- public const int abc_tint_default = 2131034131;
-
- // aapt resource value: 0x7F050014
- public const int abc_tint_edittext = 2131034132;
-
- // aapt resource value: 0x7F050015
- public const int abc_tint_seek_thumb = 2131034133;
-
- // aapt resource value: 0x7F050016
- public const int abc_tint_spinner = 2131034134;
-
- // aapt resource value: 0x7F050017
- public const int abc_tint_switch_track = 2131034135;
-
- // aapt resource value: 0x7F050018
- public const int accent_material_dark = 2131034136;
-
- // aapt resource value: 0x7F050019
- public const int accent_material_light = 2131034137;
-
- // aapt resource value: 0x7F05001A
- public const int background_floating_material_dark = 2131034138;
-
- // aapt resource value: 0x7F05001B
- public const int background_floating_material_light = 2131034139;
-
- // aapt resource value: 0x7F05001C
- public const int background_material_dark = 2131034140;
-
- // aapt resource value: 0x7F05001D
- public const int background_material_light = 2131034141;
-
- // aapt resource value: 0x7F05001E
- public const int bright_foreground_disabled_material_dark = 2131034142;
-
- // aapt resource value: 0x7F05001F
- public const int bright_foreground_disabled_material_light = 2131034143;
-
- // aapt resource value: 0x7F050020
- public const int bright_foreground_inverse_material_dark = 2131034144;
-
- // aapt resource value: 0x7F050021
- public const int bright_foreground_inverse_material_light = 2131034145;
-
- // aapt resource value: 0x7F050022
- public const int bright_foreground_material_dark = 2131034146;
-
- // aapt resource value: 0x7F050023
- public const int bright_foreground_material_light = 2131034147;
-
- // aapt resource value: 0x7F050024
- public const int browser_actions_bg_grey = 2131034148;
-
- // aapt resource value: 0x7F050025
- public const int browser_actions_divider_color = 2131034149;
-
- // aapt resource value: 0x7F050026
- public const int browser_actions_text_color = 2131034150;
-
- // aapt resource value: 0x7F050027
- public const int browser_actions_title_color = 2131034151;
-
- // aapt resource value: 0x7F050028
- public const int button_material_dark = 2131034152;
-
- // aapt resource value: 0x7F050029
- public const int button_material_light = 2131034153;
-
- // aapt resource value: 0x7F05002A
- public const int cardview_dark_background = 2131034154;
-
- // aapt resource value: 0x7F05002B
- public const int cardview_light_background = 2131034155;
-
- // aapt resource value: 0x7F05002C
- public const int cardview_shadow_end_color = 2131034156;
-
- // aapt resource value: 0x7F05002D
- public const int cardview_shadow_start_color = 2131034157;
-
- // aapt resource value: 0x7F05002E
- public const int colorAccent = 2131034158;
-
- // aapt resource value: 0x7F05002F
- public const int colorPrimary = 2131034159;
-
- // aapt resource value: 0x7F050030
- public const int colorPrimaryDark = 2131034160;
-
- // aapt resource value: 0x7F050031
- public const int design_bottom_navigation_shadow_color = 2131034161;
-
- // aapt resource value: 0x7F050032
- public const int design_default_color_primary = 2131034162;
-
- // aapt resource value: 0x7F050033
- public const int design_default_color_primary_dark = 2131034163;
-
- // aapt resource value: 0x7F050034
- public const int design_error = 2131034164;
-
- // aapt resource value: 0x7F050035
- public const int design_fab_shadow_end_color = 2131034165;
-
- // aapt resource value: 0x7F050036
- public const int design_fab_shadow_mid_color = 2131034166;
-
- // aapt resource value: 0x7F050037
- public const int design_fab_shadow_start_color = 2131034167;
-
- // aapt resource value: 0x7F050038
- public const int design_fab_stroke_end_inner_color = 2131034168;
-
- // aapt resource value: 0x7F050039
- public const int design_fab_stroke_end_outer_color = 2131034169;
-
- // aapt resource value: 0x7F05003A
- public const int design_fab_stroke_top_inner_color = 2131034170;
-
- // aapt resource value: 0x7F05003B
- public const int design_fab_stroke_top_outer_color = 2131034171;
-
- // aapt resource value: 0x7F05003C
- public const int design_snackbar_background_color = 2131034172;
-
- // aapt resource value: 0x7F05003D
- public const int design_tint_password_toggle = 2131034173;
-
- // aapt resource value: 0x7F05003E
- public const int dim_foreground_disabled_material_dark = 2131034174;
-
- // aapt resource value: 0x7F05003F
- public const int dim_foreground_disabled_material_light = 2131034175;
-
- // aapt resource value: 0x7F050040
- public const int dim_foreground_material_dark = 2131034176;
-
- // aapt resource value: 0x7F050041
- public const int dim_foreground_material_light = 2131034177;
-
- // aapt resource value: 0x7F050042
- public const int error_color_material_dark = 2131034178;
-
- // aapt resource value: 0x7F050043
- public const int error_color_material_light = 2131034179;
-
- // aapt resource value: 0x7F050044
- public const int foreground_material_dark = 2131034180;
-
- // aapt resource value: 0x7F050045
- public const int foreground_material_light = 2131034181;
-
- // aapt resource value: 0x7F050046
- public const int highlighted_text_material_dark = 2131034182;
-
- // aapt resource value: 0x7F050047
- public const int highlighted_text_material_light = 2131034183;
-
- // aapt resource value: 0x7F050048
- public const int launcher_background = 2131034184;
-
- // aapt resource value: 0x7F050049
- public const int material_blue_grey_800 = 2131034185;
-
- // aapt resource value: 0x7F05004A
- public const int material_blue_grey_900 = 2131034186;
-
- // aapt resource value: 0x7F05004B
- public const int material_blue_grey_950 = 2131034187;
-
- // aapt resource value: 0x7F05004C
- public const int material_deep_teal_200 = 2131034188;
-
- // aapt resource value: 0x7F05004D
- public const int material_deep_teal_500 = 2131034189;
-
- // aapt resource value: 0x7F05004E
- public const int material_grey_100 = 2131034190;
-
- // aapt resource value: 0x7F05004F
- public const int material_grey_300 = 2131034191;
-
- // aapt resource value: 0x7F050050
- public const int material_grey_50 = 2131034192;
-
- // aapt resource value: 0x7F050051
- public const int material_grey_600 = 2131034193;
-
- // aapt resource value: 0x7F050052
- public const int material_grey_800 = 2131034194;
-
- // aapt resource value: 0x7F050053
- public const int material_grey_850 = 2131034195;
-
- // aapt resource value: 0x7F050054
- public const int material_grey_900 = 2131034196;
-
- // aapt resource value: 0x7F050055
- public const int mtrl_bottom_nav_colored_item_tint = 2131034197;
-
- // aapt resource value: 0x7F050056
- public const int mtrl_bottom_nav_item_tint = 2131034198;
-
- // aapt resource value: 0x7F050057
- public const int mtrl_btn_bg_color_disabled = 2131034199;
-
- // aapt resource value: 0x7F050058
- public const int mtrl_btn_bg_color_selector = 2131034200;
-
- // aapt resource value: 0x7F050059
- public const int mtrl_btn_ripple_color = 2131034201;
-
- // aapt resource value: 0x7F05005A
- public const int mtrl_btn_stroke_color_selector = 2131034202;
-
- // aapt resource value: 0x7F05005B
- public const int mtrl_btn_text_btn_ripple_color = 2131034203;
-
- // aapt resource value: 0x7F05005C
- public const int mtrl_btn_text_color_disabled = 2131034204;
-
- // aapt resource value: 0x7F05005D
- public const int mtrl_btn_text_color_selector = 2131034205;
-
- // aapt resource value: 0x7F05005E
- public const int mtrl_btn_transparent_bg_color = 2131034206;
-
- // aapt resource value: 0x7F05005F
- public const int mtrl_chip_background_color = 2131034207;
-
- // aapt resource value: 0x7F050060
- public const int mtrl_chip_close_icon_tint = 2131034208;
-
- // aapt resource value: 0x7F050061
- public const int mtrl_chip_ripple_color = 2131034209;
-
- // aapt resource value: 0x7F050062
- public const int mtrl_chip_text_color = 2131034210;
-
- // aapt resource value: 0x7F050063
- public const int mtrl_fab_ripple_color = 2131034211;
-
- // aapt resource value: 0x7F050064
- public const int mtrl_scrim_color = 2131034212;
-
- // aapt resource value: 0x7F050065
- public const int mtrl_tabs_colored_ripple_color = 2131034213;
-
- // aapt resource value: 0x7F050066
- public const int mtrl_tabs_icon_color_selector = 2131034214;
-
- // aapt resource value: 0x7F050067
- public const int mtrl_tabs_icon_color_selector_colored = 2131034215;
-
- // aapt resource value: 0x7F050068
- public const int mtrl_tabs_legacy_text_color_selector = 2131034216;
-
- // aapt resource value: 0x7F050069
- public const int mtrl_tabs_ripple_color = 2131034217;
-
- // aapt resource value: 0x7F05006B
- public const int mtrl_textinput_default_box_stroke_color = 2131034219;
-
- // aapt resource value: 0x7F05006C
- public const int mtrl_textinput_disabled_color = 2131034220;
-
- // aapt resource value: 0x7F05006D
- public const int mtrl_textinput_filled_box_default_background_color = 2131034221;
-
- // aapt resource value: 0x7F05006E
- public const int mtrl_textinput_hovered_box_stroke_color = 2131034222;
-
- // aapt resource value: 0x7F05006A
- public const int mtrl_text_btn_text_color_selector = 2131034218;
-
- // aapt resource value: 0x7F05006F
- public const int notification_action_color_filter = 2131034223;
-
- // aapt resource value: 0x7F050070
- public const int notification_icon_bg_color = 2131034224;
-
- // aapt resource value: 0x7F050071
- public const int notification_material_background_media_default_color = 2131034225;
-
- // aapt resource value: 0x7F050072
- public const int primary_dark_material_dark = 2131034226;
-
- // aapt resource value: 0x7F050073
- public const int primary_dark_material_light = 2131034227;
-
- // aapt resource value: 0x7F050074
- public const int primary_material_dark = 2131034228;
-
- // aapt resource value: 0x7F050075
- public const int primary_material_light = 2131034229;
-
- // aapt resource value: 0x7F050076
- public const int primary_text_default_material_dark = 2131034230;
-
- // aapt resource value: 0x7F050077
- public const int primary_text_default_material_light = 2131034231;
-
- // aapt resource value: 0x7F050078
- public const int primary_text_disabled_material_dark = 2131034232;
-
- // aapt resource value: 0x7F050079
- public const int primary_text_disabled_material_light = 2131034233;
-
- // aapt resource value: 0x7F05007A
- public const int ripple_material_dark = 2131034234;
-
- // aapt resource value: 0x7F05007B
- public const int ripple_material_light = 2131034235;
-
- // aapt resource value: 0x7F05007C
- public const int secondary_text_default_material_dark = 2131034236;
-
- // aapt resource value: 0x7F05007D
- public const int secondary_text_default_material_light = 2131034237;
-
- // aapt resource value: 0x7F05007E
- public const int secondary_text_disabled_material_dark = 2131034238;
-
- // aapt resource value: 0x7F05007F
- public const int secondary_text_disabled_material_light = 2131034239;
-
- // aapt resource value: 0x7F050080
- public const int switch_thumb_disabled_material_dark = 2131034240;
-
- // aapt resource value: 0x7F050081
- public const int switch_thumb_disabled_material_light = 2131034241;
-
- // aapt resource value: 0x7F050082
- public const int switch_thumb_material_dark = 2131034242;
-
- // aapt resource value: 0x7F050083
- public const int switch_thumb_material_light = 2131034243;
-
- // aapt resource value: 0x7F050084
- public const int switch_thumb_normal_material_dark = 2131034244;
-
- // aapt resource value: 0x7F050085
- public const int switch_thumb_normal_material_light = 2131034245;
-
- // aapt resource value: 0x7F050086
- public const int tooltip_background_dark = 2131034246;
-
- // aapt resource value: 0x7F050087
- public const int tooltip_background_light = 2131034247;
-
- static Color()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Color()
- {
- }
- }
-
- public partial class Dimension
- {
-
- // aapt resource value: 0x7F060000
- public const int abc_action_bar_content_inset_material = 2131099648;
-
- // aapt resource value: 0x7F060001
- public const int abc_action_bar_content_inset_with_nav = 2131099649;
-
- // aapt resource value: 0x7F060002
- public const int abc_action_bar_default_height_material = 2131099650;
-
- // aapt resource value: 0x7F060003
- public const int abc_action_bar_default_padding_end_material = 2131099651;
-
- // aapt resource value: 0x7F060004
- public const int abc_action_bar_default_padding_start_material = 2131099652;
-
- // aapt resource value: 0x7F060005
- public const int abc_action_bar_elevation_material = 2131099653;
-
- // aapt resource value: 0x7F060006
- public const int abc_action_bar_icon_vertical_padding_material = 2131099654;
-
- // aapt resource value: 0x7F060007
- public const int abc_action_bar_overflow_padding_end_material = 2131099655;
-
- // aapt resource value: 0x7F060008
- public const int abc_action_bar_overflow_padding_start_material = 2131099656;
-
- // aapt resource value: 0x7F060009
- public const int abc_action_bar_stacked_max_height = 2131099657;
-
- // aapt resource value: 0x7F06000A
- public const int abc_action_bar_stacked_tab_max_width = 2131099658;
-
- // aapt resource value: 0x7F06000B
- public const int abc_action_bar_subtitle_bottom_margin_material = 2131099659;
-
- // aapt resource value: 0x7F06000C
- public const int abc_action_bar_subtitle_top_margin_material = 2131099660;
-
- // aapt resource value: 0x7F06000D
- public const int abc_action_button_min_height_material = 2131099661;
-
- // aapt resource value: 0x7F06000E
- public const int abc_action_button_min_width_material = 2131099662;
-
- // aapt resource value: 0x7F06000F
- public const int abc_action_button_min_width_overflow_material = 2131099663;
-
- // aapt resource value: 0x7F060010
- public const int abc_alert_dialog_button_bar_height = 2131099664;
-
- // aapt resource value: 0x7F060011
- public const int abc_alert_dialog_button_dimen = 2131099665;
-
- // aapt resource value: 0x7F060012
- public const int abc_button_inset_horizontal_material = 2131099666;
-
- // aapt resource value: 0x7F060013
- public const int abc_button_inset_vertical_material = 2131099667;
-
- // aapt resource value: 0x7F060014
- public const int abc_button_padding_horizontal_material = 2131099668;
-
- // aapt resource value: 0x7F060015
- public const int abc_button_padding_vertical_material = 2131099669;
-
- // aapt resource value: 0x7F060016
- public const int abc_cascading_menus_min_smallest_width = 2131099670;
-
- // aapt resource value: 0x7F060017
- public const int abc_config_prefDialogWidth = 2131099671;
-
- // aapt resource value: 0x7F060018
- public const int abc_control_corner_material = 2131099672;
-
- // aapt resource value: 0x7F060019
- public const int abc_control_inset_material = 2131099673;
-
- // aapt resource value: 0x7F06001A
- public const int abc_control_padding_material = 2131099674;
-
- // aapt resource value: 0x7F06001B
- public const int abc_dialog_corner_radius_material = 2131099675;
-
- // aapt resource value: 0x7F06001C
- public const int abc_dialog_fixed_height_major = 2131099676;
-
- // aapt resource value: 0x7F06001D
- public const int abc_dialog_fixed_height_minor = 2131099677;
-
- // aapt resource value: 0x7F06001E
- public const int abc_dialog_fixed_width_major = 2131099678;
-
- // aapt resource value: 0x7F06001F
- public const int abc_dialog_fixed_width_minor = 2131099679;
-
- // aapt resource value: 0x7F060020
- public const int abc_dialog_list_padding_bottom_no_buttons = 2131099680;
-
- // aapt resource value: 0x7F060021
- public const int abc_dialog_list_padding_top_no_title = 2131099681;
-
- // aapt resource value: 0x7F060022
- public const int abc_dialog_min_width_major = 2131099682;
-
- // aapt resource value: 0x7F060023
- public const int abc_dialog_min_width_minor = 2131099683;
-
- // aapt resource value: 0x7F060024
- public const int abc_dialog_padding_material = 2131099684;
-
- // aapt resource value: 0x7F060025
- public const int abc_dialog_padding_top_material = 2131099685;
-
- // aapt resource value: 0x7F060026
- public const int abc_dialog_title_divider_material = 2131099686;
-
- // aapt resource value: 0x7F060027
- public const int abc_disabled_alpha_material_dark = 2131099687;
-
- // aapt resource value: 0x7F060028
- public const int abc_disabled_alpha_material_light = 2131099688;
-
- // aapt resource value: 0x7F060029
- public const int abc_dropdownitem_icon_width = 2131099689;
-
- // aapt resource value: 0x7F06002A
- public const int abc_dropdownitem_text_padding_left = 2131099690;
-
- // aapt resource value: 0x7F06002B
- public const int abc_dropdownitem_text_padding_right = 2131099691;
-
- // aapt resource value: 0x7F06002C
- public const int abc_edit_text_inset_bottom_material = 2131099692;
-
- // aapt resource value: 0x7F06002D
- public const int abc_edit_text_inset_horizontal_material = 2131099693;
-
- // aapt resource value: 0x7F06002E
- public const int abc_edit_text_inset_top_material = 2131099694;
-
- // aapt resource value: 0x7F06002F
- public const int abc_floating_window_z = 2131099695;
-
- // aapt resource value: 0x7F060030
- public const int abc_list_item_padding_horizontal_material = 2131099696;
-
- // aapt resource value: 0x7F060031
- public const int abc_panel_menu_list_width = 2131099697;
-
- // aapt resource value: 0x7F060032
- public const int abc_progress_bar_height_material = 2131099698;
-
- // aapt resource value: 0x7F060033
- public const int abc_search_view_preferred_height = 2131099699;
-
- // aapt resource value: 0x7F060034
- public const int abc_search_view_preferred_width = 2131099700;
-
- // aapt resource value: 0x7F060035
- public const int abc_seekbar_track_background_height_material = 2131099701;
-
- // aapt resource value: 0x7F060036
- public const int abc_seekbar_track_progress_height_material = 2131099702;
-
- // aapt resource value: 0x7F060037
- public const int abc_select_dialog_padding_start_material = 2131099703;
-
- // aapt resource value: 0x7F060038
- public const int abc_switch_padding = 2131099704;
-
- // aapt resource value: 0x7F060039
- public const int abc_text_size_body_1_material = 2131099705;
-
- // aapt resource value: 0x7F06003A
- public const int abc_text_size_body_2_material = 2131099706;
-
- // aapt resource value: 0x7F06003B
- public const int abc_text_size_button_material = 2131099707;
-
- // aapt resource value: 0x7F06003C
- public const int abc_text_size_caption_material = 2131099708;
-
- // aapt resource value: 0x7F06003D
- public const int abc_text_size_display_1_material = 2131099709;
-
- // aapt resource value: 0x7F06003E
- public const int abc_text_size_display_2_material = 2131099710;
-
- // aapt resource value: 0x7F06003F
- public const int abc_text_size_display_3_material = 2131099711;
-
- // aapt resource value: 0x7F060040
- public const int abc_text_size_display_4_material = 2131099712;
-
- // aapt resource value: 0x7F060041
- public const int abc_text_size_headline_material = 2131099713;
-
- // aapt resource value: 0x7F060042
- public const int abc_text_size_large_material = 2131099714;
-
- // aapt resource value: 0x7F060043
- public const int abc_text_size_medium_material = 2131099715;
-
- // aapt resource value: 0x7F060044
- public const int abc_text_size_menu_header_material = 2131099716;
-
- // aapt resource value: 0x7F060045
- public const int abc_text_size_menu_material = 2131099717;
-
- // aapt resource value: 0x7F060046
- public const int abc_text_size_small_material = 2131099718;
-
- // aapt resource value: 0x7F060047
- public const int abc_text_size_subhead_material = 2131099719;
-
- // aapt resource value: 0x7F060048
- public const int abc_text_size_subtitle_material_toolbar = 2131099720;
-
- // aapt resource value: 0x7F060049
- public const int abc_text_size_title_material = 2131099721;
-
- // aapt resource value: 0x7F06004A
- public const int abc_text_size_title_material_toolbar = 2131099722;
-
- // aapt resource value: 0x7F06004B
- public const int browser_actions_context_menu_max_width = 2131099723;
-
- // aapt resource value: 0x7F06004C
- public const int browser_actions_context_menu_min_padding = 2131099724;
-
- // aapt resource value: 0x7F06004D
- public const int cardview_compat_inset_shadow = 2131099725;
-
- // aapt resource value: 0x7F06004E
- public const int cardview_default_elevation = 2131099726;
-
- // aapt resource value: 0x7F06004F
- public const int cardview_default_radius = 2131099727;
-
- // aapt resource value: 0x7F060050
- public const int compat_button_inset_horizontal_material = 2131099728;
-
- // aapt resource value: 0x7F060051
- public const int compat_button_inset_vertical_material = 2131099729;
-
- // aapt resource value: 0x7F060052
- public const int compat_button_padding_horizontal_material = 2131099730;
-
- // aapt resource value: 0x7F060053
- public const int compat_button_padding_vertical_material = 2131099731;
-
- // aapt resource value: 0x7F060054
- public const int compat_control_corner_material = 2131099732;
-
- // aapt resource value: 0x7F060055
- public const int compat_notification_large_icon_max_height = 2131099733;
-
- // aapt resource value: 0x7F060056
- public const int compat_notification_large_icon_max_width = 2131099734;
-
- // aapt resource value: 0x7F060057
- public const int design_appbar_elevation = 2131099735;
-
- // aapt resource value: 0x7F060058
- public const int design_bottom_navigation_active_item_max_width = 2131099736;
-
- // aapt resource value: 0x7F060059
- public const int design_bottom_navigation_active_item_min_width = 2131099737;
-
- // aapt resource value: 0x7F06005A
- public const int design_bottom_navigation_active_text_size = 2131099738;
-
- // aapt resource value: 0x7F06005B
- public const int design_bottom_navigation_elevation = 2131099739;
-
- // aapt resource value: 0x7F06005C
- public const int design_bottom_navigation_height = 2131099740;
-
- // aapt resource value: 0x7F06005D
- public const int design_bottom_navigation_icon_size = 2131099741;
-
- // aapt resource value: 0x7F06005E
- public const int design_bottom_navigation_item_max_width = 2131099742;
-
- // aapt resource value: 0x7F06005F
- public const int design_bottom_navigation_item_min_width = 2131099743;
-
- // aapt resource value: 0x7F060060
- public const int design_bottom_navigation_margin = 2131099744;
-
- // aapt resource value: 0x7F060061
- public const int design_bottom_navigation_shadow_height = 2131099745;
-
- // aapt resource value: 0x7F060062
- public const int design_bottom_navigation_text_size = 2131099746;
-
- // aapt resource value: 0x7F060063
- public const int design_bottom_sheet_modal_elevation = 2131099747;
-
- // aapt resource value: 0x7F060064
- public const int design_bottom_sheet_peek_height_min = 2131099748;
-
- // aapt resource value: 0x7F060065
- public const int design_fab_border_width = 2131099749;
-
- // aapt resource value: 0x7F060066
- public const int design_fab_elevation = 2131099750;
-
- // aapt resource value: 0x7F060067
- public const int design_fab_image_size = 2131099751;
-
- // aapt resource value: 0x7F060068
- public const int design_fab_size_mini = 2131099752;
-
- // aapt resource value: 0x7F060069
- public const int design_fab_size_normal = 2131099753;
-
- // aapt resource value: 0x7F06006A
- public const int design_fab_translation_z_hovered_focused = 2131099754;
-
- // aapt resource value: 0x7F06006B
- public const int design_fab_translation_z_pressed = 2131099755;
-
- // aapt resource value: 0x7F06006C
- public const int design_navigation_elevation = 2131099756;
-
- // aapt resource value: 0x7F06006D
- public const int design_navigation_icon_padding = 2131099757;
-
- // aapt resource value: 0x7F06006E
- public const int design_navigation_icon_size = 2131099758;
-
- // aapt resource value: 0x7F06006F
- public const int design_navigation_item_horizontal_padding = 2131099759;
-
- // aapt resource value: 0x7F060070
- public const int design_navigation_item_icon_padding = 2131099760;
-
- // aapt resource value: 0x7F060071
- public const int design_navigation_max_width = 2131099761;
-
- // aapt resource value: 0x7F060072
- public const int design_navigation_padding_bottom = 2131099762;
-
- // aapt resource value: 0x7F060073
- public const int design_navigation_separator_vertical_padding = 2131099763;
-
- // aapt resource value: 0x7F060074
- public const int design_snackbar_action_inline_max_width = 2131099764;
-
- // aapt resource value: 0x7F060075
- public const int design_snackbar_background_corner_radius = 2131099765;
-
- // aapt resource value: 0x7F060076
- public const int design_snackbar_elevation = 2131099766;
-
- // aapt resource value: 0x7F060077
- public const int design_snackbar_extra_spacing_horizontal = 2131099767;
-
- // aapt resource value: 0x7F060078
- public const int design_snackbar_max_width = 2131099768;
-
- // aapt resource value: 0x7F060079
- public const int design_snackbar_min_width = 2131099769;
-
- // aapt resource value: 0x7F06007A
- public const int design_snackbar_padding_horizontal = 2131099770;
-
- // aapt resource value: 0x7F06007B
- public const int design_snackbar_padding_vertical = 2131099771;
-
- // aapt resource value: 0x7F06007C
- public const int design_snackbar_padding_vertical_2lines = 2131099772;
-
- // aapt resource value: 0x7F06007D
- public const int design_snackbar_text_size = 2131099773;
-
- // aapt resource value: 0x7F06007E
- public const int design_tab_max_width = 2131099774;
-
- // aapt resource value: 0x7F06007F
- public const int design_tab_scrollable_min_width = 2131099775;
-
- // aapt resource value: 0x7F060080
- public const int design_tab_text_size = 2131099776;
-
- // aapt resource value: 0x7F060081
- public const int design_tab_text_size_2line = 2131099777;
-
- // aapt resource value: 0x7F060082
- public const int design_textinput_caption_translate_y = 2131099778;
-
- // aapt resource value: 0x7F060083
- public const int disabled_alpha_material_dark = 2131099779;
-
- // aapt resource value: 0x7F060084
- public const int disabled_alpha_material_light = 2131099780;
-
- // aapt resource value: 0x7F060085
- public const int fastscroll_default_thickness = 2131099781;
-
- // aapt resource value: 0x7F060086
- public const int fastscroll_margin = 2131099782;
-
- // aapt resource value: 0x7F060087
- public const int fastscroll_minimum_range = 2131099783;
-
- // aapt resource value: 0x7F060088
- public const int highlight_alpha_material_colored = 2131099784;
-
- // aapt resource value: 0x7F060089
- public const int highlight_alpha_material_dark = 2131099785;
-
- // aapt resource value: 0x7F06008A
- public const int highlight_alpha_material_light = 2131099786;
-
- // aapt resource value: 0x7F06008B
- public const int hint_alpha_material_dark = 2131099787;
-
- // aapt resource value: 0x7F06008C
- public const int hint_alpha_material_light = 2131099788;
-
- // aapt resource value: 0x7F06008D
- public const int hint_pressed_alpha_material_dark = 2131099789;
-
- // aapt resource value: 0x7F06008E
- public const int hint_pressed_alpha_material_light = 2131099790;
-
- // aapt resource value: 0x7F06008F
- public const int item_touch_helper_max_drag_scroll_per_frame = 2131099791;
-
- // aapt resource value: 0x7F060090
- public const int item_touch_helper_swipe_escape_max_velocity = 2131099792;
-
- // aapt resource value: 0x7F060091
- public const int item_touch_helper_swipe_escape_velocity = 2131099793;
-
- // aapt resource value: 0x7F060092
- public const int mtrl_bottomappbar_fabOffsetEndMode = 2131099794;
-
- // aapt resource value: 0x7F060093
- public const int mtrl_bottomappbar_fab_cradle_margin = 2131099795;
-
- // aapt resource value: 0x7F060094
- public const int mtrl_bottomappbar_fab_cradle_rounded_corner_radius = 2131099796;
-
- // aapt resource value: 0x7F060095
- public const int mtrl_bottomappbar_fab_cradle_vertical_offset = 2131099797;
-
- // aapt resource value: 0x7F060096
- public const int mtrl_bottomappbar_height = 2131099798;
-
- // aapt resource value: 0x7F060097
- public const int mtrl_btn_corner_radius = 2131099799;
-
- // aapt resource value: 0x7F060098
- public const int mtrl_btn_dialog_btn_min_width = 2131099800;
-
- // aapt resource value: 0x7F060099
- public const int mtrl_btn_disabled_elevation = 2131099801;
-
- // aapt resource value: 0x7F06009A
- public const int mtrl_btn_disabled_z = 2131099802;
-
- // aapt resource value: 0x7F06009B
- public const int mtrl_btn_elevation = 2131099803;
-
- // aapt resource value: 0x7F06009C
- public const int mtrl_btn_focused_z = 2131099804;
-
- // aapt resource value: 0x7F06009D
- public const int mtrl_btn_hovered_z = 2131099805;
-
- // aapt resource value: 0x7F06009E
- public const int mtrl_btn_icon_btn_padding_left = 2131099806;
-
- // aapt resource value: 0x7F06009F
- public const int mtrl_btn_icon_padding = 2131099807;
-
- // aapt resource value: 0x7F0600A0
- public const int mtrl_btn_inset = 2131099808;
-
- // aapt resource value: 0x7F0600A1
- public const int mtrl_btn_letter_spacing = 2131099809;
-
- // aapt resource value: 0x7F0600A2
- public const int mtrl_btn_padding_bottom = 2131099810;
-
- // aapt resource value: 0x7F0600A3
- public const int mtrl_btn_padding_left = 2131099811;
-
- // aapt resource value: 0x7F0600A4
- public const int mtrl_btn_padding_right = 2131099812;
-
- // aapt resource value: 0x7F0600A5
- public const int mtrl_btn_padding_top = 2131099813;
-
- // aapt resource value: 0x7F0600A6
- public const int mtrl_btn_pressed_z = 2131099814;
-
- // aapt resource value: 0x7F0600A7
- public const int mtrl_btn_stroke_size = 2131099815;
-
- // aapt resource value: 0x7F0600A8
- public const int mtrl_btn_text_btn_icon_padding = 2131099816;
-
- // aapt resource value: 0x7F0600A9
- public const int mtrl_btn_text_btn_padding_left = 2131099817;
-
- // aapt resource value: 0x7F0600AA
- public const int mtrl_btn_text_btn_padding_right = 2131099818;
-
- // aapt resource value: 0x7F0600AB
- public const int mtrl_btn_text_size = 2131099819;
-
- // aapt resource value: 0x7F0600AC
- public const int mtrl_btn_z = 2131099820;
-
- // aapt resource value: 0x7F0600AD
- public const int mtrl_card_elevation = 2131099821;
-
- // aapt resource value: 0x7F0600AE
- public const int mtrl_card_spacing = 2131099822;
-
- // aapt resource value: 0x7F0600AF
- public const int mtrl_chip_pressed_translation_z = 2131099823;
-
- // aapt resource value: 0x7F0600B0
- public const int mtrl_chip_text_size = 2131099824;
-
- // aapt resource value: 0x7F0600B1
- public const int mtrl_fab_elevation = 2131099825;
-
- // aapt resource value: 0x7F0600B2
- public const int mtrl_fab_translation_z_hovered_focused = 2131099826;
-
- // aapt resource value: 0x7F0600B3
- public const int mtrl_fab_translation_z_pressed = 2131099827;
-
- // aapt resource value: 0x7F0600B4
- public const int mtrl_navigation_elevation = 2131099828;
-
- // aapt resource value: 0x7F0600B5
- public const int mtrl_navigation_item_horizontal_padding = 2131099829;
-
- // aapt resource value: 0x7F0600B6
- public const int mtrl_navigation_item_icon_padding = 2131099830;
-
- // aapt resource value: 0x7F0600B7
- public const int mtrl_snackbar_background_corner_radius = 2131099831;
-
- // aapt resource value: 0x7F0600B8
- public const int mtrl_snackbar_margin = 2131099832;
-
- // aapt resource value: 0x7F0600B9
- public const int mtrl_textinput_box_bottom_offset = 2131099833;
-
- // aapt resource value: 0x7F0600BA
- public const int mtrl_textinput_box_corner_radius_medium = 2131099834;
-
- // aapt resource value: 0x7F0600BB
- public const int mtrl_textinput_box_corner_radius_small = 2131099835;
-
- // aapt resource value: 0x7F0600BC
- public const int mtrl_textinput_box_label_cutout_padding = 2131099836;
-
- // aapt resource value: 0x7F0600BD
- public const int mtrl_textinput_box_padding_end = 2131099837;
-
- // aapt resource value: 0x7F0600BE
- public const int mtrl_textinput_box_stroke_width_default = 2131099838;
-
- // aapt resource value: 0x7F0600BF
- public const int mtrl_textinput_box_stroke_width_focused = 2131099839;
-
- // aapt resource value: 0x7F0600C0
- public const int mtrl_textinput_outline_box_expanded_padding = 2131099840;
-
- // aapt resource value: 0x7F0600C1
- public const int mtrl_toolbar_default_height = 2131099841;
-
- // aapt resource value: 0x7F0600C2
- public const int notification_action_icon_size = 2131099842;
-
- // aapt resource value: 0x7F0600C3
- public const int notification_action_text_size = 2131099843;
-
- // aapt resource value: 0x7F0600C4
- public const int notification_big_circle_margin = 2131099844;
-
- // aapt resource value: 0x7F0600C5
- public const int notification_content_margin_start = 2131099845;
-
- // aapt resource value: 0x7F0600C6
- public const int notification_large_icon_height = 2131099846;
-
- // aapt resource value: 0x7F0600C7
- public const int notification_large_icon_width = 2131099847;
-
- // aapt resource value: 0x7F0600C8
- public const int notification_main_column_padding_top = 2131099848;
-
- // aapt resource value: 0x7F0600C9
- public const int notification_media_narrow_margin = 2131099849;
-
- // aapt resource value: 0x7F0600CA
- public const int notification_right_icon_size = 2131099850;
-
- // aapt resource value: 0x7F0600CB
- public const int notification_right_side_padding_top = 2131099851;
-
- // aapt resource value: 0x7F0600CC
- public const int notification_small_icon_background_padding = 2131099852;
-
- // aapt resource value: 0x7F0600CD
- public const int notification_small_icon_size_as_large = 2131099853;
-
- // aapt resource value: 0x7F0600CE
- public const int notification_subtext_size = 2131099854;
-
- // aapt resource value: 0x7F0600CF
- public const int notification_top_pad = 2131099855;
-
- // aapt resource value: 0x7F0600D0
- public const int notification_top_pad_large_text = 2131099856;
-
- // aapt resource value: 0x7F0600D1
- public const int subtitle_corner_radius = 2131099857;
-
- // aapt resource value: 0x7F0600D2
- public const int subtitle_outline_width = 2131099858;
-
- // aapt resource value: 0x7F0600D3
- public const int subtitle_shadow_offset = 2131099859;
-
- // aapt resource value: 0x7F0600D4
- public const int subtitle_shadow_radius = 2131099860;
-
- // aapt resource value: 0x7F0600D5
- public const int tooltip_corner_radius = 2131099861;
-
- // aapt resource value: 0x7F0600D6
- public const int tooltip_horizontal_padding = 2131099862;
-
- // aapt resource value: 0x7F0600D7
- public const int tooltip_margin = 2131099863;
-
- // aapt resource value: 0x7F0600D8
- public const int tooltip_precise_anchor_extra_offset = 2131099864;
-
- // aapt resource value: 0x7F0600D9
- public const int tooltip_precise_anchor_threshold = 2131099865;
-
- // aapt resource value: 0x7F0600DA
- public const int tooltip_vertical_padding = 2131099866;
-
- // aapt resource value: 0x7F0600DB
- public const int tooltip_y_offset_non_touch = 2131099867;
-
- // aapt resource value: 0x7F0600DC
- public const int tooltip_y_offset_touch = 2131099868;
-
- static Dimension()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Dimension()
- {
- }
- }
-
- public partial class Drawable
- {
-
- // aapt resource value: 0x7F070006
- public const int abc_ab_share_pack_mtrl_alpha = 2131165190;
-
- // aapt resource value: 0x7F070007
- public const int abc_action_bar_item_background_material = 2131165191;
-
- // aapt resource value: 0x7F070008
- public const int abc_btn_borderless_material = 2131165192;
-
- // aapt resource value: 0x7F070009
- public const int abc_btn_check_material = 2131165193;
-
- // aapt resource value: 0x7F07000A
- public const int abc_btn_check_to_on_mtrl_000 = 2131165194;
-
- // aapt resource value: 0x7F07000B
- public const int abc_btn_check_to_on_mtrl_015 = 2131165195;
-
- // aapt resource value: 0x7F07000C
- public const int abc_btn_colored_material = 2131165196;
-
- // aapt resource value: 0x7F07000D
- public const int abc_btn_default_mtrl_shape = 2131165197;
-
- // aapt resource value: 0x7F07000E
- public const int abc_btn_radio_material = 2131165198;
-
- // aapt resource value: 0x7F07000F
- public const int abc_btn_radio_to_on_mtrl_000 = 2131165199;
-
- // aapt resource value: 0x7F070010
- public const int abc_btn_radio_to_on_mtrl_015 = 2131165200;
-
- // aapt resource value: 0x7F070011
- public const int abc_btn_switch_to_on_mtrl_00001 = 2131165201;
-
- // aapt resource value: 0x7F070012
- public const int abc_btn_switch_to_on_mtrl_00012 = 2131165202;
-
- // aapt resource value: 0x7F070013
- public const int abc_cab_background_internal_bg = 2131165203;
-
- // aapt resource value: 0x7F070014
- public const int abc_cab_background_top_material = 2131165204;
-
- // aapt resource value: 0x7F070015
- public const int abc_cab_background_top_mtrl_alpha = 2131165205;
-
- // aapt resource value: 0x7F070016
- public const int abc_control_background_material = 2131165206;
-
- // aapt resource value: 0x7F070017
- public const int abc_dialog_material_background = 2131165207;
-
- // aapt resource value: 0x7F070018
- public const int abc_edit_text_material = 2131165208;
-
- // aapt resource value: 0x7F070019
- public const int abc_ic_ab_back_material = 2131165209;
-
- // aapt resource value: 0x7F07001A
- public const int abc_ic_arrow_drop_right_black_24dp = 2131165210;
-
- // aapt resource value: 0x7F07001B
- public const int abc_ic_clear_material = 2131165211;
-
- // aapt resource value: 0x7F07001C
- public const int abc_ic_commit_search_api_mtrl_alpha = 2131165212;
-
- // aapt resource value: 0x7F07001D
- public const int abc_ic_go_search_api_material = 2131165213;
-
- // aapt resource value: 0x7F07001E
- public const int abc_ic_menu_copy_mtrl_am_alpha = 2131165214;
-
- // aapt resource value: 0x7F07001F
- public const int abc_ic_menu_cut_mtrl_alpha = 2131165215;
-
- // aapt resource value: 0x7F070020
- public const int abc_ic_menu_overflow_material = 2131165216;
-
- // aapt resource value: 0x7F070021
- public const int abc_ic_menu_paste_mtrl_am_alpha = 2131165217;
-
- // aapt resource value: 0x7F070022
- public const int abc_ic_menu_selectall_mtrl_alpha = 2131165218;
-
- // aapt resource value: 0x7F070023
- public const int abc_ic_menu_share_mtrl_alpha = 2131165219;
-
- // aapt resource value: 0x7F070024
- public const int abc_ic_search_api_material = 2131165220;
-
- // aapt resource value: 0x7F070025
- public const int abc_ic_star_black_16dp = 2131165221;
-
- // aapt resource value: 0x7F070026
- public const int abc_ic_star_black_36dp = 2131165222;
-
- // aapt resource value: 0x7F070027
- public const int abc_ic_star_black_48dp = 2131165223;
-
- // aapt resource value: 0x7F070028
- public const int abc_ic_star_half_black_16dp = 2131165224;
-
- // aapt resource value: 0x7F070029
- public const int abc_ic_star_half_black_36dp = 2131165225;
-
- // aapt resource value: 0x7F07002A
- public const int abc_ic_star_half_black_48dp = 2131165226;
-
- // aapt resource value: 0x7F07002B
- public const int abc_ic_voice_search_api_material = 2131165227;
-
- // aapt resource value: 0x7F07002C
- public const int abc_item_background_holo_dark = 2131165228;
-
- // aapt resource value: 0x7F07002D
- public const int abc_item_background_holo_light = 2131165229;
-
- // aapt resource value: 0x7F07002E
- public const int abc_list_divider_material = 2131165230;
-
- // aapt resource value: 0x7F07002F
- public const int abc_list_divider_mtrl_alpha = 2131165231;
-
- // aapt resource value: 0x7F070030
- public const int abc_list_focused_holo = 2131165232;
-
- // aapt resource value: 0x7F070031
- public const int abc_list_longpressed_holo = 2131165233;
-
- // aapt resource value: 0x7F070032
- public const int abc_list_pressed_holo_dark = 2131165234;
-
- // aapt resource value: 0x7F070033
- public const int abc_list_pressed_holo_light = 2131165235;
-
- // aapt resource value: 0x7F070034
- public const int abc_list_selector_background_transition_holo_dark = 2131165236;
-
- // aapt resource value: 0x7F070035
- public const int abc_list_selector_background_transition_holo_light = 2131165237;
-
- // aapt resource value: 0x7F070036
- public const int abc_list_selector_disabled_holo_dark = 2131165238;
-
- // aapt resource value: 0x7F070037
- public const int abc_list_selector_disabled_holo_light = 2131165239;
-
- // aapt resource value: 0x7F070038
- public const int abc_list_selector_holo_dark = 2131165240;
-
- // aapt resource value: 0x7F070039
- public const int abc_list_selector_holo_light = 2131165241;
-
- // aapt resource value: 0x7F07003A
- public const int abc_menu_hardkey_panel_mtrl_mult = 2131165242;
-
- // aapt resource value: 0x7F07003B
- public const int abc_popup_background_mtrl_mult = 2131165243;
-
- // aapt resource value: 0x7F07003C
- public const int abc_ratingbar_indicator_material = 2131165244;
-
- // aapt resource value: 0x7F07003D
- public const int abc_ratingbar_material = 2131165245;
-
- // aapt resource value: 0x7F07003E
- public const int abc_ratingbar_small_material = 2131165246;
-
- // aapt resource value: 0x7F07003F
- public const int abc_scrubber_control_off_mtrl_alpha = 2131165247;
-
- // aapt resource value: 0x7F070040
- public const int abc_scrubber_control_to_pressed_mtrl_000 = 2131165248;
-
- // aapt resource value: 0x7F070041
- public const int abc_scrubber_control_to_pressed_mtrl_005 = 2131165249;
-
- // aapt resource value: 0x7F070042
- public const int abc_scrubber_primary_mtrl_alpha = 2131165250;
-
- // aapt resource value: 0x7F070043
- public const int abc_scrubber_track_mtrl_alpha = 2131165251;
-
- // aapt resource value: 0x7F070044
- public const int abc_seekbar_thumb_material = 2131165252;
-
- // aapt resource value: 0x7F070045
- public const int abc_seekbar_tick_mark_material = 2131165253;
-
- // aapt resource value: 0x7F070046
- public const int abc_seekbar_track_material = 2131165254;
-
- // aapt resource value: 0x7F070047
- public const int abc_spinner_mtrl_am_alpha = 2131165255;
-
- // aapt resource value: 0x7F070048
- public const int abc_spinner_textfield_background_material = 2131165256;
-
- // aapt resource value: 0x7F070049
- public const int abc_switch_thumb_material = 2131165257;
-
- // aapt resource value: 0x7F07004A
- public const int abc_switch_track_mtrl_alpha = 2131165258;
-
- // aapt resource value: 0x7F07004B
- public const int abc_tab_indicator_material = 2131165259;
-
- // aapt resource value: 0x7F07004C
- public const int abc_tab_indicator_mtrl_alpha = 2131165260;
-
- // aapt resource value: 0x7F070054
- public const int abc_textfield_activated_mtrl_alpha = 2131165268;
-
- // aapt resource value: 0x7F070055
- public const int abc_textfield_default_mtrl_alpha = 2131165269;
-
- // aapt resource value: 0x7F070056
- public const int abc_textfield_search_activated_mtrl_alpha = 2131165270;
-
- // aapt resource value: 0x7F070057
- public const int abc_textfield_search_default_mtrl_alpha = 2131165271;
-
- // aapt resource value: 0x7F070058
- public const int abc_textfield_search_material = 2131165272;
-
- // aapt resource value: 0x7F07004D
- public const int abc_text_cursor_material = 2131165261;
-
- // aapt resource value: 0x7F07004E
- public const int abc_text_select_handle_left_mtrl_dark = 2131165262;
-
- // aapt resource value: 0x7F07004F
- public const int abc_text_select_handle_left_mtrl_light = 2131165263;
-
- // aapt resource value: 0x7F070050
- public const int abc_text_select_handle_middle_mtrl_dark = 2131165264;
-
- // aapt resource value: 0x7F070051
- public const int abc_text_select_handle_middle_mtrl_light = 2131165265;
-
- // aapt resource value: 0x7F070052
- public const int abc_text_select_handle_right_mtrl_dark = 2131165266;
-
- // aapt resource value: 0x7F070053
- public const int abc_text_select_handle_right_mtrl_light = 2131165267;
-
- // aapt resource value: 0x7F070059
- public const int abc_vector_test = 2131165273;
-
- // aapt resource value: 0x7F07005A
- public const int avd_hide_password = 2131165274;
-
- // aapt resource value: 0x7F07005B
- public const int avd_show_password = 2131165275;
-
- // aapt resource value: 0x7F07005C
- public const int design_bottom_navigation_item_background = 2131165276;
-
- // aapt resource value: 0x7F07005D
- public const int design_fab_background = 2131165277;
-
- // aapt resource value: 0x7F07005E
- public const int design_ic_visibility = 2131165278;
-
- // aapt resource value: 0x7F07005F
- public const int design_ic_visibility_off = 2131165279;
-
- // aapt resource value: 0x7F070060
- public const int design_password_eye = 2131165280;
-
- // aapt resource value: 0x7F070061
- public const int design_snackbar_background = 2131165281;
-
- // aapt resource value: 0x7F070062
- public const int ic_mtrl_chip_checked_black = 2131165282;
-
- // aapt resource value: 0x7F070063
- public const int ic_mtrl_chip_checked_circle = 2131165283;
-
- // aapt resource value: 0x7F070064
- public const int ic_mtrl_chip_close_circle = 2131165284;
-
- // aapt resource value: 0x7F070065
- public const int mtrl_snackbar_background = 2131165285;
-
- // aapt resource value: 0x7F070066
- public const int mtrl_tabs_default_indicator = 2131165286;
-
- // aapt resource value: 0x7F070067
- public const int navigation_empty_icon = 2131165287;
-
- // aapt resource value: 0x7F070068
- public const int notification_action_background = 2131165288;
-
- // aapt resource value: 0x7F070069
- public const int notification_bg = 2131165289;
-
- // aapt resource value: 0x7F07006A
- public const int notification_bg_low = 2131165290;
-
- // aapt resource value: 0x7F07006B
- public const int notification_bg_low_normal = 2131165291;
-
- // aapt resource value: 0x7F07006C
- public const int notification_bg_low_pressed = 2131165292;
-
- // aapt resource value: 0x7F07006D
- public const int notification_bg_normal = 2131165293;
-
- // aapt resource value: 0x7F07006E
- public const int notification_bg_normal_pressed = 2131165294;
-
- // aapt resource value: 0x7F07006F
- public const int notification_icon_background = 2131165295;
-
- // aapt resource value: 0x7F070070
- public const int notification_template_icon_bg = 2131165296;
-
- // aapt resource value: 0x7F070071
- public const int notification_template_icon_low_bg = 2131165297;
-
- // aapt resource value: 0x7F070072
- public const int notification_tile_bg = 2131165298;
-
- // aapt resource value: 0x7F070073
- public const int notify_panel_notification_icon_bg = 2131165299;
-
- // aapt resource value: 0x7F070074
- public const int tab_about = 2131165300;
-
- // aapt resource value: 0x7F070075
- public const int tab_feed = 2131165301;
-
- // aapt resource value: 0x7F070076
- public const int tooltip_frame_dark = 2131165302;
-
- // aapt resource value: 0x7F070077
- public const int tooltip_frame_light = 2131165303;
-
- // aapt resource value: 0x7F070078
- public const int xamarin_logo = 2131165304;
-
- static Drawable()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Drawable()
- {
- }
- }
-
- public partial class Id
- {
-
- // aapt resource value: 0x7F080006
- public const int action0 = 2131230726;
-
- // aapt resource value: 0x7F080018
- public const int actions = 2131230744;
-
- // aapt resource value: 0x7F080007
- public const int action_bar = 2131230727;
-
- // aapt resource value: 0x7F080008
- public const int action_bar_activity_content = 2131230728;
-
- // aapt resource value: 0x7F080009
- public const int action_bar_container = 2131230729;
-
- // aapt resource value: 0x7F08000A
- public const int action_bar_root = 2131230730;
-
- // aapt resource value: 0x7F08000B
- public const int action_bar_spinner = 2131230731;
-
- // aapt resource value: 0x7F08000C
- public const int action_bar_subtitle = 2131230732;
-
- // aapt resource value: 0x7F08000D
- public const int action_bar_title = 2131230733;
-
- // aapt resource value: 0x7F08000E
- public const int action_container = 2131230734;
-
- // aapt resource value: 0x7F08000F
- public const int action_context_bar = 2131230735;
-
- // aapt resource value: 0x7F080010
- public const int action_divider = 2131230736;
-
- // aapt resource value: 0x7F080011
- public const int action_image = 2131230737;
-
- // aapt resource value: 0x7F080012
- public const int action_menu_divider = 2131230738;
-
- // aapt resource value: 0x7F080013
- public const int action_menu_presenter = 2131230739;
-
- // aapt resource value: 0x7F080014
- public const int action_mode_bar = 2131230740;
-
- // aapt resource value: 0x7F080015
- public const int action_mode_bar_stub = 2131230741;
-
- // aapt resource value: 0x7F080016
- public const int action_mode_close_button = 2131230742;
-
- // aapt resource value: 0x7F080017
- public const int action_text = 2131230743;
-
- // aapt resource value: 0x7F080019
- public const int activity_chooser_view_content = 2131230745;
-
- // aapt resource value: 0x7F08001A
- public const int add = 2131230746;
-
- // aapt resource value: 0x7F08001B
- public const int alertTitle = 2131230747;
-
- // aapt resource value: 0x7F08001C
- public const int all = 2131230748;
-
- // aapt resource value: 0x7F080000
- public const int ALT = 2131230720;
-
- // aapt resource value: 0x7F08001D
- public const int always = 2131230749;
-
- // aapt resource value: 0x7F08001E
- public const int async = 2131230750;
-
- // aapt resource value: 0x7F08001F
- public const int auto = 2131230751;
-
- // aapt resource value: 0x7F080020
- public const int beginning = 2131230752;
-
- // aapt resource value: 0x7F080021
- public const int blocking = 2131230753;
-
- // aapt resource value: 0x7F080022
- public const int bottom = 2131230754;
-
- // aapt resource value: 0x7F080023
- public const int bottomtab_navarea = 2131230755;
-
- // aapt resource value: 0x7F080024
- public const int bottomtab_tabbar = 2131230756;
-
- // aapt resource value: 0x7F080025
- public const int browser_actions_header_text = 2131230757;
-
- // aapt resource value: 0x7F080028
- public const int browser_actions_menu_items = 2131230760;
-
- // aapt resource value: 0x7F080026
- public const int browser_actions_menu_item_icon = 2131230758;
-
- // aapt resource value: 0x7F080027
- public const int browser_actions_menu_item_text = 2131230759;
-
- // aapt resource value: 0x7F080029
- public const int browser_actions_menu_view = 2131230761;
-
- // aapt resource value: 0x7F08002A
- public const int buttonPanel = 2131230762;
-
- // aapt resource value: 0x7F08002B
- public const int cancel_action = 2131230763;
-
- // aapt resource value: 0x7F08002C
- public const int center = 2131230764;
-
- // aapt resource value: 0x7F08002D
- public const int center_horizontal = 2131230765;
-
- // aapt resource value: 0x7F08002E
- public const int center_vertical = 2131230766;
-
- // aapt resource value: 0x7F08002F
- public const int checkbox = 2131230767;
-
- // aapt resource value: 0x7F080030
- public const int chronometer = 2131230768;
-
- // aapt resource value: 0x7F080031
- public const int clip_horizontal = 2131230769;
-
- // aapt resource value: 0x7F080032
- public const int clip_vertical = 2131230770;
-
- // aapt resource value: 0x7F080033
- public const int collapseActionView = 2131230771;
-
- // aapt resource value: 0x7F080034
- public const int container = 2131230772;
-
- // aapt resource value: 0x7F080035
- public const int content = 2131230773;
-
- // aapt resource value: 0x7F080036
- public const int contentPanel = 2131230774;
-
- // aapt resource value: 0x7F080037
- public const int coordinator = 2131230775;
-
- // aapt resource value: 0x7F080001
- public const int CTRL = 2131230721;
-
- // aapt resource value: 0x7F080038
- public const int custom = 2131230776;
-
- // aapt resource value: 0x7F080039
- public const int customPanel = 2131230777;
-
- // aapt resource value: 0x7F08003A
- public const int decor_content_parent = 2131230778;
-
- // aapt resource value: 0x7F08003B
- public const int default_activity_button = 2131230779;
-
- // aapt resource value: 0x7F08003C
- public const int design_bottom_sheet = 2131230780;
-
- // aapt resource value: 0x7F08003D
- public const int design_menu_item_action_area = 2131230781;
-
- // aapt resource value: 0x7F08003E
- public const int design_menu_item_action_area_stub = 2131230782;
-
- // aapt resource value: 0x7F08003F
- public const int design_menu_item_text = 2131230783;
-
- // aapt resource value: 0x7F080040
- public const int design_navigation_view = 2131230784;
-
- // aapt resource value: 0x7F080041
- public const int disableHome = 2131230785;
-
- // aapt resource value: 0x7F080042
- public const int edit_query = 2131230786;
-
- // aapt resource value: 0x7F080043
- public const int end = 2131230787;
-
- // aapt resource value: 0x7F080044
- public const int end_padder = 2131230788;
-
- // aapt resource value: 0x7F080045
- public const int enterAlways = 2131230789;
-
- // aapt resource value: 0x7F080046
- public const int enterAlwaysCollapsed = 2131230790;
-
- // aapt resource value: 0x7F080047
- public const int exitUntilCollapsed = 2131230791;
-
- // aapt resource value: 0x7F080049
- public const int expanded_menu = 2131230793;
-
- // aapt resource value: 0x7F080048
- public const int expand_activities_button = 2131230792;
-
- // aapt resource value: 0x7F08004A
- public const int fill = 2131230794;
-
- // aapt resource value: 0x7F08004D
- public const int filled = 2131230797;
-
- // aapt resource value: 0x7F08004B
- public const int fill_horizontal = 2131230795;
-
- // aapt resource value: 0x7F08004C
- public const int fill_vertical = 2131230796;
-
- // aapt resource value: 0x7F08004E
- public const int @fixed = 2131230798;
-
- // aapt resource value: 0x7F08004F
- public const int flyoutcontent_appbar = 2131230799;
-
- // aapt resource value: 0x7F080050
- public const int flyoutcontent_recycler = 2131230800;
-
- // aapt resource value: 0x7F080051
- public const int forever = 2131230801;
-
- // aapt resource value: 0x7F080002
- public const int FUNCTION = 2131230722;
-
- // aapt resource value: 0x7F080052
- public const int ghost_view = 2131230802;
-
- // aapt resource value: 0x7F080053
- public const int group_divider = 2131230803;
-
- // aapt resource value: 0x7F080054
- public const int home = 2131230804;
-
- // aapt resource value: 0x7F080055
- public const int homeAsUp = 2131230805;
-
- // aapt resource value: 0x7F080056
- public const int icon = 2131230806;
-
- // aapt resource value: 0x7F080057
- public const int icon_group = 2131230807;
-
- // aapt resource value: 0x7F080058
- public const int ifRoom = 2131230808;
-
- // aapt resource value: 0x7F080059
- public const int image = 2131230809;
-
- // aapt resource value: 0x7F08005A
- public const int info = 2131230810;
-
- // aapt resource value: 0x7F08005B
- public const int italic = 2131230811;
-
- // aapt resource value: 0x7F08005C
- public const int item_touch_helper_previous_elevation = 2131230812;
-
- // aapt resource value: 0x7F08005D
- public const int labeled = 2131230813;
-
- // aapt resource value: 0x7F08005E
- public const int largeLabel = 2131230814;
-
- // aapt resource value: 0x7F08005F
- public const int left = 2131230815;
-
- // aapt resource value: 0x7F080060
- public const int line1 = 2131230816;
-
- // aapt resource value: 0x7F080061
- public const int line3 = 2131230817;
-
- // aapt resource value: 0x7F080062
- public const int listMode = 2131230818;
-
- // aapt resource value: 0x7F080063
- public const int list_item = 2131230819;
-
- // aapt resource value: 0x7F080064
- public const int main_appbar = 2131230820;
-
- // aapt resource value: 0x7F080065
- public const int main_tablayout = 2131230821;
-
- // aapt resource value: 0x7F080066
- public const int main_toolbar = 2131230822;
-
- // aapt resource value: 0x7F080067
- public const int main_viewpager = 2131230823;
-
- // aapt resource value: 0x7F080068
- public const int masked = 2131230824;
-
- // aapt resource value: 0x7F080069
- public const int media_actions = 2131230825;
-
- // aapt resource value: 0x7F08006A
- public const int message = 2131230826;
-
- // aapt resource value: 0x7F080003
- public const int META = 2131230723;
-
- // aapt resource value: 0x7F08006B
- public const int middle = 2131230827;
-
- // aapt resource value: 0x7F08006C
- public const int mini = 2131230828;
-
- // aapt resource value: 0x7F08006D
- public const int mtrl_child_content_container = 2131230829;
-
- // aapt resource value: 0x7F08006E
- public const int mtrl_internal_children_alpha_tag = 2131230830;
-
- // aapt resource value: 0x7F08006F
- public const int multiply = 2131230831;
-
- // aapt resource value: 0x7F080070
- public const int navigation_header_container = 2131230832;
-
- // aapt resource value: 0x7F080071
- public const int never = 2131230833;
-
- // aapt resource value: 0x7F080072
- public const int none = 2131230834;
-
- // aapt resource value: 0x7F080073
- public const int normal = 2131230835;
-
- // aapt resource value: 0x7F080074
- public const int notification_background = 2131230836;
-
- // aapt resource value: 0x7F080075
- public const int notification_main_column = 2131230837;
-
- // aapt resource value: 0x7F080076
- public const int notification_main_column_container = 2131230838;
-
- // aapt resource value: 0x7F080077
- public const int outline = 2131230839;
-
- // aapt resource value: 0x7F080078
- public const int parallax = 2131230840;
-
- // aapt resource value: 0x7F080079
- public const int parentPanel = 2131230841;
-
- // aapt resource value: 0x7F08007A
- public const int parent_matrix = 2131230842;
-
- // aapt resource value: 0x7F08007B
- public const int pin = 2131230843;
-
- // aapt resource value: 0x7F08007C
- public const int progress_circular = 2131230844;
-
- // aapt resource value: 0x7F08007D
- public const int progress_horizontal = 2131230845;
-
- // aapt resource value: 0x7F08007E
- public const int radio = 2131230846;
-
- // aapt resource value: 0x7F08007F
- public const int right = 2131230847;
-
- // aapt resource value: 0x7F080080
- public const int right_icon = 2131230848;
-
- // aapt resource value: 0x7F080081
- public const int right_side = 2131230849;
-
- // aapt resource value: 0x7F080082
- public const int save_image_matrix = 2131230850;
-
- // aapt resource value: 0x7F080083
- public const int save_non_transition_alpha = 2131230851;
-
- // aapt resource value: 0x7F080084
- public const int save_scale_type = 2131230852;
-
- // aapt resource value: 0x7F080085
- public const int screen = 2131230853;
-
- // aapt resource value: 0x7F080086
- public const int scroll = 2131230854;
-
- // aapt resource value: 0x7F08008A
- public const int scrollable = 2131230858;
-
- // aapt resource value: 0x7F080087
- public const int scrollIndicatorDown = 2131230855;
-
- // aapt resource value: 0x7F080088
- public const int scrollIndicatorUp = 2131230856;
-
- // aapt resource value: 0x7F080089
- public const int scrollView = 2131230857;
-
- // aapt resource value: 0x7F08008B
- public const int search_badge = 2131230859;
-
- // aapt resource value: 0x7F08008C
- public const int search_bar = 2131230860;
-
- // aapt resource value: 0x7F08008D
- public const int search_button = 2131230861;
-
- // aapt resource value: 0x7F08008E
- public const int search_close_btn = 2131230862;
-
- // aapt resource value: 0x7F08008F
- public const int search_edit_frame = 2131230863;
-
- // aapt resource value: 0x7F080090
- public const int search_go_btn = 2131230864;
-
- // aapt resource value: 0x7F080091
- public const int search_mag_icon = 2131230865;
-
- // aapt resource value: 0x7F080092
- public const int search_plate = 2131230866;
-
- // aapt resource value: 0x7F080093
- public const int search_src_text = 2131230867;
-
- // aapt resource value: 0x7F080094
- public const int search_voice_btn = 2131230868;
-
- // aapt resource value: 0x7F080096
- public const int selected = 2131230870;
-
- // aapt resource value: 0x7F080095
- public const int select_dialog_listview = 2131230869;
-
- // aapt resource value: 0x7F080097
- public const int shellcontent_appbar = 2131230871;
-
- // aapt resource value: 0x7F080098
- public const int shellcontent_toolbar = 2131230872;
-
- // aapt resource value: 0x7F080004
- public const int SHIFT = 2131230724;
-
- // aapt resource value: 0x7F080099
- public const int shortcut = 2131230873;
-
- // aapt resource value: 0x7F08009A
- public const int showCustom = 2131230874;
-
- // aapt resource value: 0x7F08009B
- public const int showHome = 2131230875;
-
- // aapt resource value: 0x7F08009C
- public const int showTitle = 2131230876;
-
- // aapt resource value: 0x7F08009D
- public const int sliding_tabs = 2131230877;
-
- // aapt resource value: 0x7F08009E
- public const int smallLabel = 2131230878;
-
- // aapt resource value: 0x7F08009F
- public const int snackbar_action = 2131230879;
-
- // aapt resource value: 0x7F0800A0
- public const int snackbar_text = 2131230880;
-
- // aapt resource value: 0x7F0800A1
- public const int snap = 2131230881;
-
- // aapt resource value: 0x7F0800A2
- public const int snapMargins = 2131230882;
-
- // aapt resource value: 0x7F0800A3
- public const int spacer = 2131230883;
-
- // aapt resource value: 0x7F0800A4
- public const int split_action_bar = 2131230884;
-
- // aapt resource value: 0x7F0800A5
- public const int src_atop = 2131230885;
-
- // aapt resource value: 0x7F0800A6
- public const int src_in = 2131230886;
-
- // aapt resource value: 0x7F0800A7
- public const int src_over = 2131230887;
-
- // aapt resource value: 0x7F0800A8
- public const int start = 2131230888;
-
- // aapt resource value: 0x7F0800A9
- public const int status_bar_latest_event_content = 2131230889;
-
- // aapt resource value: 0x7F0800AA
- public const int stretch = 2131230890;
-
- // aapt resource value: 0x7F0800AB
- public const int submenuarrow = 2131230891;
-
- // aapt resource value: 0x7F0800AC
- public const int submit_area = 2131230892;
-
- // aapt resource value: 0x7F080005
- public const int SYM = 2131230725;
-
- // aapt resource value: 0x7F0800AD
- public const int tabMode = 2131230893;
-
- // aapt resource value: 0x7F0800AE
- public const int tag_transition_group = 2131230894;
-
- // aapt resource value: 0x7F0800AF
- public const int tag_unhandled_key_event_manager = 2131230895;
-
- // aapt resource value: 0x7F0800B0
- public const int tag_unhandled_key_listeners = 2131230896;
-
- // aapt resource value: 0x7F0800B1
- public const int text = 2131230897;
-
- // aapt resource value: 0x7F0800B2
- public const int text2 = 2131230898;
-
- // aapt resource value: 0x7F0800B7
- public const int textinput_counter = 2131230903;
-
- // aapt resource value: 0x7F0800B8
- public const int textinput_error = 2131230904;
-
- // aapt resource value: 0x7F0800B9
- public const int textinput_helper_text = 2131230905;
-
- // aapt resource value: 0x7F0800B3
- public const int textSpacerNoButtons = 2131230899;
-
- // aapt resource value: 0x7F0800B4
- public const int textSpacerNoTitle = 2131230900;
-
- // aapt resource value: 0x7F0800B5
- public const int textStart = 2131230901;
-
- // aapt resource value: 0x7F0800B6
- public const int text_input_password_toggle = 2131230902;
-
- // aapt resource value: 0x7F0800BA
- public const int time = 2131230906;
-
- // aapt resource value: 0x7F0800BB
- public const int title = 2131230907;
-
- // aapt resource value: 0x7F0800BC
- public const int titleDividerNoCustom = 2131230908;
-
- // aapt resource value: 0x7F0800BD
- public const int title_template = 2131230909;
-
- // aapt resource value: 0x7F0800BE
- public const int toolbar = 2131230910;
-
- // aapt resource value: 0x7F0800BF
- public const int top = 2131230911;
-
- // aapt resource value: 0x7F0800C0
- public const int topPanel = 2131230912;
-
- // aapt resource value: 0x7F0800C1
- public const int touch_outside = 2131230913;
-
- // aapt resource value: 0x7F0800C2
- public const int transition_current_scene = 2131230914;
-
- // aapt resource value: 0x7F0800C3
- public const int transition_layout_save = 2131230915;
-
- // aapt resource value: 0x7F0800C4
- public const int transition_position = 2131230916;
-
- // aapt resource value: 0x7F0800C5
- public const int transition_scene_layoutid_cache = 2131230917;
-
- // aapt resource value: 0x7F0800C6
- public const int transition_transform = 2131230918;
-
- // aapt resource value: 0x7F0800C7
- public const int uniform = 2131230919;
-
- // aapt resource value: 0x7F0800C8
- public const int unlabeled = 2131230920;
-
- // aapt resource value: 0x7F0800C9
- public const int up = 2131230921;
-
- // aapt resource value: 0x7F0800CA
- public const int useLogo = 2131230922;
-
- // aapt resource value: 0x7F0800CB
- public const int view_offset_helper = 2131230923;
-
- // aapt resource value: 0x7F0800CC
- public const int visible = 2131230924;
-
- // aapt resource value: 0x7F0800CD
- public const int withText = 2131230925;
-
- // aapt resource value: 0x7F0800CE
- public const int wrap_content = 2131230926;
-
- static Id()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Id()
- {
- }
- }
-
- public partial class Integer
- {
-
- // aapt resource value: 0x7F090000
- public const int abc_config_activityDefaultDur = 2131296256;
-
- // aapt resource value: 0x7F090001
- public const int abc_config_activityShortDur = 2131296257;
-
- // aapt resource value: 0x7F090002
- public const int app_bar_elevation_anim_duration = 2131296258;
-
- // aapt resource value: 0x7F090003
- public const int bottom_sheet_slide_duration = 2131296259;
-
- // aapt resource value: 0x7F090004
- public const int cancel_button_image_alpha = 2131296260;
-
- // aapt resource value: 0x7F090005
- public const int config_tooltipAnimTime = 2131296261;
-
- // aapt resource value: 0x7F090006
- public const int design_snackbar_text_max_lines = 2131296262;
-
- // aapt resource value: 0x7F090007
- public const int design_tab_indicator_anim_duration_ms = 2131296263;
-
- // aapt resource value: 0x7F090008
- public const int hide_password_duration = 2131296264;
-
- // aapt resource value: 0x7F090009
- public const int mtrl_btn_anim_delay_ms = 2131296265;
-
- // aapt resource value: 0x7F09000A
- public const int mtrl_btn_anim_duration_ms = 2131296266;
-
- // aapt resource value: 0x7F09000B
- public const int mtrl_chip_anim_duration = 2131296267;
-
- // aapt resource value: 0x7F09000C
- public const int mtrl_tab_indicator_anim_duration_ms = 2131296268;
-
- // aapt resource value: 0x7F09000D
- public const int show_password_duration = 2131296269;
-
- // aapt resource value: 0x7F09000E
- public const int status_bar_notification_info_maxnum = 2131296270;
-
- static Integer()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Integer()
- {
- }
- }
-
- public partial class Interpolator
- {
-
- // aapt resource value: 0x7F0A0000
- public const int mtrl_fast_out_linear_in = 2131361792;
-
- // aapt resource value: 0x7F0A0001
- public const int mtrl_fast_out_slow_in = 2131361793;
-
- // aapt resource value: 0x7F0A0002
- public const int mtrl_linear = 2131361794;
-
- // aapt resource value: 0x7F0A0003
- public const int mtrl_linear_out_slow_in = 2131361795;
-
- static Interpolator()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Interpolator()
- {
- }
- }
-
- public partial class Layout
- {
-
- // aapt resource value: 0x7F0B0000
- public const int abc_action_bar_title_item = 2131427328;
-
- // aapt resource value: 0x7F0B0001
- public const int abc_action_bar_up_container = 2131427329;
-
- // aapt resource value: 0x7F0B0002
- public const int abc_action_menu_item_layout = 2131427330;
-
- // aapt resource value: 0x7F0B0003
- public const int abc_action_menu_layout = 2131427331;
-
- // aapt resource value: 0x7F0B0004
- public const int abc_action_mode_bar = 2131427332;
-
- // aapt resource value: 0x7F0B0005
- public const int abc_action_mode_close_item_material = 2131427333;
-
- // aapt resource value: 0x7F0B0006
- public const int abc_activity_chooser_view = 2131427334;
-
- // aapt resource value: 0x7F0B0007
- public const int abc_activity_chooser_view_list_item = 2131427335;
-
- // aapt resource value: 0x7F0B0008
- public const int abc_alert_dialog_button_bar_material = 2131427336;
-
- // aapt resource value: 0x7F0B0009
- public const int abc_alert_dialog_material = 2131427337;
-
- // aapt resource value: 0x7F0B000A
- public const int abc_alert_dialog_title_material = 2131427338;
-
- // aapt resource value: 0x7F0B000B
- public const int abc_cascading_menu_item_layout = 2131427339;
-
- // aapt resource value: 0x7F0B000C
- public const int abc_dialog_title_material = 2131427340;
-
- // aapt resource value: 0x7F0B000D
- public const int abc_expanded_menu_layout = 2131427341;
-
- // aapt resource value: 0x7F0B000E
- public const int abc_list_menu_item_checkbox = 2131427342;
-
- // aapt resource value: 0x7F0B000F
- public const int abc_list_menu_item_icon = 2131427343;
-
- // aapt resource value: 0x7F0B0010
- public const int abc_list_menu_item_layout = 2131427344;
-
- // aapt resource value: 0x7F0B0011
- public const int abc_list_menu_item_radio = 2131427345;
-
- // aapt resource value: 0x7F0B0012
- public const int abc_popup_menu_header_item_layout = 2131427346;
-
- // aapt resource value: 0x7F0B0013
- public const int abc_popup_menu_item_layout = 2131427347;
-
- // aapt resource value: 0x7F0B0014
- public const int abc_screen_content_include = 2131427348;
-
- // aapt resource value: 0x7F0B0015
- public const int abc_screen_simple = 2131427349;
-
- // aapt resource value: 0x7F0B0016
- public const int abc_screen_simple_overlay_action_mode = 2131427350;
-
- // aapt resource value: 0x7F0B0017
- public const int abc_screen_toolbar = 2131427351;
-
- // aapt resource value: 0x7F0B0018
- public const int abc_search_dropdown_item_icons_2line = 2131427352;
-
- // aapt resource value: 0x7F0B0019
- public const int abc_search_view = 2131427353;
-
- // aapt resource value: 0x7F0B001A
- public const int abc_select_dialog_material = 2131427354;
-
- // aapt resource value: 0x7F0B001B
- public const int abc_tooltip = 2131427355;
-
- // aapt resource value: 0x7F0B001C
- public const int BottomTabLayout = 2131427356;
-
- // aapt resource value: 0x7F0B001D
- public const int browser_actions_context_menu_page = 2131427357;
-
- // aapt resource value: 0x7F0B001E
- public const int browser_actions_context_menu_row = 2131427358;
-
- // aapt resource value: 0x7F0B001F
- public const int design_bottom_navigation_item = 2131427359;
-
- // aapt resource value: 0x7F0B0020
- public const int design_bottom_sheet_dialog = 2131427360;
-
- // aapt resource value: 0x7F0B0021
- public const int design_layout_snackbar = 2131427361;
-
- // aapt resource value: 0x7F0B0022
- public const int design_layout_snackbar_include = 2131427362;
-
- // aapt resource value: 0x7F0B0023
- public const int design_layout_tab_icon = 2131427363;
-
- // aapt resource value: 0x7F0B0024
- public const int design_layout_tab_text = 2131427364;
-
- // aapt resource value: 0x7F0B0025
- public const int design_menu_item_action_area = 2131427365;
-
- // aapt resource value: 0x7F0B0026
- public const int design_navigation_item = 2131427366;
-
- // aapt resource value: 0x7F0B0027
- public const int design_navigation_item_header = 2131427367;
-
- // aapt resource value: 0x7F0B0028
- public const int design_navigation_item_separator = 2131427368;
-
- // aapt resource value: 0x7F0B0029
- public const int design_navigation_item_subheader = 2131427369;
-
- // aapt resource value: 0x7F0B002A
- public const int design_navigation_menu = 2131427370;
-
- // aapt resource value: 0x7F0B002B
- public const int design_navigation_menu_item = 2131427371;
-
- // aapt resource value: 0x7F0B002C
- public const int design_text_input_password_icon = 2131427372;
-
- // aapt resource value: 0x7F0B002D
- public const int FlyoutContent = 2131427373;
-
- // aapt resource value: 0x7F0B002E
- public const int mtrl_layout_snackbar = 2131427374;
-
- // aapt resource value: 0x7F0B002F
- public const int mtrl_layout_snackbar_include = 2131427375;
-
- // aapt resource value: 0x7F0B0030
- public const int notification_action = 2131427376;
-
- // aapt resource value: 0x7F0B0031
- public const int notification_action_tombstone = 2131427377;
-
- // aapt resource value: 0x7F0B0032
- public const int notification_media_action = 2131427378;
-
- // aapt resource value: 0x7F0B0033
- public const int notification_media_cancel_action = 2131427379;
-
- // aapt resource value: 0x7F0B0034
- public const int notification_template_big_media = 2131427380;
-
- // aapt resource value: 0x7F0B0035
- public const int notification_template_big_media_custom = 2131427381;
-
- // aapt resource value: 0x7F0B0036
- public const int notification_template_big_media_narrow = 2131427382;
-
- // aapt resource value: 0x7F0B0037
- public const int notification_template_big_media_narrow_custom = 2131427383;
-
- // aapt resource value: 0x7F0B0038
- public const int notification_template_custom_big = 2131427384;
-
- // aapt resource value: 0x7F0B0039
- public const int notification_template_icon_group = 2131427385;
-
- // aapt resource value: 0x7F0B003A
- public const int notification_template_lines_media = 2131427386;
-
- // aapt resource value: 0x7F0B003B
- public const int notification_template_media = 2131427387;
-
- // aapt resource value: 0x7F0B003C
- public const int notification_template_media_custom = 2131427388;
-
- // aapt resource value: 0x7F0B003D
- public const int notification_template_part_chronometer = 2131427389;
-
- // aapt resource value: 0x7F0B003E
- public const int notification_template_part_time = 2131427390;
-
- // aapt resource value: 0x7F0B003F
- public const int RootLayout = 2131427391;
-
- // aapt resource value: 0x7F0B0040
- public const int select_dialog_item_material = 2131427392;
-
- // aapt resource value: 0x7F0B0041
- public const int select_dialog_multichoice_material = 2131427393;
-
- // aapt resource value: 0x7F0B0042
- public const int select_dialog_singlechoice_material = 2131427394;
-
- // aapt resource value: 0x7F0B0043
- public const int ShellContent = 2131427395;
-
- // aapt resource value: 0x7F0B0044
- public const int support_simple_spinner_dropdown_item = 2131427396;
-
- // aapt resource value: 0x7F0B0045
- public const int Tabbar = 2131427397;
-
- // aapt resource value: 0x7F0B0046
- public const int Toolbar = 2131427398;
-
- static Layout()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Layout()
- {
- }
- }
-
- public partial class Mipmap
- {
-
- // aapt resource value: 0x7F0C0000
- public const int icon = 2131492864;
-
- // aapt resource value: 0x7F0C0001
- public const int icon_round = 2131492865;
-
- // aapt resource value: 0x7F0C0002
- public const int launcher_foreground = 2131492866;
-
- static Mipmap()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Mipmap()
- {
- }
- }
-
- public partial class String
- {
-
- // aapt resource value: 0x7F0D0000
- public const int abc_action_bar_home_description = 2131558400;
-
- // aapt resource value: 0x7F0D0001
- public const int abc_action_bar_up_description = 2131558401;
-
- // aapt resource value: 0x7F0D0002
- public const int abc_action_menu_overflow_description = 2131558402;
-
- // aapt resource value: 0x7F0D0003
- public const int abc_action_mode_done = 2131558403;
-
- // aapt resource value: 0x7F0D0005
- public const int abc_activitychooserview_choose_application = 2131558405;
-
- // aapt resource value: 0x7F0D0004
- public const int abc_activity_chooser_view_see_all = 2131558404;
-
- // aapt resource value: 0x7F0D0006
- public const int abc_capital_off = 2131558406;
-
- // aapt resource value: 0x7F0D0007
- public const int abc_capital_on = 2131558407;
-
- // aapt resource value: 0x7F0D0008
- public const int abc_font_family_body_1_material = 2131558408;
-
- // aapt resource value: 0x7F0D0009
- public const int abc_font_family_body_2_material = 2131558409;
-
- // aapt resource value: 0x7F0D000A
- public const int abc_font_family_button_material = 2131558410;
-
- // aapt resource value: 0x7F0D000B
- public const int abc_font_family_caption_material = 2131558411;
-
- // aapt resource value: 0x7F0D000C
- public const int abc_font_family_display_1_material = 2131558412;
-
- // aapt resource value: 0x7F0D000D
- public const int abc_font_family_display_2_material = 2131558413;
-
- // aapt resource value: 0x7F0D000E
- public const int abc_font_family_display_3_material = 2131558414;
-
- // aapt resource value: 0x7F0D000F
- public const int abc_font_family_display_4_material = 2131558415;
-
- // aapt resource value: 0x7F0D0010
- public const int abc_font_family_headline_material = 2131558416;
-
- // aapt resource value: 0x7F0D0011
- public const int abc_font_family_menu_material = 2131558417;
-
- // aapt resource value: 0x7F0D0012
- public const int abc_font_family_subhead_material = 2131558418;
-
- // aapt resource value: 0x7F0D0013
- public const int abc_font_family_title_material = 2131558419;
-
- // aapt resource value: 0x7F0D0014
- public const int abc_menu_alt_shortcut_label = 2131558420;
-
- // aapt resource value: 0x7F0D0015
- public const int abc_menu_ctrl_shortcut_label = 2131558421;
-
- // aapt resource value: 0x7F0D0016
- public const int abc_menu_delete_shortcut_label = 2131558422;
-
- // aapt resource value: 0x7F0D0017
- public const int abc_menu_enter_shortcut_label = 2131558423;
-
- // aapt resource value: 0x7F0D0018
- public const int abc_menu_function_shortcut_label = 2131558424;
-
- // aapt resource value: 0x7F0D0019
- public const int abc_menu_meta_shortcut_label = 2131558425;
-
- // aapt resource value: 0x7F0D001A
- public const int abc_menu_shift_shortcut_label = 2131558426;
-
- // aapt resource value: 0x7F0D001B
- public const int abc_menu_space_shortcut_label = 2131558427;
-
- // aapt resource value: 0x7F0D001C
- public const int abc_menu_sym_shortcut_label = 2131558428;
-
- // aapt resource value: 0x7F0D001D
- public const int abc_prepend_shortcut_label = 2131558429;
-
- // aapt resource value: 0x7F0D001F
- public const int abc_searchview_description_clear = 2131558431;
-
- // aapt resource value: 0x7F0D0020
- public const int abc_searchview_description_query = 2131558432;
-
- // aapt resource value: 0x7F0D0021
- public const int abc_searchview_description_search = 2131558433;
-
- // aapt resource value: 0x7F0D0022
- public const int abc_searchview_description_submit = 2131558434;
-
- // aapt resource value: 0x7F0D0023
- public const int abc_searchview_description_voice = 2131558435;
-
- // aapt resource value: 0x7F0D001E
- public const int abc_search_hint = 2131558430;
-
- // aapt resource value: 0x7F0D0024
- public const int abc_shareactionprovider_share_with = 2131558436;
-
- // aapt resource value: 0x7F0D0025
- public const int abc_shareactionprovider_share_with_application = 2131558437;
-
- // aapt resource value: 0x7F0D0026
- public const int abc_toolbar_collapse_description = 2131558438;
-
- // aapt resource value: 0x7F0D0027
- public const int appbar_scrolling_view_behavior = 2131558439;
-
- // aapt resource value: 0x7F0D0028
- public const int bottom_sheet_behavior = 2131558440;
-
- // aapt resource value: 0x7F0D0029
- public const int character_counter_content_description = 2131558441;
-
- // aapt resource value: 0x7F0D002A
- public const int character_counter_pattern = 2131558442;
-
- // aapt resource value: 0x7F0D002B
- public const int fab_transformation_scrim_behavior = 2131558443;
-
- // aapt resource value: 0x7F0D002C
- public const int fab_transformation_sheet_behavior = 2131558444;
-
- // aapt resource value: 0x7F0D002D
- public const int hide_bottom_view_on_scroll_behavior = 2131558445;
-
- // aapt resource value: 0x7F0D002E
- public const int mtrl_chip_close_icon_content_description = 2131558446;
-
- // aapt resource value: 0x7F0D002F
- public const int overflow_tab_title = 2131558447;
-
- // aapt resource value: 0x7F0D0030
- public const int password_toggle_content_description = 2131558448;
-
- // aapt resource value: 0x7F0D0031
- public const int path_password_eye = 2131558449;
-
- // aapt resource value: 0x7F0D0032
- public const int path_password_eye_mask_strike_through = 2131558450;
-
- // aapt resource value: 0x7F0D0033
- public const int path_password_eye_mask_visible = 2131558451;
-
- // aapt resource value: 0x7F0D0034
- public const int path_password_strike_through = 2131558452;
-
- // aapt resource value: 0x7F0D0035
- public const int search_menu_title = 2131558453;
-
- // aapt resource value: 0x7F0D0036
- public const int status_bar_notification_info_overflow = 2131558454;
-
- static String()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private String()
- {
- }
- }
-
- public partial class Style
- {
-
- // aapt resource value: 0x7F0E0000
- public const int AlertDialog_AppCompat = 2131623936;
-
- // aapt resource value: 0x7F0E0001
- public const int AlertDialog_AppCompat_Light = 2131623937;
-
- // aapt resource value: 0x7F0E0002
- public const int Animation_AppCompat_Dialog = 2131623938;
-
- // aapt resource value: 0x7F0E0003
- public const int Animation_AppCompat_DropDownUp = 2131623939;
-
- // aapt resource value: 0x7F0E0004
- public const int Animation_AppCompat_Tooltip = 2131623940;
-
- // aapt resource value: 0x7F0E0005
- public const int Animation_Design_BottomSheetDialog = 2131623941;
-
- // aapt resource value: 0x7F0E0006
- public const int AppCompatDialogStyle = 2131623942;
-
- // aapt resource value: 0x7F0E0007
- public const int Base_AlertDialog_AppCompat = 2131623943;
-
- // aapt resource value: 0x7F0E0008
- public const int Base_AlertDialog_AppCompat_Light = 2131623944;
-
- // aapt resource value: 0x7F0E0009
- public const int Base_Animation_AppCompat_Dialog = 2131623945;
-
- // aapt resource value: 0x7F0E000A
- public const int Base_Animation_AppCompat_DropDownUp = 2131623946;
-
- // aapt resource value: 0x7F0E000B
- public const int Base_Animation_AppCompat_Tooltip = 2131623947;
-
- // aapt resource value: 0x7F0E000C
- public const int Base_CardView = 2131623948;
-
- // aapt resource value: 0x7F0E000E
- public const int Base_DialogWindowTitleBackground_AppCompat = 2131623950;
-
- // aapt resource value: 0x7F0E000D
- public const int Base_DialogWindowTitle_AppCompat = 2131623949;
-
- // aapt resource value: 0x7F0E000F
- public const int Base_TextAppearance_AppCompat = 2131623951;
-
- // aapt resource value: 0x7F0E0010
- public const int Base_TextAppearance_AppCompat_Body1 = 2131623952;
-
- // aapt resource value: 0x7F0E0011
- public const int Base_TextAppearance_AppCompat_Body2 = 2131623953;
-
- // aapt resource value: 0x7F0E0012
- public const int Base_TextAppearance_AppCompat_Button = 2131623954;
-
- // aapt resource value: 0x7F0E0013
- public const int Base_TextAppearance_AppCompat_Caption = 2131623955;
-
- // aapt resource value: 0x7F0E0014
- public const int Base_TextAppearance_AppCompat_Display1 = 2131623956;
-
- // aapt resource value: 0x7F0E0015
- public const int Base_TextAppearance_AppCompat_Display2 = 2131623957;
-
- // aapt resource value: 0x7F0E0016
- public const int Base_TextAppearance_AppCompat_Display3 = 2131623958;
-
- // aapt resource value: 0x7F0E0017
- public const int Base_TextAppearance_AppCompat_Display4 = 2131623959;
-
- // aapt resource value: 0x7F0E0018
- public const int Base_TextAppearance_AppCompat_Headline = 2131623960;
-
- // aapt resource value: 0x7F0E0019
- public const int Base_TextAppearance_AppCompat_Inverse = 2131623961;
-
- // aapt resource value: 0x7F0E001A
- public const int Base_TextAppearance_AppCompat_Large = 2131623962;
-
- // aapt resource value: 0x7F0E001B
- public const int Base_TextAppearance_AppCompat_Large_Inverse = 2131623963;
-
- // aapt resource value: 0x7F0E001C
- public const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131623964;
-
- // aapt resource value: 0x7F0E001D
- public const int Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131623965;
-
- // aapt resource value: 0x7F0E001E
- public const int Base_TextAppearance_AppCompat_Medium = 2131623966;
-
- // aapt resource value: 0x7F0E001F
- public const int Base_TextAppearance_AppCompat_Medium_Inverse = 2131623967;
-
- // aapt resource value: 0x7F0E0020
- public const int Base_TextAppearance_AppCompat_Menu = 2131623968;
-
- // aapt resource value: 0x7F0E0021
- public const int Base_TextAppearance_AppCompat_SearchResult = 2131623969;
-
- // aapt resource value: 0x7F0E0022
- public const int Base_TextAppearance_AppCompat_SearchResult_Subtitle = 2131623970;
-
- // aapt resource value: 0x7F0E0023
- public const int Base_TextAppearance_AppCompat_SearchResult_Title = 2131623971;
-
- // aapt resource value: 0x7F0E0024
- public const int Base_TextAppearance_AppCompat_Small = 2131623972;
-
- // aapt resource value: 0x7F0E0025
- public const int Base_TextAppearance_AppCompat_Small_Inverse = 2131623973;
-
- // aapt resource value: 0x7F0E0026
- public const int Base_TextAppearance_AppCompat_Subhead = 2131623974;
-
- // aapt resource value: 0x7F0E0027
- public const int Base_TextAppearance_AppCompat_Subhead_Inverse = 2131623975;
-
- // aapt resource value: 0x7F0E0028
- public const int Base_TextAppearance_AppCompat_Title = 2131623976;
-
- // aapt resource value: 0x7F0E0029
- public const int Base_TextAppearance_AppCompat_Title_Inverse = 2131623977;
-
- // aapt resource value: 0x7F0E002A
- public const int Base_TextAppearance_AppCompat_Tooltip = 2131623978;
-
- // aapt resource value: 0x7F0E002B
- public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131623979;
-
- // aapt resource value: 0x7F0E002C
- public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131623980;
-
- // aapt resource value: 0x7F0E002D
- public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131623981;
-
- // aapt resource value: 0x7F0E002E
- public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title = 2131623982;
-
- // aapt resource value: 0x7F0E002F
- public const int Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131623983;
-
- // aapt resource value: 0x7F0E0030
- public const int Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131623984;
-
- // aapt resource value: 0x7F0E0031
- public const int Base_TextAppearance_AppCompat_Widget_ActionMode_Title = 2131623985;
-
- // aapt resource value: 0x7F0E0032
- public const int Base_TextAppearance_AppCompat_Widget_Button = 2131623986;
-
- // aapt resource value: 0x7F0E0033
- public const int Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131623987;
-
- // aapt resource value: 0x7F0E0034
- public const int Base_TextAppearance_AppCompat_Widget_Button_Colored = 2131623988;
-
- // aapt resource value: 0x7F0E0035
- public const int Base_TextAppearance_AppCompat_Widget_Button_Inverse = 2131623989;
-
- // aapt resource value: 0x7F0E0036
- public const int Base_TextAppearance_AppCompat_Widget_DropDownItem = 2131623990;
-
- // aapt resource value: 0x7F0E0037
- public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131623991;
-
- // aapt resource value: 0x7F0E0038
- public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131623992;
-
- // aapt resource value: 0x7F0E0039
- public const int Base_TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131623993;
-
- // aapt resource value: 0x7F0E003A
- public const int Base_TextAppearance_AppCompat_Widget_Switch = 2131623994;
-
- // aapt resource value: 0x7F0E003B
- public const int Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131623995;
-
- // aapt resource value: 0x7F0E003C
- public const int Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131623996;
-
- // aapt resource value: 0x7F0E003D
- public const int Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131623997;
-
- // aapt resource value: 0x7F0E003E
- public const int Base_TextAppearance_Widget_AppCompat_Toolbar_Title = 2131623998;
-
- // aapt resource value: 0x7F0E005E
- public const int Base_ThemeOverlay_AppCompat = 2131624030;
-
- // aapt resource value: 0x7F0E005F
- public const int Base_ThemeOverlay_AppCompat_ActionBar = 2131624031;
-
- // aapt resource value: 0x7F0E0060
- public const int Base_ThemeOverlay_AppCompat_Dark = 2131624032;
-
- // aapt resource value: 0x7F0E0061
- public const int Base_ThemeOverlay_AppCompat_Dark_ActionBar = 2131624033;
-
- // aapt resource value: 0x7F0E0062
- public const int Base_ThemeOverlay_AppCompat_Dialog = 2131624034;
-
- // aapt resource value: 0x7F0E0063
- public const int Base_ThemeOverlay_AppCompat_Dialog_Alert = 2131624035;
-
- // aapt resource value: 0x7F0E0064
- public const int Base_ThemeOverlay_AppCompat_Light = 2131624036;
-
- // aapt resource value: 0x7F0E0065
- public const int Base_ThemeOverlay_MaterialComponents_Dialog = 2131624037;
-
- // aapt resource value: 0x7F0E0066
- public const int Base_ThemeOverlay_MaterialComponents_Dialog_Alert = 2131624038;
-
- // aapt resource value: 0x7F0E003F
- public const int Base_Theme_AppCompat = 2131623999;
-
- // aapt resource value: 0x7F0E0040
- public const int Base_Theme_AppCompat_CompactMenu = 2131624000;
-
- // aapt resource value: 0x7F0E0041
- public const int Base_Theme_AppCompat_Dialog = 2131624001;
-
- // aapt resource value: 0x7F0E0045
- public const int Base_Theme_AppCompat_DialogWhenLarge = 2131624005;
-
- // aapt resource value: 0x7F0E0042
- public const int Base_Theme_AppCompat_Dialog_Alert = 2131624002;
-
- // aapt resource value: 0x7F0E0043
- public const int Base_Theme_AppCompat_Dialog_FixedSize = 2131624003;
-
- // aapt resource value: 0x7F0E0044
- public const int Base_Theme_AppCompat_Dialog_MinWidth = 2131624004;
-
- // aapt resource value: 0x7F0E0046
- public const int Base_Theme_AppCompat_Light = 2131624006;
-
- // aapt resource value: 0x7F0E0047
- public const int Base_Theme_AppCompat_Light_DarkActionBar = 2131624007;
-
- // aapt resource value: 0x7F0E0048
- public const int Base_Theme_AppCompat_Light_Dialog = 2131624008;
-
- // aapt resource value: 0x7F0E004C
- public const int Base_Theme_AppCompat_Light_DialogWhenLarge = 2131624012;
-
- // aapt resource value: 0x7F0E0049
- public const int Base_Theme_AppCompat_Light_Dialog_Alert = 2131624009;
-
- // aapt resource value: 0x7F0E004A
- public const int Base_Theme_AppCompat_Light_Dialog_FixedSize = 2131624010;
-
- // aapt resource value: 0x7F0E004B
- public const int Base_Theme_AppCompat_Light_Dialog_MinWidth = 2131624011;
-
- // aapt resource value: 0x7F0E004D
- public const int Base_Theme_MaterialComponents = 2131624013;
-
- // aapt resource value: 0x7F0E004E
- public const int Base_Theme_MaterialComponents_Bridge = 2131624014;
-
- // aapt resource value: 0x7F0E004F
- public const int Base_Theme_MaterialComponents_CompactMenu = 2131624015;
-
- // aapt resource value: 0x7F0E0050
- public const int Base_Theme_MaterialComponents_Dialog = 2131624016;
-
- // aapt resource value: 0x7F0E0054
- public const int Base_Theme_MaterialComponents_DialogWhenLarge = 2131624020;
-
- // aapt resource value: 0x7F0E0051
- public const int Base_Theme_MaterialComponents_Dialog_Alert = 2131624017;
-
- // aapt resource value: 0x7F0E0052
- public const int Base_Theme_MaterialComponents_Dialog_FixedSize = 2131624018;
-
- // aapt resource value: 0x7F0E0053
- public const int Base_Theme_MaterialComponents_Dialog_MinWidth = 2131624019;
-
- // aapt resource value: 0x7F0E0055
- public const int Base_Theme_MaterialComponents_Light = 2131624021;
-
- // aapt resource value: 0x7F0E0056
- public const int Base_Theme_MaterialComponents_Light_Bridge = 2131624022;
-
- // aapt resource value: 0x7F0E0057
- public const int Base_Theme_MaterialComponents_Light_DarkActionBar = 2131624023;
-
- // aapt resource value: 0x7F0E0058
- public const int Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge = 2131624024;
-
- // aapt resource value: 0x7F0E0059
- public const int Base_Theme_MaterialComponents_Light_Dialog = 2131624025;
-
- // aapt resource value: 0x7F0E005D
- public const int Base_Theme_MaterialComponents_Light_DialogWhenLarge = 2131624029;
-
- // aapt resource value: 0x7F0E005A
- public const int Base_Theme_MaterialComponents_Light_Dialog_Alert = 2131624026;
-
- // aapt resource value: 0x7F0E005B
- public const int Base_Theme_MaterialComponents_Light_Dialog_FixedSize = 2131624027;
-
- // aapt resource value: 0x7F0E005C
- public const int Base_Theme_MaterialComponents_Light_Dialog_MinWidth = 2131624028;
-
- // aapt resource value: 0x7F0E006E
- public const int Base_V14_ThemeOverlay_MaterialComponents_Dialog = 2131624046;
-
- // aapt resource value: 0x7F0E006F
- public const int Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert = 2131624047;
-
- // aapt resource value: 0x7F0E0067
- public const int Base_V14_Theme_MaterialComponents = 2131624039;
-
- // aapt resource value: 0x7F0E0068
- public const int Base_V14_Theme_MaterialComponents_Bridge = 2131624040;
-
- // aapt resource value: 0x7F0E0069
- public const int Base_V14_Theme_MaterialComponents_Dialog = 2131624041;
-
- // aapt resource value: 0x7F0E006A
- public const int Base_V14_Theme_MaterialComponents_Light = 2131624042;
-
- // aapt resource value: 0x7F0E006B
- public const int Base_V14_Theme_MaterialComponents_Light_Bridge = 2131624043;
-
- // aapt resource value: 0x7F0E006C
- public const int Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge = 2131624044;
-
- // aapt resource value: 0x7F0E006D
- public const int Base_V14_Theme_MaterialComponents_Light_Dialog = 2131624045;
-
- // aapt resource value: 0x7F0E0074
- public const int Base_V21_ThemeOverlay_AppCompat_Dialog = 2131624052;
-
- // aapt resource value: 0x7F0E0070
- public const int Base_V21_Theme_AppCompat = 2131624048;
-
- // aapt resource value: 0x7F0E0071
- public const int Base_V21_Theme_AppCompat_Dialog = 2131624049;
-
- // aapt resource value: 0x7F0E0072
- public const int Base_V21_Theme_AppCompat_Light = 2131624050;
-
- // aapt resource value: 0x7F0E0073
- public const int Base_V21_Theme_AppCompat_Light_Dialog = 2131624051;
-
- // aapt resource value: 0x7F0E0075
- public const int Base_V22_Theme_AppCompat = 2131624053;
-
- // aapt resource value: 0x7F0E0076
- public const int Base_V22_Theme_AppCompat_Light = 2131624054;
-
- // aapt resource value: 0x7F0E0077
- public const int Base_V23_Theme_AppCompat = 2131624055;
-
- // aapt resource value: 0x7F0E0078
- public const int Base_V23_Theme_AppCompat_Light = 2131624056;
-
- // aapt resource value: 0x7F0E0079
- public const int Base_V26_Theme_AppCompat = 2131624057;
-
- // aapt resource value: 0x7F0E007A
- public const int Base_V26_Theme_AppCompat_Light = 2131624058;
-
- // aapt resource value: 0x7F0E007B
- public const int Base_V26_Widget_AppCompat_Toolbar = 2131624059;
-
- // aapt resource value: 0x7F0E007C
- public const int Base_V28_Theme_AppCompat = 2131624060;
-
- // aapt resource value: 0x7F0E007D
- public const int Base_V28_Theme_AppCompat_Light = 2131624061;
-
- // aapt resource value: 0x7F0E0082
- public const int Base_V7_ThemeOverlay_AppCompat_Dialog = 2131624066;
-
- // aapt resource value: 0x7F0E007E
- public const int Base_V7_Theme_AppCompat = 2131624062;
-
- // aapt resource value: 0x7F0E007F
- public const int Base_V7_Theme_AppCompat_Dialog = 2131624063;
-
- // aapt resource value: 0x7F0E0080
- public const int Base_V7_Theme_AppCompat_Light = 2131624064;
-
- // aapt resource value: 0x7F0E0081
- public const int Base_V7_Theme_AppCompat_Light_Dialog = 2131624065;
-
- // aapt resource value: 0x7F0E0083
- public const int Base_V7_Widget_AppCompat_AutoCompleteTextView = 2131624067;
-
- // aapt resource value: 0x7F0E0084
- public const int Base_V7_Widget_AppCompat_EditText = 2131624068;
-
- // aapt resource value: 0x7F0E0085
- public const int Base_V7_Widget_AppCompat_Toolbar = 2131624069;
-
- // aapt resource value: 0x7F0E0086
- public const int Base_Widget_AppCompat_ActionBar = 2131624070;
-
- // aapt resource value: 0x7F0E0087
- public const int Base_Widget_AppCompat_ActionBar_Solid = 2131624071;
-
- // aapt resource value: 0x7F0E0088
- public const int Base_Widget_AppCompat_ActionBar_TabBar = 2131624072;
-
- // aapt resource value: 0x7F0E0089
- public const int Base_Widget_AppCompat_ActionBar_TabText = 2131624073;
-
- // aapt resource value: 0x7F0E008A
- public const int Base_Widget_AppCompat_ActionBar_TabView = 2131624074;
-
- // aapt resource value: 0x7F0E008B
- public const int Base_Widget_AppCompat_ActionButton = 2131624075;
-
- // aapt resource value: 0x7F0E008C
- public const int Base_Widget_AppCompat_ActionButton_CloseMode = 2131624076;
-
- // aapt resource value: 0x7F0E008D
- public const int Base_Widget_AppCompat_ActionButton_Overflow = 2131624077;
-
- // aapt resource value: 0x7F0E008E
- public const int Base_Widget_AppCompat_ActionMode = 2131624078;
-
- // aapt resource value: 0x7F0E008F
- public const int Base_Widget_AppCompat_ActivityChooserView = 2131624079;
-
- // aapt resource value: 0x7F0E0090
- public const int Base_Widget_AppCompat_AutoCompleteTextView = 2131624080;
-
- // aapt resource value: 0x7F0E0091
- public const int Base_Widget_AppCompat_Button = 2131624081;
-
- // aapt resource value: 0x7F0E0097
- public const int Base_Widget_AppCompat_ButtonBar = 2131624087;
-
- // aapt resource value: 0x7F0E0098
- public const int Base_Widget_AppCompat_ButtonBar_AlertDialog = 2131624088;
-
- // aapt resource value: 0x7F0E0092
- public const int Base_Widget_AppCompat_Button_Borderless = 2131624082;
-
- // aapt resource value: 0x7F0E0093
- public const int Base_Widget_AppCompat_Button_Borderless_Colored = 2131624083;
-
- // aapt resource value: 0x7F0E0094
- public const int Base_Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131624084;
-
- // aapt resource value: 0x7F0E0095
- public const int Base_Widget_AppCompat_Button_Colored = 2131624085;
-
- // aapt resource value: 0x7F0E0096
- public const int Base_Widget_AppCompat_Button_Small = 2131624086;
-
- // aapt resource value: 0x7F0E0099
- public const int Base_Widget_AppCompat_CompoundButton_CheckBox = 2131624089;
-
- // aapt resource value: 0x7F0E009A
- public const int Base_Widget_AppCompat_CompoundButton_RadioButton = 2131624090;
-
- // aapt resource value: 0x7F0E009B
- public const int Base_Widget_AppCompat_CompoundButton_Switch = 2131624091;
-
- // aapt resource value: 0x7F0E009C
- public const int Base_Widget_AppCompat_DrawerArrowToggle = 2131624092;
-
- // aapt resource value: 0x7F0E009D
- public const int Base_Widget_AppCompat_DrawerArrowToggle_Common = 2131624093;
-
- // aapt resource value: 0x7F0E009E
- public const int Base_Widget_AppCompat_DropDownItem_Spinner = 2131624094;
-
- // aapt resource value: 0x7F0E009F
- public const int Base_Widget_AppCompat_EditText = 2131624095;
-
- // aapt resource value: 0x7F0E00A0
- public const int Base_Widget_AppCompat_ImageButton = 2131624096;
-
- // aapt resource value: 0x7F0E00A1
- public const int Base_Widget_AppCompat_Light_ActionBar = 2131624097;
-
- // aapt resource value: 0x7F0E00A2
- public const int Base_Widget_AppCompat_Light_ActionBar_Solid = 2131624098;
-
- // aapt resource value: 0x7F0E00A3
- public const int Base_Widget_AppCompat_Light_ActionBar_TabBar = 2131624099;
-
- // aapt resource value: 0x7F0E00A4
- public const int Base_Widget_AppCompat_Light_ActionBar_TabText = 2131624100;
-
- // aapt resource value: 0x7F0E00A5
- public const int Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131624101;
-
- // aapt resource value: 0x7F0E00A6
- public const int Base_Widget_AppCompat_Light_ActionBar_TabView = 2131624102;
-
- // aapt resource value: 0x7F0E00A7
- public const int Base_Widget_AppCompat_Light_PopupMenu = 2131624103;
-
- // aapt resource value: 0x7F0E00A8
- public const int Base_Widget_AppCompat_Light_PopupMenu_Overflow = 2131624104;
-
- // aapt resource value: 0x7F0E00A9
- public const int Base_Widget_AppCompat_ListMenuView = 2131624105;
-
- // aapt resource value: 0x7F0E00AA
- public const int Base_Widget_AppCompat_ListPopupWindow = 2131624106;
-
- // aapt resource value: 0x7F0E00AB
- public const int Base_Widget_AppCompat_ListView = 2131624107;
-
- // aapt resource value: 0x7F0E00AC
- public const int Base_Widget_AppCompat_ListView_DropDown = 2131624108;
-
- // aapt resource value: 0x7F0E00AD
- public const int Base_Widget_AppCompat_ListView_Menu = 2131624109;
-
- // aapt resource value: 0x7F0E00AE
- public const int Base_Widget_AppCompat_PopupMenu = 2131624110;
-
- // aapt resource value: 0x7F0E00AF
- public const int Base_Widget_AppCompat_PopupMenu_Overflow = 2131624111;
-
- // aapt resource value: 0x7F0E00B0
- public const int Base_Widget_AppCompat_PopupWindow = 2131624112;
-
- // aapt resource value: 0x7F0E00B1
- public const int Base_Widget_AppCompat_ProgressBar = 2131624113;
-
- // aapt resource value: 0x7F0E00B2
- public const int Base_Widget_AppCompat_ProgressBar_Horizontal = 2131624114;
-
- // aapt resource value: 0x7F0E00B3
- public const int Base_Widget_AppCompat_RatingBar = 2131624115;
-
- // aapt resource value: 0x7F0E00B4
- public const int Base_Widget_AppCompat_RatingBar_Indicator = 2131624116;
-
- // aapt resource value: 0x7F0E00B5
- public const int Base_Widget_AppCompat_RatingBar_Small = 2131624117;
-
- // aapt resource value: 0x7F0E00B6
- public const int Base_Widget_AppCompat_SearchView = 2131624118;
-
- // aapt resource value: 0x7F0E00B7
- public const int Base_Widget_AppCompat_SearchView_ActionBar = 2131624119;
-
- // aapt resource value: 0x7F0E00B8
- public const int Base_Widget_AppCompat_SeekBar = 2131624120;
-
- // aapt resource value: 0x7F0E00B9
- public const int Base_Widget_AppCompat_SeekBar_Discrete = 2131624121;
-
- // aapt resource value: 0x7F0E00BA
- public const int Base_Widget_AppCompat_Spinner = 2131624122;
-
- // aapt resource value: 0x7F0E00BB
- public const int Base_Widget_AppCompat_Spinner_Underlined = 2131624123;
-
- // aapt resource value: 0x7F0E00BC
- public const int Base_Widget_AppCompat_TextView_SpinnerItem = 2131624124;
-
- // aapt resource value: 0x7F0E00BD
- public const int Base_Widget_AppCompat_Toolbar = 2131624125;
-
- // aapt resource value: 0x7F0E00BE
- public const int Base_Widget_AppCompat_Toolbar_Button_Navigation = 2131624126;
-
- // aapt resource value: 0x7F0E00BF
- public const int Base_Widget_Design_TabLayout = 2131624127;
-
- // aapt resource value: 0x7F0E00C0
- public const int Base_Widget_MaterialComponents_Chip = 2131624128;
-
- // aapt resource value: 0x7F0E00C1
- public const int Base_Widget_MaterialComponents_TextInputEditText = 2131624129;
-
- // aapt resource value: 0x7F0E00C2
- public const int Base_Widget_MaterialComponents_TextInputLayout = 2131624130;
-
- // aapt resource value: 0x7F0E00C3
- public const int CardView = 2131624131;
-
- // aapt resource value: 0x7F0E00C4
- public const int CardView_Dark = 2131624132;
-
- // aapt resource value: 0x7F0E00C5
- public const int CardView_Light = 2131624133;
-
- // aapt resource value: 0x7F0E01F7
- public const int collectionViewScrollBars = 2131624439;
-
- // aapt resource value: 0x7F0E01F8
- public const int collectionViewTheme = 2131624440;
-
- // aapt resource value: 0x7F0E00C6
- public const int MainTheme = 2131624134;
-
- // aapt resource value: 0x7F0E00C7
- public const int MainTheme_Base = 2131624135;
-
- // aapt resource value: 0x7F0E00C8
- public const int Platform_AppCompat = 2131624136;
-
- // aapt resource value: 0x7F0E00C9
- public const int Platform_AppCompat_Light = 2131624137;
-
- // aapt resource value: 0x7F0E00CA
- public const int Platform_MaterialComponents = 2131624138;
-
- // aapt resource value: 0x7F0E00CB
- public const int Platform_MaterialComponents_Dialog = 2131624139;
-
- // aapt resource value: 0x7F0E00CC
- public const int Platform_MaterialComponents_Light = 2131624140;
-
- // aapt resource value: 0x7F0E00CD
- public const int Platform_MaterialComponents_Light_Dialog = 2131624141;
-
- // aapt resource value: 0x7F0E00CE
- public const int Platform_ThemeOverlay_AppCompat = 2131624142;
-
- // aapt resource value: 0x7F0E00CF
- public const int Platform_ThemeOverlay_AppCompat_Dark = 2131624143;
-
- // aapt resource value: 0x7F0E00D0
- public const int Platform_ThemeOverlay_AppCompat_Light = 2131624144;
-
- // aapt resource value: 0x7F0E00D1
- public const int Platform_V21_AppCompat = 2131624145;
-
- // aapt resource value: 0x7F0E00D2
- public const int Platform_V21_AppCompat_Light = 2131624146;
-
- // aapt resource value: 0x7F0E00D3
- public const int Platform_V25_AppCompat = 2131624147;
-
- // aapt resource value: 0x7F0E00D4
- public const int Platform_V25_AppCompat_Light = 2131624148;
-
- // aapt resource value: 0x7F0E00D5
- public const int Platform_Widget_AppCompat_Spinner = 2131624149;
-
- // aapt resource value: 0x7F0E00D6
- public const int RtlOverlay_DialogWindowTitle_AppCompat = 2131624150;
-
- // aapt resource value: 0x7F0E00D7
- public const int RtlOverlay_Widget_AppCompat_ActionBar_TitleItem = 2131624151;
-
- // aapt resource value: 0x7F0E00D8
- public const int RtlOverlay_Widget_AppCompat_DialogTitle_Icon = 2131624152;
-
- // aapt resource value: 0x7F0E00D9
- public const int RtlOverlay_Widget_AppCompat_PopupMenuItem = 2131624153;
-
- // aapt resource value: 0x7F0E00DA
- public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup = 2131624154;
-
- // aapt resource value: 0x7F0E00DB
- public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut = 2131624155;
-
- // aapt resource value: 0x7F0E00DC
- public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow = 2131624156;
-
- // aapt resource value: 0x7F0E00DD
- public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Text = 2131624157;
-
- // aapt resource value: 0x7F0E00DE
- public const int RtlOverlay_Widget_AppCompat_PopupMenuItem_Title = 2131624158;
-
- // aapt resource value: 0x7F0E00E4
- public const int RtlOverlay_Widget_AppCompat_SearchView_MagIcon = 2131624164;
-
- // aapt resource value: 0x7F0E00DF
- public const int RtlOverlay_Widget_AppCompat_Search_DropDown = 2131624159;
-
- // aapt resource value: 0x7F0E00E0
- public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 = 2131624160;
-
- // aapt resource value: 0x7F0E00E1
- public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 = 2131624161;
-
- // aapt resource value: 0x7F0E00E2
- public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Query = 2131624162;
-
- // aapt resource value: 0x7F0E00E3
- public const int RtlOverlay_Widget_AppCompat_Search_DropDown_Text = 2131624163;
-
- // aapt resource value: 0x7F0E00E5
- public const int RtlUnderlay_Widget_AppCompat_ActionButton = 2131624165;
-
- // aapt resource value: 0x7F0E00E6
- public const int RtlUnderlay_Widget_AppCompat_ActionButton_Overflow = 2131624166;
-
- // aapt resource value: 0x7F0E00E7
- public const int TextAppearance_AppCompat = 2131624167;
-
- // aapt resource value: 0x7F0E00E8
- public const int TextAppearance_AppCompat_Body1 = 2131624168;
-
- // aapt resource value: 0x7F0E00E9
- public const int TextAppearance_AppCompat_Body2 = 2131624169;
-
- // aapt resource value: 0x7F0E00EA
- public const int TextAppearance_AppCompat_Button = 2131624170;
-
- // aapt resource value: 0x7F0E00EB
- public const int TextAppearance_AppCompat_Caption = 2131624171;
-
- // aapt resource value: 0x7F0E00EC
- public const int TextAppearance_AppCompat_Display1 = 2131624172;
-
- // aapt resource value: 0x7F0E00ED
- public const int TextAppearance_AppCompat_Display2 = 2131624173;
-
- // aapt resource value: 0x7F0E00EE
- public const int TextAppearance_AppCompat_Display3 = 2131624174;
-
- // aapt resource value: 0x7F0E00EF
- public const int TextAppearance_AppCompat_Display4 = 2131624175;
-
- // aapt resource value: 0x7F0E00F0
- public const int TextAppearance_AppCompat_Headline = 2131624176;
-
- // aapt resource value: 0x7F0E00F1
- public const int TextAppearance_AppCompat_Inverse = 2131624177;
-
- // aapt resource value: 0x7F0E00F2
- public const int TextAppearance_AppCompat_Large = 2131624178;
-
- // aapt resource value: 0x7F0E00F3
- public const int TextAppearance_AppCompat_Large_Inverse = 2131624179;
-
- // aapt resource value: 0x7F0E00F4
- public const int TextAppearance_AppCompat_Light_SearchResult_Subtitle = 2131624180;
-
- // aapt resource value: 0x7F0E00F5
- public const int TextAppearance_AppCompat_Light_SearchResult_Title = 2131624181;
-
- // aapt resource value: 0x7F0E00F6
- public const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Large = 2131624182;
-
- // aapt resource value: 0x7F0E00F7
- public const int TextAppearance_AppCompat_Light_Widget_PopupMenu_Small = 2131624183;
-
- // aapt resource value: 0x7F0E00F8
- public const int TextAppearance_AppCompat_Medium = 2131624184;
-
- // aapt resource value: 0x7F0E00F9
- public const int TextAppearance_AppCompat_Medium_Inverse = 2131624185;
-
- // aapt resource value: 0x7F0E00FA
- public const int TextAppearance_AppCompat_Menu = 2131624186;
-
- // aapt resource value: 0x7F0E00FB
- public const int TextAppearance_AppCompat_SearchResult_Subtitle = 2131624187;
-
- // aapt resource value: 0x7F0E00FC
- public const int TextAppearance_AppCompat_SearchResult_Title = 2131624188;
-
- // aapt resource value: 0x7F0E00FD
- public const int TextAppearance_AppCompat_Small = 2131624189;
-
- // aapt resource value: 0x7F0E00FE
- public const int TextAppearance_AppCompat_Small_Inverse = 2131624190;
-
- // aapt resource value: 0x7F0E00FF
- public const int TextAppearance_AppCompat_Subhead = 2131624191;
-
- // aapt resource value: 0x7F0E0100
- public const int TextAppearance_AppCompat_Subhead_Inverse = 2131624192;
-
- // aapt resource value: 0x7F0E0101
- public const int TextAppearance_AppCompat_Title = 2131624193;
-
- // aapt resource value: 0x7F0E0102
- public const int TextAppearance_AppCompat_Title_Inverse = 2131624194;
-
- // aapt resource value: 0x7F0E0103
- public const int TextAppearance_AppCompat_Tooltip = 2131624195;
-
- // aapt resource value: 0x7F0E0104
- public const int TextAppearance_AppCompat_Widget_ActionBar_Menu = 2131624196;
-
- // aapt resource value: 0x7F0E0105
- public const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle = 2131624197;
-
- // aapt resource value: 0x7F0E0106
- public const int TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse = 2131624198;
-
- // aapt resource value: 0x7F0E0107
- public const int TextAppearance_AppCompat_Widget_ActionBar_Title = 2131624199;
-
- // aapt resource value: 0x7F0E0108
- public const int TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse = 2131624200;
-
- // aapt resource value: 0x7F0E0109
- public const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle = 2131624201;
-
- // aapt resource value: 0x7F0E010A
- public const int TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse = 2131624202;
-
- // aapt resource value: 0x7F0E010B
- public const int TextAppearance_AppCompat_Widget_ActionMode_Title = 2131624203;
-
- // aapt resource value: 0x7F0E010C
- public const int TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse = 2131624204;
-
- // aapt resource value: 0x7F0E010D
- public const int TextAppearance_AppCompat_Widget_Button = 2131624205;
-
- // aapt resource value: 0x7F0E010E
- public const int TextAppearance_AppCompat_Widget_Button_Borderless_Colored = 2131624206;
-
- // aapt resource value: 0x7F0E010F
- public const int TextAppearance_AppCompat_Widget_Button_Colored = 2131624207;
-
- // aapt resource value: 0x7F0E0110
- public const int TextAppearance_AppCompat_Widget_Button_Inverse = 2131624208;
-
- // aapt resource value: 0x7F0E0111
- public const int TextAppearance_AppCompat_Widget_DropDownItem = 2131624209;
-
- // aapt resource value: 0x7F0E0112
- public const int TextAppearance_AppCompat_Widget_PopupMenu_Header = 2131624210;
-
- // aapt resource value: 0x7F0E0113
- public const int TextAppearance_AppCompat_Widget_PopupMenu_Large = 2131624211;
-
- // aapt resource value: 0x7F0E0114
- public const int TextAppearance_AppCompat_Widget_PopupMenu_Small = 2131624212;
-
- // aapt resource value: 0x7F0E0115
- public const int TextAppearance_AppCompat_Widget_Switch = 2131624213;
-
- // aapt resource value: 0x7F0E0116
- public const int TextAppearance_AppCompat_Widget_TextView_SpinnerItem = 2131624214;
-
- // aapt resource value: 0x7F0E0117
- public const int TextAppearance_Compat_Notification = 2131624215;
-
- // aapt resource value: 0x7F0E0118
- public const int TextAppearance_Compat_Notification_Info = 2131624216;
-
- // aapt resource value: 0x7F0E0119
- public const int TextAppearance_Compat_Notification_Info_Media = 2131624217;
-
- // aapt resource value: 0x7F0E011A
- public const int TextAppearance_Compat_Notification_Line2 = 2131624218;
-
- // aapt resource value: 0x7F0E011B
- public const int TextAppearance_Compat_Notification_Line2_Media = 2131624219;
-
- // aapt resource value: 0x7F0E011C
- public const int TextAppearance_Compat_Notification_Media = 2131624220;
-
- // aapt resource value: 0x7F0E011D
- public const int TextAppearance_Compat_Notification_Time = 2131624221;
-
- // aapt resource value: 0x7F0E011E
- public const int TextAppearance_Compat_Notification_Time_Media = 2131624222;
-
- // aapt resource value: 0x7F0E011F
- public const int TextAppearance_Compat_Notification_Title = 2131624223;
-
- // aapt resource value: 0x7F0E0120
- public const int TextAppearance_Compat_Notification_Title_Media = 2131624224;
-
- // aapt resource value: 0x7F0E0121
- public const int TextAppearance_Design_CollapsingToolbar_Expanded = 2131624225;
-
- // aapt resource value: 0x7F0E0122
- public const int TextAppearance_Design_Counter = 2131624226;
-
- // aapt resource value: 0x7F0E0123
- public const int TextAppearance_Design_Counter_Overflow = 2131624227;
-
- // aapt resource value: 0x7F0E0124
- public const int TextAppearance_Design_Error = 2131624228;
-
- // aapt resource value: 0x7F0E0125
- public const int TextAppearance_Design_HelperText = 2131624229;
-
- // aapt resource value: 0x7F0E0126
- public const int TextAppearance_Design_Hint = 2131624230;
-
- // aapt resource value: 0x7F0E0127
- public const int TextAppearance_Design_Snackbar_Message = 2131624231;
-
- // aapt resource value: 0x7F0E0128
- public const int TextAppearance_Design_Tab = 2131624232;
-
- // aapt resource value: 0x7F0E0129
- public const int TextAppearance_MaterialComponents_Body1 = 2131624233;
-
- // aapt resource value: 0x7F0E012A
- public const int TextAppearance_MaterialComponents_Body2 = 2131624234;
-
- // aapt resource value: 0x7F0E012B
- public const int TextAppearance_MaterialComponents_Button = 2131624235;
-
- // aapt resource value: 0x7F0E012C
- public const int TextAppearance_MaterialComponents_Caption = 2131624236;
-
- // aapt resource value: 0x7F0E012D
- public const int TextAppearance_MaterialComponents_Chip = 2131624237;
-
- // aapt resource value: 0x7F0E012E
- public const int TextAppearance_MaterialComponents_Headline1 = 2131624238;
-
- // aapt resource value: 0x7F0E012F
- public const int TextAppearance_MaterialComponents_Headline2 = 2131624239;
-
- // aapt resource value: 0x7F0E0130
- public const int TextAppearance_MaterialComponents_Headline3 = 2131624240;
-
- // aapt resource value: 0x7F0E0131
- public const int TextAppearance_MaterialComponents_Headline4 = 2131624241;
-
- // aapt resource value: 0x7F0E0132
- public const int TextAppearance_MaterialComponents_Headline5 = 2131624242;
-
- // aapt resource value: 0x7F0E0133
- public const int TextAppearance_MaterialComponents_Headline6 = 2131624243;
-
- // aapt resource value: 0x7F0E0134
- public const int TextAppearance_MaterialComponents_Overline = 2131624244;
-
- // aapt resource value: 0x7F0E0135
- public const int TextAppearance_MaterialComponents_Subtitle1 = 2131624245;
-
- // aapt resource value: 0x7F0E0136
- public const int TextAppearance_MaterialComponents_Subtitle2 = 2131624246;
-
- // aapt resource value: 0x7F0E0137
- public const int TextAppearance_MaterialComponents_Tab = 2131624247;
-
- // aapt resource value: 0x7F0E0138
- public const int TextAppearance_Widget_AppCompat_ExpandedMenu_Item = 2131624248;
-
- // aapt resource value: 0x7F0E0139
- public const int TextAppearance_Widget_AppCompat_Toolbar_Subtitle = 2131624249;
-
- // aapt resource value: 0x7F0E013A
- public const int TextAppearance_Widget_AppCompat_Toolbar_Title = 2131624250;
-
- // aapt resource value: 0x7F0E016B
- public const int ThemeOverlay_AppCompat = 2131624299;
-
- // aapt resource value: 0x7F0E016C
- public const int ThemeOverlay_AppCompat_ActionBar = 2131624300;
-
- // aapt resource value: 0x7F0E016D
- public const int ThemeOverlay_AppCompat_Dark = 2131624301;
-
- // aapt resource value: 0x7F0E016E
- public const int ThemeOverlay_AppCompat_Dark_ActionBar = 2131624302;
-
- // aapt resource value: 0x7F0E016F
- public const int ThemeOverlay_AppCompat_Dialog = 2131624303;
-
- // aapt resource value: 0x7F0E0170
- public const int ThemeOverlay_AppCompat_Dialog_Alert = 2131624304;
-
- // aapt resource value: 0x7F0E0171
- public const int ThemeOverlay_AppCompat_Light = 2131624305;
-
- // aapt resource value: 0x7F0E0172
- public const int ThemeOverlay_MaterialComponents = 2131624306;
-
- // aapt resource value: 0x7F0E0173
- public const int ThemeOverlay_MaterialComponents_ActionBar = 2131624307;
-
- // aapt resource value: 0x7F0E0174
- public const int ThemeOverlay_MaterialComponents_Dark = 2131624308;
-
- // aapt resource value: 0x7F0E0175
- public const int ThemeOverlay_MaterialComponents_Dark_ActionBar = 2131624309;
-
- // aapt resource value: 0x7F0E0176
- public const int ThemeOverlay_MaterialComponents_Dialog = 2131624310;
-
- // aapt resource value: 0x7F0E0177
- public const int ThemeOverlay_MaterialComponents_Dialog_Alert = 2131624311;
-
- // aapt resource value: 0x7F0E0178
- public const int ThemeOverlay_MaterialComponents_Light = 2131624312;
-
- // aapt resource value: 0x7F0E0179
- public const int ThemeOverlay_MaterialComponents_TextInputEditText = 2131624313;
-
- // aapt resource value: 0x7F0E017A
- public const int ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox = 2131624314;
-
- // aapt resource value: 0x7F0E017B
- public const int ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense = 2131624315;
-
- // aapt resource value: 0x7F0E017C
- public const int ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox = 2131624316;
-
- // aapt resource value: 0x7F0E017D
- public const int ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense = 2131624317;
-
- // aapt resource value: 0x7F0E013B
- public const int Theme_AppCompat = 2131624251;
-
- // aapt resource value: 0x7F0E013C
- public const int Theme_AppCompat_CompactMenu = 2131624252;
-
- // aapt resource value: 0x7F0E013D
- public const int Theme_AppCompat_DayNight = 2131624253;
-
- // aapt resource value: 0x7F0E013E
- public const int Theme_AppCompat_DayNight_DarkActionBar = 2131624254;
-
- // aapt resource value: 0x7F0E013F
- public const int Theme_AppCompat_DayNight_Dialog = 2131624255;
-
- // aapt resource value: 0x7F0E0142
- public const int Theme_AppCompat_DayNight_DialogWhenLarge = 2131624258;
-
- // aapt resource value: 0x7F0E0140
- public const int Theme_AppCompat_DayNight_Dialog_Alert = 2131624256;
-
- // aapt resource value: 0x7F0E0141
- public const int Theme_AppCompat_DayNight_Dialog_MinWidth = 2131624257;
-
- // aapt resource value: 0x7F0E0143
- public const int Theme_AppCompat_DayNight_NoActionBar = 2131624259;
-
- // aapt resource value: 0x7F0E0144
- public const int Theme_AppCompat_Dialog = 2131624260;
-
- // aapt resource value: 0x7F0E0147
- public const int Theme_AppCompat_DialogWhenLarge = 2131624263;
-
- // aapt resource value: 0x7F0E0145
- public const int Theme_AppCompat_Dialog_Alert = 2131624261;
-
- // aapt resource value: 0x7F0E0146
- public const int Theme_AppCompat_Dialog_MinWidth = 2131624262;
-
- // aapt resource value: 0x7F0E0148
- public const int Theme_AppCompat_Light = 2131624264;
-
- // aapt resource value: 0x7F0E0149
- public const int Theme_AppCompat_Light_DarkActionBar = 2131624265;
-
- // aapt resource value: 0x7F0E014A
- public const int Theme_AppCompat_Light_Dialog = 2131624266;
-
- // aapt resource value: 0x7F0E014D
- public const int Theme_AppCompat_Light_DialogWhenLarge = 2131624269;
-
- // aapt resource value: 0x7F0E014B
- public const int Theme_AppCompat_Light_Dialog_Alert = 2131624267;
-
- // aapt resource value: 0x7F0E014C
- public const int Theme_AppCompat_Light_Dialog_MinWidth = 2131624268;
-
- // aapt resource value: 0x7F0E014E
- public const int Theme_AppCompat_Light_NoActionBar = 2131624270;
-
- // aapt resource value: 0x7F0E014F
- public const int Theme_AppCompat_NoActionBar = 2131624271;
-
- // aapt resource value: 0x7F0E0150
- public const int Theme_Design = 2131624272;
-
- // aapt resource value: 0x7F0E0151
- public const int Theme_Design_BottomSheetDialog = 2131624273;
-
- // aapt resource value: 0x7F0E0152
- public const int Theme_Design_Light = 2131624274;
-
- // aapt resource value: 0x7F0E0153
- public const int Theme_Design_Light_BottomSheetDialog = 2131624275;
-
- // aapt resource value: 0x7F0E0154
- public const int Theme_Design_Light_NoActionBar = 2131624276;
-
- // aapt resource value: 0x7F0E0155
- public const int Theme_Design_NoActionBar = 2131624277;
-
- // aapt resource value: 0x7F0E0156
- public const int Theme_MaterialComponents = 2131624278;
-
- // aapt resource value: 0x7F0E0157
- public const int Theme_MaterialComponents_BottomSheetDialog = 2131624279;
-
- // aapt resource value: 0x7F0E0158
- public const int Theme_MaterialComponents_Bridge = 2131624280;
-
- // aapt resource value: 0x7F0E0159
- public const int Theme_MaterialComponents_CompactMenu = 2131624281;
-
- // aapt resource value: 0x7F0E015A
- public const int Theme_MaterialComponents_Dialog = 2131624282;
-
- // aapt resource value: 0x7F0E015D
- public const int Theme_MaterialComponents_DialogWhenLarge = 2131624285;
-
- // aapt resource value: 0x7F0E015B
- public const int Theme_MaterialComponents_Dialog_Alert = 2131624283;
-
- // aapt resource value: 0x7F0E015C
- public const int Theme_MaterialComponents_Dialog_MinWidth = 2131624284;
-
- // aapt resource value: 0x7F0E015E
- public const int Theme_MaterialComponents_Light = 2131624286;
-
- // aapt resource value: 0x7F0E015F
- public const int Theme_MaterialComponents_Light_BottomSheetDialog = 2131624287;
-
- // aapt resource value: 0x7F0E0160
- public const int Theme_MaterialComponents_Light_Bridge = 2131624288;
-
- // aapt resource value: 0x7F0E0161
- public const int Theme_MaterialComponents_Light_DarkActionBar = 2131624289;
-
- // aapt resource value: 0x7F0E0162
- public const int Theme_MaterialComponents_Light_DarkActionBar_Bridge = 2131624290;
-
- // aapt resource value: 0x7F0E0163
- public const int Theme_MaterialComponents_Light_Dialog = 2131624291;
-
- // aapt resource value: 0x7F0E0166
- public const int Theme_MaterialComponents_Light_DialogWhenLarge = 2131624294;
-
- // aapt resource value: 0x7F0E0164
- public const int Theme_MaterialComponents_Light_Dialog_Alert = 2131624292;
-
- // aapt resource value: 0x7F0E0165
- public const int Theme_MaterialComponents_Light_Dialog_MinWidth = 2131624293;
-
- // aapt resource value: 0x7F0E0167
- public const int Theme_MaterialComponents_Light_NoActionBar = 2131624295;
-
- // aapt resource value: 0x7F0E0168
- public const int Theme_MaterialComponents_Light_NoActionBar_Bridge = 2131624296;
-
- // aapt resource value: 0x7F0E0169
- public const int Theme_MaterialComponents_NoActionBar = 2131624297;
-
- // aapt resource value: 0x7F0E016A
- public const int Theme_MaterialComponents_NoActionBar_Bridge = 2131624298;
-
- // aapt resource value: 0x7F0E017E
- public const int Widget_AppCompat_ActionBar = 2131624318;
-
- // aapt resource value: 0x7F0E017F
- public const int Widget_AppCompat_ActionBar_Solid = 2131624319;
-
- // aapt resource value: 0x7F0E0180
- public const int Widget_AppCompat_ActionBar_TabBar = 2131624320;
-
- // aapt resource value: 0x7F0E0181
- public const int Widget_AppCompat_ActionBar_TabText = 2131624321;
-
- // aapt resource value: 0x7F0E0182
- public const int Widget_AppCompat_ActionBar_TabView = 2131624322;
-
- // aapt resource value: 0x7F0E0183
- public const int Widget_AppCompat_ActionButton = 2131624323;
-
- // aapt resource value: 0x7F0E0184
- public const int Widget_AppCompat_ActionButton_CloseMode = 2131624324;
-
- // aapt resource value: 0x7F0E0185
- public const int Widget_AppCompat_ActionButton_Overflow = 2131624325;
-
- // aapt resource value: 0x7F0E0186
- public const int Widget_AppCompat_ActionMode = 2131624326;
-
- // aapt resource value: 0x7F0E0187
- public const int Widget_AppCompat_ActivityChooserView = 2131624327;
-
- // aapt resource value: 0x7F0E0188
- public const int Widget_AppCompat_AutoCompleteTextView = 2131624328;
-
- // aapt resource value: 0x7F0E0189
- public const int Widget_AppCompat_Button = 2131624329;
-
- // aapt resource value: 0x7F0E018F
- public const int Widget_AppCompat_ButtonBar = 2131624335;
-
- // aapt resource value: 0x7F0E0190
- public const int Widget_AppCompat_ButtonBar_AlertDialog = 2131624336;
-
- // aapt resource value: 0x7F0E018A
- public const int Widget_AppCompat_Button_Borderless = 2131624330;
-
- // aapt resource value: 0x7F0E018B
- public const int Widget_AppCompat_Button_Borderless_Colored = 2131624331;
-
- // aapt resource value: 0x7F0E018C
- public const int Widget_AppCompat_Button_ButtonBar_AlertDialog = 2131624332;
-
- // aapt resource value: 0x7F0E018D
- public const int Widget_AppCompat_Button_Colored = 2131624333;
-
- // aapt resource value: 0x7F0E018E
- public const int Widget_AppCompat_Button_Small = 2131624334;
-
- // aapt resource value: 0x7F0E0191
- public const int Widget_AppCompat_CompoundButton_CheckBox = 2131624337;
-
- // aapt resource value: 0x7F0E0192
- public const int Widget_AppCompat_CompoundButton_RadioButton = 2131624338;
-
- // aapt resource value: 0x7F0E0193
- public const int Widget_AppCompat_CompoundButton_Switch = 2131624339;
-
- // aapt resource value: 0x7F0E0194
- public const int Widget_AppCompat_DrawerArrowToggle = 2131624340;
-
- // aapt resource value: 0x7F0E0195
- public const int Widget_AppCompat_DropDownItem_Spinner = 2131624341;
-
- // aapt resource value: 0x7F0E0196
- public const int Widget_AppCompat_EditText = 2131624342;
-
- // aapt resource value: 0x7F0E0197
- public const int Widget_AppCompat_ImageButton = 2131624343;
-
- // aapt resource value: 0x7F0E0198
- public const int Widget_AppCompat_Light_ActionBar = 2131624344;
-
- // aapt resource value: 0x7F0E0199
- public const int Widget_AppCompat_Light_ActionBar_Solid = 2131624345;
-
- // aapt resource value: 0x7F0E019A
- public const int Widget_AppCompat_Light_ActionBar_Solid_Inverse = 2131624346;
-
- // aapt resource value: 0x7F0E019B
- public const int Widget_AppCompat_Light_ActionBar_TabBar = 2131624347;
-
- // aapt resource value: 0x7F0E019C
- public const int Widget_AppCompat_Light_ActionBar_TabBar_Inverse = 2131624348;
-
- // aapt resource value: 0x7F0E019D
- public const int Widget_AppCompat_Light_ActionBar_TabText = 2131624349;
-
- // aapt resource value: 0x7F0E019E
- public const int Widget_AppCompat_Light_ActionBar_TabText_Inverse = 2131624350;
-
- // aapt resource value: 0x7F0E019F
- public const int Widget_AppCompat_Light_ActionBar_TabView = 2131624351;
-
- // aapt resource value: 0x7F0E01A0
- public const int Widget_AppCompat_Light_ActionBar_TabView_Inverse = 2131624352;
-
- // aapt resource value: 0x7F0E01A1
- public const int Widget_AppCompat_Light_ActionButton = 2131624353;
-
- // aapt resource value: 0x7F0E01A2
- public const int Widget_AppCompat_Light_ActionButton_CloseMode = 2131624354;
-
- // aapt resource value: 0x7F0E01A3
- public const int Widget_AppCompat_Light_ActionButton_Overflow = 2131624355;
-
- // aapt resource value: 0x7F0E01A4
- public const int Widget_AppCompat_Light_ActionMode_Inverse = 2131624356;
-
- // aapt resource value: 0x7F0E01A5
- public const int Widget_AppCompat_Light_ActivityChooserView = 2131624357;
-
- // aapt resource value: 0x7F0E01A6
- public const int Widget_AppCompat_Light_AutoCompleteTextView = 2131624358;
-
- // aapt resource value: 0x7F0E01A7
- public const int Widget_AppCompat_Light_DropDownItem_Spinner = 2131624359;
-
- // aapt resource value: 0x7F0E01A8
- public const int Widget_AppCompat_Light_ListPopupWindow = 2131624360;
-
- // aapt resource value: 0x7F0E01A9
- public const int Widget_AppCompat_Light_ListView_DropDown = 2131624361;
-
- // aapt resource value: 0x7F0E01AA
- public const int Widget_AppCompat_Light_PopupMenu = 2131624362;
-
- // aapt resource value: 0x7F0E01AB
- public const int Widget_AppCompat_Light_PopupMenu_Overflow = 2131624363;
-
- // aapt resource value: 0x7F0E01AC
- public const int Widget_AppCompat_Light_SearchView = 2131624364;
-
- // aapt resource value: 0x7F0E01AD
- public const int Widget_AppCompat_Light_Spinner_DropDown_ActionBar = 2131624365;
-
- // aapt resource value: 0x7F0E01AE
- public const int Widget_AppCompat_ListMenuView = 2131624366;
-
- // aapt resource value: 0x7F0E01AF
- public const int Widget_AppCompat_ListPopupWindow = 2131624367;
-
- // aapt resource value: 0x7F0E01B0
- public const int Widget_AppCompat_ListView = 2131624368;
-
- // aapt resource value: 0x7F0E01B1
- public const int Widget_AppCompat_ListView_DropDown = 2131624369;
-
- // aapt resource value: 0x7F0E01B2
- public const int Widget_AppCompat_ListView_Menu = 2131624370;
-
- // aapt resource value: 0x7F0E01B3
- public const int Widget_AppCompat_PopupMenu = 2131624371;
-
- // aapt resource value: 0x7F0E01B4
- public const int Widget_AppCompat_PopupMenu_Overflow = 2131624372;
-
- // aapt resource value: 0x7F0E01B5
- public const int Widget_AppCompat_PopupWindow = 2131624373;
-
- // aapt resource value: 0x7F0E01B6
- public const int Widget_AppCompat_ProgressBar = 2131624374;
-
- // aapt resource value: 0x7F0E01B7
- public const int Widget_AppCompat_ProgressBar_Horizontal = 2131624375;
-
- // aapt resource value: 0x7F0E01B8
- public const int Widget_AppCompat_RatingBar = 2131624376;
-
- // aapt resource value: 0x7F0E01B9
- public const int Widget_AppCompat_RatingBar_Indicator = 2131624377;
-
- // aapt resource value: 0x7F0E01BA
- public const int Widget_AppCompat_RatingBar_Small = 2131624378;
-
- // aapt resource value: 0x7F0E01BB
- public const int Widget_AppCompat_SearchView = 2131624379;
-
- // aapt resource value: 0x7F0E01BC
- public const int Widget_AppCompat_SearchView_ActionBar = 2131624380;
-
- // aapt resource value: 0x7F0E01BD
- public const int Widget_AppCompat_SeekBar = 2131624381;
-
- // aapt resource value: 0x7F0E01BE
- public const int Widget_AppCompat_SeekBar_Discrete = 2131624382;
-
- // aapt resource value: 0x7F0E01BF
- public const int Widget_AppCompat_Spinner = 2131624383;
-
- // aapt resource value: 0x7F0E01C0
- public const int Widget_AppCompat_Spinner_DropDown = 2131624384;
-
- // aapt resource value: 0x7F0E01C1
- public const int Widget_AppCompat_Spinner_DropDown_ActionBar = 2131624385;
-
- // aapt resource value: 0x7F0E01C2
- public const int Widget_AppCompat_Spinner_Underlined = 2131624386;
-
- // aapt resource value: 0x7F0E01C3
- public const int Widget_AppCompat_TextView_SpinnerItem = 2131624387;
-
- // aapt resource value: 0x7F0E01C4
- public const int Widget_AppCompat_Toolbar = 2131624388;
-
- // aapt resource value: 0x7F0E01C5
- public const int Widget_AppCompat_Toolbar_Button_Navigation = 2131624389;
-
- // aapt resource value: 0x7F0E01C6
- public const int Widget_Compat_NotificationActionContainer = 2131624390;
-
- // aapt resource value: 0x7F0E01C7
- public const int Widget_Compat_NotificationActionText = 2131624391;
-
- // aapt resource value: 0x7F0E01C8
- public const int Widget_Design_AppBarLayout = 2131624392;
-
- // aapt resource value: 0x7F0E01C9
- public const int Widget_Design_BottomNavigationView = 2131624393;
-
- // aapt resource value: 0x7F0E01CA
- public const int Widget_Design_BottomSheet_Modal = 2131624394;
-
- // aapt resource value: 0x7F0E01CB
- public const int Widget_Design_CollapsingToolbar = 2131624395;
-
- // aapt resource value: 0x7F0E01CC
- public const int Widget_Design_FloatingActionButton = 2131624396;
-
- // aapt resource value: 0x7F0E01CD
- public const int Widget_Design_NavigationView = 2131624397;
-
- // aapt resource value: 0x7F0E01CE
- public const int Widget_Design_ScrimInsetsFrameLayout = 2131624398;
-
- // aapt resource value: 0x7F0E01CF
- public const int Widget_Design_Snackbar = 2131624399;
-
- // aapt resource value: 0x7F0E01D0
- public const int Widget_Design_TabLayout = 2131624400;
-
- // aapt resource value: 0x7F0E01D1
- public const int Widget_Design_TextInputLayout = 2131624401;
-
- // aapt resource value: 0x7F0E01D2
- public const int Widget_MaterialComponents_BottomAppBar = 2131624402;
-
- // aapt resource value: 0x7F0E01D3
- public const int Widget_MaterialComponents_BottomAppBar_Colored = 2131624403;
-
- // aapt resource value: 0x7F0E01D4
- public const int Widget_MaterialComponents_BottomNavigationView = 2131624404;
-
- // aapt resource value: 0x7F0E01D5
- public const int Widget_MaterialComponents_BottomNavigationView_Colored = 2131624405;
-
- // aapt resource value: 0x7F0E01D6
- public const int Widget_MaterialComponents_BottomSheet_Modal = 2131624406;
-
- // aapt resource value: 0x7F0E01D7
- public const int Widget_MaterialComponents_Button = 2131624407;
-
- // aapt resource value: 0x7F0E01D8
- public const int Widget_MaterialComponents_Button_Icon = 2131624408;
-
- // aapt resource value: 0x7F0E01D9
- public const int Widget_MaterialComponents_Button_OutlinedButton = 2131624409;
-
- // aapt resource value: 0x7F0E01DA
- public const int Widget_MaterialComponents_Button_OutlinedButton_Icon = 2131624410;
-
- // aapt resource value: 0x7F0E01DB
- public const int Widget_MaterialComponents_Button_TextButton = 2131624411;
-
- // aapt resource value: 0x7F0E01DC
- public const int Widget_MaterialComponents_Button_TextButton_Dialog = 2131624412;
-
- // aapt resource value: 0x7F0E01DD
- public const int Widget_MaterialComponents_Button_TextButton_Dialog_Icon = 2131624413;
-
- // aapt resource value: 0x7F0E01DE
- public const int Widget_MaterialComponents_Button_TextButton_Icon = 2131624414;
-
- // aapt resource value: 0x7F0E01DF
- public const int Widget_MaterialComponents_Button_UnelevatedButton = 2131624415;
-
- // aapt resource value: 0x7F0E01E0
- public const int Widget_MaterialComponents_Button_UnelevatedButton_Icon = 2131624416;
-
- // aapt resource value: 0x7F0E01E1
- public const int Widget_MaterialComponents_CardView = 2131624417;
-
- // aapt resource value: 0x7F0E01E6
- public const int Widget_MaterialComponents_ChipGroup = 2131624422;
-
- // aapt resource value: 0x7F0E01E2
- public const int Widget_MaterialComponents_Chip_Action = 2131624418;
-
- // aapt resource value: 0x7F0E01E3
- public const int Widget_MaterialComponents_Chip_Choice = 2131624419;
-
- // aapt resource value: 0x7F0E01E4
- public const int Widget_MaterialComponents_Chip_Entry = 2131624420;
-
- // aapt resource value: 0x7F0E01E5
- public const int Widget_MaterialComponents_Chip_Filter = 2131624421;
-
- // aapt resource value: 0x7F0E01E7
- public const int Widget_MaterialComponents_FloatingActionButton = 2131624423;
-
- // aapt resource value: 0x7F0E01E8
- public const int Widget_MaterialComponents_NavigationView = 2131624424;
-
- // aapt resource value: 0x7F0E01E9
- public const int Widget_MaterialComponents_Snackbar = 2131624425;
-
- // aapt resource value: 0x7F0E01EA
- public const int Widget_MaterialComponents_Snackbar_FullWidth = 2131624426;
-
- // aapt resource value: 0x7F0E01EB
- public const int Widget_MaterialComponents_TabLayout = 2131624427;
-
- // aapt resource value: 0x7F0E01EC
- public const int Widget_MaterialComponents_TabLayout_Colored = 2131624428;
-
- // aapt resource value: 0x7F0E01ED
- public const int Widget_MaterialComponents_TextInputEditText_FilledBox = 2131624429;
-
- // aapt resource value: 0x7F0E01EE
- public const int Widget_MaterialComponents_TextInputEditText_FilledBox_Dense = 2131624430;
-
- // aapt resource value: 0x7F0E01EF
- public const int Widget_MaterialComponents_TextInputEditText_OutlinedBox = 2131624431;
-
- // aapt resource value: 0x7F0E01F0
- public const int Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense = 2131624432;
-
- // aapt resource value: 0x7F0E01F1
- public const int Widget_MaterialComponents_TextInputLayout_FilledBox = 2131624433;
-
- // aapt resource value: 0x7F0E01F2
- public const int Widget_MaterialComponents_TextInputLayout_FilledBox_Dense = 2131624434;
-
- // aapt resource value: 0x7F0E01F3
- public const int Widget_MaterialComponents_TextInputLayout_OutlinedBox = 2131624435;
-
- // aapt resource value: 0x7F0E01F4
- public const int Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense = 2131624436;
-
- // aapt resource value: 0x7F0E01F5
- public const int Widget_MaterialComponents_Toolbar = 2131624437;
-
- // aapt resource value: 0x7F0E01F6
- public const int Widget_Support_CoordinatorLayout = 2131624438;
-
- static Style()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Style()
- {
- }
- }
-
- public partial class Styleable
- {
-
- // aapt resource value: { 0x7F030031,0x7F030032,0x7F030033,0x7F030092,0x7F030093,0x7F030094,0x7F030095,0x7F030096,0x7F030097,0x7F0300A5,0x7F0300AA,0x7F0300AB,0x7F0300B6,0x7F0300E0,0x7F0300E5,0x7F0300EA,0x7F0300EB,0x7F0300ED,0x7F0300F7,0x7F030101,0x7F030124,0x7F030130,0x7F030141,0x7F030145,0x7F030146,0x7F030174,0x7F030177,0x7F0301BC,0x7F0301C6 }
- public static int[] ActionBar = new int[] {
- 2130903089,
- 2130903090,
- 2130903091,
- 2130903186,
- 2130903187,
- 2130903188,
- 2130903189,
- 2130903190,
- 2130903191,
- 2130903205,
- 2130903210,
- 2130903211,
- 2130903222,
- 2130903264,
- 2130903269,
- 2130903274,
- 2130903275,
- 2130903277,
- 2130903287,
- 2130903297,
- 2130903332,
- 2130903344,
- 2130903361,
- 2130903365,
- 2130903366,
- 2130903412,
- 2130903415,
- 2130903484,
- 2130903494};
-
- // aapt resource value: { 0x10100B3 }
- public static int[] ActionBarLayout = new int[] {
- 16842931};
-
- // aapt resource value: 0
- public const int ActionBarLayout_android_layout_gravity = 0;
-
- // aapt resource value: 0
- public const int ActionBar_background = 0;
-
- // aapt resource value: 1
- public const int ActionBar_backgroundSplit = 1;
-
- // aapt resource value: 2
- public const int ActionBar_backgroundStacked = 2;
-
- // aapt resource value: 3
- public const int ActionBar_contentInsetEnd = 3;
-
- // aapt resource value: 4
- public const int ActionBar_contentInsetEndWithActions = 4;
-
- // aapt resource value: 5
- public const int ActionBar_contentInsetLeft = 5;
-
- // aapt resource value: 6
- public const int ActionBar_contentInsetRight = 6;
-
- // aapt resource value: 7
- public const int ActionBar_contentInsetStart = 7;
-
- // aapt resource value: 8
- public const int ActionBar_contentInsetStartWithNavigation = 8;
-
- // aapt resource value: 9
- public const int ActionBar_customNavigationLayout = 9;
-
- // aapt resource value: 10
- public const int ActionBar_displayOptions = 10;
-
- // aapt resource value: 11
- public const int ActionBar_divider = 11;
-
- // aapt resource value: 12
- public const int ActionBar_elevation = 12;
-
- // aapt resource value: 13
- public const int ActionBar_height = 13;
-
- // aapt resource value: 14
- public const int ActionBar_hideOnContentScroll = 14;
-
- // aapt resource value: 15
- public const int ActionBar_homeAsUpIndicator = 15;
-
- // aapt resource value: 16
- public const int ActionBar_homeLayout = 16;
-
- // aapt resource value: 17
- public const int ActionBar_icon = 17;
-
- // aapt resource value: 18
- public const int ActionBar_indeterminateProgressStyle = 18;
-
- // aapt resource value: 19
- public const int ActionBar_itemPadding = 19;
-
- // aapt resource value: 20
- public const int ActionBar_logo = 20;
-
- // aapt resource value: 21
- public const int ActionBar_navigationMode = 21;
-
- // aapt resource value: 22
- public const int ActionBar_popupTheme = 22;
-
- // aapt resource value: 23
- public const int ActionBar_progressBarPadding = 23;
-
- // aapt resource value: 24
- public const int ActionBar_progressBarStyle = 24;
-
- // aapt resource value: 25
- public const int ActionBar_subtitle = 25;
-
- // aapt resource value: 26
- public const int ActionBar_subtitleTextStyle = 26;
-
- // aapt resource value: 27
- public const int ActionBar_title = 27;
-
- // aapt resource value: 28
- public const int ActionBar_titleTextStyle = 28;
-
- // aapt resource value: { 0x101013F }
- public static int[] ActionMenuItemView = new int[] {
- 16843071};
-
- // aapt resource value: 0
- public const int ActionMenuItemView_android_minWidth = 0;
-
- // aapt resource value: { 0xFFFFFFFF }
- public static int[] ActionMenuView = new int[] {
- -1};
-
- // aapt resource value: { 0x7F030031,0x7F030032,0x7F03007E,0x7F0300E0,0x7F030177,0x7F0301C6 }
- public static int[] ActionMode = new int[] {
- 2130903089,
- 2130903090,
- 2130903166,
- 2130903264,
- 2130903415,
- 2130903494};
-
- // aapt resource value: 0
- public const int ActionMode_background = 0;
-
- // aapt resource value: 1
- public const int ActionMode_backgroundSplit = 1;
-
- // aapt resource value: 2
- public const int ActionMode_closeItemLayout = 2;
-
- // aapt resource value: 3
- public const int ActionMode_height = 3;
-
- // aapt resource value: 4
- public const int ActionMode_subtitleTextStyle = 4;
-
- // aapt resource value: 5
- public const int ActionMode_titleTextStyle = 5;
-
- // aapt resource value: { 0x7F0300BB,0x7F0300F8 }
- public static int[] ActivityChooserView = new int[] {
- 2130903227,
- 2130903288};
-
- // aapt resource value: 0
- public const int ActivityChooserView_expandActivityOverflowButtonDrawable = 0;
-
- // aapt resource value: 1
- public const int ActivityChooserView_initialActivityCount = 1;
-
- // aapt resource value: { 0x10100F2,0x7F030052,0x7F030053,0x7F03011B,0x7F03011C,0x7F03012D,0x7F03015C,0x7F03015D }
- public static int[] AlertDialog = new int[] {
- 16842994,
- 2130903122,
- 2130903123,
- 2130903323,
- 2130903324,
- 2130903341,
- 2130903388,
- 2130903389};
-
- // aapt resource value: 0
- public const int AlertDialog_android_layout = 0;
-
- // aapt resource value: 1
- public const int AlertDialog_buttonIconDimen = 1;
-
- // aapt resource value: 2
- public const int AlertDialog_buttonPanelSideLayout = 2;
-
- // aapt resource value: 3
- public const int AlertDialog_listItemLayout = 3;
-
- // aapt resource value: 4
- public const int AlertDialog_listLayout = 4;
-
- // aapt resource value: 5
- public const int AlertDialog_multiChoiceItemLayout = 5;
-
- // aapt resource value: 6
- public const int AlertDialog_showTitle = 6;
-
- // aapt resource value: 7
- public const int AlertDialog_singleChoiceItemLayout = 7;
-
- // aapt resource value: { 0x101011C,0x1010194,0x1010195,0x1010196,0x101030C,0x101030D }
- public static int[] AnimatedStateListDrawableCompat = new int[] {
- 16843036,
- 16843156,
- 16843157,
- 16843158,
- 16843532,
- 16843533};
-
- // aapt resource value: 3
- public const int AnimatedStateListDrawableCompat_android_constantSize = 3;
-
- // aapt resource value: 0
- public const int AnimatedStateListDrawableCompat_android_dither = 0;
-
- // aapt resource value: 4
- public const int AnimatedStateListDrawableCompat_android_enterFadeDuration = 4;
-
- // aapt resource value: 5
- public const int AnimatedStateListDrawableCompat_android_exitFadeDuration = 5;
-
- // aapt resource value: 2
- public const int AnimatedStateListDrawableCompat_android_variablePadding = 2;
-
- // aapt resource value: 1
- public const int AnimatedStateListDrawableCompat_android_visible = 1;
-
- // aapt resource value: { 0x10100D0,0x1010199 }
- public static int[] AnimatedStateListDrawableItem = new int[] {
- 16842960,
- 16843161};
-
- // aapt resource value: 1
- public const int AnimatedStateListDrawableItem_android_drawable = 1;
-
- // aapt resource value: 0
- public const int AnimatedStateListDrawableItem_android_id = 0;
-
- // aapt resource value: { 0x1010199,0x1010449,0x101044A,0x101044B }
- public static int[] AnimatedStateListDrawableTransition = new int[] {
- 16843161,
- 16843849,
- 16843850,
- 16843851};
-
- // aapt resource value: 0
- public const int AnimatedStateListDrawableTransition_android_drawable = 0;
-
- // aapt resource value: 2
- public const int AnimatedStateListDrawableTransition_android_fromId = 2;
-
- // aapt resource value: 3
- public const int AnimatedStateListDrawableTransition_android_reversible = 3;
-
- // aapt resource value: 1
- public const int AnimatedStateListDrawableTransition_android_toId = 1;
-
- // aapt resource value: { 0x10100D4,0x101048F,0x1010540,0x7F0300B6,0x7F0300BC,0x7F030116 }
- public static int[] AppBarLayout = new int[] {
- 16842964,
- 16843919,
- 16844096,
- 2130903222,
- 2130903228,
- 2130903318};
-
- // aapt resource value: { 0x7F03016A,0x7F03016B,0x7F03016C,0x7F03016D }
- public static int[] AppBarLayoutStates = new int[] {
- 2130903402,
- 2130903403,
- 2130903404,
- 2130903405};
-
- // aapt resource value: 0
- public const int AppBarLayoutStates_state_collapsed = 0;
-
- // aapt resource value: 1
- public const int AppBarLayoutStates_state_collapsible = 1;
-
- // aapt resource value: 2
- public const int AppBarLayoutStates_state_liftable = 2;
-
- // aapt resource value: 3
- public const int AppBarLayoutStates_state_lifted = 3;
-
- // aapt resource value: 0
- public const int AppBarLayout_android_background = 0;
-
- // aapt resource value: 2
- public const int AppBarLayout_android_keyboardNavigationCluster = 2;
-
- // aapt resource value: 1
- public const int AppBarLayout_android_touchscreenBlocksFocus = 1;
-
- // aapt resource value: 3
- public const int AppBarLayout_elevation = 3;
-
- // aapt resource value: 4
- public const int AppBarLayout_expanded = 4;
-
- // aapt resource value: { 0x7F030114,0x7F030115 }
- public static int[] AppBarLayout_Layout = new int[] {
- 2130903316,
- 2130903317};
-
- // aapt resource value: 0
- public const int AppBarLayout_Layout_layout_scrollFlags = 0;
-
- // aapt resource value: 1
- public const int AppBarLayout_Layout_layout_scrollInterpolator = 1;
-
- // aapt resource value: 5
- public const int AppBarLayout_liftOnScroll = 5;
-
- // aapt resource value: { 0x1010119,0x7F030167,0x7F0301BA,0x7F0301BB }
- public static int[] AppCompatImageView = new int[] {
- 16843033,
- 2130903399,
- 2130903482,
- 2130903483};
-
- // aapt resource value: 0
- public const int AppCompatImageView_android_src = 0;
-
- // aapt resource value: 1
- public const int AppCompatImageView_srcCompat = 1;
-
- // aapt resource value: 2
- public const int AppCompatImageView_tint = 2;
-
- // aapt resource value: 3
- public const int AppCompatImageView_tintMode = 3;
-
- // aapt resource value: { 0x1010142,0x7F0301B7,0x7F0301B8,0x7F0301B9 }
- public static int[] AppCompatSeekBar = new int[] {
- 16843074,
- 2130903479,
- 2130903480,
- 2130903481};
-
- // aapt resource value: 0
- public const int AppCompatSeekBar_android_thumb = 0;
-
- // aapt resource value: 1
- public const int AppCompatSeekBar_tickMark = 1;
-
- // aapt resource value: 2
- public const int AppCompatSeekBar_tickMarkTint = 2;
-
- // aapt resource value: 3
- public const int AppCompatSeekBar_tickMarkTintMode = 3;
-
- // aapt resource value: { 0x1010034,0x101016D,0x101016E,0x101016F,0x1010170,0x1010392,0x1010393 }
- public static int[] AppCompatTextHelper = new int[] {
- 16842804,
- 16843117,
- 16843118,
- 16843119,
- 16843120,
- 16843666,
- 16843667};
-
- // aapt resource value: 2
- public const int AppCompatTextHelper_android_drawableBottom = 2;
-
- // aapt resource value: 6
- public const int AppCompatTextHelper_android_drawableEnd = 6;
-
- // aapt resource value: 3
- public const int AppCompatTextHelper_android_drawableLeft = 3;
-
- // aapt resource value: 4
- public const int AppCompatTextHelper_android_drawableRight = 4;
-
- // aapt resource value: 5
- public const int AppCompatTextHelper_android_drawableStart = 5;
-
- // aapt resource value: 1
- public const int AppCompatTextHelper_android_drawableTop = 1;
-
- // aapt resource value: 0
- public const int AppCompatTextHelper_android_textAppearance = 0;
-
- // aapt resource value: { 0x1010034,0x7F03002C,0x7F03002D,0x7F03002E,0x7F03002F,0x7F030030,0x7F0300CF,0x7F0300D2,0x7F030109,0x7F030117,0x7F030197 }
- public static int[] AppCompatTextView = new int[] {
- 16842804,
- 2130903084,
- 2130903085,
- 2130903086,
- 2130903087,
- 2130903088,
- 2130903247,
- 2130903250,
- 2130903305,
- 2130903319,
- 2130903447};
-
- // aapt resource value: 0
- public const int AppCompatTextView_android_textAppearance = 0;
-
- // aapt resource value: 1
- public const int AppCompatTextView_autoSizeMaxTextSize = 1;
-
- // aapt resource value: 2
- public const int AppCompatTextView_autoSizeMinTextSize = 2;
-
- // aapt resource value: 3
- public const int AppCompatTextView_autoSizePresetSizes = 3;
-
- // aapt resource value: 4
- public const int AppCompatTextView_autoSizeStepGranularity = 4;
-
- // aapt resource value: 5
- public const int AppCompatTextView_autoSizeTextType = 5;
-
- // aapt resource value: 6
- public const int AppCompatTextView_firstBaselineToTopHeight = 6;
-
- // aapt resource value: 7
- public const int AppCompatTextView_fontFamily = 7;
-
- // aapt resource value: 8
- public const int AppCompatTextView_lastBaselineToBottomHeight = 8;
-
- // aapt resource value: 9
- public const int AppCompatTextView_lineHeight = 9;
-
- // aapt resource value: 10
- public const int AppCompatTextView_textAllCaps = 10;
-
- // aapt resource value: { 0x1010057,0x10100AE,0x7F030000,0x7F030001,0x7F030002,0x7F030003,0x7F030004,0x7F030005,0x7F030006,0x7F030007,0x7F030008,0x7F030009,0x7F03000A,0x7F03000B,0x7F03000C,0x7F03000E,0x7F03000F,0x7F030010,0x7F030011,0x7F030012,0x7F030013,0x7F030014,0x7F030015,0x7F030016,0x7F030017,0x7F030018,0x7F030019,0x7F03001A,0x7F03001B,0x7F03001C,0x7F03001D,0x7F03001E,0x7F030021,0x7F030022,0x7F030023,0x7F030024,0x7F030025,0x7F03002B,0x7F03003E,0x7F03004C,0x7F03004D,0x7F03004E,0x7F03004F,0x7F030050,0x7F030054,0x7F030055,0x7F03005F,0x7F030064,0x7F030085,0x7F030086,0x7F030087,0x7F030088,0x7F030089,0x7F03008A,0x7F03008B,0x7F03008C,0x7F03008D,0x7F03008F,0x7F03009E,0x7F0300A7,0x7F0300A8,0x7F0300A9,0x7F0300AC,0x7F0300AE,0x7F0300B1,0x7F0300B2,0x7F0300B3,0x7F0300B4,0x7F0300B5,0x7F0300EA,0x7F0300F6,0x7F030119,0x7F03011A,0x7F03011D,0x7F03011E,0x7F03011F,0x7F030120,0x7F030121,0x7F030122,0x7F030123,0x7F030138,0x7F030139,0x7F03013A,0x7F030140,0x7F030142,0x7F030149,0x7F03014A,0x7F03014B,0x7F03014C,0x7F030154,0x7F030155,0x7F030156,0x7F030157,0x7F030164,0x7F030165,0x7F03017B,0x7F0301A2,0x7F0301A3,0x7F0301A4,0x7F0301A5,0x7F0301A7,0x7F0301A8,0x7F0301A9,0x7F0301AA,0x7F0301AD,0x7F0301AE,0x7F0301C8,0x7F0301C9,0x7F0301CA,0x7F0301CB,0x7F0301D2,0x7F0301D4,0x7F0301D5,0x7F0301D6,0x7F0301D7,0x7F0301D8,0x7F0301D9,0x7F0301DA,0x7F0301DB,0x7F0301DC,0x7F0301DD }
- public static int[] AppCompatTheme = new int[] {
- 16842839,
- 16842926,
- 2130903040,
- 2130903041,
- 2130903042,
- 2130903043,
- 2130903044,
- 2130903045,
- 2130903046,
- 2130903047,
- 2130903048,
- 2130903049,
- 2130903050,
- 2130903051,
- 2130903052,
- 2130903054,
- 2130903055,
- 2130903056,
- 2130903057,
- 2130903058,
- 2130903059,
- 2130903060,
- 2130903061,
- 2130903062,
- 2130903063,
- 2130903064,
- 2130903065,
- 2130903066,
- 2130903067,
- 2130903068,
- 2130903069,
- 2130903070,
- 2130903073,
- 2130903074,
- 2130903075,
- 2130903076,
- 2130903077,
- 2130903083,
- 2130903102,
- 2130903116,
- 2130903117,
- 2130903118,
- 2130903119,
- 2130903120,
- 2130903124,
- 2130903125,
- 2130903135,
- 2130903140,
- 2130903173,
- 2130903174,
- 2130903175,
- 2130903176,
- 2130903177,
- 2130903178,
- 2130903179,
- 2130903180,
- 2130903181,
- 2130903183,
- 2130903198,
- 2130903207,
- 2130903208,
- 2130903209,
- 2130903212,
- 2130903214,
- 2130903217,
- 2130903218,
- 2130903219,
- 2130903220,
- 2130903221,
- 2130903274,
- 2130903286,
- 2130903321,
- 2130903322,
- 2130903325,
- 2130903326,
- 2130903327,
- 2130903328,
- 2130903329,
- 2130903330,
- 2130903331,
- 2130903352,
- 2130903353,
- 2130903354,
- 2130903360,
- 2130903362,
- 2130903369,
- 2130903370,
- 2130903371,
- 2130903372,
- 2130903380,
- 2130903381,
- 2130903382,
- 2130903383,
- 2130903396,
- 2130903397,
- 2130903419,
- 2130903458,
- 2130903459,
- 2130903460,
- 2130903461,
- 2130903463,
- 2130903464,
- 2130903465,
- 2130903466,
- 2130903469,
- 2130903470,
- 2130903496,
- 2130903497,
- 2130903498,
- 2130903499,
- 2130903506,
- 2130903508,
- 2130903509,
- 2130903510,
- 2130903511,
- 2130903512,
- 2130903513,
- 2130903514,
- 2130903515,
- 2130903516,
- 2130903517};
-
- // aapt resource value: 2
- public const int AppCompatTheme_actionBarDivider = 2;
-
- // aapt resource value: 3
- public const int AppCompatTheme_actionBarItemBackground = 3;
-
- // aapt resource value: 4
- public const int AppCompatTheme_actionBarPopupTheme = 4;
-
- // aapt resource value: 5
- public const int AppCompatTheme_actionBarSize = 5;
-
- // aapt resource value: 6
- public const int AppCompatTheme_actionBarSplitStyle = 6;
-
- // aapt resource value: 7
- public const int AppCompatTheme_actionBarStyle = 7;
-
- // aapt resource value: 8
- public const int AppCompatTheme_actionBarTabBarStyle = 8;
-
- // aapt resource value: 9
- public const int AppCompatTheme_actionBarTabStyle = 9;
-
- // aapt resource value: 10
- public const int AppCompatTheme_actionBarTabTextStyle = 10;
-
- // aapt resource value: 11
- public const int AppCompatTheme_actionBarTheme = 11;
-
- // aapt resource value: 12
- public const int AppCompatTheme_actionBarWidgetTheme = 12;
-
- // aapt resource value: 13
- public const int AppCompatTheme_actionButtonStyle = 13;
-
- // aapt resource value: 14
- public const int AppCompatTheme_actionDropDownStyle = 14;
-
- // aapt resource value: 15
- public const int AppCompatTheme_actionMenuTextAppearance = 15;
-
- // aapt resource value: 16
- public const int AppCompatTheme_actionMenuTextColor = 16;
-
- // aapt resource value: 17
- public const int AppCompatTheme_actionModeBackground = 17;
-
- // aapt resource value: 18
- public const int AppCompatTheme_actionModeCloseButtonStyle = 18;
-
- // aapt resource value: 19
- public const int AppCompatTheme_actionModeCloseDrawable = 19;
-
- // aapt resource value: 20
- public const int AppCompatTheme_actionModeCopyDrawable = 20;
-
- // aapt resource value: 21
- public const int AppCompatTheme_actionModeCutDrawable = 21;
-
- // aapt resource value: 22
- public const int AppCompatTheme_actionModeFindDrawable = 22;
-
- // aapt resource value: 23
- public const int AppCompatTheme_actionModePasteDrawable = 23;
-
- // aapt resource value: 24
- public const int AppCompatTheme_actionModePopupWindowStyle = 24;
-
- // aapt resource value: 25
- public const int AppCompatTheme_actionModeSelectAllDrawable = 25;
-
- // aapt resource value: 26
- public const int AppCompatTheme_actionModeShareDrawable = 26;
-
- // aapt resource value: 27
- public const int AppCompatTheme_actionModeSplitBackground = 27;
-
- // aapt resource value: 28
- public const int AppCompatTheme_actionModeStyle = 28;
-
- // aapt resource value: 29
- public const int AppCompatTheme_actionModeWebSearchDrawable = 29;
-
- // aapt resource value: 30
- public const int AppCompatTheme_actionOverflowButtonStyle = 30;
-
- // aapt resource value: 31
- public const int AppCompatTheme_actionOverflowMenuStyle = 31;
-
- // aapt resource value: 32
- public const int AppCompatTheme_activityChooserViewStyle = 32;
-
- // aapt resource value: 33
- public const int AppCompatTheme_alertDialogButtonGroupStyle = 33;
-
- // aapt resource value: 34
- public const int AppCompatTheme_alertDialogCenterButtons = 34;
-
- // aapt resource value: 35
- public const int AppCompatTheme_alertDialogStyle = 35;
-
- // aapt resource value: 36
- public const int AppCompatTheme_alertDialogTheme = 36;
-
- // aapt resource value: 1
- public const int AppCompatTheme_android_windowAnimationStyle = 1;
-
- // aapt resource value: 0
- public const int AppCompatTheme_android_windowIsFloating = 0;
-
- // aapt resource value: 37
- public const int AppCompatTheme_autoCompleteTextViewStyle = 37;
-
- // aapt resource value: 38
- public const int AppCompatTheme_borderlessButtonStyle = 38;
-
- // aapt resource value: 39
- public const int AppCompatTheme_buttonBarButtonStyle = 39;
-
- // aapt resource value: 40
- public const int AppCompatTheme_buttonBarNegativeButtonStyle = 40;
-
- // aapt resource value: 41
- public const int AppCompatTheme_buttonBarNeutralButtonStyle = 41;
-
- // aapt resource value: 42
- public const int AppCompatTheme_buttonBarPositiveButtonStyle = 42;
-
- // aapt resource value: 43
- public const int AppCompatTheme_buttonBarStyle = 43;
-
- // aapt resource value: 44
- public const int AppCompatTheme_buttonStyle = 44;
-
- // aapt resource value: 45
- public const int AppCompatTheme_buttonStyleSmall = 45;
-
- // aapt resource value: 46
- public const int AppCompatTheme_checkboxStyle = 46;
-
- // aapt resource value: 47
- public const int AppCompatTheme_checkedTextViewStyle = 47;
-
- // aapt resource value: 48
- public const int AppCompatTheme_colorAccent = 48;
-
- // aapt resource value: 49
- public const int AppCompatTheme_colorBackgroundFloating = 49;
-
- // aapt resource value: 50
- public const int AppCompatTheme_colorButtonNormal = 50;
-
- // aapt resource value: 51
- public const int AppCompatTheme_colorControlActivated = 51;
-
- // aapt resource value: 52
- public const int AppCompatTheme_colorControlHighlight = 52;
-
- // aapt resource value: 53
- public const int AppCompatTheme_colorControlNormal = 53;
-
- // aapt resource value: 54
- public const int AppCompatTheme_colorError = 54;
-
- // aapt resource value: 55
- public const int AppCompatTheme_colorPrimary = 55;
-
- // aapt resource value: 56
- public const int AppCompatTheme_colorPrimaryDark = 56;
-
- // aapt resource value: 57
- public const int AppCompatTheme_colorSwitchThumbNormal = 57;
-
- // aapt resource value: 58
- public const int AppCompatTheme_controlBackground = 58;
-
- // aapt resource value: 59
- public const int AppCompatTheme_dialogCornerRadius = 59;
-
- // aapt resource value: 60
- public const int AppCompatTheme_dialogPreferredPadding = 60;
-
- // aapt resource value: 61
- public const int AppCompatTheme_dialogTheme = 61;
-
- // aapt resource value: 62
- public const int AppCompatTheme_dividerHorizontal = 62;
-
- // aapt resource value: 63
- public const int AppCompatTheme_dividerVertical = 63;
-
- // aapt resource value: 65
- public const int AppCompatTheme_dropdownListPreferredItemHeight = 65;
-
- // aapt resource value: 64
- public const int AppCompatTheme_dropDownListViewStyle = 64;
-
- // aapt resource value: 66
- public const int AppCompatTheme_editTextBackground = 66;
-
- // aapt resource value: 67
- public const int AppCompatTheme_editTextColor = 67;
-
- // aapt resource value: 68
- public const int AppCompatTheme_editTextStyle = 68;
-
- // aapt resource value: 69
- public const int AppCompatTheme_homeAsUpIndicator = 69;
-
- // aapt resource value: 70
- public const int AppCompatTheme_imageButtonStyle = 70;
-
- // aapt resource value: 71
- public const int AppCompatTheme_listChoiceBackgroundIndicator = 71;
-
- // aapt resource value: 72
- public const int AppCompatTheme_listDividerAlertDialog = 72;
-
- // aapt resource value: 73
- public const int AppCompatTheme_listMenuViewStyle = 73;
-
- // aapt resource value: 74
- public const int AppCompatTheme_listPopupWindowStyle = 74;
-
- // aapt resource value: 75
- public const int AppCompatTheme_listPreferredItemHeight = 75;
-
- // aapt resource value: 76
- public const int AppCompatTheme_listPreferredItemHeightLarge = 76;
-
- // aapt resource value: 77
- public const int AppCompatTheme_listPreferredItemHeightSmall = 77;
-
- // aapt resource value: 78
- public const int AppCompatTheme_listPreferredItemPaddingLeft = 78;
-
- // aapt resource value: 79
- public const int AppCompatTheme_listPreferredItemPaddingRight = 79;
-
- // aapt resource value: 80
- public const int AppCompatTheme_panelBackground = 80;
-
- // aapt resource value: 81
- public const int AppCompatTheme_panelMenuListTheme = 81;
-
- // aapt resource value: 82
- public const int AppCompatTheme_panelMenuListWidth = 82;
-
- // aapt resource value: 83
- public const int AppCompatTheme_popupMenuStyle = 83;
-
- // aapt resource value: 84
- public const int AppCompatTheme_popupWindowStyle = 84;
-
- // aapt resource value: 85
- public const int AppCompatTheme_radioButtonStyle = 85;
-
- // aapt resource value: 86
- public const int AppCompatTheme_ratingBarStyle = 86;
-
- // aapt resource value: 87
- public const int AppCompatTheme_ratingBarStyleIndicator = 87;
-
- // aapt resource value: 88
- public const int AppCompatTheme_ratingBarStyleSmall = 88;
-
- // aapt resource value: 89
- public const int AppCompatTheme_searchViewStyle = 89;
-
- // aapt resource value: 90
- public const int AppCompatTheme_seekBarStyle = 90;
-
- // aapt resource value: 91
- public const int AppCompatTheme_selectableItemBackground = 91;
-
- // aapt resource value: 92
- public const int AppCompatTheme_selectableItemBackgroundBorderless = 92;
-
- // aapt resource value: 93
- public const int AppCompatTheme_spinnerDropDownItemStyle = 93;
-
- // aapt resource value: 94
- public const int AppCompatTheme_spinnerStyle = 94;
-
- // aapt resource value: 95
- public const int AppCompatTheme_switchStyle = 95;
-
- // aapt resource value: 96
- public const int AppCompatTheme_textAppearanceLargePopupMenu = 96;
-
- // aapt resource value: 97
- public const int AppCompatTheme_textAppearanceListItem = 97;
-
- // aapt resource value: 98
- public const int AppCompatTheme_textAppearanceListItemSecondary = 98;
-
- // aapt resource value: 99
- public const int AppCompatTheme_textAppearanceListItemSmall = 99;
-
- // aapt resource value: 100
- public const int AppCompatTheme_textAppearancePopupMenuHeader = 100;
-
- // aapt resource value: 101
- public const int AppCompatTheme_textAppearanceSearchResultSubtitle = 101;
-
- // aapt resource value: 102
- public const int AppCompatTheme_textAppearanceSearchResultTitle = 102;
-
- // aapt resource value: 103
- public const int AppCompatTheme_textAppearanceSmallPopupMenu = 103;
-
- // aapt resource value: 104
- public const int AppCompatTheme_textColorAlertDialogListItem = 104;
-
- // aapt resource value: 105
- public const int AppCompatTheme_textColorSearchUrl = 105;
-
- // aapt resource value: 106
- public const int AppCompatTheme_toolbarNavigationButtonStyle = 106;
-
- // aapt resource value: 107
- public const int AppCompatTheme_toolbarStyle = 107;
-
- // aapt resource value: 108
- public const int AppCompatTheme_tooltipForegroundColor = 108;
-
- // aapt resource value: 109
- public const int AppCompatTheme_tooltipFrameBackground = 109;
-
- // aapt resource value: 110
- public const int AppCompatTheme_viewInflaterClass = 110;
-
- // aapt resource value: 111
- public const int AppCompatTheme_windowActionBar = 111;
-
- // aapt resource value: 112
- public const int AppCompatTheme_windowActionBarOverlay = 112;
-
- // aapt resource value: 113
- public const int AppCompatTheme_windowActionModeOverlay = 113;
-
- // aapt resource value: 114
- public const int AppCompatTheme_windowFixedHeightMajor = 114;
-
- // aapt resource value: 115
- public const int AppCompatTheme_windowFixedHeightMinor = 115;
-
- // aapt resource value: 116
- public const int AppCompatTheme_windowFixedWidthMajor = 116;
-
- // aapt resource value: 117
- public const int AppCompatTheme_windowFixedWidthMinor = 117;
-
- // aapt resource value: 118
- public const int AppCompatTheme_windowMinWidthMajor = 118;
-
- // aapt resource value: 119
- public const int AppCompatTheme_windowMinWidthMinor = 119;
-
- // aapt resource value: 120
- public const int AppCompatTheme_windowNoTitle = 120;
-
- // aapt resource value: { 0x7F030034,0x7F0300C4,0x7F0300C5,0x7F0300C6,0x7F0300C7,0x7F0300E6 }
- public static int[] BottomAppBar = new int[] {
- 2130903092,
- 2130903236,
- 2130903237,
- 2130903238,
- 2130903239,
- 2130903270};
-
- // aapt resource value: 0
- public const int BottomAppBar_backgroundTint = 0;
-
- // aapt resource value: 1
- public const int BottomAppBar_fabAlignmentMode = 1;
-
- // aapt resource value: 2
- public const int BottomAppBar_fabCradleMargin = 2;
-
- // aapt resource value: 3
- public const int BottomAppBar_fabCradleRoundedCornerRadius = 3;
-
- // aapt resource value: 4
- public const int BottomAppBar_fabCradleVerticalOffset = 4;
-
- // aapt resource value: 5
- public const int BottomAppBar_hideOnScroll = 5;
-
- // aapt resource value: { 0x7F0300B6,0x7F0300FB,0x7F0300FD,0x7F0300FF,0x7F030100,0x7F030104,0x7F030105,0x7F030106,0x7F030108,0x7F03012C }
- public static int[] BottomNavigationView = new int[] {
- 2130903222,
- 2130903291,
- 2130903293,
- 2130903295,
- 2130903296,
- 2130903300,
- 2130903301,
- 2130903302,
- 2130903304,
- 2130903340};
-
- // aapt resource value: 0
- public const int BottomNavigationView_elevation = 0;
-
- // aapt resource value: 1
- public const int BottomNavigationView_itemBackground = 1;
-
- // aapt resource value: 2
- public const int BottomNavigationView_itemHorizontalTranslationEnabled = 2;
-
- // aapt resource value: 3
- public const int BottomNavigationView_itemIconSize = 3;
-
- // aapt resource value: 4
- public const int BottomNavigationView_itemIconTint = 4;
-
- // aapt resource value: 5
- public const int BottomNavigationView_itemTextAppearanceActive = 5;
-
- // aapt resource value: 6
- public const int BottomNavigationView_itemTextAppearanceInactive = 6;
-
- // aapt resource value: 7
- public const int BottomNavigationView_itemTextColor = 7;
-
- // aapt resource value: 8
- public const int BottomNavigationView_labelVisibilityMode = 8;
-
- // aapt resource value: 9
- public const int BottomNavigationView_menu = 9;
-
- // aapt resource value: { 0x7F030038,0x7F030039,0x7F03003B,0x7F03003C }
- public static int[] BottomSheetBehavior_Layout = new int[] {
- 2130903096,
- 2130903097,
- 2130903099,
- 2130903100};
-
- // aapt resource value: 0
- public const int BottomSheetBehavior_Layout_behavior_fitToContents = 0;
-
- // aapt resource value: 1
- public const int BottomSheetBehavior_Layout_behavior_hideable = 1;
-
- // aapt resource value: 2
- public const int BottomSheetBehavior_Layout_behavior_peekHeight = 2;
-
- // aapt resource value: 3
- public const int BottomSheetBehavior_Layout_behavior_skipCollapsed = 3;
-
- // aapt resource value: { 0x7F030026 }
- public static int[] ButtonBarLayout = new int[] {
- 2130903078};
-
- // aapt resource value: 0
- public const int ButtonBarLayout_allowStacking = 0;
-
- // aapt resource value: { 0x101013F,0x1010140,0x7F030058,0x7F030059,0x7F03005A,0x7F03005B,0x7F03005C,0x7F03005D,0x7F030098,0x7F030099,0x7F03009A,0x7F03009B,0x7F03009C }
- public static int[] CardView = new int[] {
- 16843071,
- 16843072,
- 2130903128,
- 2130903129,
- 2130903130,
- 2130903131,
- 2130903132,
- 2130903133,
- 2130903192,
- 2130903193,
- 2130903194,
- 2130903195,
- 2130903196};
-
- // aapt resource value: 1
- public const int CardView_android_minHeight = 1;
-
- // aapt resource value: 0
- public const int CardView_android_minWidth = 0;
-
- // aapt resource value: 2
- public const int CardView_cardBackgroundColor = 2;
-
- // aapt resource value: 3
- public const int CardView_cardCornerRadius = 3;
-
- // aapt resource value: 4
- public const int CardView_cardElevation = 4;
-
- // aapt resource value: 5
- public const int CardView_cardMaxElevation = 5;
-
- // aapt resource value: 6
- public const int CardView_cardPreventCornerOverlap = 6;
-
- // aapt resource value: 7
- public const int CardView_cardUseCompatPadding = 7;
-
- // aapt resource value: 8
- public const int CardView_contentPadding = 8;
-
- // aapt resource value: 9
- public const int CardView_contentPaddingBottom = 9;
-
- // aapt resource value: 10
- public const int CardView_contentPaddingLeft = 10;
-
- // aapt resource value: 11
- public const int CardView_contentPaddingRight = 11;
-
- // aapt resource value: 12
- public const int CardView_contentPaddingTop = 12;
-
- // aapt resource value: { 0x1010034,0x10100AB,0x101011F,0x101014F,0x10101E5,0x7F030061,0x7F030062,0x7F030063,0x7F030065,0x7F030066,0x7F030067,0x7F030069,0x7F03006A,0x7F03006B,0x7F03006C,0x7F03006D,0x7F03006E,0x7F030073,0x7F030074,0x7F030075,0x7F030077,0x7F030078,0x7F030079,0x7F03007A,0x7F03007B,0x7F03007C,0x7F03007D,0x7F0300E4,0x7F0300EE,0x7F0300F2,0x7F03014E,0x7F03015A,0x7F0301AF,0x7F0301B1 }
- public static int[] Chip = new int[] {
- 16842804,
- 16842923,
- 16843039,
- 16843087,
- 16843237,
- 2130903137,
- 2130903138,
- 2130903139,
- 2130903141,
- 2130903142,
- 2130903143,
- 2130903145,
- 2130903146,
- 2130903147,
- 2130903148,
- 2130903149,
- 2130903150,
- 2130903155,
- 2130903156,
- 2130903157,
- 2130903159,
- 2130903160,
- 2130903161,
- 2130903162,
- 2130903163,
- 2130903164,
- 2130903165,
- 2130903268,
- 2130903278,
- 2130903282,
- 2130903374,
- 2130903386,
- 2130903471,
- 2130903473};
-
- // aapt resource value: { 0x7F030060,0x7F03006F,0x7F030070,0x7F030071,0x7F03015E,0x7F03015F }
- public static int[] ChipGroup = new int[] {
- 2130903136,
- 2130903151,
- 2130903152,
- 2130903153,
- 2130903390,
- 2130903391};
-
- // aapt resource value: 0
- public const int ChipGroup_checkedChip = 0;
-
- // aapt resource value: 1
- public const int ChipGroup_chipSpacing = 1;
-
- // aapt resource value: 2
- public const int ChipGroup_chipSpacingHorizontal = 2;
-
- // aapt resource value: 3
- public const int ChipGroup_chipSpacingVertical = 3;
-
- // aapt resource value: 4
- public const int ChipGroup_singleLine = 4;
-
- // aapt resource value: 5
- public const int ChipGroup_singleSelection = 5;
-
- // aapt resource value: 4
- public const int Chip_android_checkable = 4;
-
- // aapt resource value: 1
- public const int Chip_android_ellipsize = 1;
-
- // aapt resource value: 2
- public const int Chip_android_maxWidth = 2;
-
- // aapt resource value: 3
- public const int Chip_android_text = 3;
-
- // aapt resource value: 0
- public const int Chip_android_textAppearance = 0;
-
- // aapt resource value: 5
- public const int Chip_checkedIcon = 5;
-
- // aapt resource value: 6
- public const int Chip_checkedIconEnabled = 6;
-
- // aapt resource value: 7
- public const int Chip_checkedIconVisible = 7;
-
- // aapt resource value: 8
- public const int Chip_chipBackgroundColor = 8;
-
- // aapt resource value: 9
- public const int Chip_chipCornerRadius = 9;
-
- // aapt resource value: 10
- public const int Chip_chipEndPadding = 10;
-
- // aapt resource value: 11
- public const int Chip_chipIcon = 11;
-
- // aapt resource value: 12
- public const int Chip_chipIconEnabled = 12;
-
- // aapt resource value: 13
- public const int Chip_chipIconSize = 13;
-
- // aapt resource value: 14
- public const int Chip_chipIconTint = 14;
-
- // aapt resource value: 15
- public const int Chip_chipIconVisible = 15;
-
- // aapt resource value: 16
- public const int Chip_chipMinHeight = 16;
-
- // aapt resource value: 17
- public const int Chip_chipStartPadding = 17;
-
- // aapt resource value: 18
- public const int Chip_chipStrokeColor = 18;
-
- // aapt resource value: 19
- public const int Chip_chipStrokeWidth = 19;
-
- // aapt resource value: 20
- public const int Chip_closeIcon = 20;
-
- // aapt resource value: 21
- public const int Chip_closeIconEnabled = 21;
-
- // aapt resource value: 22
- public const int Chip_closeIconEndPadding = 22;
-
- // aapt resource value: 23
- public const int Chip_closeIconSize = 23;
-
- // aapt resource value: 24
- public const int Chip_closeIconStartPadding = 24;
-
- // aapt resource value: 25
- public const int Chip_closeIconTint = 25;
-
- // aapt resource value: 26
- public const int Chip_closeIconVisible = 26;
-
- // aapt resource value: 27
- public const int Chip_hideMotionSpec = 27;
-
- // aapt resource value: 28
- public const int Chip_iconEndPadding = 28;
-
- // aapt resource value: 29
- public const int Chip_iconStartPadding = 29;
-
- // aapt resource value: 30
- public const int Chip_rippleColor = 30;
-
- // aapt resource value: 31
- public const int Chip_showMotionSpec = 31;
-
- // aapt resource value: 32
- public const int Chip_textEndPadding = 32;
-
- // aapt resource value: 33
- public const int Chip_textStartPadding = 33;
-
- // aapt resource value: { 0x7F030081,0x7F030082,0x7F03009D,0x7F0300BD,0x7F0300BE,0x7F0300BF,0x7F0300C0,0x7F0300C1,0x7F0300C2,0x7F0300C3,0x7F03014F,0x7F030151,0x7F03016F,0x7F0301BC,0x7F0301BD,0x7F0301C7 }
- public static int[] CollapsingToolbarLayout = new int[] {
- 2130903169,
- 2130903170,
- 2130903197,
- 2130903229,
- 2130903230,
- 2130903231,
- 2130903232,
- 2130903233,
- 2130903234,
- 2130903235,
- 2130903375,
- 2130903377,
- 2130903407,
- 2130903484,
- 2130903485,
- 2130903495};
-
- // aapt resource value: 0
- public const int CollapsingToolbarLayout_collapsedTitleGravity = 0;
-
- // aapt resource value: 1
- public const int CollapsingToolbarLayout_collapsedTitleTextAppearance = 1;
-
- // aapt resource value: 2
- public const int CollapsingToolbarLayout_contentScrim = 2;
-
- // aapt resource value: 3
- public const int CollapsingToolbarLayout_expandedTitleGravity = 3;
-
- // aapt resource value: 4
- public const int CollapsingToolbarLayout_expandedTitleMargin = 4;
-
- // aapt resource value: 5
- public const int CollapsingToolbarLayout_expandedTitleMarginBottom = 5;
-
- // aapt resource value: 6
- public const int CollapsingToolbarLayout_expandedTitleMarginEnd = 6;
-
- // aapt resource value: 7
- public const int CollapsingToolbarLayout_expandedTitleMarginStart = 7;
-
- // aapt resource value: 8
- public const int CollapsingToolbarLayout_expandedTitleMarginTop = 8;
-
- // aapt resource value: 9
- public const int CollapsingToolbarLayout_expandedTitleTextAppearance = 9;
-
- // aapt resource value: { 0x7F03010F,0x7F030110 }
- public static int[] CollapsingToolbarLayout_Layout = new int[] {
- 2130903311,
- 2130903312};
-
- // aapt resource value: 0
- public const int CollapsingToolbarLayout_Layout_layout_collapseMode = 0;
-
- // aapt resource value: 1
- public const int CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier = 1;
-
- // aapt resource value: 10
- public const int CollapsingToolbarLayout_scrimAnimationDuration = 10;
-
- // aapt resource value: 11
- public const int CollapsingToolbarLayout_scrimVisibleHeightTrigger = 11;
-
- // aapt resource value: 12
- public const int CollapsingToolbarLayout_statusBarScrim = 12;
-
- // aapt resource value: 13
- public const int CollapsingToolbarLayout_title = 13;
-
- // aapt resource value: 14
- public const int CollapsingToolbarLayout_titleEnabled = 14;
-
- // aapt resource value: 15
- public const int CollapsingToolbarLayout_toolbarId = 15;
-
- // aapt resource value: { 0x10101A5,0x101031F,0x7F030027 }
- public static int[] ColorStateListItem = new int[] {
- 16843173,
- 16843551,
- 2130903079};
-
- // aapt resource value: 2
- public const int ColorStateListItem_alpha = 2;
-
- // aapt resource value: 1
- public const int ColorStateListItem_android_alpha = 1;
-
- // aapt resource value: 0
- public const int ColorStateListItem_android_color = 0;
-
- // aapt resource value: { 0x1010107,0x7F030056,0x7F030057 }
- public static int[] CompoundButton = new int[] {
- 16843015,
- 2130903126,
- 2130903127};
-
- // aapt resource value: 0
- public const int CompoundButton_android_button = 0;
-
- // aapt resource value: 1
- public const int CompoundButton_buttonTint = 1;
-
- // aapt resource value: 2
- public const int CompoundButton_buttonTintMode = 2;
-
- // aapt resource value: { 0x7F030107,0x7F03016E }
- public static int[] CoordinatorLayout = new int[] {
- 2130903303,
- 2130903406};
-
- // aapt resource value: 0
- public const int CoordinatorLayout_keylines = 0;
-
- // aapt resource value: { 0x10100B3,0x7F03010C,0x7F03010D,0x7F03010E,0x7F030111,0x7F030112,0x7F030113 }
- public static int[] CoordinatorLayout_Layout = new int[] {
- 16842931,
- 2130903308,
- 2130903309,
- 2130903310,
- 2130903313,
- 2130903314,
- 2130903315};
-
- // aapt resource value: 0
- public const int CoordinatorLayout_Layout_android_layout_gravity = 0;
-
- // aapt resource value: 1
- public const int CoordinatorLayout_Layout_layout_anchor = 1;
-
- // aapt resource value: 2
- public const int CoordinatorLayout_Layout_layout_anchorGravity = 2;
-
- // aapt resource value: 3
- public const int CoordinatorLayout_Layout_layout_behavior = 3;
-
- // aapt resource value: 4
- public const int CoordinatorLayout_Layout_layout_dodgeInsetEdges = 4;
-
- // aapt resource value: 5
- public const int CoordinatorLayout_Layout_layout_insetEdge = 5;
-
- // aapt resource value: 6
- public const int CoordinatorLayout_Layout_layout_keyline = 6;
-
- // aapt resource value: 1
- public const int CoordinatorLayout_statusBarBackground = 1;
-
- // aapt resource value: { 0x7F030041,0x7F030042 }
- public static int[] DesignTheme = new int[] {
- 2130903105,
- 2130903106};
-
- // aapt resource value: 0
- public const int DesignTheme_bottomSheetDialogTheme = 0;
-
- // aapt resource value: 1
- public const int DesignTheme_bottomSheetStyle = 1;
-
- // aapt resource value: { 0x7F030029,0x7F03002A,0x7F030036,0x7F030084,0x7F0300AF,0x7F0300DD,0x7F030163,0x7F0301B3 }
- public static int[] DrawerArrowToggle = new int[] {
- 2130903081,
- 2130903082,
- 2130903094,
- 2130903172,
- 2130903215,
- 2130903261,
- 2130903395,
- 2130903475};
-
- // aapt resource value: 0
- public const int DrawerArrowToggle_arrowHeadLength = 0;
-
- // aapt resource value: 1
- public const int DrawerArrowToggle_arrowShaftLength = 1;
-
- // aapt resource value: 2
- public const int DrawerArrowToggle_barLength = 2;
-
- // aapt resource value: 3
- public const int DrawerArrowToggle_color = 3;
-
- // aapt resource value: 4
- public const int DrawerArrowToggle_drawableSize = 4;
-
- // aapt resource value: 5
- public const int DrawerArrowToggle_gapBetweenBars = 5;
-
- // aapt resource value: 6
- public const int DrawerArrowToggle_spinBars = 6;
-
- // aapt resource value: 7
- public const int DrawerArrowToggle_thickness = 7;
-
- // aapt resource value: { 0x7F030034,0x7F030035,0x7F03003D,0x7F0300B6,0x7F0300C8,0x7F0300C9,0x7F0300E4,0x7F0300EC,0x7F03012A,0x7F030144,0x7F03014E,0x7F03015A,0x7F0301D1 }
- public static int[] FloatingActionButton = new int[] {
- 2130903092,
- 2130903093,
- 2130903101,
- 2130903222,
- 2130903240,
- 2130903241,
- 2130903268,
- 2130903276,
- 2130903338,
- 2130903364,
- 2130903374,
- 2130903386,
- 2130903505};
-
- // aapt resource value: 0
- public const int FloatingActionButton_backgroundTint = 0;
-
- // aapt resource value: 1
- public const int FloatingActionButton_backgroundTintMode = 1;
-
- // aapt resource value: { 0x7F030037 }
- public static int[] FloatingActionButton_Behavior_Layout = new int[] {
- 2130903095};
-
- // aapt resource value: 0
- public const int FloatingActionButton_Behavior_Layout_behavior_autoHide = 0;
-
- // aapt resource value: 2
- public const int FloatingActionButton_borderWidth = 2;
-
- // aapt resource value: 3
- public const int FloatingActionButton_elevation = 3;
-
- // aapt resource value: 4
- public const int FloatingActionButton_fabCustomSize = 4;
-
- // aapt resource value: 5
- public const int FloatingActionButton_fabSize = 5;
-
- // aapt resource value: 6
- public const int FloatingActionButton_hideMotionSpec = 6;
-
- // aapt resource value: 7
- public const int FloatingActionButton_hoveredFocusedTranslationZ = 7;
-
- // aapt resource value: 8
- public const int FloatingActionButton_maxImageSize = 8;
-
- // aapt resource value: 9
- public const int FloatingActionButton_pressedTranslationZ = 9;
-
- // aapt resource value: 10
- public const int FloatingActionButton_rippleColor = 10;
-
- // aapt resource value: 11
- public const int FloatingActionButton_showMotionSpec = 11;
-
- // aapt resource value: 12
- public const int FloatingActionButton_useCompatPadding = 12;
-
- // aapt resource value: { 0x7F030102,0x7F030118 }
- public static int[] FlowLayout = new int[] {
- 2130903298,
- 2130903320};
-
- // aapt resource value: 0
- public const int FlowLayout_itemSpacing = 0;
-
- // aapt resource value: 1
- public const int FlowLayout_lineSpacing = 1;
-
- // aapt resource value: { 0x7F0300D3,0x7F0300D4,0x7F0300D5,0x7F0300D6,0x7F0300D7,0x7F0300D8 }
- public static int[] FontFamily = new int[] {
- 2130903251,
- 2130903252,
- 2130903253,
- 2130903254,
- 2130903255,
- 2130903256};
-
- // aapt resource value: { 0x1010532,0x1010533,0x101053F,0x101056F,0x1010570,0x7F0300D1,0x7F0300D9,0x7F0300DA,0x7F0300DB,0x7F0301D0 }
- public static int[] FontFamilyFont = new int[] {
- 16844082,
- 16844083,
- 16844095,
- 16844143,
- 16844144,
- 2130903249,
- 2130903257,
- 2130903258,
- 2130903259,
- 2130903504};
-
- // aapt resource value: 0
- public const int FontFamilyFont_android_font = 0;
-
- // aapt resource value: 2
- public const int FontFamilyFont_android_fontStyle = 2;
-
- // aapt resource value: 4
- public const int FontFamilyFont_android_fontVariationSettings = 4;
-
- // aapt resource value: 1
- public const int FontFamilyFont_android_fontWeight = 1;
-
- // aapt resource value: 3
- public const int FontFamilyFont_android_ttcIndex = 3;
-
- // aapt resource value: 5
- public const int FontFamilyFont_font = 5;
-
- // aapt resource value: 6
- public const int FontFamilyFont_fontStyle = 6;
-
- // aapt resource value: 7
- public const int FontFamilyFont_fontVariationSettings = 7;
-
- // aapt resource value: 8
- public const int FontFamilyFont_fontWeight = 8;
-
- // aapt resource value: 9
- public const int FontFamilyFont_ttcIndex = 9;
-
- // aapt resource value: 0
- public const int FontFamily_fontProviderAuthority = 0;
-
- // aapt resource value: 1
- public const int FontFamily_fontProviderCerts = 1;
-
- // aapt resource value: 2
- public const int FontFamily_fontProviderFetchStrategy = 2;
-
- // aapt resource value: 3
- public const int FontFamily_fontProviderFetchTimeout = 3;
-
- // aapt resource value: 4
- public const int FontFamily_fontProviderPackage = 4;
-
- // aapt resource value: 5
- public const int FontFamily_fontProviderQuery = 5;
-
- // aapt resource value: { 0x1010109,0x1010200,0x7F0300DC }
- public static int[] ForegroundLinearLayout = new int[] {
- 16843017,
- 16843264,
- 2130903260};
-
- // aapt resource value: 0
- public const int ForegroundLinearLayout_android_foreground = 0;
-
- // aapt resource value: 1
- public const int ForegroundLinearLayout_android_foregroundGravity = 1;
-
- // aapt resource value: 2
- public const int ForegroundLinearLayout_foregroundInsidePadding = 2;
-
- // aapt resource value: { 0x101019D,0x101019E,0x10101A1,0x10101A2,0x10101A3,0x10101A4,0x1010201,0x101020B,0x1010510,0x1010511,0x1010512,0x1010513 }
- public static int[] GradientColor = new int[] {
- 16843165,
- 16843166,
- 16843169,
- 16843170,
- 16843171,
- 16843172,
- 16843265,
- 16843275,
- 16844048,
- 16844049,
- 16844050,
- 16844051};
-
- // aapt resource value: { 0x10101A5,0x1010514 }
- public static int[] GradientColorItem = new int[] {
- 16843173,
- 16844052};
-
- // aapt resource value: 0
- public const int GradientColorItem_android_color = 0;
-
- // aapt resource value: 1
- public const int GradientColorItem_android_offset = 1;
-
- // aapt resource value: 7
- public const int GradientColor_android_centerColor = 7;
-
- // aapt resource value: 3
- public const int GradientColor_android_centerX = 3;
-
- // aapt resource value: 4
- public const int GradientColor_android_centerY = 4;
-
- // aapt resource value: 1
- public const int GradientColor_android_endColor = 1;
-
- // aapt resource value: 10
- public const int GradientColor_android_endX = 10;
-
- // aapt resource value: 11
- public const int GradientColor_android_endY = 11;
-
- // aapt resource value: 5
- public const int GradientColor_android_gradientRadius = 5;
-
- // aapt resource value: 0
- public const int GradientColor_android_startColor = 0;
-
- // aapt resource value: 8
- public const int GradientColor_android_startX = 8;
-
- // aapt resource value: 9
- public const int GradientColor_android_startY = 9;
-
- // aapt resource value: 6
- public const int GradientColor_android_tileMode = 6;
-
- // aapt resource value: 2
- public const int GradientColor_android_type = 2;
-
- // aapt resource value: { 0x7F030083 }
- public static int[] ItemsViewRendererTheme = new int[] {
- 2130903171};
-
- // aapt resource value: 0
- public const int ItemsViewRendererTheme_collectionViewStyle = 0;
-
- // aapt resource value: { 0x10100AF,0x10100C4,0x1010126,0x1010127,0x1010128,0x7F0300AB,0x7F0300AD,0x7F03012B,0x7F030159 }
- public static int[] LinearLayoutCompat = new int[] {
- 16842927,
- 16842948,
- 16843046,
- 16843047,
- 16843048,
- 2130903211,
- 2130903213,
- 2130903339,
- 2130903385};
-
- // aapt resource value: 2
- public const int LinearLayoutCompat_android_baselineAligned = 2;
-
- // aapt resource value: 3
- public const int LinearLayoutCompat_android_baselineAlignedChildIndex = 3;
-
- // aapt resource value: 0
- public const int LinearLayoutCompat_android_gravity = 0;
-
- // aapt resource value: 1
- public const int LinearLayoutCompat_android_orientation = 1;
-
- // aapt resource value: 4
- public const int LinearLayoutCompat_android_weightSum = 4;
-
- // aapt resource value: 5
- public const int LinearLayoutCompat_divider = 5;
-
- // aapt resource value: 6
- public const int LinearLayoutCompat_dividerPadding = 6;
-
- // aapt resource value: { 0x10100B3,0x10100F4,0x10100F5,0x1010181 }
- public static int[] LinearLayoutCompat_Layout = new int[] {
- 16842931,
- 16842996,
- 16842997,
- 16843137};
-
- // aapt resource value: 0
- public const int LinearLayoutCompat_Layout_android_layout_gravity = 0;
-
- // aapt resource value: 2
- public const int LinearLayoutCompat_Layout_android_layout_height = 2;
-
- // aapt resource value: 3
- public const int LinearLayoutCompat_Layout_android_layout_weight = 3;
-
- // aapt resource value: 1
- public const int LinearLayoutCompat_Layout_android_layout_width = 1;
-
- // aapt resource value: 7
- public const int LinearLayoutCompat_measureWithLargestChild = 7;
-
- // aapt resource value: 8
- public const int LinearLayoutCompat_showDividers = 8;
-
- // aapt resource value: { 0x10102AC,0x10102AD }
- public static int[] ListPopupWindow = new int[] {
- 16843436,
- 16843437};
-
- // aapt resource value: 0
- public const int ListPopupWindow_android_dropDownHorizontalOffset = 0;
-
- // aapt resource value: 1
- public const int ListPopupWindow_android_dropDownVerticalOffset = 1;
-
- // aapt resource value: { 0x10101B7,0x10101B8,0x10101B9,0x10101BA,0x7F030034,0x7F030035,0x7F0300A0,0x7F0300ED,0x7F0300EF,0x7F0300F0,0x7F0300F1,0x7F0300F3,0x7F0300F4,0x7F03014E,0x7F030170,0x7F030171 }
- public static int[] MaterialButton = new int[] {
- 16843191,
- 16843192,
- 16843193,
- 16843194,
- 2130903092,
- 2130903093,
- 2130903200,
- 2130903277,
- 2130903279,
- 2130903280,
- 2130903281,
- 2130903283,
- 2130903284,
- 2130903374,
- 2130903408,
- 2130903409};
-
- // aapt resource value: 3
- public const int MaterialButton_android_insetBottom = 3;
-
- // aapt resource value: 0
- public const int MaterialButton_android_insetLeft = 0;
-
- // aapt resource value: 1
- public const int MaterialButton_android_insetRight = 1;
-
- // aapt resource value: 2
- public const int MaterialButton_android_insetTop = 2;
-
- // aapt resource value: 4
- public const int MaterialButton_backgroundTint = 4;
-
- // aapt resource value: 5
- public const int MaterialButton_backgroundTintMode = 5;
-
- // aapt resource value: 6
- public const int MaterialButton_cornerRadius = 6;
-
- // aapt resource value: 7
- public const int MaterialButton_icon = 7;
-
- // aapt resource value: 8
- public const int MaterialButton_iconGravity = 8;
-
- // aapt resource value: 9
- public const int MaterialButton_iconPadding = 9;
-
- // aapt resource value: 10
- public const int MaterialButton_iconSize = 10;
-
- // aapt resource value: 11
- public const int MaterialButton_iconTint = 11;
-
- // aapt resource value: 12
- public const int MaterialButton_iconTintMode = 12;
-
- // aapt resource value: 13
- public const int MaterialButton_rippleColor = 13;
-
- // aapt resource value: 14
- public const int MaterialButton_strokeColor = 14;
-
- // aapt resource value: 15
- public const int MaterialButton_strokeWidth = 15;
-
- // aapt resource value: { 0x7F030170,0x7F030171 }
- public static int[] MaterialCardView = new int[] {
- 2130903408,
- 2130903409};
-
- // aapt resource value: 0
- public const int MaterialCardView_strokeColor = 0;
-
- // aapt resource value: 1
- public const int MaterialCardView_strokeWidth = 1;
-
- // aapt resource value: { 0x7F030041,0x7F030042,0x7F030068,0x7F030072,0x7F030076,0x7F030085,0x7F030086,0x7F03008C,0x7F03008D,0x7F03008E,0x7F0300B5,0x7F0300D0,0x7F030126,0x7F030127,0x7F030131,0x7F030150,0x7F030160,0x7F030193,0x7F030198,0x7F030199,0x7F03019A,0x7F03019B,0x7F03019C,0x7F03019D,0x7F03019E,0x7F03019F,0x7F0301A0,0x7F0301A1,0x7F0301A6,0x7F0301AB,0x7F0301AC,0x7F0301B0 }
- public static int[] MaterialComponentsTheme = new int[] {
- 2130903105,
- 2130903106,
- 2130903144,
- 2130903154,
- 2130903158,
- 2130903173,
- 2130903174,
- 2130903180,
- 2130903181,
- 2130903182,
- 2130903221,
- 2130903248,
- 2130903334,
- 2130903335,
- 2130903345,
- 2130903376,
- 2130903392,
- 2130903443,
- 2130903448,
- 2130903449,
- 2130903450,
- 2130903451,
- 2130903452,
- 2130903453,
- 2130903454,
- 2130903455,
- 2130903456,
- 2130903457,
- 2130903462,
- 2130903467,
- 2130903468,
- 2130903472};
-
- // aapt resource value: 0
- public const int MaterialComponentsTheme_bottomSheetDialogTheme = 0;
-
- // aapt resource value: 1
- public const int MaterialComponentsTheme_bottomSheetStyle = 1;
-
- // aapt resource value: 2
- public const int MaterialComponentsTheme_chipGroupStyle = 2;
-
- // aapt resource value: 3
- public const int MaterialComponentsTheme_chipStandaloneStyle = 3;
-
- // aapt resource value: 4
- public const int MaterialComponentsTheme_chipStyle = 4;
-
- // aapt resource value: 5
- public const int MaterialComponentsTheme_colorAccent = 5;
-
- // aapt resource value: 6
- public const int MaterialComponentsTheme_colorBackgroundFloating = 6;
-
- // aapt resource value: 7
- public const int MaterialComponentsTheme_colorPrimary = 7;
-
- // aapt resource value: 8
- public const int MaterialComponentsTheme_colorPrimaryDark = 8;
-
- // aapt resource value: 9
- public const int MaterialComponentsTheme_colorSecondary = 9;
-
- // aapt resource value: 10
- public const int MaterialComponentsTheme_editTextStyle = 10;
-
- // aapt resource value: 11
- public const int MaterialComponentsTheme_floatingActionButtonStyle = 11;
-
- // aapt resource value: 12
- public const int MaterialComponentsTheme_materialButtonStyle = 12;
-
- // aapt resource value: 13
- public const int MaterialComponentsTheme_materialCardViewStyle = 13;
-
- // aapt resource value: 14
- public const int MaterialComponentsTheme_navigationViewStyle = 14;
-
- // aapt resource value: 15
- public const int MaterialComponentsTheme_scrimBackground = 15;
-
- // aapt resource value: 16
- public const int MaterialComponentsTheme_snackbarButtonStyle = 16;
-
- // aapt resource value: 17
- public const int MaterialComponentsTheme_tabStyle = 17;
-
- // aapt resource value: 18
- public const int MaterialComponentsTheme_textAppearanceBody1 = 18;
-
- // aapt resource value: 19
- public const int MaterialComponentsTheme_textAppearanceBody2 = 19;
-
- // aapt resource value: 20
- public const int MaterialComponentsTheme_textAppearanceButton = 20;
-
- // aapt resource value: 21
- public const int MaterialComponentsTheme_textAppearanceCaption = 21;
-
- // aapt resource value: 22
- public const int MaterialComponentsTheme_textAppearanceHeadline1 = 22;
-
- // aapt resource value: 23
- public const int MaterialComponentsTheme_textAppearanceHeadline2 = 23;
-
- // aapt resource value: 24
- public const int MaterialComponentsTheme_textAppearanceHeadline3 = 24;
-
- // aapt resource value: 25
- public const int MaterialComponentsTheme_textAppearanceHeadline4 = 25;
-
- // aapt resource value: 26
- public const int MaterialComponentsTheme_textAppearanceHeadline5 = 26;
-
- // aapt resource value: 27
- public const int MaterialComponentsTheme_textAppearanceHeadline6 = 27;
-
- // aapt resource value: 28
- public const int MaterialComponentsTheme_textAppearanceOverline = 28;
-
- // aapt resource value: 29
- public const int MaterialComponentsTheme_textAppearanceSubtitle1 = 29;
-
- // aapt resource value: 30
- public const int MaterialComponentsTheme_textAppearanceSubtitle2 = 30;
-
- // aapt resource value: 31
- public const int MaterialComponentsTheme_textInputStyle = 31;
-
- // aapt resource value: { 0x101000E,0x10100D0,0x1010194,0x10101DE,0x10101DF,0x10101E0 }
- public static int[] MenuGroup = new int[] {
- 16842766,
- 16842960,
- 16843156,
- 16843230,
- 16843231,
- 16843232};
-
- // aapt resource value: 5
- public const int MenuGroup_android_checkableBehavior = 5;
-
- // aapt resource value: 0
- public const int MenuGroup_android_enabled = 0;
-
- // aapt resource value: 1
- public const int MenuGroup_android_id = 1;
-
- // aapt resource value: 3
- public const int MenuGroup_android_menuCategory = 3;
-
- // aapt resource value: 4
- public const int MenuGroup_android_orderInCategory = 4;
-
- // aapt resource value: 2
- public const int MenuGroup_android_visible = 2;
-
- // aapt resource value: { 0x1010002,0x101000E,0x10100D0,0x1010106,0x1010194,0x10101DE,0x10101DF,0x10101E1,0x10101E2,0x10101E3,0x10101E4,0x10101E5,0x101026F,0x7F03000D,0x7F03001F,0x7F030020,0x7F030028,0x7F030091,0x7F0300F3,0x7F0300F4,0x7F030132,0x7F030158,0x7F0301CC }
- public static int[] MenuItem = new int[] {
- 16842754,
- 16842766,
- 16842960,
- 16843014,
- 16843156,
- 16843230,
- 16843231,
- 16843233,
- 16843234,
- 16843235,
- 16843236,
- 16843237,
- 16843375,
- 2130903053,
- 2130903071,
- 2130903072,
- 2130903080,
- 2130903185,
- 2130903283,
- 2130903284,
- 2130903346,
- 2130903384,
- 2130903500};
-
- // aapt resource value: 13
- public const int MenuItem_actionLayout = 13;
-
- // aapt resource value: 14
- public const int MenuItem_actionProviderClass = 14;
-
- // aapt resource value: 15
- public const int MenuItem_actionViewClass = 15;
-
- // aapt resource value: 16
- public const int MenuItem_alphabeticModifiers = 16;
-
- // aapt resource value: 9
- public const int MenuItem_android_alphabeticShortcut = 9;
-
- // aapt resource value: 11
- public const int MenuItem_android_checkable = 11;
-
- // aapt resource value: 3
- public const int MenuItem_android_checked = 3;
-
- // aapt resource value: 1
- public const int MenuItem_android_enabled = 1;
-
- // aapt resource value: 0
- public const int MenuItem_android_icon = 0;
-
- // aapt resource value: 2
- public const int MenuItem_android_id = 2;
-
- // aapt resource value: 5
- public const int MenuItem_android_menuCategory = 5;
-
- // aapt resource value: 10
- public const int MenuItem_android_numericShortcut = 10;
-
- // aapt resource value: 12
- public const int MenuItem_android_onClick = 12;
-
- // aapt resource value: 6
- public const int MenuItem_android_orderInCategory = 6;
-
- // aapt resource value: 7
- public const int MenuItem_android_title = 7;
-
- // aapt resource value: 8
- public const int MenuItem_android_titleCondensed = 8;
-
- // aapt resource value: 4
- public const int MenuItem_android_visible = 4;
-
- // aapt resource value: 17
- public const int MenuItem_contentDescription = 17;
-
- // aapt resource value: 18
- public const int MenuItem_iconTint = 18;
-
- // aapt resource value: 19
- public const int MenuItem_iconTintMode = 19;
-
- // aapt resource value: 20
- public const int MenuItem_numericModifiers = 20;
-
- // aapt resource value: 21
- public const int MenuItem_showAsAction = 21;
-
- // aapt resource value: 22
- public const int MenuItem_tooltipText = 22;
-
- // aapt resource value: { 0x10100AE,0x101012C,0x101012D,0x101012E,0x101012F,0x1010130,0x1010131,0x7F030143,0x7F030172 }
- public static int[] MenuView = new int[] {
- 16842926,
- 16843052,
- 16843053,
- 16843054,
- 16843055,
- 16843056,
- 16843057,
- 2130903363,
- 2130903410};
-
- // aapt resource value: 4
- public const int MenuView_android_headerBackground = 4;
-
- // aapt resource value: 2
- public const int MenuView_android_horizontalDivider = 2;
-
- // aapt resource value: 5
- public const int MenuView_android_itemBackground = 5;
-
- // aapt resource value: 6
- public const int MenuView_android_itemIconDisabledAlpha = 6;
-
- // aapt resource value: 1
- public const int MenuView_android_itemTextAppearance = 1;
-
- // aapt resource value: 3
- public const int MenuView_android_verticalDivider = 3;
-
- // aapt resource value: 0
- public const int MenuView_android_windowAnimationStyle = 0;
-
- // aapt resource value: 7
- public const int MenuView_preserveIconSpacing = 7;
-
- // aapt resource value: 8
- public const int MenuView_subMenuArrow = 8;
-
- // aapt resource value: { 0x10100D4,0x10100DD,0x101011F,0x7F0300B6,0x7F0300DF,0x7F0300FB,0x7F0300FC,0x7F0300FE,0x7F030100,0x7F030103,0x7F030106,0x7F03012C }
- public static int[] NavigationView = new int[] {
- 16842964,
- 16842973,
- 16843039,
- 2130903222,
- 2130903263,
- 2130903291,
- 2130903292,
- 2130903294,
- 2130903296,
- 2130903299,
- 2130903302,
- 2130903340};
-
- // aapt resource value: 0
- public const int NavigationView_android_background = 0;
-
- // aapt resource value: 1
- public const int NavigationView_android_fitsSystemWindows = 1;
-
- // aapt resource value: 2
- public const int NavigationView_android_maxWidth = 2;
-
- // aapt resource value: 3
- public const int NavigationView_elevation = 3;
-
- // aapt resource value: 4
- public const int NavigationView_headerLayout = 4;
-
- // aapt resource value: 5
- public const int NavigationView_itemBackground = 5;
-
- // aapt resource value: 6
- public const int NavigationView_itemHorizontalPadding = 6;
-
- // aapt resource value: 7
- public const int NavigationView_itemIconPadding = 7;
-
- // aapt resource value: 8
- public const int NavigationView_itemIconTint = 8;
-
- // aapt resource value: 9
- public const int NavigationView_itemTextAppearance = 9;
-
- // aapt resource value: 10
- public const int NavigationView_itemTextColor = 10;
-
- // aapt resource value: 11
- public const int NavigationView_menu = 11;
-
- // aapt resource value: { 0x1010176,0x10102C9,0x7F030133 }
- public static int[] PopupWindow = new int[] {
- 16843126,
- 16843465,
- 2130903347};
-
- // aapt resource value: { 0x7F030169 }
- public static int[] PopupWindowBackgroundState = new int[] {
- 2130903401};
-
- // aapt resource value: 0
- public const int PopupWindowBackgroundState_state_above_anchor = 0;
-
- // aapt resource value: 1
- public const int PopupWindow_android_popupAnimationStyle = 1;
-
- // aapt resource value: 0
- public const int PopupWindow_android_popupBackground = 0;
-
- // aapt resource value: 2
- public const int PopupWindow_overlapAnchor = 2;
-
- // aapt resource value: { 0x7F030134,0x7F030137 }
- public static int[] RecycleListView = new int[] {
- 2130903348,
- 2130903351};
-
- // aapt resource value: 0
- public const int RecycleListView_paddingBottomNoButtons = 0;
-
- // aapt resource value: 1
- public const int RecycleListView_paddingTopNoTitle = 1;
-
- // aapt resource value: { 0x10100C4,0x10100F1,0x7F0300CA,0x7F0300CB,0x7F0300CC,0x7F0300CD,0x7F0300CE,0x7F03010B,0x7F03014D,0x7F030162,0x7F030168 }
- public static int[] RecyclerView = new int[] {
- 16842948,
- 16842993,
- 2130903242,
- 2130903243,
- 2130903244,
- 2130903245,
- 2130903246,
- 2130903307,
- 2130903373,
- 2130903394,
- 2130903400};
-
- // aapt resource value: 1
- public const int RecyclerView_android_descendantFocusability = 1;
-
- // aapt resource value: 0
- public const int RecyclerView_android_orientation = 0;
-
- // aapt resource value: 2
- public const int RecyclerView_fastScrollEnabled = 2;
-
- // aapt resource value: 3
- public const int RecyclerView_fastScrollHorizontalThumbDrawable = 3;
-
- // aapt resource value: 4
- public const int RecyclerView_fastScrollHorizontalTrackDrawable = 4;
-
- // aapt resource value: 5
- public const int RecyclerView_fastScrollVerticalThumbDrawable = 5;
-
- // aapt resource value: 6
- public const int RecyclerView_fastScrollVerticalTrackDrawable = 6;
-
- // aapt resource value: 7
- public const int RecyclerView_layoutManager = 7;
-
- // aapt resource value: 8
- public const int RecyclerView_reverseLayout = 8;
-
- // aapt resource value: 9
- public const int RecyclerView_spanCount = 9;
-
- // aapt resource value: 10
- public const int RecyclerView_stackFromEnd = 10;
-
- // aapt resource value: { 0x7F0300F9 }
- public static int[] ScrimInsetsFrameLayout = new int[] {
- 2130903289};
-
- // aapt resource value: 0
- public const int ScrimInsetsFrameLayout_insetForeground = 0;
-
- // aapt resource value: { 0x7F03003A }
- public static int[] ScrollingViewBehavior_Layout = new int[] {
- 2130903098};
-
- // aapt resource value: 0
- public const int ScrollingViewBehavior_Layout_behavior_overlapTop = 0;
-
- // aapt resource value: { 0x10100DA,0x101011F,0x1010220,0x1010264,0x7F030077,0x7F030090,0x7F0300A6,0x7F0300DE,0x7F0300F5,0x7F03010A,0x7F030147,0x7F030148,0x7F030152,0x7F030153,0x7F030173,0x7F030178,0x7F0301D3 }
- public static int[] SearchView = new int[] {
- 16842970,
- 16843039,
- 16843296,
- 16843364,
- 2130903159,
- 2130903184,
- 2130903206,
- 2130903262,
- 2130903285,
- 2130903306,
- 2130903367,
- 2130903368,
- 2130903378,
- 2130903379,
- 2130903411,
- 2130903416,
- 2130903507};
-
- // aapt resource value: 0
- public const int SearchView_android_focusable = 0;
-
- // aapt resource value: 3
- public const int SearchView_android_imeOptions = 3;
-
- // aapt resource value: 2
- public const int SearchView_android_inputType = 2;
-
- // aapt resource value: 1
- public const int SearchView_android_maxWidth = 1;
-
- // aapt resource value: 4
- public const int SearchView_closeIcon = 4;
-
- // aapt resource value: 5
- public const int SearchView_commitIcon = 5;
-
- // aapt resource value: 6
- public const int SearchView_defaultQueryHint = 6;
-
- // aapt resource value: 7
- public const int SearchView_goIcon = 7;
-
- // aapt resource value: 8
- public const int SearchView_iconifiedByDefault = 8;
-
- // aapt resource value: 9
- public const int SearchView_layout = 9;
-
- // aapt resource value: 10
- public const int SearchView_queryBackground = 10;
-
- // aapt resource value: 11
- public const int SearchView_queryHint = 11;
-
- // aapt resource value: 12
- public const int SearchView_searchHintIcon = 12;
-
- // aapt resource value: 13
- public const int SearchView_searchIcon = 13;
-
- // aapt resource value: 14
- public const int SearchView_submitBackground = 14;
-
- // aapt resource value: 15
- public const int SearchView_suggestionRowLayout = 15;
-
- // aapt resource value: 16
- public const int SearchView_voiceIcon = 16;
-
- // aapt resource value: { 0x7F030160,0x7F030161 }
- public static int[] Snackbar = new int[] {
- 2130903392,
- 2130903393};
-
- // aapt resource value: { 0x101011F,0x7F0300B6,0x7F030128 }
- public static int[] SnackbarLayout = new int[] {
- 16843039,
- 2130903222,
- 2130903336};
-
- // aapt resource value: 0
- public const int SnackbarLayout_android_maxWidth = 0;
-
- // aapt resource value: 1
- public const int SnackbarLayout_elevation = 1;
-
- // aapt resource value: 2
- public const int SnackbarLayout_maxActionInlineWidth = 2;
-
- // aapt resource value: 0
- public const int Snackbar_snackbarButtonStyle = 0;
-
- // aapt resource value: 1
- public const int Snackbar_snackbarStyle = 1;
-
- // aapt resource value: { 0x10100B2,0x1010176,0x101017B,0x1010262,0x7F030141 }
- public static int[] Spinner = new int[] {
- 16842930,
- 16843126,
- 16843131,
- 16843362,
- 2130903361};
-
- // aapt resource value: 3
- public const int Spinner_android_dropDownWidth = 3;
-
- // aapt resource value: 0
- public const int Spinner_android_entries = 0;
-
- // aapt resource value: 1
- public const int Spinner_android_popupBackground = 1;
-
- // aapt resource value: 2
- public const int Spinner_android_prompt = 2;
-
- // aapt resource value: 4
- public const int Spinner_popupTheme = 4;
-
- // aapt resource value: { 0x101011C,0x1010194,0x1010195,0x1010196,0x101030C,0x101030D }
- public static int[] StateListDrawable = new int[] {
- 16843036,
- 16843156,
- 16843157,
- 16843158,
- 16843532,
- 16843533};
-
- // aapt resource value: { 0x1010199 }
- public static int[] StateListDrawableItem = new int[] {
- 16843161};
-
- // aapt resource value: 0
- public const int StateListDrawableItem_android_drawable = 0;
-
- // aapt resource value: 3
- public const int StateListDrawable_android_constantSize = 3;
-
- // aapt resource value: 0
- public const int StateListDrawable_android_dither = 0;
-
- // aapt resource value: 4
- public const int StateListDrawable_android_enterFadeDuration = 4;
-
- // aapt resource value: 5
- public const int StateListDrawable_android_exitFadeDuration = 5;
-
- // aapt resource value: 2
- public const int StateListDrawable_android_variablePadding = 2;
-
- // aapt resource value: 1
- public const int StateListDrawable_android_visible = 1;
-
- // aapt resource value: { 0x1010124,0x1010125,0x1010142,0x7F03015B,0x7F030166,0x7F030179,0x7F03017A,0x7F03017C,0x7F0301B4,0x7F0301B5,0x7F0301B6,0x7F0301CD,0x7F0301CE,0x7F0301CF }
- public static int[] SwitchCompat = new int[] {
- 16843044,
- 16843045,
- 16843074,
- 2130903387,
- 2130903398,
- 2130903417,
- 2130903418,
- 2130903420,
- 2130903476,
- 2130903477,
- 2130903478,
- 2130903501,
- 2130903502,
- 2130903503};
-
- // aapt resource value: 1
- public const int SwitchCompat_android_textOff = 1;
-
- // aapt resource value: 0
- public const int SwitchCompat_android_textOn = 0;
-
- // aapt resource value: 2
- public const int SwitchCompat_android_thumb = 2;
-
- // aapt resource value: 3
- public const int SwitchCompat_showText = 3;
-
- // aapt resource value: 4
- public const int SwitchCompat_splitTrack = 4;
-
- // aapt resource value: 5
- public const int SwitchCompat_switchMinWidth = 5;
-
- // aapt resource value: 6
- public const int SwitchCompat_switchPadding = 6;
-
- // aapt resource value: 7
- public const int SwitchCompat_switchTextAppearance = 7;
-
- // aapt resource value: 8
- public const int SwitchCompat_thumbTextPadding = 8;
-
- // aapt resource value: 9
- public const int SwitchCompat_thumbTint = 9;
-
- // aapt resource value: 10
- public const int SwitchCompat_thumbTintMode = 10;
-
- // aapt resource value: 11
- public const int SwitchCompat_track = 11;
-
- // aapt resource value: 12
- public const int SwitchCompat_trackTint = 12;
-
- // aapt resource value: 13
- public const int SwitchCompat_trackTintMode = 13;
-
- // aapt resource value: { 0x1010002,0x10100F2,0x101014F }
- public static int[] TabItem = new int[] {
- 16842754,
- 16842994,
- 16843087};
-
- // aapt resource value: 0
- public const int TabItem_android_icon = 0;
-
- // aapt resource value: 1
- public const int TabItem_android_layout = 1;
-
- // aapt resource value: 2
- public const int TabItem_android_text = 2;
-
- // aapt resource value: { 0x7F03017D,0x7F03017E,0x7F03017F,0x7F030180,0x7F030181,0x7F030182,0x7F030183,0x7F030184,0x7F030185,0x7F030186,0x7F030187,0x7F030188,0x7F030189,0x7F03018A,0x7F03018B,0x7F03018C,0x7F03018D,0x7F03018E,0x7F03018F,0x7F030190,0x7F030191,0x7F030192,0x7F030194,0x7F030195,0x7F030196 }
- public static int[] TabLayout = new int[] {
- 2130903421,
- 2130903422,
- 2130903423,
- 2130903424,
- 2130903425,
- 2130903426,
- 2130903427,
- 2130903428,
- 2130903429,
- 2130903430,
- 2130903431,
- 2130903432,
- 2130903433,
- 2130903434,
- 2130903435,
- 2130903436,
- 2130903437,
- 2130903438,
- 2130903439,
- 2130903440,
- 2130903441,
- 2130903442,
- 2130903444,
- 2130903445,
- 2130903446};
-
- // aapt resource value: 0
- public const int TabLayout_tabBackground = 0;
-
- // aapt resource value: 1
- public const int TabLayout_tabContentStart = 1;
-
- // aapt resource value: 2
- public const int TabLayout_tabGravity = 2;
-
- // aapt resource value: 3
- public const int TabLayout_tabIconTint = 3;
-
- // aapt resource value: 4
- public const int TabLayout_tabIconTintMode = 4;
-
- // aapt resource value: 5
- public const int TabLayout_tabIndicator = 5;
-
- // aapt resource value: 6
- public const int TabLayout_tabIndicatorAnimationDuration = 6;
-
- // aapt resource value: 7
- public const int TabLayout_tabIndicatorColor = 7;
-
- // aapt resource value: 8
- public const int TabLayout_tabIndicatorFullWidth = 8;
-
- // aapt resource value: 9
- public const int TabLayout_tabIndicatorGravity = 9;
-
- // aapt resource value: 10
- public const int TabLayout_tabIndicatorHeight = 10;
-
- // aapt resource value: 11
- public const int TabLayout_tabInlineLabel = 11;
-
- // aapt resource value: 12
- public const int TabLayout_tabMaxWidth = 12;
-
- // aapt resource value: 13
- public const int TabLayout_tabMinWidth = 13;
-
- // aapt resource value: 14
- public const int TabLayout_tabMode = 14;
-
- // aapt resource value: 15
- public const int TabLayout_tabPadding = 15;
-
- // aapt resource value: 16
- public const int TabLayout_tabPaddingBottom = 16;
-
- // aapt resource value: 17
- public const int TabLayout_tabPaddingEnd = 17;
-
- // aapt resource value: 18
- public const int TabLayout_tabPaddingStart = 18;
-
- // aapt resource value: 19
- public const int TabLayout_tabPaddingTop = 19;
-
- // aapt resource value: 20
- public const int TabLayout_tabRippleColor = 20;
-
- // aapt resource value: 21
- public const int TabLayout_tabSelectedTextColor = 21;
-
- // aapt resource value: 22
- public const int TabLayout_tabTextAppearance = 22;
-
- // aapt resource value: 23
- public const int TabLayout_tabTextColor = 23;
-
- // aapt resource value: 24
- public const int TabLayout_tabUnboundedRipple = 24;
-
- // aapt resource value: { 0x1010095,0x1010096,0x1010097,0x1010098,0x101009A,0x101009B,0x1010161,0x1010162,0x1010163,0x1010164,0x10103AC,0x7F0300D2,0x7F030197 }
- public static int[] TextAppearance = new int[] {
- 16842901,
- 16842902,
- 16842903,
- 16842904,
- 16842906,
- 16842907,
- 16843105,
- 16843106,
- 16843107,
- 16843108,
- 16843692,
- 2130903250,
- 2130903447};
-
- // aapt resource value: 10
- public const int TextAppearance_android_fontFamily = 10;
-
- // aapt resource value: 6
- public const int TextAppearance_android_shadowColor = 6;
-
- // aapt resource value: 7
- public const int TextAppearance_android_shadowDx = 7;
-
- // aapt resource value: 8
- public const int TextAppearance_android_shadowDy = 8;
-
- // aapt resource value: 9
- public const int TextAppearance_android_shadowRadius = 9;
-
- // aapt resource value: 3
- public const int TextAppearance_android_textColor = 3;
-
- // aapt resource value: 4
- public const int TextAppearance_android_textColorHint = 4;
-
- // aapt resource value: 5
- public const int TextAppearance_android_textColorLink = 5;
-
- // aapt resource value: 0
- public const int TextAppearance_android_textSize = 0;
-
- // aapt resource value: 2
- public const int TextAppearance_android_textStyle = 2;
-
- // aapt resource value: 1
- public const int TextAppearance_android_typeface = 1;
-
- // aapt resource value: 11
- public const int TextAppearance_fontFamily = 11;
-
- // aapt resource value: 12
- public const int TextAppearance_textAllCaps = 12;
-
- // aapt resource value: { 0x101009A,0x1010150,0x7F030043,0x7F030044,0x7F030045,0x7F030046,0x7F030047,0x7F030048,0x7F030049,0x7F03004A,0x7F03004B,0x7F0300A1,0x7F0300A2,0x7F0300A3,0x7F0300A4,0x7F0300B9,0x7F0300BA,0x7F0300E1,0x7F0300E2,0x7F0300E3,0x7F0300E7,0x7F0300E8,0x7F0300E9,0x7F03013B,0x7F03013C,0x7F03013D,0x7F03013E,0x7F03013F }
- public static int[] TextInputLayout = new int[] {
- 16842906,
- 16843088,
- 2130903107,
- 2130903108,
- 2130903109,
- 2130903110,
- 2130903111,
- 2130903112,
- 2130903113,
- 2130903114,
- 2130903115,
- 2130903201,
- 2130903202,
- 2130903203,
- 2130903204,
- 2130903225,
- 2130903226,
- 2130903265,
- 2130903266,
- 2130903267,
- 2130903271,
- 2130903272,
- 2130903273,
- 2130903355,
- 2130903356,
- 2130903357,
- 2130903358,
- 2130903359};
-
- // aapt resource value: 1
- public const int TextInputLayout_android_hint = 1;
-
- // aapt resource value: 0
- public const int TextInputLayout_android_textColorHint = 0;
-
- // aapt resource value: 2
- public const int TextInputLayout_boxBackgroundColor = 2;
-
- // aapt resource value: 3
- public const int TextInputLayout_boxBackgroundMode = 3;
-
- // aapt resource value: 4
- public const int TextInputLayout_boxCollapsedPaddingTop = 4;
-
- // aapt resource value: 5
- public const int TextInputLayout_boxCornerRadiusBottomEnd = 5;
-
- // aapt resource value: 6
- public const int TextInputLayout_boxCornerRadiusBottomStart = 6;
-
- // aapt resource value: 7
- public const int TextInputLayout_boxCornerRadiusTopEnd = 7;
-
- // aapt resource value: 8
- public const int TextInputLayout_boxCornerRadiusTopStart = 8;
-
- // aapt resource value: 9
- public const int TextInputLayout_boxStrokeColor = 9;
-
- // aapt resource value: 10
- public const int TextInputLayout_boxStrokeWidth = 10;
-
- // aapt resource value: 11
- public const int TextInputLayout_counterEnabled = 11;
-
- // aapt resource value: 12
- public const int TextInputLayout_counterMaxLength = 12;
-
- // aapt resource value: 13
- public const int TextInputLayout_counterOverflowTextAppearance = 13;
-
- // aapt resource value: 14
- public const int TextInputLayout_counterTextAppearance = 14;
-
- // aapt resource value: 15
- public const int TextInputLayout_errorEnabled = 15;
-
- // aapt resource value: 16
- public const int TextInputLayout_errorTextAppearance = 16;
-
- // aapt resource value: 17
- public const int TextInputLayout_helperText = 17;
-
- // aapt resource value: 18
- public const int TextInputLayout_helperTextEnabled = 18;
-
- // aapt resource value: 19
- public const int TextInputLayout_helperTextTextAppearance = 19;
-
- // aapt resource value: 20
- public const int TextInputLayout_hintAnimationEnabled = 20;
-
- // aapt resource value: 21
- public const int TextInputLayout_hintEnabled = 21;
-
- // aapt resource value: 22
- public const int TextInputLayout_hintTextAppearance = 22;
-
- // aapt resource value: 23
- public const int TextInputLayout_passwordToggleContentDescription = 23;
-
- // aapt resource value: 24
- public const int TextInputLayout_passwordToggleDrawable = 24;
-
- // aapt resource value: 25
- public const int TextInputLayout_passwordToggleEnabled = 25;
-
- // aapt resource value: 26
- public const int TextInputLayout_passwordToggleTint = 26;
-
- // aapt resource value: 27
- public const int TextInputLayout_passwordToggleTintMode = 27;
-
- // aapt resource value: { 0x1010034,0x7F0300B7,0x7F0300B8 }
- public static int[] ThemeEnforcement = new int[] {
- 16842804,
- 2130903223,
- 2130903224};
-
- // aapt resource value: 0
- public const int ThemeEnforcement_android_textAppearance = 0;
-
- // aapt resource value: 1
- public const int ThemeEnforcement_enforceMaterialTheme = 1;
-
- // aapt resource value: 2
- public const int ThemeEnforcement_enforceTextAppearance = 2;
-
- // aapt resource value: { 0x10100AF,0x1010140,0x7F030051,0x7F03007F,0x7F030080,0x7F030092,0x7F030093,0x7F030094,0x7F030095,0x7F030096,0x7F030097,0x7F030124,0x7F030125,0x7F030129,0x7F03012E,0x7F03012F,0x7F030141,0x7F030174,0x7F030175,0x7F030176,0x7F0301BC,0x7F0301BE,0x7F0301BF,0x7F0301C0,0x7F0301C1,0x7F0301C2,0x7F0301C3,0x7F0301C4,0x7F0301C5 }
- public static int[] Toolbar = new int[] {
- 16842927,
- 16843072,
- 2130903121,
- 2130903167,
- 2130903168,
- 2130903186,
- 2130903187,
- 2130903188,
- 2130903189,
- 2130903190,
- 2130903191,
- 2130903332,
- 2130903333,
- 2130903337,
- 2130903342,
- 2130903343,
- 2130903361,
- 2130903412,
- 2130903413,
- 2130903414,
- 2130903484,
- 2130903486,
- 2130903487,
- 2130903488,
- 2130903489,
- 2130903490,
- 2130903491,
- 2130903492,
- 2130903493};
-
- // aapt resource value: 0
- public const int Toolbar_android_gravity = 0;
-
- // aapt resource value: 1
- public const int Toolbar_android_minHeight = 1;
-
- // aapt resource value: 2
- public const int Toolbar_buttonGravity = 2;
-
- // aapt resource value: 3
- public const int Toolbar_collapseContentDescription = 3;
-
- // aapt resource value: 4
- public const int Toolbar_collapseIcon = 4;
-
- // aapt resource value: 5
- public const int Toolbar_contentInsetEnd = 5;
-
- // aapt resource value: 6
- public const int Toolbar_contentInsetEndWithActions = 6;
-
- // aapt resource value: 7
- public const int Toolbar_contentInsetLeft = 7;
-
- // aapt resource value: 8
- public const int Toolbar_contentInsetRight = 8;
-
- // aapt resource value: 9
- public const int Toolbar_contentInsetStart = 9;
-
- // aapt resource value: 10
- public const int Toolbar_contentInsetStartWithNavigation = 10;
-
- // aapt resource value: 11
- public const int Toolbar_logo = 11;
-
- // aapt resource value: 12
- public const int Toolbar_logoDescription = 12;
-
- // aapt resource value: 13
- public const int Toolbar_maxButtonHeight = 13;
-
- // aapt resource value: 14
- public const int Toolbar_navigationContentDescription = 14;
-
- // aapt resource value: 15
- public const int Toolbar_navigationIcon = 15;
-
- // aapt resource value: 16
- public const int Toolbar_popupTheme = 16;
-
- // aapt resource value: 17
- public const int Toolbar_subtitle = 17;
-
- // aapt resource value: 18
- public const int Toolbar_subtitleTextAppearance = 18;
-
- // aapt resource value: 19
- public const int Toolbar_subtitleTextColor = 19;
-
- // aapt resource value: 20
- public const int Toolbar_title = 20;
-
- // aapt resource value: 21
- public const int Toolbar_titleMargin = 21;
-
- // aapt resource value: 22
- public const int Toolbar_titleMarginBottom = 22;
-
- // aapt resource value: 23
- public const int Toolbar_titleMarginEnd = 23;
-
- // aapt resource value: 26
- public const int Toolbar_titleMargins = 26;
-
- // aapt resource value: 24
- public const int Toolbar_titleMarginStart = 24;
-
- // aapt resource value: 25
- public const int Toolbar_titleMarginTop = 25;
-
- // aapt resource value: 27
- public const int Toolbar_titleTextAppearance = 27;
-
- // aapt resource value: 28
- public const int Toolbar_titleTextColor = 28;
-
- // aapt resource value: { 0x1010000,0x10100DA,0x7F030135,0x7F030136,0x7F0301B2 }
- public static int[] View = new int[] {
- 16842752,
- 16842970,
- 2130903349,
- 2130903350,
- 2130903474};
-
- // aapt resource value: { 0x10100D4,0x7F030034,0x7F030035 }
- public static int[] ViewBackgroundHelper = new int[] {
- 16842964,
- 2130903092,
- 2130903093};
-
- // aapt resource value: 0
- public const int ViewBackgroundHelper_android_background = 0;
-
- // aapt resource value: 1
- public const int ViewBackgroundHelper_backgroundTint = 1;
-
- // aapt resource value: 2
- public const int ViewBackgroundHelper_backgroundTintMode = 2;
-
- // aapt resource value: { 0x10100D0,0x10100F2,0x10100F3 }
- public static int[] ViewStubCompat = new int[] {
- 16842960,
- 16842994,
- 16842995};
-
- // aapt resource value: 0
- public const int ViewStubCompat_android_id = 0;
-
- // aapt resource value: 2
- public const int ViewStubCompat_android_inflatedId = 2;
-
- // aapt resource value: 1
- public const int ViewStubCompat_android_layout = 1;
-
- // aapt resource value: 1
- public const int View_android_focusable = 1;
-
- // aapt resource value: 0
- public const int View_android_theme = 0;
-
- // aapt resource value: 2
- public const int View_paddingEnd = 2;
-
- // aapt resource value: 3
- public const int View_paddingStart = 3;
-
- // aapt resource value: 4
- public const int View_theme = 4;
-
- static Styleable()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Styleable()
- {
- }
- }
-
- public partial class Xml
- {
-
- // aapt resource value: 0x7F100000
- public const int xamarin_essentials_fileprovider_file_paths = 2131755008;
-
- static Xml()
- {
- global::Android.Runtime.ResourceIdManager.UpdateIdValues();
- }
-
- private Xml()
- {
- }
- }
- }
-}
-#pragma warning restore 1591
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/drawable/tab_about.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/drawable/tab_about.png
deleted file mode 100644
index 48845257c..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/drawable/tab_about.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/drawable/tab_feed.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/drawable/tab_feed.png
deleted file mode 100644
index fdf6daf8c..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/drawable/tab_feed.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/drawable/xamarin_logo.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/drawable/xamarin_logo.png
deleted file mode 100644
index b36d00ed6..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/drawable/xamarin_logo.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/layout/Tabbar.xml b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/layout/Tabbar.xml
deleted file mode 100644
index c8c4a94f9..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/layout/Tabbar.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/layout/Toolbar.xml b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/layout/Toolbar.xml
deleted file mode 100644
index 85670a6c2..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/layout/Toolbar.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-anydpi-v26/icon.xml b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-anydpi-v26/icon.xml
deleted file mode 100644
index b64041ab3..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-anydpi-v26/icon.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-anydpi-v26/icon_round.xml b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-anydpi-v26/icon_round.xml
deleted file mode 100644
index b64041ab3..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-anydpi-v26/icon_round.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-hdpi/icon.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-hdpi/icon.png
deleted file mode 100644
index 4623ca2c4..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-hdpi/icon.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-hdpi/launcher_foreground.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-hdpi/launcher_foreground.png
deleted file mode 100644
index a89e5bbce..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-hdpi/launcher_foreground.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-mdpi/icon.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-mdpi/icon.png
deleted file mode 100644
index 9b1d25e25..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-mdpi/icon.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-mdpi/launcher_foreground.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-mdpi/launcher_foreground.png
deleted file mode 100644
index 431a8a053..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-mdpi/launcher_foreground.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xhdpi/icon.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xhdpi/icon.png
deleted file mode 100644
index 844dfe544..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xhdpi/icon.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xhdpi/launcher_foreground.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xhdpi/launcher_foreground.png
deleted file mode 100644
index 9e9e4f8e4..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xhdpi/launcher_foreground.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxhdpi/icon.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxhdpi/icon.png
deleted file mode 100644
index e20ec9ae2..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxhdpi/icon.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxhdpi/launcher_foreground.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxhdpi/launcher_foreground.png
deleted file mode 100644
index 5f1e1356e..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxhdpi/launcher_foreground.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxxhdpi/icon.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxxhdpi/icon.png
deleted file mode 100644
index 8a08bf75e..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxxhdpi/icon.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png
deleted file mode 100644
index aca9f8d1c..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/mipmap-xxxhdpi/launcher_foreground.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/values/colors.xml b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/values/colors.xml
deleted file mode 100644
index d00eaab51..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/values/colors.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
- #FFFFFF
- #3F51B5
- #303F9F
- #FF4081
-
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/values/styles.xml b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/values/styles.xml
deleted file mode 100644
index 2bff62b27..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/Resources/values/styles.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/XamarinDataChannelTest.Android.csproj b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/XamarinDataChannelTest.Android.csproj
deleted file mode 100644
index 44638a773..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.Android/XamarinDataChannelTest.Android.csproj
+++ /dev/null
@@ -1,98 +0,0 @@
-
-
-
- Debug
- AnyCPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}
- {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- {6968b3a4-1835-46a3-ac5c-1ae33b475983}
- Library
- XamarinDataChannelTest.Droid
- XamarinDataChannelTest.Android
- True
- True
- Resources\Resource.designer.cs
- Resource
- Properties\AndroidManifest.xml
- Resources
- Assets
- false
- v9.0
- true
- true
- Xamarin.Android.Net.AndroidClientHandler
-
-
-
-
- true
- portable
- false
- bin\Debug
- DEBUG;
- prompt
- 4
- None
-
-
- true
- portable
- true
- bin\Release
- prompt
- 4
- true
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {75986D7F-A2F1-4F98-8A8D-09246EE1C1AD}
- XamarinDataChannelTest
-
-
-
-
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/AppDelegate.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/AppDelegate.cs
deleted file mode 100644
index 4e078224e..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/AppDelegate.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-using Foundation;
-using UIKit;
-
-namespace XamarinDataChannelTest.iOS
-{
- // The UIApplicationDelegate for the application. This class is responsible for launching the
- // User Interface of the application, as well as listening (and optionally responding) to
- // application events from iOS.
- [Register("AppDelegate")]
- public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
- {
- //
- // This method is invoked when the application has loaded and is ready to run. In this
- // method you should instantiate the window, load the UI into it and then make the window
- // visible.
- //
- // You have 17 seconds to return from this method, or iOS will terminate your application.
- //
- public override bool FinishedLaunching(UIApplication app, NSDictionary options)
- {
- global::Xamarin.Forms.Forms.SetFlags("CollectionView_Experimental");
- global::Xamarin.Forms.Forms.Init();
- LoadApplication(new App());
-
- return base.FinishedLaunching(app, options);
- }
- }
-}
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json
deleted file mode 100644
index 78caa1da6..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Contents.json
+++ /dev/null
@@ -1,117 +0,0 @@
-{
- "images": [
- {
- "scale": "2x",
- "size": "20x20",
- "idiom": "iphone",
- "filename": "Icon40.png"
- },
- {
- "scale": "3x",
- "size": "20x20",
- "idiom": "iphone",
- "filename": "Icon60.png"
- },
- {
- "scale": "2x",
- "size": "29x29",
- "idiom": "iphone",
- "filename": "Icon58.png"
- },
- {
- "scale": "3x",
- "size": "29x29",
- "idiom": "iphone",
- "filename": "Icon87.png"
- },
- {
- "scale": "2x",
- "size": "40x40",
- "idiom": "iphone",
- "filename": "Icon80.png"
- },
- {
- "scale": "3x",
- "size": "40x40",
- "idiom": "iphone",
- "filename": "Icon120.png"
- },
- {
- "scale": "2x",
- "size": "60x60",
- "idiom": "iphone",
- "filename": "Icon120.png"
- },
- {
- "scale": "3x",
- "size": "60x60",
- "idiom": "iphone",
- "filename": "Icon180.png"
- },
- {
- "scale": "1x",
- "size": "20x20",
- "idiom": "ipad",
- "filename": "Icon20.png"
- },
- {
- "scale": "2x",
- "size": "20x20",
- "idiom": "ipad",
- "filename": "Icon40.png"
- },
- {
- "scale": "1x",
- "size": "29x29",
- "idiom": "ipad",
- "filename": "Icon29.png"
- },
- {
- "scale": "2x",
- "size": "29x29",
- "idiom": "ipad",
- "filename": "Icon58.png"
- },
- {
- "scale": "1x",
- "size": "40x40",
- "idiom": "ipad",
- "filename": "Icon40.png"
- },
- {
- "scale": "2x",
- "size": "40x40",
- "idiom": "ipad",
- "filename": "Icon80.png"
- },
- {
- "scale": "1x",
- "size": "76x76",
- "idiom": "ipad",
- "filename": "Icon76.png"
- },
- {
- "scale": "2x",
- "size": "76x76",
- "idiom": "ipad",
- "filename": "Icon152.png"
- },
- {
- "scale": "2x",
- "size": "83.5x83.5",
- "idiom": "ipad",
- "filename": "Icon167.png"
- },
- {
- "scale": "1x",
- "size": "1024x1024",
- "idiom": "ios-marketing",
- "filename": "Icon1024.png"
- }
- ],
- "properties": {},
- "info": {
- "version": 1,
- "author": "xcode"
- }
-}
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png
deleted file mode 100644
index 9174c989a..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon1024.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png
deleted file mode 100644
index 9c60a1761..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon120.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png
deleted file mode 100644
index 448d6efb5..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon152.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png
deleted file mode 100644
index 8524768f8..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon167.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png
deleted file mode 100644
index 60a64703c..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon180.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png
deleted file mode 100644
index 45268a641..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon20.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png
deleted file mode 100644
index 6a6c77a8b..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon29.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png
deleted file mode 100644
index cc7edcf5c..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon40.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png
deleted file mode 100644
index 1ad04f004..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon58.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png
deleted file mode 100644
index 2dd52620a..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon60.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png
deleted file mode 100644
index b058cae2f..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon76.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png
deleted file mode 100644
index 02e47a261..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon80.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png
deleted file mode 100644
index 4954a4bd3..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Assets.xcassets/AppIcon.appiconset/Icon87.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Entitlements.plist b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Entitlements.plist
deleted file mode 100644
index d39866528..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Entitlements.plist
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Info.plist b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Info.plist
deleted file mode 100644
index 0ef8eabdb..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Info.plist
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-
- UIDeviceFamily
-
- 1
- 2
-
- UISupportedInterfaceOrientations
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- UISupportedInterfaceOrientations~ipad
-
- UIInterfaceOrientationPortrait
- UIInterfaceOrientationPortraitUpsideDown
- UIInterfaceOrientationLandscapeLeft
- UIInterfaceOrientationLandscapeRight
-
- MinimumOSVersion
- 8.0
- CFBundleDisplayName
- XamarinDataChannelTest
- CFBundleIdentifier
- com.companyname.XamarinDataChannelTest
- CFBundleVersion
- 1.0
- UILaunchStoryboardName
- LaunchScreen
- CFBundleName
- XamarinDataChannelTest
- XSAppIconAssets
- Assets.xcassets/AppIcon.appiconset
-
-
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Main.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Main.cs
deleted file mode 100644
index 3713a4539..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Main.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-
-using Foundation;
-using UIKit;
-
-namespace XamarinDataChannelTest.iOS
-{
- public class Application
- {
- // This is the main entry point of the application.
- static void Main(string[] args)
- {
- // if you want to use a different Application Delegate class from "AppDelegate"
- // you can specify it here.
- UIApplication.Main(args, null, "AppDelegate");
- }
- }
-}
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Properties/AssemblyInfo.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Properties/AssemblyInfo.cs
deleted file mode 100644
index b62ad9d5e..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("XamarinDataChannelTest.iOS")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("XamarinDataChannelTest.iOS")]
-[assembly: AssemblyCopyright("Copyright © 2014")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("72bdc44f-c588-44f3-b6df-9aace7daafdd")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default-568h@2x.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default-568h@2x.png
deleted file mode 100644
index 26c6461e5..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default-568h@2x.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default-Portrait.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default-Portrait.png
deleted file mode 100644
index 5d0d1ab4c..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default-Portrait.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default-Portrait@2x.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default-Portrait@2x.png
deleted file mode 100644
index 0ee2688e8..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default-Portrait@2x.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default.png
deleted file mode 100644
index b74643c0a..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default@2x.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default@2x.png
deleted file mode 100644
index dbd6bd3e8..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/Default@2x.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/LaunchScreen.storyboard b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/LaunchScreen.storyboard
deleted file mode 100644
index 44abebc91..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/LaunchScreen.storyboard
+++ /dev/null
@@ -1,39 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_about.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_about.png
deleted file mode 100644
index 48845257c..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_about.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_about@2x.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_about@2x.png
deleted file mode 100644
index f9ba9f963..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_about@2x.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_about@3x.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_about@3x.png
deleted file mode 100644
index fa470c26d..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_about@3x.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_feed.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_feed.png
deleted file mode 100644
index fdf6daf8c..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_feed.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_feed@2x.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_feed@2x.png
deleted file mode 100644
index 845d96c75..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_feed@2x.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_feed@3x.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_feed@3x.png
deleted file mode 100644
index 812cf73db..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/tab_feed@3x.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/xamarin_logo.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/xamarin_logo.png
deleted file mode 100644
index 7d5007d18..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/xamarin_logo.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/xamarin_logo@2x.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/xamarin_logo@2x.png
deleted file mode 100644
index a5b9fc0e4..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/xamarin_logo@2x.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/xamarin_logo@3x.png b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/xamarin_logo@3x.png
deleted file mode 100644
index b36d00ed6..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/Resources/xamarin_logo@3x.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/XamarinDataChannelTest.iOS.csproj b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/XamarinDataChannelTest.iOS.csproj
deleted file mode 100644
index 1e13b773d..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.iOS/XamarinDataChannelTest.iOS.csproj
+++ /dev/null
@@ -1,156 +0,0 @@
-
-
-
- Debug
- iPhoneSimulator
- 8.0.30703
- 2.0
- {213CD6D2-9794-4905-A662-84C4B236360B}
- {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- {89a4fe7c-635d-49c9-8d8c-5cd363c0d68d}
- Exe
- XamarinDataChannelTest.iOS
- Resources
- XamarinDataChannelTest.iOS
- true
- NSUrlSessionHandler
- manual
-
-
- true
- full
- false
- bin\iPhoneSimulator\Debug
- DEBUG
- prompt
- 4
- x86_64
- SdkOnly
- true
- HttpClientHandler
-
-
- none
- true
- bin\iPhoneSimulator\Release
- prompt
- 4
- None
- x86_64
-
-
- true
- full
- false
- bin\iPhone\Debug
- DEBUG
- prompt
- 4
- ARM64
- iPhone Distribution
- true
- Entitlements.plist
- SdkOnly
- -all
- 14.0
- HttpClientHandler
- true
- VS: WildCard Development
-
-
- none
- true
- bin\iPhone\Release
- prompt
- 4
- ARM64
- iPhone Developer
- Entitlements.plist
- 14.0
- HttpClientHandler
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
- false
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {75986D7F-A2F1-4F98-8A8D-09246EE1C1AD}
- XamarinDataChannelTest
-
-
-
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.sln b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.sln
deleted file mode 100644
index 8a201a374..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest.sln
+++ /dev/null
@@ -1,83 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.30320.27
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XamarinDataChannelTest", "XamarinDataChannelTest\XamarinDataChannelTest.csproj", "{A8E757DE-42C1-41D3-9546-FD73A8A269D7}"
-EndProject
-Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SIPSorcery", "..\..\..\src\SIPSorcery.csproj", "{13B059CB-7D84-4BE2-ABF0-F2BF665F097F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamarinDataChannelTest.Android", "XamarinDataChannelTest.Android\XamarinDataChannelTest.Android.csproj", "{3AA77535-77E5-461B-B86D-21AD137C148D}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XamarinDataChannelTest.iOS", "XamarinDataChannelTest.iOS\XamarinDataChannelTest.iOS.csproj", "{213CD6D2-9794-4905-A662-84C4B236360B}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|iPhone = Debug|iPhone
- Debug|iPhoneSimulator = Debug|iPhoneSimulator
- Release|Any CPU = Release|Any CPU
- Release|iPhone = Release|iPhone
- Release|iPhoneSimulator = Release|iPhoneSimulator
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Debug|iPhone.Build.0 = Debug|Any CPU
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Release|Any CPU.Build.0 = Release|Any CPU
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Release|iPhone.ActiveCfg = Release|Any CPU
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Release|iPhone.Build.0 = Release|Any CPU
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {A8E757DE-42C1-41D3-9546-FD73A8A269D7}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Debug|iPhone.Build.0 = Debug|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Release|Any CPU.Build.0 = Release|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Release|iPhone.ActiveCfg = Release|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Release|iPhone.Build.0 = Release|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {13B059CB-7D84-4BE2-ABF0-F2BF665F097F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Debug|iPhone.Build.0 = Debug|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Debug|iPhone.Deploy.0 = Debug|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Release|Any CPU.Build.0 = Release|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Release|Any CPU.Deploy.0 = Release|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Release|iPhone.ActiveCfg = Release|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Release|iPhone.Build.0 = Release|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Release|iPhone.Deploy.0 = Release|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {3AA77535-77E5-461B-B86D-21AD137C148D}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
- {213CD6D2-9794-4905-A662-84C4B236360B}.Debug|Any CPU.ActiveCfg = Debug|iPhone
- {213CD6D2-9794-4905-A662-84C4B236360B}.Debug|iPhone.ActiveCfg = Debug|iPhone
- {213CD6D2-9794-4905-A662-84C4B236360B}.Debug|iPhone.Build.0 = Debug|iPhone
- {213CD6D2-9794-4905-A662-84C4B236360B}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
- {213CD6D2-9794-4905-A662-84C4B236360B}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
- {213CD6D2-9794-4905-A662-84C4B236360B}.Release|Any CPU.ActiveCfg = Release|iPhone
- {213CD6D2-9794-4905-A662-84C4B236360B}.Release|iPhone.ActiveCfg = Release|iPhone
- {213CD6D2-9794-4905-A662-84C4B236360B}.Release|iPhone.Build.0 = Release|iPhone
- {213CD6D2-9794-4905-A662-84C4B236360B}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
- {213CD6D2-9794-4905-A662-84C4B236360B}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
- GlobalSection(ExtensibilityGlobals) = postSolution
- SolutionGuid = {A39E8866-AC30-41DF-ABA5-AFEABEB7FED1}
- EndGlobalSection
-EndGlobal
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/App.xaml b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/App.xaml
deleted file mode 100644
index faae556d5..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/App.xaml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/App.xaml.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/App.xaml.cs
deleted file mode 100644
index f12602771..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/App.xaml.cs
+++ /dev/null
@@ -1,40 +0,0 @@
-using Microsoft.Extensions.Logging;
-using Serilog;
-using Serilog.Extensions.Logging;
-using Xamarin.Forms;
-
-namespace XamarinDataChannelTest
-{
- public partial class App : Application
- {
- public App()
- {
- InitializeComponent();
- InitialiseLogging();
- MainPage = new AppShell();
- }
-
- protected override void OnStart()
- {
- }
-
- protected override void OnSleep()
- {
- }
-
- protected override void OnResume()
- {
- }
-
- public void InitialiseLogging()
- {
- var seriLogger = new LoggerConfiguration()
- .Enrich.FromLogContext()
- .MinimumLevel.Is(Serilog.Events.LogEventLevel.Debug)
- .WriteTo.Debug()
- .CreateLogger();
- var factory = new SerilogLoggerFactory(seriLogger);
- SIPSorcery.LogFactory.Set(factory);
- }
- }
-}
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/AppShell.xaml b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/AppShell.xaml
deleted file mode 100644
index bd1a45fd4..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/AppShell.xaml
+++ /dev/null
@@ -1,72 +0,0 @@
-
-
-
-
-
-
- #2196F3
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/AppShell.xaml.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/AppShell.xaml.cs
deleted file mode 100644
index 2429ab6ff..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/AppShell.xaml.cs
+++ /dev/null
@@ -1,15 +0,0 @@
-using System;
-using System.Collections.Generic;
-
-using Xamarin.Forms;
-
-namespace XamarinDataChannelTest
-{
- public partial class AppShell : Xamarin.Forms.Shell
- {
- public AppShell()
- {
- InitializeComponent();
- }
- }
-}
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/AssemblyInfo.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/AssemblyInfo.cs
deleted file mode 100644
index d4b5015be..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/AssemblyInfo.cs
+++ /dev/null
@@ -1,3 +0,0 @@
-using Xamarin.Forms.Xaml;
-
-[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Models/WebRTCPeer.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Models/WebRTCPeer.cs
deleted file mode 100644
index 5a7f14614..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Models/WebRTCPeer.cs
+++ /dev/null
@@ -1,191 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Net;
-using System.Threading.Tasks;
-using System.Security.Cryptography.X509Certificates;
-using Microsoft.Extensions.Logging;
-using SIPSorcery.Net;
-using System.Text;
-using System.Threading;
-
-namespace XamarinDataChannelTest.Models
-{
- public class WebRTCPeer
- {
- private const string DUMMY_CERTIFICATE_BASE64 =
-"MIIJagIBAzCCCSYGCSqGSIb3DQEHAaCCCRcEggkTMIIJDzCCBZAGCSqGSIb3DQEHAaCCBYEEggV9MIIFeTCCBXUGCyqGSIb3DQE" +
-"MCgECoIIE7jCCBOowHAYKKoZIhvcNAQwBAzAOBAjSBlPXK93x7wICB9AEggTIbyXDPx/6WkNQv9hXoQIwn3F9pvrmg8+SyBbwTr" +
-"Fpr50GJQQqA5qpihvQ38s5fWv3rv8WpVttAAvCtSE6Q7o8HZmMNYdA7dU/8SAx/Cy41qWjUytMLEL07lH/d24l8ek9nZpY+u08R" +
-"5h5tlTcjfQ2Ta9jJHb2VSHa40dn5ufv4QicbcjLnSa6T9i+wpiUsf8V4A8SD0zdU/Vs9VvYlrFS+5eYkPHNHVX6fjl4l/Xk5XV+" +
-"m4Nry0IwAepdi5KENf5+ajamSEIDqJXwR0wXfZ/eJp12Eyviq3kG880jzVeQ+eXTXLPtMGIbPW1qOS1owFWd5XYkn0QqyIcC73V" +
-"jxhr2UzCM2Y86tbIALexO2kZdLHqhqD3ZnMVoHSOY2fG9U+Icbx0077zoWEhPjxQ8Trurg1gochqb2MME2ksuk7MF6n9Hw/Asp/" +
-"iig90wZZfFXuP3fWmZjbqDDxxVHxo2mxQWiV/LhmV2BuFgyA++Fhx8TbIssDrUHsaIl8pp0iTl2c+D/n48WTDeuiSJ/S04B8G1D" +
-"bsQmyT6Ym/w5P/D4xfg7JWNW/ZFBDPTmAh4AD7eHxIfLmUMnyGQgDDiLf4dy/fYHhJ1ukIrPdhb5dAuDQwOdLPMA34VksJiDL67" +
-"/0hjHxJOcptUbKmFtvOYC+bBF9Womg+K9V1USF8QN4yeP3n8BBrUDNq078YXEObvITMRGPEd6FLyS+ImQ9rNxLH/i23j4ap46Cd" +
-"7kWLfTKODH8931BzhodpSzuH6QEZPGL98xoefBxAEqUZgx4SGDzSH7Trxpl/xoKkT0TTZlPHE1H2Q6Y5RlH9T3hRxqHEvP5yILO" +
-"NCZ1S4YbnfG4wY07z88Ok7m9ZUwLh+Xd5Tgdq+rEP8p84arHh1TyOivUJfLmXA6CMHqQ2WMzQmxQm67w34GCL5psEumVcSfbvoD" +
-"8D6xQjEQYp/DzKTKcjjMA8BKWQh0PnYVxR18hzkNONyBVHvik74flAbVa8W/9/NoURZP2lGUO0SCpHHbH+je0VRBH6IuiGhqRZ4" +
-"dHxZ+Ta6sLH2Lez4dokdWGGxAzljGCM+544fTU7XLJVr0SlZEyv7VV0yyKokZJp171Gt3E+4V9Nspx9W9HCQkOe8DFa8TVjyLAI" +
-"rnyNvFR2M0XaXOZc82u3rjrEzNIqi9W8PZmmPty6Fh09RGYXuNzHy5N7UdLRkJBm0PUF8KWJd13kSOIoxr+CSQ8zm+y/6rvwCok" +
-"kUUYrde6Zob0oDO8r7KL+b2dcrAupZv8i9G+2M+mSFWVv6+xN8ja2UsbJ7q6CWPcdOl2/VxMceTauTdVyp7WR7awTSh+bTLaqhX" +
-"HK4XuMBi7bApsaRGj+OYzKawguwgHIhPSojSqFtBwNCyJLNMDGVhAn7XlfrGIEDMoLDDvOZOHbayBb5RakxGYCYR49bCuYpqd0r" +
-"i5++LcR1B2u8IGxenQaWZiWkDzw/KwE0FqWrsJvlsFkgDocYCtzZhU+Ni9soZ/qTtUPVNi0XghtNDanL4ZjgP6HIK87V2QkZb9d" +
-"p9GN09GHu1CVT86hyx1teSLKUY0vh5N6ZPEN95VkB7mgyyfORqy5PkwWUjxl5F5Fi7altjj/NsNGLCp0pupllfQx0auVJOUOUY+" +
-"ZlYX76pLutMXQwEwYJKoZIhvcNAQkVMQYEBAEAAAAwXQYJKwYBBAGCNxEBMVAeTgBNAGkAYwByAG8AcwBvAGYAdAAgAFMAbwBmA" +
-"HQAdwBhAHIAZQAgAEsAZQB5ACAAUwB0AG8AcgBhAGcAZQAgAFAAcgBvAHYAaQBkAGUAcjCCA3cGCSqGSIb3DQEHBqCCA2gwggNk" +
-"AgEAMIIDXQYJKoZIhvcNAQcBMBwGCiqGSIb3DQEMAQMwDgQIgycY1R39WjMCAgfQgIIDMPr67l898TdiY13Baek1c+GwPQBQf0R" +
-"9QbjuDY+OcsW+gSF5VlYLCkdEDmp7U/+eU9i7HuKZrwZMIj4pdIuRZdCZJ9/0Q4N+/41AUTpfGSGcg1Cb7OPDL7PtTHQQu82DJz" +
-"eSJBxMprbbGY+LaOuuJx/Wg6WjokrmKnAelL6Ikdj8asc8BrosgWcIZkvNlXTeDpXrFfnoy3jBqMtzhVvToyW716VSwEL3RWh42" +
-"UwoR4Y2XgcaJYYetHUVGm5NvbCytLRWU8GObvUSgKcDp6+ybxYVeAy4dmi56YLnwHcpwn9KP18NedTnkCNEE/Ck86kROjpc5g31" +
-"eZVic+zzMLaW1DDGC+U8KnakwdkQPZxBRih1XGWJw8z9QUKdCcc0xa8i2lmwvD70gWtSCmrawLTGKimc5uGs6ngggcyVI+3dFz6" +
-"t5ogQONfvHD8riGbD1KhQNCmeaCnKl3kQVC98WkeVi7iC0VjbcZa0hYOzo/7UZ4PDKDVd6uqgIuYPB5et9QRv9420/amdYSvujk" +
-"wiKl51aj/XgftlomkrolvST9aReYq1BR5ZYsIN8T2kK1uPLg87gcYoCayyjMOUM9Jy0lGFUcL1uR6Gi+9ZcZOrUM3p3zVhlZVfg" +
-"4B1cPteHGxREeGgOChL7CYCWKl0O/9C7ZGpKZTfTewSIueUT+qUtXQstuFDL0Ru1dW5nF59hL8mwlrwyASKcMpJ+hWoIhmgYbGv" +
-"LUZm7rwkZYinlpb0HdKqDmZCo/ZZL5TjrYFO3ZR/7LEWyyiKaJuiXL2CmvXvDc4ANZuyv5YpexnoT9spLC/IwxWOhpFuZl6md2V" +
-"4lZb8Bm3QKavipbF93A6UsxqSBdkPBj0oHCvNrdL0gNFlu5YHeMl+98zkFrRjTe9maaoc7b1h+iBJQgSH5qBnFj5LaP+Tmb3oiA" +
-"WYkM1Rw3sQ4WfzXcuUiOI+/eecPZcwQsO3WT5tuIgdp563kSY51z5QjfphbKkLYkKmYab5bZVq0CLkXfu6D4TI36zVGFrVmkg5m" +
-"2w/UUSAAv5wrzCwH8gOPoUxgavo6KSDUutM9zbD+KYxmFzMAyy+bGgswWjUztKSyQbhtzA7MB8wBwYFKw4DAhoEFNSCGFAVyZcG" +
-"WY8tTP+50BmGmvMdBBQLO5m+vo7Hkuz3VJH9LSMna/EYhgICB9A=";
-
- private static ILogger logger = SIPSorcery.LogFactory.CreateLogger();
- public RTCPeerConnection PeerConnection { get; private set; }
- private string _dataChannelLabel;
- public event Action OnIceCandidateAvailable;
- public string _peerName;
- private Uri _webSocketServerUri;
-
- private Dictionary _dataChannels = new Dictionary();
-
- public event Action OnDataChannelMessage;
-
- static WebRTCPeer()
- {
- // DNS lookups on Xamarin don't seem to work. The reason to add the hard coded
- // DNS servers is to prevent he exception when the DnsClient attempts to find
- // /etc/resolv.conf.
- RtpIceChannel.DefaultNameServers = new List {
- DnsClient.NameServer.GooglePublicDnsIPv6,
- DnsClient.NameServer.GooglePublicDns2IPv6,
- DnsClient.NameServer.GooglePublicDns,
- DnsClient.NameServer.GooglePublicDns2 };
- }
-
- public WebRTCPeer(string peerName, string dataChannelLabel, Uri webSocketServerUri)
- {
- _peerName = peerName;
- _dataChannelLabel = dataChannelLabel;
- _webSocketServerUri = webSocketServerUri;
- }
-
- public Task Connect(CancellationToken ct)
- {
- WebRTCWebSocketClient wsClient = new WebRTCWebSocketClient(_webSocketServerUri.ToString(), CreatePeerConnection);
- return wsClient.Start(ct);
- }
-
- public async Task CreatePeerConnection()
- {
- List presetCertificates = null;
- byte[] dummyCertBytes = Convert.FromBase64String(DUMMY_CERTIFICATE_BASE64);
- var dummyCert = new X509Certificate2(dummyCertBytes);
- presetCertificates = new List { new RTCCertificate { Certificate = dummyCert } };
-
- RTCConfiguration pcConfiguration = new RTCConfiguration
- {
- certificates = presetCertificates,
- //iceServers = new List { new RTCIceServer { urls = "stun:stun.l.google.com:19302" } }
- X_BindAddress = IPAddress.Any
- };
-
- var pc = new RTCPeerConnection(pcConfiguration);
- //pc.GetRtpChannel().OnStunMessageReceived += (msg, ep, isrelay) => logger.LogDebug($"{_peerName}: STUN message received from {ep}, message class {msg.Header.MessageClass}.");
-
- var dataChannel = await pc.createDataChannel(_dataChannelLabel, null).ConfigureAwait(false);
- dataChannel.onmessage += DataChannel_onmessage;
- _dataChannels.Add(_dataChannelLabel, dataChannel);
-
- pc.onicecandidateerror += (candidate, error) => logger.LogWarning($"{_peerName}: Error adding remote ICE candidate. {error} {candidate}");
- pc.oniceconnectionstatechange += (state) => logger.LogDebug($"{_peerName}: ICE connection state change to {state}.");
- pc.onconnectionstatechange += (state) =>
- {
- logger.LogDebug($"{_peerName}: Peer connection state changed to {state}.");
-
- if (state == RTCPeerConnectionState.disconnected || state == RTCPeerConnectionState.failed)
- {
- pc.Close("remote disconnection");
- }
- };
-
- pc.onicecandidate += (candidate) =>
- {
- if (pc.signalingState == RTCSignalingState.have_local_offer ||
- pc.signalingState == RTCSignalingState.have_remote_offer)
- {
- OnIceCandidateAvailable?.Invoke(new RTCIceCandidateInit()
- {
- candidate = candidate.ToString(),
- sdpMid = candidate.sdpMid,
- sdpMLineIndex = candidate.sdpMLineIndex
- });
- }
- };
-
- pc.ondatachannel += (dc) =>
- {
- dc.onopen += () => logger.LogDebug($"{_peerName}: Data channel now open label {dc.label}, stream ID {dc.id}.");
- dc.onmessage += DataChannel_onmessage;
- logger.LogDebug($"{_peerName}: Data channel created by remote peer, label {dc.label}, stream ID {dc.id}.");
- _dataChannels.Add(dc.label, dc);
- };
-
- PeerConnection = pc;
-
- return pc;
- }
-
- private void DataChannel_onmessage(RTCDataChannel dc, DataChannelPayloadProtocols protocol, byte[] data)
- {
- if (protocol == DataChannelPayloadProtocols.WebRTC_String)
- {
- OnDataChannelMessage?.Invoke(Encoding.UTF8.GetString(data));
- }
- else if(protocol == DataChannelPayloadProtocols.WebRTC_Binary)
- {
- var pieceNum = BitConverter.ToInt32(data, 0);
- //logger.LogDebug($"{Name}: data channel ({_dataChannel.label}:{_dataChannel.id}): {pieceNum}.");
- logger.LogDebug($"{_peerName}: Data channel receive: {pieceNum}, length {data.Length}.");
- }
- else
- {
- logger.LogWarning($"Unexpected data channel protocol received {protocol}.");
- }
- }
-
- public bool IsDataChannelReady(string label)
- {
- if (_dataChannels.ContainsKey(label))
- {
- return _dataChannels[label].IsOpened;
- }
-
- return false;
- }
-
- public void Send(string label, string message)
- {
- if (_dataChannels.ContainsKey(label))
- {
- var dc = _dataChannels[label];
- if (dc.IsOpened)
- {
- logger.LogDebug($"Sending data channel message on channel {label}.");
- _dataChannels[label].send(message);
- }
- else
- {
- logger.LogWarning($"{_peerName}: Data channel {label} not yet open.");
- }
- }
- }
- }
-}
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/ViewModels/AboutViewModel.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/ViewModels/AboutViewModel.cs
deleted file mode 100644
index 21c112300..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/ViewModels/AboutViewModel.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.Windows.Input;
-using Xamarin.Essentials;
-using Xamarin.Forms;
-
-namespace XamarinDataChannelTest.ViewModels
-{
- public class AboutViewModel : BaseViewModel
- {
- public AboutViewModel()
- {
- Title = "About";
- OpenWebCommand = new Command(async () => await Browser.OpenAsync("https://xamarin.com"));
- }
-
- public ICommand OpenWebCommand { get; }
- }
-}
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/ViewModels/BaseViewModel.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/ViewModels/BaseViewModel.cs
deleted file mode 100644
index d7c460d49..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/ViewModels/BaseViewModel.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Runtime.CompilerServices;
-
-namespace XamarinDataChannelTest.ViewModels
-{
- public class BaseViewModel : INotifyPropertyChanged
- {
- bool isBusy = false;
- public bool IsBusy
- {
- get { return isBusy; }
- set { SetProperty(ref isBusy, value); }
- }
-
- string title = string.Empty;
- public string Title
- {
- get { return title; }
- set { SetProperty(ref title, value); }
- }
-
- protected bool SetProperty(ref T backingStore, T value,
- [CallerMemberName] string propertyName = "",
- Action onChanged = null)
- {
- if (EqualityComparer.Default.Equals(backingStore, value))
- return false;
-
- backingStore = value;
- onChanged?.Invoke();
- OnPropertyChanged(propertyName);
- return true;
- }
-
- #region INotifyPropertyChanged
- public event PropertyChangedEventHandler PropertyChanged;
- protected void OnPropertyChanged([CallerMemberName] string propertyName = "")
- {
- var changed = PropertyChanged;
- if (changed == null)
- return;
-
- changed.Invoke(this, new PropertyChangedEventArgs(propertyName));
- }
- #endregion
- }
-}
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/AboutPage.xaml b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/AboutPage.xaml
deleted file mode 100644
index cb20fa3b0..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/AboutPage.xaml
+++ /dev/null
@@ -1,81 +0,0 @@
-
-
-
-
-
-
-
-
-
- #2196F3
- #96d1ff
- #999999
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/AboutPage.xaml.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/AboutPage.xaml.cs
deleted file mode 100644
index 53388a41d..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/AboutPage.xaml.cs
+++ /dev/null
@@ -1,18 +0,0 @@
-using System;
-using System.ComponentModel;
-using Xamarin.Forms;
-using Xamarin.Forms.Xaml;
-
-namespace XamarinDataChannelTest.Views
-{
- // Learn more about making custom code visible in the Xamarin.Forms previewer
- // by visiting https://aka.ms/xamarinforms-previewer
- [DesignTimeVisible(false)]
- public partial class AboutPage : ContentPage
- {
- public AboutPage()
- {
- InitializeComponent();
- }
- }
-}
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/StartPage.xaml b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/StartPage.xaml
deleted file mode 100644
index c17df0719..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/StartPage.xaml
+++ /dev/null
@@ -1,59 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/StartPage.xaml.cs b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/StartPage.xaml.cs
deleted file mode 100644
index 6f2721fed..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/Views/StartPage.xaml.cs
+++ /dev/null
@@ -1,106 +0,0 @@
-using System;
-using System.ComponentModel;
-using System.Net.WebSockets;
-using System.Threading;
-using Xamarin.Forms;
-using XamarinDataChannelTest.Models;
-using SIPSorcery.Net;
-using Microsoft.Extensions.Logging;
-
-namespace XamarinDataChannelTest.Views
-{
- // Learn more about making custom code visible in the Xamarin.Forms previewer
- // by visiting https://aka.ms/xamarinforms-previewer
- [DesignTimeVisible(false)]
- public partial class StartPage : ContentPage
- {
- public const string DATA_CHANNEL_LABEL = "xdc";
-
- private static ILogger logger = SIPSorcery.LogFactory.CreateLogger();
- private WebRTCPeer _peer;
- private bool _isWebRTCConnected;
-
- public StartPage()
- {
- InitializeComponent();
- }
-
- void OnCloseButtonClicked(object sender, EventArgs args)
- {
- _peer?.PeerConnection.Close("user initiated");
-
- this._closeButton.IsVisible = false;
- this._connectButton.IsVisible = true;
- _isWebRTCConnected = false;
-
- this._status.Text = "Ready";
- }
-
- async void OnConnectButtonClicked(object sender, EventArgs args)
- {
- logger.LogDebug($"Attempting to connection to web socket at {this._webSocketURL.Text}.");
-
- if (!Uri.TryCreate(this._webSocketURL.Text, UriKind.Absolute, out var uri))
- {
- this._status.Text = "Invalid web socket URI.";
- }
- else
- {
- this._connectButton.IsVisible = false;
- this._closeButton.IsVisible = true;
-
- this._status.Text = "Attempting to connect to web socket server.";
-
- try
- {
- _peer = new WebRTCPeer("peer1", DATA_CHANNEL_LABEL, uri);
- await _peer.Connect(CancellationToken.None);
-
- if (_peer.PeerConnection.connectionState == RTCPeerConnectionState.connected)
- {
- _isWebRTCConnected = true;
- this._status.Text = "WebRTC peer connection successfully established.";
- _peer.PeerConnection.onconnectionstatechange += (state) => Device.BeginInvokeOnMainThread(() => this._status.Text = $"Peer connection state {state}.");
- }
- else
- {
- this._status.Text = "Web socket connection successful, WebRTC peer connecting...";
-
- _peer.PeerConnection.onconnectionstatechange += (connState) =>
- {
- if (_peer.PeerConnection.connectionState == RTCPeerConnectionState.connected)
- {
- if (!_isWebRTCConnected)
- {
- _isWebRTCConnected = true;
-
- this.Dispatcher.BeginInvokeOnMainThread(() => this._status.Text = "WebRTC peer connection successfully established.");
-
- _peer.PeerConnection.onconnectionstatechange += (state) => Device.BeginInvokeOnMainThread(() => this._status.Text = $"Peer connection state {state}.");
- _peer.OnDataChannelMessage += (msg_) => Device.BeginInvokeOnMainThread(() => this._dataChannelMessages.Text += $"\n{msg_}");
- }
- }
- else if (_peer.PeerConnection.connectionState == RTCPeerConnectionState.failed ||
- _peer.PeerConnection.connectionState == RTCPeerConnectionState.closed)
- {
- this.Dispatcher.BeginInvokeOnMainThread(() => this._status.Text = $"WebRTC peer connection attempt failed in state {_peer.PeerConnection.connectionState}.");
- }
- };
- }
- }
- catch (Exception excp)
- {
- this._status.Text = $"Error connecting. {excp.Message}";
-
- this._closeButton.IsVisible = false;
- this._connectButton.IsVisible = true;
- }
- }
- }
-
- void OnSendMessageButtonClicked(object sender, EventArgs args)
- {
- _peer.Send(DATA_CHANNEL_LABEL, _sendMessage.Text);
- }
- }
-}
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/XamarinDataChannelTest.csproj b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/XamarinDataChannelTest.csproj
deleted file mode 100644
index c2eb59771..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/XamarinDataChannelTest.csproj
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- netstandard2.0
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- StartPage.xaml
-
-
-
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/XamarinSocketTest.csproj b/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/XamarinSocketTest.csproj
deleted file mode 100644
index 0f14913f3..000000000
--- a/examples/WebRTCExamples/XamarinDataChannelTest/XamarinDataChannelTest/XamarinSocketTest.csproj
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/android_data_channel_exchange.png b/examples/WebRTCExamples/XamarinDataChannelTest/android_data_channel_exchange.png
deleted file mode 100644
index f5dc724fe..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/android_data_channel_exchange.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/android_emulator_start.png b/examples/WebRTCExamples/XamarinDataChannelTest/android_emulator_start.png
deleted file mode 100644
index 95ce25e80..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/android_emulator_start.png and /dev/null differ
diff --git a/examples/WebRTCExamples/XamarinDataChannelTest/android_enter_message.png b/examples/WebRTCExamples/XamarinDataChannelTest/android_enter_message.png
deleted file mode 100644
index 2632c50aa..000000000
Binary files a/examples/WebRTCExamples/XamarinDataChannelTest/android_enter_message.png and /dev/null differ
diff --git a/examples/WebRTCExamples/sipjs/Program.cs b/examples/WebRTCExamples/sipjs/Program.cs
index 735343760..206011674 100644
--- a/examples/WebRTCExamples/sipjs/Program.cs
+++ b/examples/WebRTCExamples/sipjs/Program.cs
@@ -25,7 +25,7 @@
using SIPSorcery.Net;
using SIPSorcery.SIP;
using SIPSorcery.SIP.App;
-using SIPSorceryMedia.Abstractions.V1;
+using SIPSorceryMedia.Abstractions;
namespace demo
{
diff --git a/examples/WebRTCExamples/sipjs/SipJs.csproj b/examples/WebRTCExamples/sipjs/SipJs.csproj
index e8b42a20f..9fc9eb257 100644
--- a/examples/WebRTCExamples/sipjs/SipJs.csproj
+++ b/examples/WebRTCExamples/sipjs/SipJs.csproj
@@ -9,7 +9,10 @@
-
+
+
+
+
diff --git a/examples/WebRTCExamples/sipjs/SipJs.sln b/examples/WebRTCExamples/sipjs/SipJs.sln
index c8c6fd9e9..5bc4cdf86 100644
--- a/examples/WebRTCExamples/sipjs/SipJs.sln
+++ b/examples/WebRTCExamples/sipjs/SipJs.sln
@@ -1,10 +1,12 @@
Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio Version 16
-VisualStudioVersion = 16.0.29911.98
+# Visual Studio Version 17
+VisualStudioVersion = 17.1.32228.430
MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SipJs", "SipJs.csproj", "{059FDE3A-D10A-40B4-8B35-532B19B02519}"
EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SIPSorcery", "..\..\..\src\SIPSorcery.csproj", "{377BF25A-2835-426E-9809-56BD48BA2244}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -27,6 +29,18 @@ Global
{059FDE3A-D10A-40B4-8B35-532B19B02519}.Release|x64.Build.0 = Release|Any CPU
{059FDE3A-D10A-40B4-8B35-532B19B02519}.Release|x86.ActiveCfg = Release|Any CPU
{059FDE3A-D10A-40B4-8B35-532B19B02519}.Release|x86.Build.0 = Release|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Debug|x64.Build.0 = Debug|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Debug|x86.Build.0 = Debug|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Release|Any CPU.Build.0 = Release|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Release|x64.ActiveCfg = Release|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Release|x64.Build.0 = Release|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Release|x86.ActiveCfg = Release|Any CPU
+ {377BF25A-2835-426E-9809-56BD48BA2244}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
diff --git a/examples/WebRTCLightningExamples/README.md b/examples/WebRTCLightningExamples/README.md
new file mode 100755
index 000000000..62aef8947
--- /dev/null
+++ b/examples/WebRTCLightningExamples/README.md
@@ -0,0 +1,144 @@
+# WebRTC Lightning Payment Video Stream Demo
+
+This demo project showcases a real-time WebRTC video stream whose source is controlled by Bitcoin Lightning payments. Viewers can trigger changes in the video stream by making micropayments over the Lightning Network.
+
+## Overview
+
+This project integrates two cutting-edge technologies:
+- **WebRTC Video Streaming:** Enabling low-latency, real-time video communications.
+- **Bitcoin Lightning Payments:** Allowing instant, low-cost micropayments that trigger changes in the video source.
+
+When a viewer makes a payment, the system processes and verifies the Lightning payment. Once confirmed, the video source is updated accordingly—demonstrating a pay-per-view or dynamic content control model.
+
+## Features
+
+- **Real-Time Video Streaming:** Built using WebRTC for low-latency video delivery.
+- **Micropayment Control:** Use Bitcoin Lightning payments to trigger video content updates.
+- **Dynamic Integration:** Seamless integration between payment events and WebRTC streaming.
+- **Demo-Ready:** Easy-to-run demo for testing and showcasing the technology.
+
+## Prerequisites
+
+Before running the demo, ensure you have:
+- **Docker** and **Docker Compose** installed on your system.
+- A modern web browser with WebRTC support (Chrome, Firefox, etc.).
+
+## Running the Demo
+
+### 1. Clone the Repository
+
+Clone the repository and navigate to the project directory:
+
+```bash
+git clone git@github.com:sipsorcery-org/sipsorcery.git
+cd sipsorcery/examples/WebRTCLightningExamples/WebRTCLightningGetStarted
+```
+
+### 2. Set Up the Docker Environment
+
+This demo uses a `docker-compose` file to set up a Bitcoin Signet node, an LND Lightning node, and the RTL (Ride the Lightning) web interface.
+
+1. **Start the Docker Containers**
+
+ Run the following command to start the Bitcoin Signet node, LND, and RTL:
+
+ ```bash
+ docker-compose up -d
+ ```
+
+ This will spin up three services:
+
+ - bitcoind: A Bitcoin Signet node.
+ - lnd: A Lightning Network node connected to the Bitcoin Signet network.
+ - rtl: A web interface for managing your LND node.
+
+2. **Wait for Initialization**
+
+ The LND node will take a few minutes to sync with the Bitcoin Signet network. You can monitor the progress by checking the logs:
+
+ ```bash
+ docker logs -f lnd
+ ```
+
+3. **Access RTL (Optional)**
+
+ Once the LND node is synced, you can access the RTL web interface at [http://localhost:3000](http://localhost:3000) to manage your Lightning node.
+
+### 3. Configure the Demo Application
+
+1. **Update appSettings.json:**
+
+ Ensure the LND connection settings in your appSettings.Development.json file match the credentials and ports used in the docker-compose setup. For example:
+
+ ```json
+ {
+ "LndSettings": {
+ "Url": "localhost:10009",
+ "MacaroonPath": "../lnd-data/data/chain/bitcoin/signet/admin.macaroon",
+ "CertificatePath": "../lnd-data/tls.cert"
+ }
+ }
+ ```
+
+ If you're using the default `docker-compose` setup, the paths and ports should already be preconfigured.
+
+2. **Run the Demo Application**
+
+ Start the demo application using the following command:
+
+ ```bash
+ dotnet run
+ ```
+
+### 4. Make Payments
+
+1. **Scan the QR Code**
+
+ The video stream will display a payment request QR code when it transitions to certain states. Use a mobile Lightning Network client (e.g. Zeus) to scan the QR code and make a payment.
+
+2. **Trigger Video Updates**
+
+ Once the payment is detected, the video source will update dynamically, demonstrating the pay-per-view or dynamic content control model.
+
+### 5. Stopping the Demo
+
+To stop the Docker containers, run:
+
+```bash
+docker-compose down
+```
+
+This will gracefully shut down the Bitcoin Signet node, LND, and RTL services.
+
+### Docker Compose Configuration
+
+The `docker-compose.yml` file provided sets up the following services:
+
+- **Bitcoin Signet Node (bitcoind):**
+
+ - Runs a Bitcoin Signet node for testing purposes.
+ - Exposes RPC and ZMQ ports for communication with LND.
+
+- **Lightning Network Node (lnd):**
+
+ - Connects to the Bitcoin Signet node.
+ - Exposes gRPC, REST, and peer-to-peer ports for Lightning Network operations.
+
+- **RTL (Ride the Lightning) Interface (rtl):**
+
+ - Provides a web-based interface for managing the LND node.
+ - Accessible at http://localhost:3000 default password `sipsorcery`.
+
+For advanced configuration, refer to the comments in the `docker-compose.yml` file.
+
+### Troubleshooting
+
+- **LND Node Not Syncing:** Ensure the Bitcoin Signet node is fully synced before using LND. Check the logs with:
+
+```bash
+docker logs -f bitcoind
+```
+
+ - **Connection Issues:** Verify that the `appSettings.json`, or `appSettings.Development.json`, file has the correct LND connection details.
+
+ - **Payment Not Triggering Video Updates:** Ensure the payment is confirmed and the demo application is correctly processing payment events.
diff --git a/examples/WebRTCLightningExamples/RTL-Config.json b/examples/WebRTCLightningExamples/RTL-Config.json
new file mode 100755
index 000000000..1b16c9844
--- /dev/null
+++ b/examples/WebRTCLightningExamples/RTL-Config.json
@@ -0,0 +1,37 @@
+{
+ "port": "3000",
+ "defaultNodeIndex": 1,
+ "dbDirectoryPath": "/home/rtl/.rtl",
+ "SSO": {
+ "rtlSSO": 0,
+ "rtlCookiePath": "",
+ "logoutRedirectLink": ""
+ },
+ "nodes": [
+ {
+ "index": 1,
+ "lnNode": "Lnd Signet",
+ "lnImplementation": "LND",
+ "authentication": {
+ "macaroonPath": "/home/rtl/.rtl",
+ "configPath": "/home/rtl/.rtl/lnd.conf"
+ },
+ "settings": {
+ "blockExplorerUrl": "https://mempool.space",
+ "lnServerUrl": "https://lnd:8080",
+ "userPersona": "MERCHANT",
+ "themeMode": "DAY",
+ "themeColor": "YELLOW",
+ "unannouncedChannels": false,
+ "logLevel": "ERROR",
+ "fiatConversion": false,
+ "enableOffers": false,
+ "enablePeerswap": false,
+ "bitcoindConfigPath": "",
+ "channelBackupPath": "/home/rtl/.rtl/backup",
+ "logFile": "/RTL/logs/RTL-Node-1.log"
+ }
+ }
+ ],
+ "multiPassHashed": "fa587b9ece6846b3ef84acfefb06d7a4ceba017b33df00938844fedb9d4ef0d4"
+}
\ No newline at end of file
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningExamples.sln b/examples/WebRTCLightningExamples/WebRTCLightningExamples.sln
new file mode 100755
index 000000000..81a084ba2
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningExamples.sln
@@ -0,0 +1,28 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.12.35527.113
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebRTCLightningGetStarted", "WebRTCLightningGetStarted\WebRTCLightningGetStarted.csproj", "{913F703F-4FA5-4EF9-A319-8DD571390243}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SIPSorcery", "..\..\src\SIPSorcery.csproj", "{19E97051-F69A-4B12-8C0E-EF8D81E65B16}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {913F703F-4FA5-4EF9-A319-8DD571390243}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {913F703F-4FA5-4EF9-A319-8DD571390243}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {913F703F-4FA5-4EF9-A319-8DD571390243}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {913F703F-4FA5-4EF9-A319-8DD571390243}.Release|Any CPU.Build.0 = Release|Any CPU
+ {19E97051-F69A-4B12-8C0E-EF8D81E65B16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {19E97051-F69A-4B12-8C0E-EF8D81E65B16}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {19E97051-F69A-4B12-8C0E-EF8D81E65B16}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {19E97051-F69A-4B12-8C0E-EF8D81E65B16}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/BackgroundServices/LndInvoiceListener.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/BackgroundServices/LndInvoiceListener.cs
new file mode 100755
index 000000000..495a41955
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/BackgroundServices/LndInvoiceListener.cs
@@ -0,0 +1,159 @@
+//-----------------------------------------------------------------------------
+// Filename: LndInvoiceListener.cs
+//
+// Description: Background task that subscribes to the LND GRPC invoice
+// subscription end point to receive notifications about new invoice events.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 23 Feb 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using Grpc.Core;
+using Lnrpc;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using NBitcoin.DataEncoders;
+using System;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace demo;
+
+public class LndInvoiceListener : BackgroundService
+{
+ ///
+ /// Interval at which to check the GRPC connection to the LND server is still operational.
+ ///
+ private const int CONNECTION_CHECK_INTERVAL_SECONDS = 30;
+
+ ///
+ /// Short delay when restarting the listener to avoid denial of service type behaviour if something has
+ /// gone wrong.
+ ///
+ private const int RESTART_DELAY_SECONDS = 5;
+
+ private readonly ILogger _logger;
+ private readonly ILightningClientFactory _lightningClientFactory;
+ private readonly IHostApplicationLifetime _hostApplicationLifetime;
+ private readonly LightningInvoiceEventService _lightningInvoiceEventService;
+
+ public LndInvoiceListener(
+ ILogger logger,
+ IConfiguration config,
+ ILightningClientFactory lightningClientFactory,
+ IHostApplicationLifetime hostApplicationLifetime,
+ LightningInvoiceEventService lightningInvoiceEventService)
+ {
+ _logger = logger;
+ _lightningClientFactory = lightningClientFactory;
+ _hostApplicationLifetime = hostApplicationLifetime;
+ _lightningInvoiceEventService = lightningInvoiceEventService;
+ }
+
+ protected override async Task ExecuteAsync(CancellationToken cancelToken)
+ {
+ _logger.LogInformation($"{nameof(LndInvoiceListener)} started listening.");
+
+ while (!_hostApplicationLifetime.ApplicationStopping.IsCancellationRequested)
+ {
+ try
+ {
+ await Listen(cancelToken);
+ }
+ catch (Exception ex) when (ex is OperationCanceledException || ex.InnerException is OperationCanceledException)
+ {
+ if (_hostApplicationLifetime.ApplicationStopping.IsCancellationRequested)
+ {
+ _logger.LogDebug($"{nameof(LndInvoiceListener)} application is shutting down.");
+ break;
+ }
+ else
+ {
+ _logger.LogWarning($"{nameof(LndInvoiceListener)} lnd connection failed, cancelling and restarting listener thread.");
+ }
+ }
+ catch (Exception ex)
+ {
+ _logger.LogError($"{nameof(LndInvoiceListener)} listener exception. {ex}");
+ }
+
+ _logger.LogDebug($"{nameof(LndInvoiceListener)} delaying {RESTART_DELAY_SECONDS}s before attempting to reconnect the grpc listener at.");
+ await Task.Delay(1000 * RESTART_DELAY_SECONDS);
+ }
+ }
+
+ ///
+ /// Listens for new invoice events from the LND server over the GRPC connection.
+ ///
+ /// The cancellation token that will be set when the application shuts down
+ /// or when there is a problem with the connection and it needs to be restarted.
+ private async Task Listen(CancellationToken cancelToken)
+ {
+ var keepAliveTokenSource = new CancellationTokenSource();
+ var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancelToken, keepAliveTokenSource.Token);
+
+ var lightningClient = _lightningClientFactory.GetClient();
+
+ _ = Task.Run(() => CheckLndConnection(lightningClient, linkedTokenSource));
+
+ // Subscribe to LND invoices
+ using var invoiceStream = lightningClient.SubscribeInvoices(new InvoiceSubscription());
+
+ // Receive invoices
+ await foreach (var invoice in invoiceStream.ResponseStream.ReadAllAsync(linkedTokenSource.Token))
+ {
+ string rHash = Encoders.Hex.EncodeData(invoice.RHash.ToByteArray());
+
+ _logger.LogInformation($"Lightning invoice event received for rhash {rHash}, description {invoice.Memo} and state {invoice.State}.");
+
+ if (invoice.State == Invoice.Types.InvoiceState.Settled)
+ {
+ _lightningInvoiceEventService.PublishInvoiceEvent(
+ new LightningInvoicedNotification(LightningInvoiceNotificationTypeEnum.Settled, rHash, invoice.Memo));
+ }
+ else if(invoice.State == Invoice.Types.InvoiceState.Canceled)
+ {
+ _lightningInvoiceEventService.PublishInvoiceEvent(
+ new LightningInvoicedNotification(LightningInvoiceNotificationTypeEnum.Cancelled, rHash, invoice.Memo));
+ }
+ }
+ }
+
+ ///
+ /// Sends a periodic check to the LND server to make sure the GRPC connection is still working.
+ /// If the check fails
+ ///
+ /// The GRPC client to check the connection for.
+ /// The cancellation token source to set if the check fails.
+ private async Task CheckLndConnection(Lnrpc.Lightning.LightningClient client, CancellationTokenSource cts)
+ {
+ var cancellationToken = cts.Token;
+
+ while (!cancellationToken.IsCancellationRequested)
+ {
+ try
+ {
+ var timeoutTokenSource = new CancellationTokenSource();
+ timeoutTokenSource.CancelAfter(TimeSpan.FromSeconds(CONNECTION_CHECK_INTERVAL_SECONDS));
+ var linkedTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cts.Token, timeoutTokenSource.Token);
+
+ var response = await client.GetInfoAsync(new Lnrpc.GetInfoRequest(), cancellationToken: linkedTokenSource.Token);
+ }
+ catch(Exception ex)
+ {
+ _logger.LogWarning($"{nameof(CheckLndConnection)} check LND connection failed. {ex.GetType()} {ex.Message}");
+ cts.Cancel();
+ break;
+ }
+
+ await Task.Delay(CONNECTION_CHECK_INTERVAL_SECONDS * 1000, cancellationToken);
+ }
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/BackgroundServices/WebSocketService.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/BackgroundServices/WebSocketService.cs
new file mode 100755
index 000000000..da4d7a4df
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/BackgroundServices/WebSocketService.cs
@@ -0,0 +1,74 @@
+//-----------------------------------------------------------------------------
+// Filename: WebSocketService.cs
+//
+// Description: A background service to host a web socket server listener. New
+// websocket connections are assumed to want to create a WebRTC connection.
+// The websocket is acting as the WebRTC signalling transport.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 23 Feb 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using SIPSorcery.Net;
+using System.Net;
+using System.Threading;
+using System.Threading.Tasks;
+using WebSocketSharp.Server;
+
+namespace demo;
+
+public class WebSocketService : BackgroundService
+{
+ private const int WEBSOCKET_PORT = 8081;
+
+ private readonly ILogger _logger;
+ private readonly IPaidWebRtcConnectionFactory _webRtcConnectionManagerFactory;
+ private WebSocketServer _webSocketServer;
+
+ public WebSocketService(
+ ILogger logger,
+ IPaidWebRtcConnectionFactory webRtcConnectionManagerFactory)
+ {
+ _logger = logger;
+ _webRtcConnectionManagerFactory = webRtcConnectionManagerFactory;
+ _webSocketServer = new WebSocketServer(IPAddress.Any, WEBSOCKET_PORT);
+ }
+
+ protected override Task ExecuteAsync(CancellationToken stoppingToken)
+ {
+ _logger.LogInformation("Starting WebRTC WebSocket server...");
+
+ StartWebSocketServer();
+
+ return Task.CompletedTask;
+ }
+
+ private void StartWebSocketServer()
+ {
+ _webSocketServer.AddWebSocketService("/", (peer) => peer.CreatePeerConnection = async () =>
+ {
+ IPaidWebRtcConnection webRtcConnectionManager = _webRtcConnectionManagerFactory.CreatePaidWebRTCConnection(peer.ID);
+ var pc = await webRtcConnectionManager.CreatePeerConnection(peer.ID);
+ _logger.LogInformation($"Peer connection {peer.ID} successfully created.");
+ return pc;
+ });
+ _webSocketServer.Start();
+
+ _logger.LogInformation($"Waiting for web socket connections on {_webSocketServer.Address}:{_webSocketServer.Port}...");
+ }
+
+ public override Task StopAsync(CancellationToken cancellationToken)
+ {
+ _logger.LogInformation("Stopping WebRTC WebSocket server...");
+ _webSocketServer?.Stop();
+ return Task.CompletedTask;
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/ConfigKeys.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/ConfigKeys.cs
new file mode 100755
index 000000000..91ed9f63c
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/ConfigKeys.cs
@@ -0,0 +1,29 @@
+//-----------------------------------------------------------------------------
+// Filename: ConfigKeys.cs
+//
+// Description: ASP.NET application configuration keys
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 23 Feb 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+namespace demo;
+
+public class ConfigKeys
+{
+ public const string LND_URL = "Lnd:Url";
+
+ public const string LND_MACAROON_PATH = "Lnd:MacaroonPath";
+
+ public const string LND_MACAROON_HEX = "Lnd:MacaroonHex";
+
+ public const string LND_CERTIFICATE_PATH = "Lnd:CertificatePath";
+
+ public const string LND_CERTIFICATE_BASE64 = "Lnd:CertificateBase64";
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Enums/PaymentStateTrigger.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Enums/PaymentStateTrigger.cs
new file mode 100755
index 000000000..affdbd19f
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Enums/PaymentStateTrigger.cs
@@ -0,0 +1,23 @@
+//-----------------------------------------------------------------------------
+// Filename: PaymentStateTrigger.cs
+//
+// Description: The payment state triggers for the payment state machine.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 05 Mar 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+namespace demo;
+
+public enum PaymentStateTrigger
+{
+ Tick,
+ InvoicePaid,
+ InvoiceExpired
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Enums/PaymentStatus.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Enums/PaymentStatus.cs
new file mode 100755
index 000000000..542d257bd
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Enums/PaymentStatus.cs
@@ -0,0 +1,27 @@
+//-----------------------------------------------------------------------------
+// Filename: PaymentStatus.cs
+//
+// Description: The payment status for the payment state machine.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 05 Mar 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+namespace demo;
+
+public enum PaymentStatus
+{
+ Initial,
+ FreePeriod,
+ FreeTransition,
+ FreeWaitingForPayment,
+ PaidPeriod,
+ PaidTransition,
+ PaidWaitingForPayment
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Program.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Program.cs
new file mode 100755
index 000000000..6f9537c58
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Program.cs
@@ -0,0 +1,65 @@
+//-----------------------------------------------------------------------------
+// Filename: Program.cs
+//
+// Description: An example WebRTC server application that use Bitcoin Lightning
+// payments to control a WebRTC video stream.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 23 Feb 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using Microsoft.AspNetCore.Builder;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+using Serilog;
+using SIPSorceryMedia.FFmpeg;
+using System;
+
+namespace demo;
+
+class Program
+{
+ static void Main(string[] args)
+ {
+ Console.WriteLine("WebRTC Lightning Demo");
+
+ var builder = WebApplication.CreateBuilder(args);
+ builder.Host.UseSerilog((context, services, config) =>
+ {
+ config.WriteTo.Console()
+ .Enrich.FromLogContext()
+ .MinimumLevel.Is(Serilog.Events.LogEventLevel.Debug);
+ });
+
+ builder.Services.AddHostedService();
+ builder.Services.AddHostedService();
+ builder.Services.AddSingleton();
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+ builder.Services.AddTransient();
+
+ var app = builder.Build();
+
+ // Activate SIPSorcery library logging
+ var loggerFactory = app.Services.GetRequiredService();
+ SIPSorcery.LogFactory.Set(loggerFactory);
+
+ // Initialise FFmpeg.
+ var logger = loggerFactory.CreateLogger();
+ FFmpegInit.Initialise(FfmpegLogLevelEnum.AV_LOG_VERBOSE, null, logger);
+
+ app.UseDefaultFiles();
+ app.UseStaticFiles();
+
+ app.Run();
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Properties/launchSettings.json b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Properties/launchSettings.json
new file mode 100755
index 000000000..8f660bb25
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Properties/launchSettings.json
@@ -0,0 +1,12 @@
+{
+ "profiles": {
+ "WebRTCLightningGetStarted": {
+ "commandName": "Project",
+ "launchBrowser": false,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "https://localhost:5001"
+ }
+ }
+}
\ No newline at end of file
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Protos/invoices.proto b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Protos/invoices.proto
new file mode 100755
index 000000000..3ae1542ea
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Protos/invoices.proto
@@ -0,0 +1,175 @@
+syntax = "proto3";
+
+import "Protos/lightning.proto";
+
+package invoicesrpc;
+
+option go_package = "github.com/lightningnetwork/lnd/lnrpc/invoicesrpc";
+
+// Invoices is a service that can be used to create, accept, settle and cancel
+// invoices.
+service Invoices {
+ /*
+ SubscribeSingleInvoice returns a uni-directional stream (server -> client)
+ to notify the client of state transitions of the specified invoice.
+ Initially the current invoice state is always sent out.
+ */
+ rpc SubscribeSingleInvoice (SubscribeSingleInvoiceRequest)
+ returns (stream lnrpc.Invoice);
+
+ /*
+ CancelInvoice cancels a currently open invoice. If the invoice is already
+ canceled, this call will succeed. If the invoice is already settled, it will
+ fail.
+ */
+ rpc CancelInvoice (CancelInvoiceMsg) returns (CancelInvoiceResp);
+
+ /*
+ AddHoldInvoice creates a hold invoice. It ties the invoice to the hash
+ supplied in the request.
+ */
+ rpc AddHoldInvoice (AddHoldInvoiceRequest) returns (AddHoldInvoiceResp);
+
+ /*
+ SettleInvoice settles an accepted invoice. If the invoice is already
+ settled, this call will succeed.
+ */
+ rpc SettleInvoice (SettleInvoiceMsg) returns (SettleInvoiceResp);
+
+ /*
+ LookupInvoiceV2 attempts to look up at invoice. An invoice can be refrenced
+ using either its payment hash, payment address, or set ID.
+ */
+ rpc LookupInvoiceV2 (LookupInvoiceMsg) returns (lnrpc.Invoice);
+}
+
+message CancelInvoiceMsg {
+ // Hash corresponding to the (hold) invoice to cancel. When using
+ // REST, this field must be encoded as base64.
+ bytes payment_hash = 1;
+}
+message CancelInvoiceResp {
+}
+
+message AddHoldInvoiceRequest {
+ /*
+ An optional memo to attach along with the invoice. Used for record keeping
+ purposes for the invoice's creator, and will also be set in the description
+ field of the encoded payment request if the description_hash field is not
+ being used.
+ */
+ string memo = 1;
+
+ // The hash of the preimage
+ bytes hash = 2;
+
+ /*
+ The value of this invoice in satoshis
+
+ The fields value and value_msat are mutually exclusive.
+ */
+ int64 value = 3;
+
+ /*
+ The value of this invoice in millisatoshis
+
+ The fields value and value_msat are mutually exclusive.
+ */
+ int64 value_msat = 10;
+
+ /*
+ Hash (SHA-256) of a description of the payment. Used if the description of
+ payment (memo) is too long to naturally fit within the description field
+ of an encoded payment request.
+ */
+ bytes description_hash = 4;
+
+ // Payment request expiry time in seconds. Default is 86400 (24 hours).
+ int64 expiry = 5;
+
+ // Fallback on-chain address.
+ string fallback_addr = 6;
+
+ // Delta to use for the time-lock of the CLTV extended to the final hop.
+ uint64 cltv_expiry = 7;
+
+ /*
+ Route hints that can each be individually used to assist in reaching the
+ invoice's destination.
+ */
+ repeated lnrpc.RouteHint route_hints = 8;
+
+ // Whether this invoice should include routing hints for private channels.
+ bool private = 9;
+}
+
+message AddHoldInvoiceResp {
+ /*
+ A bare-bones invoice for a payment within the Lightning Network. With the
+ details of the invoice, the sender has all the data necessary to send a
+ payment to the recipient.
+ */
+ string payment_request = 1;
+
+ /*
+ The "add" index of this invoice. Each newly created invoice will increment
+ this index making it monotonically increasing. Callers to the
+ SubscribeInvoices call can use this to instantly get notified of all added
+ invoices with an add_index greater than this one.
+ */
+ uint64 add_index = 2;
+
+ /*
+ The payment address of the generated invoice. This value should be used
+ in all payments for this invoice as we require it for end to end
+ security.
+ */
+ bytes payment_addr = 3;
+}
+
+message SettleInvoiceMsg {
+ // Externally discovered pre-image that should be used to settle the hold
+ // invoice.
+ bytes preimage = 1;
+}
+
+message SettleInvoiceResp {
+}
+
+message SubscribeSingleInvoiceRequest {
+ reserved 1;
+
+ // Hash corresponding to the (hold) invoice to subscribe to. When using
+ // REST, this field must be encoded as base64url.
+ bytes r_hash = 2;
+}
+
+enum LookupModifier {
+ // The default look up modifier, no look up behavior is changed.
+ DEFAULT = 0;
+
+ /*
+ Indicates that when a look up is done based on a set_id, then only that set
+ of HTLCs related to that set ID should be returned.
+ */
+ HTLC_SET_ONLY = 1;
+
+ /*
+ Indicates that when a look up is done using a payment_addr, then no HTLCs
+ related to the payment_addr should be returned. This is useful when one
+ wants to be able to obtain the set of associated setIDs with a given
+ invoice, then look up the sub-invoices "projected" by that set ID.
+ */
+ HTLC_SET_BLANK = 2;
+}
+
+message LookupInvoiceMsg {
+ oneof invoice_ref {
+ // When using REST, this field must be encoded as base64.
+ bytes payment_hash = 1;
+ bytes payment_addr = 2;
+ bytes set_id = 3;
+ }
+
+ LookupModifier lookup_modifier = 4;
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Protos/lightning.proto b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Protos/lightning.proto
new file mode 100644
index 000000000..d5cffd2ec
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Protos/lightning.proto
@@ -0,0 +1,4716 @@
+syntax = "proto3";
+
+package lnrpc;
+
+option go_package = "github.com/lightningnetwork/lnd/lnrpc";
+
+/*
+ * Comments in this file will be directly parsed into the API
+ * Documentation as descriptions of the associated method, message, or field.
+ * These descriptions should go right above the definition of the object, and
+ * can be in either block or // comment format.
+ *
+ * An RPC method can be matched to an lncli command by placing a line in the
+ * beginning of the description in exactly the following format:
+ * lncli: `methodname`
+ *
+ * Failure to specify the exact name of the command will cause documentation
+ * generation to fail.
+ *
+ * More information on how exactly the gRPC documentation is generated from
+ * this proto file can be found here:
+ * https://github.com/lightninglabs/lightning-api
+ */
+
+// Lightning is the main RPC server of the daemon.
+service Lightning {
+ /* lncli: `walletbalance`
+ WalletBalance returns total unspent outputs(confirmed and unconfirmed), all
+ confirmed unspent outputs and all unconfirmed unspent outputs under control
+ of the wallet.
+ */
+ rpc WalletBalance (WalletBalanceRequest) returns (WalletBalanceResponse);
+
+ /* lncli: `channelbalance`
+ ChannelBalance returns a report on the total funds across all open channels,
+ categorized in local/remote, pending local/remote and unsettled local/remote
+ balances.
+ */
+ rpc ChannelBalance (ChannelBalanceRequest) returns (ChannelBalanceResponse);
+
+ /* lncli: `listchaintxns`
+ GetTransactions returns a list describing all the known transactions
+ relevant to the wallet.
+ */
+ rpc GetTransactions (GetTransactionsRequest) returns (TransactionDetails);
+
+ /* lncli: `estimatefee`
+ EstimateFee asks the chain backend to estimate the fee rate and total fees
+ for a transaction that pays to multiple specified outputs.
+
+ When using REST, the `AddrToAmount` map type can be set by appending
+ `&AddrToAmount[]=` to the URL. Unfortunately this
+ map type doesn't appear in the REST API documentation because of a bug in
+ the grpc-gateway library.
+ */
+ rpc EstimateFee (EstimateFeeRequest) returns (EstimateFeeResponse);
+
+ /* lncli: `sendcoins`
+ SendCoins executes a request to send coins to a particular address. Unlike
+ SendMany, this RPC call only allows creating a single output at a time. If
+ neither target_conf, or sat_per_vbyte are set, then the internal wallet will
+ consult its fee model to determine a fee for the default confirmation
+ target.
+ */
+ rpc SendCoins (SendCoinsRequest) returns (SendCoinsResponse);
+
+ /* lncli: `listunspent`
+ Deprecated, use walletrpc.ListUnspent instead.
+
+ ListUnspent returns a list of all utxos spendable by the wallet with a
+ number of confirmations between the specified minimum and maximum.
+ */
+ rpc ListUnspent (ListUnspentRequest) returns (ListUnspentResponse);
+
+ /*
+ SubscribeTransactions creates a uni-directional stream from the server to
+ the client in which any newly discovered transactions relevant to the
+ wallet are sent over.
+ */
+ rpc SubscribeTransactions (GetTransactionsRequest)
+ returns (stream Transaction);
+
+ /* lncli: `sendmany`
+ SendMany handles a request for a transaction that creates multiple specified
+ outputs in parallel. If neither target_conf, or sat_per_vbyte are set, then
+ the internal wallet will consult its fee model to determine a fee for the
+ default confirmation target.
+ */
+ rpc SendMany (SendManyRequest) returns (SendManyResponse);
+
+ /* lncli: `newaddress`
+ NewAddress creates a new address under control of the local wallet.
+ */
+ rpc NewAddress (NewAddressRequest) returns (NewAddressResponse);
+
+ /* lncli: `signmessage`
+ SignMessage signs a message with this node's private key. The returned
+ signature string is `zbase32` encoded and pubkey recoverable, meaning that
+ only the message digest and signature are needed for verification.
+ */
+ rpc SignMessage (SignMessageRequest) returns (SignMessageResponse);
+
+ /* lncli: `verifymessage`
+ VerifyMessage verifies a signature over a msg. The signature must be
+ zbase32 encoded and signed by an active node in the resident node's
+ channel database. In addition to returning the validity of the signature,
+ VerifyMessage also returns the recovered pubkey from the signature.
+ */
+ rpc VerifyMessage (VerifyMessageRequest) returns (VerifyMessageResponse);
+
+ /* lncli: `connect`
+ ConnectPeer attempts to establish a connection to a remote peer. This is at
+ the networking level, and is used for communication between nodes. This is
+ distinct from establishing a channel with a peer.
+ */
+ rpc ConnectPeer (ConnectPeerRequest) returns (ConnectPeerResponse);
+
+ /* lncli: `disconnect`
+ DisconnectPeer attempts to disconnect one peer from another identified by a
+ given pubKey. In the case that we currently have a pending or active channel
+ with the target peer, then this action will be not be allowed.
+ */
+ rpc DisconnectPeer (DisconnectPeerRequest) returns (DisconnectPeerResponse);
+
+ /* lncli: `listpeers`
+ ListPeers returns a verbose listing of all currently active peers.
+ */
+ rpc ListPeers (ListPeersRequest) returns (ListPeersResponse);
+
+ /*
+ SubscribePeerEvents creates a uni-directional stream from the server to
+ the client in which any events relevant to the state of peers are sent
+ over. Events include peers going online and offline.
+ */
+ rpc SubscribePeerEvents (PeerEventSubscription) returns (stream PeerEvent);
+
+ /* lncli: `getinfo`
+ GetInfo returns general information concerning the lightning node including
+ it's identity pubkey, alias, the chains it is connected to, and information
+ concerning the number of open+pending channels.
+ */
+ rpc GetInfo (GetInfoRequest) returns (GetInfoResponse);
+
+ /** lncli: `getrecoveryinfo`
+ GetRecoveryInfo returns information concerning the recovery mode including
+ whether it's in a recovery mode, whether the recovery is finished, and the
+ progress made so far.
+ */
+ rpc GetRecoveryInfo (GetRecoveryInfoRequest)
+ returns (GetRecoveryInfoResponse);
+
+ // TODO(roasbeef): merge with below with bool?
+ /* lncli: `pendingchannels`
+ PendingChannels returns a list of all the channels that are currently
+ considered "pending". A channel is pending if it has finished the funding
+ workflow and is waiting for confirmations for the funding txn, or is in the
+ process of closure, either initiated cooperatively or non-cooperatively.
+ */
+ rpc PendingChannels (PendingChannelsRequest)
+ returns (PendingChannelsResponse);
+
+ /* lncli: `listchannels`
+ ListChannels returns a description of all the open channels that this node
+ is a participant in.
+ */
+ rpc ListChannels (ListChannelsRequest) returns (ListChannelsResponse);
+
+ /*
+ SubscribeChannelEvents creates a uni-directional stream from the server to
+ the client in which any updates relevant to the state of the channels are
+ sent over. Events include new active channels, inactive channels, and closed
+ channels.
+ */
+ rpc SubscribeChannelEvents (ChannelEventSubscription)
+ returns (stream ChannelEventUpdate);
+
+ /* lncli: `closedchannels`
+ ClosedChannels returns a description of all the closed channels that
+ this node was a participant in.
+ */
+ rpc ClosedChannels (ClosedChannelsRequest) returns (ClosedChannelsResponse);
+
+ /*
+ OpenChannelSync is a synchronous version of the OpenChannel RPC call. This
+ call is meant to be consumed by clients to the REST proxy. As with all
+ other sync calls, all byte slices are intended to be populated as hex
+ encoded strings.
+ */
+ rpc OpenChannelSync (OpenChannelRequest) returns (ChannelPoint);
+
+ /* lncli: `openchannel`
+ OpenChannel attempts to open a singly funded channel specified in the
+ request to a remote peer. Users are able to specify a target number of
+ blocks that the funding transaction should be confirmed in, or a manual fee
+ rate to us for the funding transaction. If neither are specified, then a
+ lax block confirmation target is used. Each OpenStatusUpdate will return
+ the pending channel ID of the in-progress channel. Depending on the
+ arguments specified in the OpenChannelRequest, this pending channel ID can
+ then be used to manually progress the channel funding flow.
+ */
+ rpc OpenChannel (OpenChannelRequest) returns (stream OpenStatusUpdate);
+
+ /* lncli: `batchopenchannel`
+ BatchOpenChannel attempts to open multiple single-funded channels in a
+ single transaction in an atomic way. This means either all channel open
+ requests succeed at once or all attempts are aborted if any of them fail.
+ This is the safer variant of using PSBTs to manually fund a batch of
+ channels through the OpenChannel RPC.
+ */
+ rpc BatchOpenChannel (BatchOpenChannelRequest)
+ returns (BatchOpenChannelResponse);
+
+ /*
+ FundingStateStep is an advanced funding related call that allows the caller
+ to either execute some preparatory steps for a funding workflow, or
+ manually progress a funding workflow. The primary way a funding flow is
+ identified is via its pending channel ID. As an example, this method can be
+ used to specify that we're expecting a funding flow for a particular
+ pending channel ID, for which we need to use specific parameters.
+ Alternatively, this can be used to interactively drive PSBT signing for
+ funding for partially complete funding transactions.
+ */
+ rpc FundingStateStep (FundingTransitionMsg) returns (FundingStateStepResp);
+
+ /*
+ ChannelAcceptor dispatches a bi-directional streaming RPC in which
+ OpenChannel requests are sent to the client and the client responds with
+ a boolean that tells LND whether or not to accept the channel. This allows
+ node operators to specify their own criteria for accepting inbound channels
+ through a single persistent connection.
+ */
+ rpc ChannelAcceptor (stream ChannelAcceptResponse)
+ returns (stream ChannelAcceptRequest);
+
+ /* lncli: `closechannel`
+ CloseChannel attempts to close an active channel identified by its channel
+ outpoint (ChannelPoint). The actions of this method can additionally be
+ augmented to attempt a force close after a timeout period in the case of an
+ inactive peer. If a non-force close (cooperative closure) is requested,
+ then the user can specify either a target number of blocks until the
+ closure transaction is confirmed, or a manual fee rate. If neither are
+ specified, then a default lax, block confirmation target is used.
+ */
+ rpc CloseChannel (CloseChannelRequest) returns (stream CloseStatusUpdate);
+
+ /* lncli: `abandonchannel`
+ AbandonChannel removes all channel state from the database except for a
+ close summary. This method can be used to get rid of permanently unusable
+ channels due to bugs fixed in newer versions of lnd. This method can also be
+ used to remove externally funded channels where the funding transaction was
+ never broadcast. Only available for non-externally funded channels in dev
+ build.
+ */
+ rpc AbandonChannel (AbandonChannelRequest) returns (AbandonChannelResponse);
+
+ /* lncli: `sendpayment`
+ Deprecated, use routerrpc.SendPaymentV2. SendPayment dispatches a
+ bi-directional streaming RPC for sending payments through the Lightning
+ Network. A single RPC invocation creates a persistent bi-directional
+ stream allowing clients to rapidly send payments through the Lightning
+ Network with a single persistent connection.
+ */
+ rpc SendPayment (stream SendRequest) returns (stream SendResponse) {
+ option deprecated = true;
+ }
+
+ /*
+ SendPaymentSync is the synchronous non-streaming version of SendPayment.
+ This RPC is intended to be consumed by clients of the REST proxy.
+ Additionally, this RPC expects the destination's public key and the payment
+ hash (if any) to be encoded as hex strings.
+ */
+ rpc SendPaymentSync (SendRequest) returns (SendResponse);
+
+ /* lncli: `sendtoroute`
+ Deprecated, use routerrpc.SendToRouteV2. SendToRoute is a bi-directional
+ streaming RPC for sending payment through the Lightning Network. This
+ method differs from SendPayment in that it allows users to specify a full
+ route manually. This can be used for things like rebalancing, and atomic
+ swaps.
+ */
+ rpc SendToRoute (stream SendToRouteRequest) returns (stream SendResponse) {
+ option deprecated = true;
+ }
+
+ /*
+ SendToRouteSync is a synchronous version of SendToRoute. It Will block
+ until the payment either fails or succeeds.
+ */
+ rpc SendToRouteSync (SendToRouteRequest) returns (SendResponse);
+
+ /* lncli: `addinvoice`
+ AddInvoice attempts to add a new invoice to the invoice database. Any
+ duplicated invoices are rejected, therefore all invoices *must* have a
+ unique payment preimage.
+ */
+ rpc AddInvoice (Invoice) returns (AddInvoiceResponse);
+
+ /* lncli: `listinvoices`
+ ListInvoices returns a list of all the invoices currently stored within the
+ database. Any active debug invoices are ignored. It has full support for
+ paginated responses, allowing users to query for specific invoices through
+ their add_index. This can be done by using either the first_index_offset or
+ last_index_offset fields included in the response as the index_offset of the
+ next request. By default, the first 100 invoices created will be returned.
+ Backwards pagination is also supported through the Reversed flag.
+ */
+ rpc ListInvoices (ListInvoiceRequest) returns (ListInvoiceResponse);
+
+ /* lncli: `lookupinvoice`
+ LookupInvoice attempts to look up an invoice according to its payment hash.
+ The passed payment hash *must* be exactly 32 bytes, if not, an error is
+ returned.
+ */
+ rpc LookupInvoice (PaymentHash) returns (Invoice);
+
+ /*
+ SubscribeInvoices returns a uni-directional stream (server -> client) for
+ notifying the client of newly added/settled invoices. The caller can
+ optionally specify the add_index and/or the settle_index. If the add_index
+ is specified, then we'll first start by sending add invoice events for all
+ invoices with an add_index greater than the specified value. If the
+ settle_index is specified, the next, we'll send out all settle events for
+ invoices with a settle_index greater than the specified value. One or both
+ of these fields can be set. If no fields are set, then we'll only send out
+ the latest add/settle events.
+ */
+ rpc SubscribeInvoices (InvoiceSubscription) returns (stream Invoice);
+
+ /* lncli: `decodepayreq`
+ DecodePayReq takes an encoded payment request string and attempts to decode
+ it, returning a full description of the conditions encoded within the
+ payment request.
+ */
+ rpc DecodePayReq (PayReqString) returns (PayReq);
+
+ /* lncli: `listpayments`
+ ListPayments returns a list of all outgoing payments.
+ */
+ rpc ListPayments (ListPaymentsRequest) returns (ListPaymentsResponse);
+
+ /*
+ DeletePayment deletes an outgoing payment from DB. Note that it will not
+ attempt to delete an In-Flight payment, since that would be unsafe.
+ */
+ rpc DeletePayment (DeletePaymentRequest) returns (DeletePaymentResponse);
+
+ /*
+ DeleteAllPayments deletes all outgoing payments from DB. Note that it will
+ not attempt to delete In-Flight payments, since that would be unsafe.
+ */
+ rpc DeleteAllPayments (DeleteAllPaymentsRequest)
+ returns (DeleteAllPaymentsResponse);
+
+ /* lncli: `describegraph`
+ DescribeGraph returns a description of the latest graph state from the
+ point of view of the node. The graph information is partitioned into two
+ components: all the nodes/vertexes, and all the edges that connect the
+ vertexes themselves. As this is a directed graph, the edges also contain
+ the node directional specific routing policy which includes: the time lock
+ delta, fee information, etc.
+ */
+ rpc DescribeGraph (ChannelGraphRequest) returns (ChannelGraph);
+
+ /* lncli: `getnodemetrics`
+ GetNodeMetrics returns node metrics calculated from the graph. Currently
+ the only supported metric is betweenness centrality of individual nodes.
+ */
+ rpc GetNodeMetrics (NodeMetricsRequest) returns (NodeMetricsResponse);
+
+ /* lncli: `getchaninfo`
+ GetChanInfo returns the latest authenticated network announcement for the
+ given channel identified by its channel ID: an 8-byte integer which
+ uniquely identifies the location of transaction's funding output within the
+ blockchain.
+ */
+ rpc GetChanInfo (ChanInfoRequest) returns (ChannelEdge);
+
+ /* lncli: `getnodeinfo`
+ GetNodeInfo returns the latest advertised, aggregated, and authenticated
+ channel information for the specified node identified by its public key.
+ */
+ rpc GetNodeInfo (NodeInfoRequest) returns (NodeInfo);
+
+ /* lncli: `queryroutes`
+ QueryRoutes attempts to query the daemon's Channel Router for a possible
+ route to a target destination capable of carrying a specific amount of
+ satoshis. The returned route contains the full details required to craft and
+ send an HTLC, also including the necessary information that should be
+ present within the Sphinx packet encapsulated within the HTLC.
+
+ When using REST, the `dest_custom_records` map type can be set by appending
+ `&dest_custom_records[]=`
+ to the URL. Unfortunately this map type doesn't appear in the REST API
+ documentation because of a bug in the grpc-gateway library.
+ */
+ rpc QueryRoutes (QueryRoutesRequest) returns (QueryRoutesResponse);
+
+ /* lncli: `getnetworkinfo`
+ GetNetworkInfo returns some basic stats about the known channel graph from
+ the point of view of the node.
+ */
+ rpc GetNetworkInfo (NetworkInfoRequest) returns (NetworkInfo);
+
+ /* lncli: `stop`
+ StopDaemon will send a shutdown request to the interrupt handler, triggering
+ a graceful shutdown of the daemon.
+ */
+ rpc StopDaemon (StopRequest) returns (StopResponse);
+
+ /*
+ SubscribeChannelGraph launches a streaming RPC that allows the caller to
+ receive notifications upon any changes to the channel graph topology from
+ the point of view of the responding node. Events notified include: new
+ nodes coming online, nodes updating their authenticated attributes, new
+ channels being advertised, updates in the routing policy for a directional
+ channel edge, and when channels are closed on-chain.
+ */
+ rpc SubscribeChannelGraph (GraphTopologySubscription)
+ returns (stream GraphTopologyUpdate);
+
+ /* lncli: `debuglevel`
+ DebugLevel allows a caller to programmatically set the logging verbosity of
+ lnd. The logging can be targeted according to a coarse daemon-wide logging
+ level, or in a granular fashion to specify the logging for a target
+ sub-system.
+ */
+ rpc DebugLevel (DebugLevelRequest) returns (DebugLevelResponse);
+
+ /* lncli: `feereport`
+ FeeReport allows the caller to obtain a report detailing the current fee
+ schedule enforced by the node globally for each channel.
+ */
+ rpc FeeReport (FeeReportRequest) returns (FeeReportResponse);
+
+ /* lncli: `updatechanpolicy`
+ UpdateChannelPolicy allows the caller to update the fee schedule and
+ channel policies for all channels globally, or a particular channel.
+ */
+ rpc UpdateChannelPolicy (PolicyUpdateRequest)
+ returns (PolicyUpdateResponse);
+
+ /* lncli: `fwdinghistory`
+ ForwardingHistory allows the caller to query the htlcswitch for a record of
+ all HTLCs forwarded within the target time range, and integer offset
+ within that time range, for a maximum number of events. If no maximum number
+ of events is specified, up to 100 events will be returned. If no time-range
+ is specified, then events will be returned in the order that they occured.
+
+ A list of forwarding events are returned. The size of each forwarding event
+ is 40 bytes, and the max message size able to be returned in gRPC is 4 MiB.
+ As a result each message can only contain 50k entries. Each response has
+ the index offset of the last entry. The index offset can be provided to the
+ request to allow the caller to skip a series of records.
+ */
+ rpc ForwardingHistory (ForwardingHistoryRequest)
+ returns (ForwardingHistoryResponse);
+
+ /* lncli: `exportchanbackup`
+ ExportChannelBackup attempts to return an encrypted static channel backup
+ for the target channel identified by it channel point. The backup is
+ encrypted with a key generated from the aezeed seed of the user. The
+ returned backup can either be restored using the RestoreChannelBackup
+ method once lnd is running, or via the InitWallet and UnlockWallet methods
+ from the WalletUnlocker service.
+ */
+ rpc ExportChannelBackup (ExportChannelBackupRequest)
+ returns (ChannelBackup);
+
+ /*
+ ExportAllChannelBackups returns static channel backups for all existing
+ channels known to lnd. A set of regular singular static channel backups for
+ each channel are returned. Additionally, a multi-channel backup is returned
+ as well, which contains a single encrypted blob containing the backups of
+ each channel.
+ */
+ rpc ExportAllChannelBackups (ChanBackupExportRequest)
+ returns (ChanBackupSnapshot);
+
+ /*
+ VerifyChanBackup allows a caller to verify the integrity of a channel backup
+ snapshot. This method will accept either a packed Single or a packed Multi.
+ Specifying both will result in an error.
+ */
+ rpc VerifyChanBackup (ChanBackupSnapshot)
+ returns (VerifyChanBackupResponse);
+
+ /* lncli: `restorechanbackup`
+ RestoreChannelBackups accepts a set of singular channel backups, or a
+ single encrypted multi-chan backup and attempts to recover any funds
+ remaining within the channel. If we are able to unpack the backup, then the
+ new channel will be shown under listchannels, as well as pending channels.
+ */
+ rpc RestoreChannelBackups (RestoreChanBackupRequest)
+ returns (RestoreBackupResponse);
+
+ /*
+ SubscribeChannelBackups allows a client to sub-subscribe to the most up to
+ date information concerning the state of all channel backups. Each time a
+ new channel is added, we return the new set of channels, along with a
+ multi-chan backup containing the backup info for all channels. Each time a
+ channel is closed, we send a new update, which contains new new chan back
+ ups, but the updated set of encrypted multi-chan backups with the closed
+ channel(s) removed.
+ */
+ rpc SubscribeChannelBackups (ChannelBackupSubscription)
+ returns (stream ChanBackupSnapshot);
+
+ /* lncli: `bakemacaroon`
+ BakeMacaroon allows the creation of a new macaroon with custom read and
+ write permissions. No first-party caveats are added since this can be done
+ offline.
+ */
+ rpc BakeMacaroon (BakeMacaroonRequest) returns (BakeMacaroonResponse);
+
+ /* lncli: `listmacaroonids`
+ ListMacaroonIDs returns all root key IDs that are in use.
+ */
+ rpc ListMacaroonIDs (ListMacaroonIDsRequest)
+ returns (ListMacaroonIDsResponse);
+
+ /* lncli: `deletemacaroonid`
+ DeleteMacaroonID deletes the specified macaroon ID and invalidates all
+ macaroons derived from that ID.
+ */
+ rpc DeleteMacaroonID (DeleteMacaroonIDRequest)
+ returns (DeleteMacaroonIDResponse);
+
+ /* lncli: `listpermissions`
+ ListPermissions lists all RPC method URIs and their required macaroon
+ permissions to access them.
+ */
+ rpc ListPermissions (ListPermissionsRequest)
+ returns (ListPermissionsResponse);
+
+ /*
+ CheckMacaroonPermissions checks whether a request follows the constraints
+ imposed on the macaroon and that the macaroon is authorized to follow the
+ provided permissions.
+ */
+ rpc CheckMacaroonPermissions (CheckMacPermRequest)
+ returns (CheckMacPermResponse);
+
+ /*
+ RegisterRPCMiddleware adds a new gRPC middleware to the interceptor chain. A
+ gRPC middleware is software component external to lnd that aims to add
+ additional business logic to lnd by observing/intercepting/validating
+ incoming gRPC client requests and (if needed) replacing/overwriting outgoing
+ messages before they're sent to the client. When registering the middleware
+ must identify itself and indicate what custom macaroon caveats it wants to
+ be responsible for. Only requests that contain a macaroon with that specific
+ custom caveat are then sent to the middleware for inspection. The other
+ option is to register for the read-only mode in which all requests/responses
+ are forwarded for interception to the middleware but the middleware is not
+ allowed to modify any responses. As a security measure, _no_ middleware can
+ modify responses for requests made with _unencumbered_ macaroons!
+ */
+ rpc RegisterRPCMiddleware (stream RPCMiddlewareResponse)
+ returns (stream RPCMiddlewareRequest);
+
+ /* lncli: `sendcustom`
+ SendCustomMessage sends a custom peer message.
+ */
+ rpc SendCustomMessage (SendCustomMessageRequest)
+ returns (SendCustomMessageResponse);
+
+ /* lncli: `subscribecustom`
+ SubscribeCustomMessages subscribes to a stream of incoming custom peer
+ messages.
+
+ To include messages with type outside of the custom range (>= 32768) lnd
+ needs to be compiled with the `dev` build tag, and the message type to
+ override should be specified in lnd's experimental protocol configuration.
+ */
+ rpc SubscribeCustomMessages (SubscribeCustomMessagesRequest)
+ returns (stream CustomMessage);
+
+ /* lncli: `listaliases`
+ ListAliases returns the set of all aliases that have ever existed with
+ their confirmed SCID (if it exists) and/or the base SCID (in the case of
+ zero conf).
+ */
+ rpc ListAliases (ListAliasesRequest) returns (ListAliasesResponse);
+
+ /*
+ LookupHtlcResolution retrieves a final htlc resolution from the database.
+ If the htlc has no final resolution yet, a NotFound grpc status code is
+ returned.
+ */
+ rpc LookupHtlcResolution (LookupHtlcResolutionRequest)
+ returns (LookupHtlcResolutionResponse);
+}
+
+message LookupHtlcResolutionRequest {
+ uint64 chan_id = 1;
+
+ uint64 htlc_index = 2;
+}
+
+message LookupHtlcResolutionResponse {
+ // Settled is true is the htlc was settled. If false, the htlc was failed.
+ bool settled = 1;
+
+ // Offchain indicates whether the htlc was resolved off-chain or on-chain.
+ bool offchain = 2;
+}
+
+message SubscribeCustomMessagesRequest {
+}
+
+message CustomMessage {
+ // Peer from which the message originates
+ bytes peer = 1;
+
+ // Message type. This value will be in the custom range (>= 32768).
+ uint32 type = 2;
+
+ // Raw message data
+ bytes data = 3;
+}
+
+message SendCustomMessageRequest {
+ // Peer to send the message to
+ bytes peer = 1;
+
+ // Message type. This value needs to be in the custom range (>= 32768).
+ // To send a type < custom range, lnd needs to be compiled with the `dev`
+ // build tag, and the message type to override should be specified in lnd's
+ // experimental protocol configuration.
+ uint32 type = 2;
+
+ // Raw message data.
+ bytes data = 3;
+}
+
+message SendCustomMessageResponse {
+}
+
+message Utxo {
+ // The type of address
+ AddressType address_type = 1;
+
+ // The address
+ string address = 2;
+
+ // The value of the unspent coin in satoshis
+ int64 amount_sat = 3;
+
+ // The pkscript in hex
+ string pk_script = 4;
+
+ // The outpoint in format txid:n
+ OutPoint outpoint = 5;
+
+ // The number of confirmations for the Utxo
+ int64 confirmations = 6;
+}
+
+enum OutputScriptType {
+ SCRIPT_TYPE_PUBKEY_HASH = 0;
+ SCRIPT_TYPE_SCRIPT_HASH = 1;
+ SCRIPT_TYPE_WITNESS_V0_PUBKEY_HASH = 2;
+ SCRIPT_TYPE_WITNESS_V0_SCRIPT_HASH = 3;
+ SCRIPT_TYPE_PUBKEY = 4;
+ SCRIPT_TYPE_MULTISIG = 5;
+ SCRIPT_TYPE_NULLDATA = 6;
+ SCRIPT_TYPE_NON_STANDARD = 7;
+ SCRIPT_TYPE_WITNESS_UNKNOWN = 8;
+ SCRIPT_TYPE_WITNESS_V1_TAPROOT = 9;
+}
+
+message OutputDetail {
+ // The type of the output
+ OutputScriptType output_type = 1;
+
+ // The address
+ string address = 2;
+
+ // The pkscript in hex
+ string pk_script = 3;
+
+ // The output index used in the raw transaction
+ int64 output_index = 4;
+
+ // The value of the output coin in satoshis
+ int64 amount = 5;
+
+ // Denotes if the output is controlled by the internal wallet
+ bool is_our_address = 6;
+}
+
+message Transaction {
+ // The transaction hash
+ string tx_hash = 1;
+
+ // The transaction amount, denominated in satoshis
+ int64 amount = 2;
+
+ // The number of confirmations
+ int32 num_confirmations = 3;
+
+ // The hash of the block this transaction was included in
+ string block_hash = 4;
+
+ // The height of the block this transaction was included in
+ int32 block_height = 5;
+
+ // Timestamp of this transaction
+ int64 time_stamp = 6;
+
+ // Fees paid for this transaction
+ int64 total_fees = 7;
+
+ // Addresses that received funds for this transaction. Deprecated as it is
+ // now incorporated in the output_details field.
+ repeated string dest_addresses = 8 [deprecated = true];
+
+ // Outputs that received funds for this transaction
+ repeated OutputDetail output_details = 11;
+
+ // The raw transaction hex.
+ string raw_tx_hex = 9;
+
+ // A label that was optionally set on transaction broadcast.
+ string label = 10;
+
+ // PreviousOutpoints/Inputs of this transaction.
+ repeated PreviousOutPoint previous_outpoints = 12;
+}
+
+message GetTransactionsRequest {
+ /*
+ The height from which to list transactions, inclusive. If this value is
+ greater than end_height, transactions will be read in reverse.
+ */
+ int32 start_height = 1;
+
+ /*
+ The height until which to list transactions, inclusive. To include
+ unconfirmed transactions, this value should be set to -1, which will
+ return transactions from start_height until the current chain tip and
+ unconfirmed transactions. If no end_height is provided, the call will
+ default to this option.
+ */
+ int32 end_height = 2;
+
+ // An optional filter to only include transactions relevant to an account.
+ string account = 3;
+}
+
+message TransactionDetails {
+ // The list of transactions relevant to the wallet.
+ repeated Transaction transactions = 1;
+}
+
+message FeeLimit {
+ oneof limit {
+ /*
+ The fee limit expressed as a fixed amount of satoshis.
+
+ The fields fixed and fixed_msat are mutually exclusive.
+ */
+ int64 fixed = 1;
+
+ /*
+ The fee limit expressed as a fixed amount of millisatoshis.
+
+ The fields fixed and fixed_msat are mutually exclusive.
+ */
+ int64 fixed_msat = 3;
+
+ // The fee limit expressed as a percentage of the payment amount.
+ int64 percent = 2;
+ }
+}
+
+message SendRequest {
+ /*
+ The identity pubkey of the payment recipient. When using REST, this field
+ must be encoded as base64.
+ */
+ bytes dest = 1;
+
+ /*
+ The hex-encoded identity pubkey of the payment recipient. Deprecated now
+ that the REST gateway supports base64 encoding of bytes fields.
+ */
+ string dest_string = 2 [deprecated = true];
+
+ /*
+ The amount to send expressed in satoshis.
+
+ The fields amt and amt_msat are mutually exclusive.
+ */
+ int64 amt = 3;
+
+ /*
+ The amount to send expressed in millisatoshis.
+
+ The fields amt and amt_msat are mutually exclusive.
+ */
+ int64 amt_msat = 12;
+
+ /*
+ The hash to use within the payment's HTLC. When using REST, this field
+ must be encoded as base64.
+ */
+ bytes payment_hash = 4;
+
+ /*
+ The hex-encoded hash to use within the payment's HTLC. Deprecated now
+ that the REST gateway supports base64 encoding of bytes fields.
+ */
+ string payment_hash_string = 5 [deprecated = true];
+
+ /*
+ A bare-bones invoice for a payment within the Lightning Network. With the
+ details of the invoice, the sender has all the data necessary to send a
+ payment to the recipient.
+ */
+ string payment_request = 6;
+
+ /*
+ The CLTV delta from the current height that should be used to set the
+ timelock for the final hop.
+ */
+ int32 final_cltv_delta = 7;
+
+ /*
+ The maximum number of satoshis that will be paid as a fee of the payment.
+ This value can be represented either as a percentage of the amount being
+ sent, or as a fixed amount of the maximum fee the user is willing the pay to
+ send the payment. If not specified, lnd will use a default value of 100%
+ fees for small amounts (<=1k sat) or 5% fees for larger amounts.
+ */
+ FeeLimit fee_limit = 8;
+
+ /*
+ The channel id of the channel that must be taken to the first hop. If zero,
+ any channel may be used.
+ */
+ uint64 outgoing_chan_id = 9 [jstype = JS_STRING];
+
+ /*
+ The pubkey of the last hop of the route. If empty, any hop may be used.
+ */
+ bytes last_hop_pubkey = 13;
+
+ /*
+ An optional maximum total time lock for the route. This should not exceed
+ lnd's `--max-cltv-expiry` setting. If zero, then the value of
+ `--max-cltv-expiry` is enforced.
+ */
+ uint32 cltv_limit = 10;
+
+ /*
+ An optional field that can be used to pass an arbitrary set of TLV records
+ to a peer which understands the new records. This can be used to pass
+ application specific data during the payment attempt. Record types are
+ required to be in the custom range >= 65536. When using REST, the values
+ must be encoded as base64.
+ */
+ map dest_custom_records = 11;
+
+ // If set, circular payments to self are permitted.
+ bool allow_self_payment = 14;
+
+ /*
+ Features assumed to be supported by the final node. All transitive feature
+ dependencies must also be set properly. For a given feature bit pair, either
+ optional or remote may be set, but not both. If this field is nil or empty,
+ the router will try to load destination features from the graph as a
+ fallback.
+ */
+ repeated FeatureBit dest_features = 15;
+
+ /*
+ The payment address of the generated invoice.
+ */
+ bytes payment_addr = 16;
+}
+
+message SendResponse {
+ string payment_error = 1;
+ bytes payment_preimage = 2;
+ Route payment_route = 3;
+ bytes payment_hash = 4;
+}
+
+message SendToRouteRequest {
+ /*
+ The payment hash to use for the HTLC. When using REST, this field must be
+ encoded as base64.
+ */
+ bytes payment_hash = 1;
+
+ /*
+ An optional hex-encoded payment hash to be used for the HTLC. Deprecated now
+ that the REST gateway supports base64 encoding of bytes fields.
+ */
+ string payment_hash_string = 2 [deprecated = true];
+
+ reserved 3;
+
+ // Route that should be used to attempt to complete the payment.
+ Route route = 4;
+}
+
+message ChannelAcceptRequest {
+ // The pubkey of the node that wishes to open an inbound channel.
+ bytes node_pubkey = 1;
+
+ // The hash of the genesis block that the proposed channel resides in.
+ bytes chain_hash = 2;
+
+ // The pending channel id.
+ bytes pending_chan_id = 3;
+
+ // The funding amount in satoshis that initiator wishes to use in the
+ // channel.
+ uint64 funding_amt = 4;
+
+ // The push amount of the proposed channel in millisatoshis.
+ uint64 push_amt = 5;
+
+ // The dust limit of the initiator's commitment tx.
+ uint64 dust_limit = 6;
+
+ // The maximum amount of coins in millisatoshis that can be pending in this
+ // channel.
+ uint64 max_value_in_flight = 7;
+
+ // The minimum amount of satoshis the initiator requires us to have at all
+ // times.
+ uint64 channel_reserve = 8;
+
+ // The smallest HTLC in millisatoshis that the initiator will accept.
+ uint64 min_htlc = 9;
+
+ // The initial fee rate that the initiator suggests for both commitment
+ // transactions.
+ uint64 fee_per_kw = 10;
+
+ /*
+ The number of blocks to use for the relative time lock in the pay-to-self
+ output of both commitment transactions.
+ */
+ uint32 csv_delay = 11;
+
+ // The total number of incoming HTLC's that the initiator will accept.
+ uint32 max_accepted_htlcs = 12;
+
+ // A bit-field which the initiator uses to specify proposed channel
+ // behavior.
+ uint32 channel_flags = 13;
+
+ // The commitment type the initiator wishes to use for the proposed channel.
+ CommitmentType commitment_type = 14;
+
+ // Whether the initiator wants to open a zero-conf channel via the channel
+ // type.
+ bool wants_zero_conf = 15;
+
+ // Whether the initiator wants to use the scid-alias channel type. This is
+ // separate from the feature bit.
+ bool wants_scid_alias = 16;
+}
+
+message ChannelAcceptResponse {
+ // Whether or not the client accepts the channel.
+ bool accept = 1;
+
+ // The pending channel id to which this response applies.
+ bytes pending_chan_id = 2;
+
+ /*
+ An optional error to send the initiating party to indicate why the channel
+ was rejected. This field *should not* contain sensitive information, it will
+ be sent to the initiating party. This field should only be set if accept is
+ false, the channel will be rejected if an error is set with accept=true
+ because the meaning of this response is ambiguous. Limited to 500
+ characters.
+ */
+ string error = 3;
+
+ /*
+ The upfront shutdown address to use if the initiating peer supports option
+ upfront shutdown script (see ListPeers for the features supported). Note
+ that the channel open will fail if this value is set for a peer that does
+ not support this feature bit.
+ */
+ string upfront_shutdown = 4;
+
+ /*
+ The csv delay (in blocks) that we require for the remote party.
+ */
+ uint32 csv_delay = 5;
+
+ /*
+ The reserve amount in satoshis that we require the remote peer to adhere to.
+ We require that the remote peer always have some reserve amount allocated to
+ them so that there is always a disincentive to broadcast old state (if they
+ hold 0 sats on their side of the channel, there is nothing to lose).
+ */
+ uint64 reserve_sat = 6;
+
+ /*
+ The maximum amount of funds in millisatoshis that we allow the remote peer
+ to have in outstanding htlcs.
+ */
+ uint64 in_flight_max_msat = 7;
+
+ /*
+ The maximum number of htlcs that the remote peer can offer us.
+ */
+ uint32 max_htlc_count = 8;
+
+ /*
+ The minimum value in millisatoshis for incoming htlcs on the channel.
+ */
+ uint64 min_htlc_in = 9;
+
+ /*
+ The number of confirmations we require before we consider the channel open.
+ */
+ uint32 min_accept_depth = 10;
+
+ /*
+ Whether the responder wants this to be a zero-conf channel. This will fail
+ if either side does not have the scid-alias feature bit set. The minimum
+ depth field must be zero if this is true.
+ */
+ bool zero_conf = 11;
+}
+
+message ChannelPoint {
+ oneof funding_txid {
+ /*
+ Txid of the funding transaction. When using REST, this field must be
+ encoded as base64.
+ */
+ bytes funding_txid_bytes = 1;
+
+ /*
+ Hex-encoded string representing the byte-reversed hash of the funding
+ transaction.
+ */
+ string funding_txid_str = 2;
+ }
+
+ // The index of the output of the funding transaction
+ uint32 output_index = 3;
+}
+
+message OutPoint {
+ // Raw bytes representing the transaction id.
+ bytes txid_bytes = 1;
+
+ // Reversed, hex-encoded string representing the transaction id.
+ string txid_str = 2;
+
+ // The index of the output on the transaction.
+ uint32 output_index = 3;
+}
+
+message PreviousOutPoint {
+ // The outpoint in format txid:n.
+ string outpoint = 1;
+
+ // Denotes if the outpoint is controlled by the internal wallet.
+ // The flag will only detect p2wkh, np2wkh and p2tr inputs as its own.
+ bool is_our_output = 2;
+}
+
+message LightningAddress {
+ // The identity pubkey of the Lightning node.
+ string pubkey = 1;
+
+ // The network location of the lightning node, e.g. `69.69.69.69:1337` or
+ // `localhost:10011`.
+ string host = 2;
+}
+
+message EstimateFeeRequest {
+ // The map from addresses to amounts for the transaction.
+ map AddrToAmount = 1;
+
+ // The target number of blocks that this transaction should be confirmed
+ // by.
+ int32 target_conf = 2;
+
+ // The minimum number of confirmations each one of your outputs used for
+ // the transaction must satisfy.
+ int32 min_confs = 3;
+
+ // Whether unconfirmed outputs should be used as inputs for the transaction.
+ bool spend_unconfirmed = 4;
+}
+
+message EstimateFeeResponse {
+ // The total fee in satoshis.
+ int64 fee_sat = 1;
+
+ // Deprecated, use sat_per_vbyte.
+ // The fee rate in satoshi/vbyte.
+ int64 feerate_sat_per_byte = 2 [deprecated = true];
+
+ // The fee rate in satoshi/vbyte.
+ uint64 sat_per_vbyte = 3;
+}
+
+message SendManyRequest {
+ // The map from addresses to amounts
+ map AddrToAmount = 1;
+
+ // The target number of blocks that this transaction should be confirmed
+ // by.
+ int32 target_conf = 3;
+
+ // A manual fee rate set in sat/vbyte that should be used when crafting the
+ // transaction.
+ uint64 sat_per_vbyte = 4;
+
+ // Deprecated, use sat_per_vbyte.
+ // A manual fee rate set in sat/vbyte that should be used when crafting the
+ // transaction.
+ int64 sat_per_byte = 5 [deprecated = true];
+
+ // An optional label for the transaction, limited to 500 characters.
+ string label = 6;
+
+ // The minimum number of confirmations each one of your outputs used for
+ // the transaction must satisfy.
+ int32 min_confs = 7;
+
+ // Whether unconfirmed outputs should be used as inputs for the transaction.
+ bool spend_unconfirmed = 8;
+}
+message SendManyResponse {
+ // The id of the transaction
+ string txid = 1;
+}
+
+message SendCoinsRequest {
+ // The address to send coins to
+ string addr = 1;
+
+ // The amount in satoshis to send
+ int64 amount = 2;
+
+ // The target number of blocks that this transaction should be confirmed
+ // by.
+ int32 target_conf = 3;
+
+ // A manual fee rate set in sat/vbyte that should be used when crafting the
+ // transaction.
+ uint64 sat_per_vbyte = 4;
+
+ // Deprecated, use sat_per_vbyte.
+ // A manual fee rate set in sat/vbyte that should be used when crafting the
+ // transaction.
+ int64 sat_per_byte = 5 [deprecated = true];
+
+ /*
+ If set, then the amount field will be ignored, and lnd will attempt to
+ send all the coins under control of the internal wallet to the specified
+ address.
+ */
+ bool send_all = 6;
+
+ // An optional label for the transaction, limited to 500 characters.
+ string label = 7;
+
+ // The minimum number of confirmations each one of your outputs used for
+ // the transaction must satisfy.
+ int32 min_confs = 8;
+
+ // Whether unconfirmed outputs should be used as inputs for the transaction.
+ bool spend_unconfirmed = 9;
+}
+message SendCoinsResponse {
+ // The transaction ID of the transaction
+ string txid = 1;
+}
+
+message ListUnspentRequest {
+ // The minimum number of confirmations to be included.
+ int32 min_confs = 1;
+
+ // The maximum number of confirmations to be included.
+ int32 max_confs = 2;
+
+ // An optional filter to only include outputs belonging to an account.
+ string account = 3;
+}
+message ListUnspentResponse {
+ // A list of utxos
+ repeated Utxo utxos = 1;
+}
+
+/*
+`AddressType` has to be one of:
+
+- `p2wkh`: Pay to witness key hash (`WITNESS_PUBKEY_HASH` = 0)
+- `np2wkh`: Pay to nested witness key hash (`NESTED_PUBKEY_HASH` = 1)
+- `p2tr`: Pay to taproot pubkey (`TAPROOT_PUBKEY` = 4)
+*/
+enum AddressType {
+ WITNESS_PUBKEY_HASH = 0;
+ NESTED_PUBKEY_HASH = 1;
+ UNUSED_WITNESS_PUBKEY_HASH = 2;
+ UNUSED_NESTED_PUBKEY_HASH = 3;
+ TAPROOT_PUBKEY = 4;
+ UNUSED_TAPROOT_PUBKEY = 5;
+}
+
+message NewAddressRequest {
+ // The type of address to generate.
+ AddressType type = 1;
+
+ /*
+ The name of the account to generate a new address for. If empty, the
+ default wallet account is used.
+ */
+ string account = 2;
+}
+message NewAddressResponse {
+ // The newly generated wallet address
+ string address = 1;
+}
+
+message SignMessageRequest {
+ /*
+ The message to be signed. When using REST, this field must be encoded as
+ base64.
+ */
+ bytes msg = 1;
+
+ /*
+ Instead of the default double-SHA256 hashing of the message before signing,
+ only use one round of hashing instead.
+ */
+ bool single_hash = 2;
+}
+message SignMessageResponse {
+ // The signature for the given message
+ string signature = 1;
+}
+
+message VerifyMessageRequest {
+ /*
+ The message over which the signature is to be verified. When using REST,
+ this field must be encoded as base64.
+ */
+ bytes msg = 1;
+
+ // The signature to be verified over the given message
+ string signature = 2;
+}
+message VerifyMessageResponse {
+ // Whether the signature was valid over the given message
+ bool valid = 1;
+
+ // The pubkey recovered from the signature
+ string pubkey = 2;
+}
+
+message ConnectPeerRequest {
+ /*
+ Lightning address of the peer to connect to.
+ */
+ LightningAddress addr = 1;
+
+ /*
+ If set, the daemon will attempt to persistently connect to the target
+ peer. Otherwise, the call will be synchronous.
+ */
+ bool perm = 2;
+
+ /*
+ The connection timeout value (in seconds) for this request. It won't affect
+ other requests.
+ */
+ uint64 timeout = 3;
+}
+message ConnectPeerResponse {
+}
+
+message DisconnectPeerRequest {
+ // The pubkey of the node to disconnect from
+ string pub_key = 1;
+}
+message DisconnectPeerResponse {
+}
+
+message HTLC {
+ bool incoming = 1;
+ int64 amount = 2;
+ bytes hash_lock = 3;
+ uint32 expiration_height = 4;
+
+ // Index identifying the htlc on the channel.
+ uint64 htlc_index = 5;
+
+ // If this HTLC is involved in a forwarding operation, this field indicates
+ // the forwarding channel. For an outgoing htlc, it is the incoming channel.
+ // For an incoming htlc, it is the outgoing channel. When the htlc
+ // originates from this node or this node is the final destination,
+ // forwarding_channel will be zero. The forwarding channel will also be zero
+ // for htlcs that need to be forwarded but don't have a forwarding decision
+ // persisted yet.
+ uint64 forwarding_channel = 6;
+
+ // Index identifying the htlc on the forwarding channel.
+ uint64 forwarding_htlc_index = 7;
+}
+
+enum CommitmentType {
+ /*
+ Returned when the commitment type isn't known or unavailable.
+ */
+ UNKNOWN_COMMITMENT_TYPE = 0;
+
+ /*
+ A channel using the legacy commitment format having tweaked to_remote
+ keys.
+ */
+ LEGACY = 1;
+
+ /*
+ A channel that uses the modern commitment format where the key in the
+ output of the remote party does not change each state. This makes back
+ up and recovery easier as when the channel is closed, the funds go
+ directly to that key.
+ */
+ STATIC_REMOTE_KEY = 2;
+
+ /*
+ A channel that uses a commitment format that has anchor outputs on the
+ commitments, allowing fee bumping after a force close transaction has
+ been broadcast.
+ */
+ ANCHORS = 3;
+
+ /*
+ A channel that uses a commitment type that builds upon the anchors
+ commitment format, but in addition requires a CLTV clause to spend outputs
+ paying to the channel initiator. This is intended for use on leased channels
+ to guarantee that the channel initiator has no incentives to close a leased
+ channel before its maturity date.
+ */
+ SCRIPT_ENFORCED_LEASE = 4;
+}
+
+message ChannelConstraints {
+ /*
+ The CSV delay expressed in relative blocks. If the channel is force closed,
+ we will need to wait for this many blocks before we can regain our funds.
+ */
+ uint32 csv_delay = 1;
+
+ // The minimum satoshis this node is required to reserve in its balance.
+ uint64 chan_reserve_sat = 2;
+
+ // The dust limit (in satoshis) of the initiator's commitment tx.
+ uint64 dust_limit_sat = 3;
+
+ // The maximum amount of coins in millisatoshis that can be pending in this
+ // channel.
+ uint64 max_pending_amt_msat = 4;
+
+ // The smallest HTLC in millisatoshis that the initiator will accept.
+ uint64 min_htlc_msat = 5;
+
+ // The total number of incoming HTLC's that the initiator will accept.
+ uint32 max_accepted_htlcs = 6;
+}
+
+message Channel {
+ // Whether this channel is active or not
+ bool active = 1;
+
+ // The identity pubkey of the remote node
+ string remote_pubkey = 2;
+
+ /*
+ The outpoint (txid:index) of the funding transaction. With this value, Bob
+ will be able to generate a signature for Alice's version of the commitment
+ transaction.
+ */
+ string channel_point = 3;
+
+ /*
+ The unique channel ID for the channel. The first 3 bytes are the block
+ height, the next 3 the index within the block, and the last 2 bytes are the
+ output index for the channel.
+ */
+ uint64 chan_id = 4 [jstype = JS_STRING];
+
+ // The total amount of funds held in this channel
+ int64 capacity = 5;
+
+ // This node's current balance in this channel
+ int64 local_balance = 6;
+
+ // The counterparty's current balance in this channel
+ int64 remote_balance = 7;
+
+ /*
+ The amount calculated to be paid in fees for the current set of commitment
+ transactions. The fee amount is persisted with the channel in order to
+ allow the fee amount to be removed and recalculated with each channel state
+ update, including updates that happen after a system restart.
+ */
+ int64 commit_fee = 8;
+
+ // The weight of the commitment transaction
+ int64 commit_weight = 9;
+
+ /*
+ The required number of satoshis per kilo-weight that the requester will pay
+ at all times, for both the funding transaction and commitment transaction.
+ This value can later be updated once the channel is open.
+ */
+ int64 fee_per_kw = 10;
+
+ // The unsettled balance in this channel
+ int64 unsettled_balance = 11;
+
+ /*
+ The total number of satoshis we've sent within this channel.
+ */
+ int64 total_satoshis_sent = 12;
+
+ /*
+ The total number of satoshis we've received within this channel.
+ */
+ int64 total_satoshis_received = 13;
+
+ /*
+ The total number of updates conducted within this channel.
+ */
+ uint64 num_updates = 14;
+
+ /*
+ The list of active, uncleared HTLCs currently pending within the channel.
+ */
+ repeated HTLC pending_htlcs = 15;
+
+ /*
+ Deprecated. The CSV delay expressed in relative blocks. If the channel is
+ force closed, we will need to wait for this many blocks before we can regain
+ our funds.
+ */
+ uint32 csv_delay = 16 [deprecated = true];
+
+ // Whether this channel is advertised to the network or not.
+ bool private = 17;
+
+ // True if we were the ones that created the channel.
+ bool initiator = 18;
+
+ // A set of flags showing the current state of the channel.
+ string chan_status_flags = 19;
+
+ // Deprecated. The minimum satoshis this node is required to reserve in its
+ // balance.
+ int64 local_chan_reserve_sat = 20 [deprecated = true];
+
+ /*
+ Deprecated. The minimum satoshis the other node is required to reserve in
+ its balance.
+ */
+ int64 remote_chan_reserve_sat = 21 [deprecated = true];
+
+ // Deprecated. Use commitment_type.
+ bool static_remote_key = 22 [deprecated = true];
+
+ // The commitment type used by this channel.
+ CommitmentType commitment_type = 26;
+
+ /*
+ The number of seconds that the channel has been monitored by the channel
+ scoring system. Scores are currently not persisted, so this value may be
+ less than the lifetime of the channel [EXPERIMENTAL].
+ */
+ int64 lifetime = 23;
+
+ /*
+ The number of seconds that the remote peer has been observed as being online
+ by the channel scoring system over the lifetime of the channel
+ [EXPERIMENTAL].
+ */
+ int64 uptime = 24;
+
+ /*
+ Close address is the address that we will enforce payout to on cooperative
+ close if the channel was opened utilizing option upfront shutdown. This
+ value can be set on channel open by setting close_address in an open channel
+ request. If this value is not set, you can still choose a payout address by
+ cooperatively closing with the delivery_address field set.
+ */
+ string close_address = 25;
+
+ /*
+ The amount that the initiator of the channel optionally pushed to the remote
+ party on channel open. This amount will be zero if the channel initiator did
+ not push any funds to the remote peer. If the initiator field is true, we
+ pushed this amount to our peer, if it is false, the remote peer pushed this
+ amount to us.
+ */
+ uint64 push_amount_sat = 27;
+
+ /*
+ This uint32 indicates if this channel is to be considered 'frozen'. A
+ frozen channel doest not allow a cooperative channel close by the
+ initiator. The thaw_height is the height that this restriction stops
+ applying to the channel. This field is optional, not setting it or using a
+ value of zero will mean the channel has no additional restrictions. The
+ height can be interpreted in two ways: as a relative height if the value is
+ less than 500,000, or as an absolute height otherwise.
+ */
+ uint32 thaw_height = 28;
+
+ // List constraints for the local node.
+ ChannelConstraints local_constraints = 29;
+
+ // List constraints for the remote node.
+ ChannelConstraints remote_constraints = 30;
+
+ /*
+ This lists out the set of alias short channel ids that exist for a channel.
+ This may be empty.
+ */
+ repeated uint64 alias_scids = 31;
+
+ // Whether or not this is a zero-conf channel.
+ bool zero_conf = 32;
+
+ // This is the confirmed / on-chain zero-conf SCID.
+ uint64 zero_conf_confirmed_scid = 33;
+
+ // The configured alias name of our peer.
+ string peer_alias = 34;
+}
+
+message ListChannelsRequest {
+ bool active_only = 1;
+ bool inactive_only = 2;
+ bool public_only = 3;
+ bool private_only = 4;
+
+ /*
+ Filters the response for channels with a target peer's pubkey. If peer is
+ empty, all channels will be returned.
+ */
+ bytes peer = 5;
+
+ // Informs the server if the peer alias lookup per channel should be
+ // enabled. It is turned off by default in order to avoid degradation of
+ // performance for existing clients.
+ bool peer_alias_lookup = 6;
+}
+message ListChannelsResponse {
+ // The list of active channels
+ repeated Channel channels = 11;
+}
+
+message AliasMap {
+ /*
+ For non-zero-conf channels, this is the confirmed SCID. Otherwise, this is
+ the first assigned "base" alias.
+ */
+ uint64 base_scid = 1;
+
+ // The set of all aliases stored for the base SCID.
+ repeated uint64 aliases = 2;
+}
+message ListAliasesRequest {
+}
+message ListAliasesResponse {
+ repeated AliasMap alias_maps = 1;
+}
+
+enum Initiator {
+ INITIATOR_UNKNOWN = 0;
+ INITIATOR_LOCAL = 1;
+ INITIATOR_REMOTE = 2;
+ INITIATOR_BOTH = 3;
+}
+
+message ChannelCloseSummary {
+ // The outpoint (txid:index) of the funding transaction.
+ string channel_point = 1;
+
+ // The unique channel ID for the channel.
+ uint64 chan_id = 2 [jstype = JS_STRING];
+
+ // The hash of the genesis block that this channel resides within.
+ string chain_hash = 3;
+
+ // The txid of the transaction which ultimately closed this channel.
+ string closing_tx_hash = 4;
+
+ // Public key of the remote peer that we formerly had a channel with.
+ string remote_pubkey = 5;
+
+ // Total capacity of the channel.
+ int64 capacity = 6;
+
+ // Height at which the funding transaction was spent.
+ uint32 close_height = 7;
+
+ // Settled balance at the time of channel closure
+ int64 settled_balance = 8;
+
+ // The sum of all the time-locked outputs at the time of channel closure
+ int64 time_locked_balance = 9;
+
+ enum ClosureType {
+ COOPERATIVE_CLOSE = 0;
+ LOCAL_FORCE_CLOSE = 1;
+ REMOTE_FORCE_CLOSE = 2;
+ BREACH_CLOSE = 3;
+ FUNDING_CANCELED = 4;
+ ABANDONED = 5;
+ }
+
+ // Details on how the channel was closed.
+ ClosureType close_type = 10;
+
+ /*
+ Open initiator is the party that initiated opening the channel. Note that
+ this value may be unknown if the channel was closed before we migrated to
+ store open channel information after close.
+ */
+ Initiator open_initiator = 11;
+
+ /*
+ Close initiator indicates which party initiated the close. This value will
+ be unknown for channels that were cooperatively closed before we started
+ tracking cooperative close initiators. Note that this indicates which party
+ initiated a close, and it is possible for both to initiate cooperative or
+ force closes, although only one party's close will be confirmed on chain.
+ */
+ Initiator close_initiator = 12;
+
+ repeated Resolution resolutions = 13;
+
+ /*
+ This lists out the set of alias short channel ids that existed for the
+ closed channel. This may be empty.
+ */
+ repeated uint64 alias_scids = 14;
+
+ // The confirmed SCID for a zero-conf channel.
+ uint64 zero_conf_confirmed_scid = 15 [jstype = JS_STRING];
+}
+
+enum ResolutionType {
+ TYPE_UNKNOWN = 0;
+
+ // We resolved an anchor output.
+ ANCHOR = 1;
+
+ /*
+ We are resolving an incoming htlc on chain. This if this htlc is
+ claimed, we swept the incoming htlc with the preimage. If it is timed
+ out, our peer swept the timeout path.
+ */
+ INCOMING_HTLC = 2;
+
+ /*
+ We are resolving an outgoing htlc on chain. If this htlc is claimed,
+ the remote party swept the htlc with the preimage. If it is timed out,
+ we swept it with the timeout path.
+ */
+ OUTGOING_HTLC = 3;
+
+ // We force closed and need to sweep our time locked commitment output.
+ COMMIT = 4;
+}
+
+enum ResolutionOutcome {
+ // Outcome unknown.
+ OUTCOME_UNKNOWN = 0;
+
+ // An output was claimed on chain.
+ CLAIMED = 1;
+
+ // An output was left unclaimed on chain.
+ UNCLAIMED = 2;
+
+ /*
+ ResolverOutcomeAbandoned indicates that an output that we did not
+ claim on chain, for example an anchor that we did not sweep and a
+ third party claimed on chain, or a htlc that we could not decode
+ so left unclaimed.
+ */
+ ABANDONED = 3;
+
+ /*
+ If we force closed our channel, our htlcs need to be claimed in two
+ stages. This outcome represents the broadcast of a timeout or success
+ transaction for this two stage htlc claim.
+ */
+ FIRST_STAGE = 4;
+
+ // A htlc was timed out on chain.
+ TIMEOUT = 5;
+}
+
+message Resolution {
+ // The type of output we are resolving.
+ ResolutionType resolution_type = 1;
+
+ // The outcome of our on chain action that resolved the outpoint.
+ ResolutionOutcome outcome = 2;
+
+ // The outpoint that was spent by the resolution.
+ OutPoint outpoint = 3;
+
+ // The amount that was claimed by the resolution.
+ uint64 amount_sat = 4;
+
+ // The hex-encoded transaction ID of the sweep transaction that spent the
+ // output.
+ string sweep_txid = 5;
+}
+
+message ClosedChannelsRequest {
+ bool cooperative = 1;
+ bool local_force = 2;
+ bool remote_force = 3;
+ bool breach = 4;
+ bool funding_canceled = 5;
+ bool abandoned = 6;
+}
+
+message ClosedChannelsResponse {
+ repeated ChannelCloseSummary channels = 1;
+}
+
+message Peer {
+ // The identity pubkey of the peer
+ string pub_key = 1;
+
+ // Network address of the peer; eg `127.0.0.1:10011`
+ string address = 3;
+
+ // Bytes of data transmitted to this peer
+ uint64 bytes_sent = 4;
+
+ // Bytes of data transmitted from this peer
+ uint64 bytes_recv = 5;
+
+ // Satoshis sent to this peer
+ int64 sat_sent = 6;
+
+ // Satoshis received from this peer
+ int64 sat_recv = 7;
+
+ // A channel is inbound if the counterparty initiated the channel
+ bool inbound = 8;
+
+ // Ping time to this peer
+ int64 ping_time = 9;
+
+ enum SyncType {
+ /*
+ Denotes that we cannot determine the peer's current sync type.
+ */
+ UNKNOWN_SYNC = 0;
+
+ /*
+ Denotes that we are actively receiving new graph updates from the peer.
+ */
+ ACTIVE_SYNC = 1;
+
+ /*
+ Denotes that we are not receiving new graph updates from the peer.
+ */
+ PASSIVE_SYNC = 2;
+
+ /*
+ Denotes that this peer is pinned into an active sync.
+ */
+ PINNED_SYNC = 3;
+ }
+
+ // The type of sync we are currently performing with this peer.
+ SyncType sync_type = 10;
+
+ // Features advertised by the remote peer in their init message.
+ map features = 11;
+
+ /*
+ The latest errors received from our peer with timestamps, limited to the 10
+ most recent errors. These errors are tracked across peer connections, but
+ are not persisted across lnd restarts. Note that these errors are only
+ stored for peers that we have channels open with, to prevent peers from
+ spamming us with errors at no cost.
+ */
+ repeated TimestampedError errors = 12;
+
+ /*
+ The number of times we have recorded this peer going offline or coming
+ online, recorded across restarts. Note that this value is decreased over
+ time if the peer has not recently flapped, so that we can forgive peers
+ with historically high flap counts.
+ */
+ int32 flap_count = 13;
+
+ /*
+ The timestamp of the last flap we observed for this peer. If this value is
+ zero, we have not observed any flaps for this peer.
+ */
+ int64 last_flap_ns = 14;
+
+ /*
+ The last ping payload the peer has sent to us.
+ */
+ bytes last_ping_payload = 15;
+}
+
+message TimestampedError {
+ // The unix timestamp in seconds when the error occurred.
+ uint64 timestamp = 1;
+
+ // The string representation of the error sent by our peer.
+ string error = 2;
+}
+
+message ListPeersRequest {
+ /*
+ If true, only the last error that our peer sent us will be returned with
+ the peer's information, rather than the full set of historic errors we have
+ stored.
+ */
+ bool latest_error = 1;
+}
+message ListPeersResponse {
+ // The list of currently connected peers
+ repeated Peer peers = 1;
+}
+
+message PeerEventSubscription {
+}
+
+message PeerEvent {
+ // The identity pubkey of the peer.
+ string pub_key = 1;
+
+ enum EventType {
+ PEER_ONLINE = 0;
+ PEER_OFFLINE = 1;
+ }
+
+ EventType type = 2;
+}
+
+message GetInfoRequest {
+}
+message GetInfoResponse {
+ // The version of the LND software that the node is running.
+ string version = 14;
+
+ // The SHA1 commit hash that the daemon is compiled with.
+ string commit_hash = 20;
+
+ // The identity pubkey of the current node.
+ string identity_pubkey = 1;
+
+ // If applicable, the alias of the current node, e.g. "bob"
+ string alias = 2;
+
+ // The color of the current node in hex code format
+ string color = 17;
+
+ // Number of pending channels
+ uint32 num_pending_channels = 3;
+
+ // Number of active channels
+ uint32 num_active_channels = 4;
+
+ // Number of inactive channels
+ uint32 num_inactive_channels = 15;
+
+ // Number of peers
+ uint32 num_peers = 5;
+
+ // The node's current view of the height of the best block
+ uint32 block_height = 6;
+
+ // The node's current view of the hash of the best block
+ string block_hash = 8;
+
+ // Timestamp of the block best known to the wallet
+ int64 best_header_timestamp = 13;
+
+ // Whether the wallet's view is synced to the main chain
+ bool synced_to_chain = 9;
+
+ // Whether we consider ourselves synced with the public channel graph.
+ bool synced_to_graph = 18;
+
+ /*
+ Whether the current node is connected to testnet. This field is
+ deprecated and the network field should be used instead
+ **/
+ bool testnet = 10 [deprecated = true];
+
+ reserved 11;
+
+ // A list of active chains the node is connected to
+ repeated Chain chains = 16;
+
+ // The URIs of the current node.
+ repeated string uris = 12;
+
+ /*
+ Features that our node has advertised in our init message, node
+ announcements and invoices.
+ */
+ map features = 19;
+
+ /*
+ Indicates whether the HTLC interceptor API is in always-on mode.
+ */
+ bool require_htlc_interceptor = 21;
+
+ // Indicates whether final htlc resolutions are stored on disk.
+ bool store_final_htlc_resolutions = 22;
+}
+
+message GetRecoveryInfoRequest {
+}
+message GetRecoveryInfoResponse {
+ // Whether the wallet is in recovery mode
+ bool recovery_mode = 1;
+
+ // Whether the wallet recovery progress is finished
+ bool recovery_finished = 2;
+
+ // The recovery progress, ranging from 0 to 1.
+ double progress = 3;
+}
+
+message Chain {
+ // The blockchain the node is on (eg bitcoin, litecoin)
+ string chain = 1;
+
+ // The network the node is on (eg regtest, testnet, mainnet)
+ string network = 2;
+}
+
+message ConfirmationUpdate {
+ bytes block_sha = 1;
+ int32 block_height = 2;
+
+ uint32 num_confs_left = 3;
+}
+
+message ChannelOpenUpdate {
+ ChannelPoint channel_point = 1;
+}
+
+message ChannelCloseUpdate {
+ bytes closing_txid = 1;
+
+ bool success = 2;
+}
+
+message CloseChannelRequest {
+ /*
+ The outpoint (txid:index) of the funding transaction. With this value, Bob
+ will be able to generate a signature for Alice's version of the commitment
+ transaction.
+ */
+ ChannelPoint channel_point = 1;
+
+ // If true, then the channel will be closed forcibly. This means the
+ // current commitment transaction will be signed and broadcast.
+ bool force = 2;
+
+ // The target number of blocks that the closure transaction should be
+ // confirmed by.
+ int32 target_conf = 3;
+
+ // Deprecated, use sat_per_vbyte.
+ // A manual fee rate set in sat/vbyte that should be used when crafting the
+ // closure transaction.
+ int64 sat_per_byte = 4 [deprecated = true];
+
+ /*
+ An optional address to send funds to in the case of a cooperative close.
+ If the channel was opened with an upfront shutdown script and this field
+ is set, the request to close will fail because the channel must pay out
+ to the upfront shutdown addresss.
+ */
+ string delivery_address = 5;
+
+ // A manual fee rate set in sat/vbyte that should be used when crafting the
+ // closure transaction.
+ uint64 sat_per_vbyte = 6;
+
+ // The maximum fee rate the closer is willing to pay.
+ //
+ // NOTE: This field is only respected if we're the initiator of the channel.
+ uint64 max_fee_per_vbyte = 7;
+}
+
+message CloseStatusUpdate {
+ oneof update {
+ PendingUpdate close_pending = 1;
+ ChannelCloseUpdate chan_close = 3;
+ }
+}
+
+message PendingUpdate {
+ bytes txid = 1;
+ uint32 output_index = 2;
+}
+
+message ReadyForPsbtFunding {
+ /*
+ The P2WSH address of the channel funding multisig address that the below
+ specified amount in satoshis needs to be sent to.
+ */
+ string funding_address = 1;
+
+ /*
+ The exact amount in satoshis that needs to be sent to the above address to
+ fund the pending channel.
+ */
+ int64 funding_amount = 2;
+
+ /*
+ A raw PSBT that contains the pending channel output. If a base PSBT was
+ provided in the PsbtShim, this is the base PSBT with one additional output.
+ If no base PSBT was specified, this is an otherwise empty PSBT with exactly
+ one output.
+ */
+ bytes psbt = 3;
+}
+
+message BatchOpenChannelRequest {
+ // The list of channels to open.
+ repeated BatchOpenChannel channels = 1;
+
+ // The target number of blocks that the funding transaction should be
+ // confirmed by.
+ int32 target_conf = 2;
+
+ // A manual fee rate set in sat/vByte that should be used when crafting the
+ // funding transaction.
+ int64 sat_per_vbyte = 3;
+
+ // The minimum number of confirmations each one of your outputs used for
+ // the funding transaction must satisfy.
+ int32 min_confs = 4;
+
+ // Whether unconfirmed outputs should be used as inputs for the funding
+ // transaction.
+ bool spend_unconfirmed = 5;
+
+ // An optional label for the batch transaction, limited to 500 characters.
+ string label = 6;
+}
+
+message BatchOpenChannel {
+ // The pubkey of the node to open a channel with. When using REST, this
+ // field must be encoded as base64.
+ bytes node_pubkey = 1;
+
+ // The number of satoshis the wallet should commit to the channel.
+ int64 local_funding_amount = 2;
+
+ // The number of satoshis to push to the remote side as part of the initial
+ // commitment state.
+ int64 push_sat = 3;
+
+ // Whether this channel should be private, not announced to the greater
+ // network.
+ bool private = 4;
+
+ // The minimum value in millisatoshi we will require for incoming HTLCs on
+ // the channel.
+ int64 min_htlc_msat = 5;
+
+ // The delay we require on the remote's commitment transaction. If this is
+ // not set, it will be scaled automatically with the channel size.
+ uint32 remote_csv_delay = 6;
+
+ /*
+ Close address is an optional address which specifies the address to which
+ funds should be paid out to upon cooperative close. This field may only be
+ set if the peer supports the option upfront feature bit (call listpeers
+ to check). The remote peer will only accept cooperative closes to this
+ address if it is set.
+
+ Note: If this value is set on channel creation, you will *not* be able to
+ cooperatively close out to a different address.
+ */
+ string close_address = 7;
+
+ /*
+ An optional, unique identifier of 32 random bytes that will be used as the
+ pending channel ID to identify the channel while it is in the pre-pending
+ state.
+ */
+ bytes pending_chan_id = 8;
+
+ /*
+ The explicit commitment type to use. Note this field will only be used if
+ the remote peer supports explicit channel negotiation.
+ */
+ CommitmentType commitment_type = 9;
+}
+
+message BatchOpenChannelResponse {
+ repeated PendingUpdate pending_channels = 1;
+}
+
+message OpenChannelRequest {
+ // A manual fee rate set in sat/vbyte that should be used when crafting the
+ // funding transaction.
+ uint64 sat_per_vbyte = 1;
+
+ /*
+ The pubkey of the node to open a channel with. When using REST, this field
+ must be encoded as base64.
+ */
+ bytes node_pubkey = 2;
+
+ /*
+ The hex encoded pubkey of the node to open a channel with. Deprecated now
+ that the REST gateway supports base64 encoding of bytes fields.
+ */
+ string node_pubkey_string = 3 [deprecated = true];
+
+ // The number of satoshis the wallet should commit to the channel
+ int64 local_funding_amount = 4;
+
+ // The number of satoshis to push to the remote side as part of the initial
+ // commitment state
+ int64 push_sat = 5;
+
+ // The target number of blocks that the funding transaction should be
+ // confirmed by.
+ int32 target_conf = 6;
+
+ // Deprecated, use sat_per_vbyte.
+ // A manual fee rate set in sat/vbyte that should be used when crafting the
+ // funding transaction.
+ int64 sat_per_byte = 7 [deprecated = true];
+
+ // Whether this channel should be private, not announced to the greater
+ // network.
+ bool private = 8;
+
+ // The minimum value in millisatoshi we will require for incoming HTLCs on
+ // the channel.
+ int64 min_htlc_msat = 9;
+
+ // The delay we require on the remote's commitment transaction. If this is
+ // not set, it will be scaled automatically with the channel size.
+ uint32 remote_csv_delay = 10;
+
+ // The minimum number of confirmations each one of your outputs used for
+ // the funding transaction must satisfy.
+ int32 min_confs = 11;
+
+ // Whether unconfirmed outputs should be used as inputs for the funding
+ // transaction.
+ bool spend_unconfirmed = 12;
+
+ /*
+ Close address is an optional address which specifies the address to which
+ funds should be paid out to upon cooperative close. This field may only be
+ set if the peer supports the option upfront feature bit (call listpeers
+ to check). The remote peer will only accept cooperative closes to this
+ address if it is set.
+
+ Note: If this value is set on channel creation, you will *not* be able to
+ cooperatively close out to a different address.
+ */
+ string close_address = 13;
+
+ /*
+ Funding shims are an optional argument that allow the caller to intercept
+ certain funding functionality. For example, a shim can be provided to use a
+ particular key for the commitment key (ideally cold) rather than use one
+ that is generated by the wallet as normal, or signal that signing will be
+ carried out in an interactive manner (PSBT based).
+ */
+ FundingShim funding_shim = 14;
+
+ /*
+ The maximum amount of coins in millisatoshi that can be pending within
+ the channel. It only applies to the remote party.
+ */
+ uint64 remote_max_value_in_flight_msat = 15;
+
+ /*
+ The maximum number of concurrent HTLCs we will allow the remote party to add
+ to the commitment transaction.
+ */
+ uint32 remote_max_htlcs = 16;
+
+ /*
+ Max local csv is the maximum csv delay we will allow for our own commitment
+ transaction.
+ */
+ uint32 max_local_csv = 17;
+
+ /*
+ The explicit commitment type to use. Note this field will only be used if
+ the remote peer supports explicit channel negotiation.
+ */
+ CommitmentType commitment_type = 18;
+
+ /*
+ If this is true, then a zero-conf channel open will be attempted.
+ */
+ bool zero_conf = 19;
+
+ /*
+ If this is true, then an option-scid-alias channel-type open will be
+ attempted.
+ */
+ bool scid_alias = 20;
+
+ /*
+ The base fee charged regardless of the number of milli-satoshis sent.
+ */
+ uint64 base_fee = 21;
+
+ /*
+ The fee rate in ppm (parts per million) that will be charged in
+ proportion of the value of each forwarded HTLC.
+ */
+ uint64 fee_rate = 22;
+
+ /*
+ If use_base_fee is true the open channel announcement will update the
+ channel base fee with the value specified in base_fee. In the case of
+ a base_fee of 0 use_base_fee is needed downstream to distinguish whether
+ to use the default base fee value specified in the config or 0.
+ */
+ bool use_base_fee = 23;
+
+ /*
+ If use_fee_rate is true the open channel announcement will update the
+ channel fee rate with the value specified in fee_rate. In the case of
+ a fee_rate of 0 use_fee_rate is needed downstream to distinguish whether
+ to use the default fee rate value specified in the config or 0.
+ */
+ bool use_fee_rate = 24;
+
+ /*
+ The number of satoshis we require the remote peer to reserve. This value,
+ if specified, must be above the dust limit and below 20% of the channel
+ capacity.
+ */
+ uint64 remote_chan_reserve_sat = 25;
+}
+message OpenStatusUpdate {
+ oneof update {
+ /*
+ Signals that the channel is now fully negotiated and the funding
+ transaction published.
+ */
+ PendingUpdate chan_pending = 1;
+
+ /*
+ Signals that the channel's funding transaction has now reached the
+ required number of confirmations on chain and can be used.
+ */
+ ChannelOpenUpdate chan_open = 3;
+
+ /*
+ Signals that the funding process has been suspended and the construction
+ of a PSBT that funds the channel PK script is now required.
+ */
+ ReadyForPsbtFunding psbt_fund = 5;
+ }
+
+ /*
+ The pending channel ID of the created channel. This value may be used to
+ further the funding flow manually via the FundingStateStep method.
+ */
+ bytes pending_chan_id = 4;
+}
+
+message KeyLocator {
+ // The family of key being identified.
+ int32 key_family = 1;
+
+ // The precise index of the key being identified.
+ int32 key_index = 2;
+}
+
+message KeyDescriptor {
+ /*
+ The raw bytes of the key being identified.
+ */
+ bytes raw_key_bytes = 1;
+
+ /*
+ The key locator that identifies which key to use for signing.
+ */
+ KeyLocator key_loc = 2;
+}
+
+message ChanPointShim {
+ /*
+ The size of the pre-crafted output to be used as the channel point for this
+ channel funding.
+ */
+ int64 amt = 1;
+
+ // The target channel point to refrence in created commitment transactions.
+ ChannelPoint chan_point = 2;
+
+ // Our local key to use when creating the multi-sig output.
+ KeyDescriptor local_key = 3;
+
+ // The key of the remote party to use when creating the multi-sig output.
+ bytes remote_key = 4;
+
+ /*
+ If non-zero, then this will be used as the pending channel ID on the wire
+ protocol to initate the funding request. This is an optional field, and
+ should only be set if the responder is already expecting a specific pending
+ channel ID.
+ */
+ bytes pending_chan_id = 5;
+
+ /*
+ This uint32 indicates if this channel is to be considered 'frozen'. A frozen
+ channel does not allow a cooperative channel close by the initiator. The
+ thaw_height is the height that this restriction stops applying to the
+ channel. The height can be interpreted in two ways: as a relative height if
+ the value is less than 500,000, or as an absolute height otherwise.
+ */
+ uint32 thaw_height = 6;
+}
+
+message PsbtShim {
+ /*
+ A unique identifier of 32 random bytes that will be used as the pending
+ channel ID to identify the PSBT state machine when interacting with it and
+ on the wire protocol to initiate the funding request.
+ */
+ bytes pending_chan_id = 1;
+
+ /*
+ An optional base PSBT the new channel output will be added to. If this is
+ non-empty, it must be a binary serialized PSBT.
+ */
+ bytes base_psbt = 2;
+
+ /*
+ If a channel should be part of a batch (multiple channel openings in one
+ transaction), it can be dangerous if the whole batch transaction is
+ published too early before all channel opening negotiations are completed.
+ This flag prevents this particular channel from broadcasting the transaction
+ after the negotiation with the remote peer. In a batch of channel openings
+ this flag should be set to true for every channel but the very last.
+ */
+ bool no_publish = 3;
+}
+
+message FundingShim {
+ oneof shim {
+ /*
+ A channel shim where the channel point was fully constructed outside
+ of lnd's wallet and the transaction might already be published.
+ */
+ ChanPointShim chan_point_shim = 1;
+
+ /*
+ A channel shim that uses a PSBT to fund and sign the channel funding
+ transaction.
+ */
+ PsbtShim psbt_shim = 2;
+ }
+}
+
+message FundingShimCancel {
+ // The pending channel ID of the channel to cancel the funding shim for.
+ bytes pending_chan_id = 1;
+}
+
+message FundingPsbtVerify {
+ /*
+ The funded but not yet signed PSBT that sends the exact channel capacity
+ amount to the PK script returned in the open channel message in a previous
+ step.
+ */
+ bytes funded_psbt = 1;
+
+ // The pending channel ID of the channel to get the PSBT for.
+ bytes pending_chan_id = 2;
+
+ /*
+ Can only be used if the no_publish flag was set to true in the OpenChannel
+ call meaning that the caller is solely responsible for publishing the final
+ funding transaction. If skip_finalize is set to true then lnd will not wait
+ for a FundingPsbtFinalize state step and instead assumes that a transaction
+ with the same TXID as the passed in PSBT will eventually confirm.
+ IT IS ABSOLUTELY IMPERATIVE that the TXID of the transaction that is
+ eventually published does have the _same TXID_ as the verified PSBT. That
+ means no inputs or outputs can change, only signatures can be added. If the
+ TXID changes between this call and the publish step then the channel will
+ never be created and the funds will be in limbo.
+ */
+ bool skip_finalize = 3;
+}
+
+message FundingPsbtFinalize {
+ /*
+ The funded PSBT that contains all witness data to send the exact channel
+ capacity amount to the PK script returned in the open channel message in a
+ previous step. Cannot be set at the same time as final_raw_tx.
+ */
+ bytes signed_psbt = 1;
+
+ // The pending channel ID of the channel to get the PSBT for.
+ bytes pending_chan_id = 2;
+
+ /*
+ As an alternative to the signed PSBT with all witness data, the final raw
+ wire format transaction can also be specified directly. Cannot be set at the
+ same time as signed_psbt.
+ */
+ bytes final_raw_tx = 3;
+}
+
+message FundingTransitionMsg {
+ oneof trigger {
+ /*
+ The funding shim to register. This should be used before any
+ channel funding has began by the remote party, as it is intended as a
+ preparatory step for the full channel funding.
+ */
+ FundingShim shim_register = 1;
+
+ // Used to cancel an existing registered funding shim.
+ FundingShimCancel shim_cancel = 2;
+
+ /*
+ Used to continue a funding flow that was initiated to be executed
+ through a PSBT. This step verifies that the PSBT contains the correct
+ outputs to fund the channel.
+ */
+ FundingPsbtVerify psbt_verify = 3;
+
+ /*
+ Used to continue a funding flow that was initiated to be executed
+ through a PSBT. This step finalizes the funded and signed PSBT, finishes
+ negotiation with the peer and finally publishes the resulting funding
+ transaction.
+ */
+ FundingPsbtFinalize psbt_finalize = 4;
+ }
+}
+
+message FundingStateStepResp {
+}
+
+message PendingHTLC {
+ // The direction within the channel that the htlc was sent
+ bool incoming = 1;
+
+ // The total value of the htlc
+ int64 amount = 2;
+
+ // The final output to be swept back to the user's wallet
+ string outpoint = 3;
+
+ // The next block height at which we can spend the current stage
+ uint32 maturity_height = 4;
+
+ /*
+ The number of blocks remaining until the current stage can be swept.
+ Negative values indicate how many blocks have passed since becoming
+ mature.
+ */
+ int32 blocks_til_maturity = 5;
+
+ // Indicates whether the htlc is in its first or second stage of recovery
+ uint32 stage = 6;
+}
+
+message PendingChannelsRequest {
+}
+message PendingChannelsResponse {
+ message PendingChannel {
+ string remote_node_pub = 1;
+ string channel_point = 2;
+
+ int64 capacity = 3;
+
+ int64 local_balance = 4;
+ int64 remote_balance = 5;
+
+ // The minimum satoshis this node is required to reserve in its
+ // balance.
+ int64 local_chan_reserve_sat = 6;
+
+ /*
+ The minimum satoshis the other node is required to reserve in its
+ balance.
+ */
+ int64 remote_chan_reserve_sat = 7;
+
+ // The party that initiated opening the channel.
+ Initiator initiator = 8;
+
+ // The commitment type used by this channel.
+ CommitmentType commitment_type = 9;
+
+ // Total number of forwarding packages created in this channel.
+ int64 num_forwarding_packages = 10;
+
+ // A set of flags showing the current state of the channel.
+ string chan_status_flags = 11;
+
+ // Whether this channel is advertised to the network or not.
+ bool private = 12;
+ }
+
+ message PendingOpenChannel {
+ // The pending channel
+ PendingChannel channel = 1;
+
+ /*
+ The amount calculated to be paid in fees for the current set of
+ commitment transactions. The fee amount is persisted with the channel
+ in order to allow the fee amount to be removed and recalculated with
+ each channel state update, including updates that happen after a system
+ restart.
+ */
+ int64 commit_fee = 4;
+
+ // The weight of the commitment transaction
+ int64 commit_weight = 5;
+
+ /*
+ The required number of satoshis per kilo-weight that the requester will
+ pay at all times, for both the funding transaction and commitment
+ transaction. This value can later be updated once the channel is open.
+ */
+ int64 fee_per_kw = 6;
+
+ // Previously used for confirmation_height. Do not reuse.
+ reserved 2;
+ }
+
+ message WaitingCloseChannel {
+ // The pending channel waiting for closing tx to confirm
+ PendingChannel channel = 1;
+
+ // The balance in satoshis encumbered in this channel
+ int64 limbo_balance = 2;
+
+ /*
+ A list of valid commitment transactions. Any of these can confirm at
+ this point.
+ */
+ Commitments commitments = 3;
+
+ // The transaction id of the closing transaction
+ string closing_txid = 4;
+ }
+
+ message Commitments {
+ // Hash of the local version of the commitment tx.
+ string local_txid = 1;
+
+ // Hash of the remote version of the commitment tx.
+ string remote_txid = 2;
+
+ // Hash of the remote pending version of the commitment tx.
+ string remote_pending_txid = 3;
+
+ /*
+ The amount in satoshis calculated to be paid in fees for the local
+ commitment.
+ */
+ uint64 local_commit_fee_sat = 4;
+
+ /*
+ The amount in satoshis calculated to be paid in fees for the remote
+ commitment.
+ */
+ uint64 remote_commit_fee_sat = 5;
+
+ /*
+ The amount in satoshis calculated to be paid in fees for the remote
+ pending commitment.
+ */
+ uint64 remote_pending_commit_fee_sat = 6;
+ }
+
+ message ClosedChannel {
+ // The pending channel to be closed
+ PendingChannel channel = 1;
+
+ // The transaction id of the closing transaction
+ string closing_txid = 2;
+ }
+
+ message ForceClosedChannel {
+ // The pending channel to be force closed
+ PendingChannel channel = 1;
+
+ // The transaction id of the closing transaction
+ string closing_txid = 2;
+
+ // The balance in satoshis encumbered in this pending channel
+ int64 limbo_balance = 3;
+
+ // The height at which funds can be swept into the wallet
+ uint32 maturity_height = 4;
+
+ /*
+ Remaining # of blocks until the commitment output can be swept.
+ Negative values indicate how many blocks have passed since becoming
+ mature.
+ */
+ int32 blocks_til_maturity = 5;
+
+ // The total value of funds successfully recovered from this channel
+ int64 recovered_balance = 6;
+
+ repeated PendingHTLC pending_htlcs = 8;
+
+ /*
+ There are three resolution states for the anchor:
+ limbo, lost and recovered. Derive the current state
+ from the limbo and recovered balances.
+ */
+ enum AnchorState {
+ // The recovered_balance is zero and limbo_balance is non-zero.
+ LIMBO = 0;
+ // The recovered_balance is non-zero.
+ RECOVERED = 1;
+ // A state that is neither LIMBO nor RECOVERED.
+ LOST = 2;
+ }
+
+ AnchorState anchor = 9;
+ }
+
+ // The balance in satoshis encumbered in pending channels
+ int64 total_limbo_balance = 1;
+
+ // Channels pending opening
+ repeated PendingOpenChannel pending_open_channels = 2;
+
+ /*
+ Deprecated: Channels pending closing previously contained cooperatively
+ closed channels with a single confirmation. These channels are now
+ considered closed from the time we see them on chain.
+ */
+ repeated ClosedChannel pending_closing_channels = 3 [deprecated = true];
+
+ // Channels pending force closing
+ repeated ForceClosedChannel pending_force_closing_channels = 4;
+
+ // Channels waiting for closing tx to confirm
+ repeated WaitingCloseChannel waiting_close_channels = 5;
+}
+
+message ChannelEventSubscription {
+}
+
+message ChannelEventUpdate {
+ oneof channel {
+ Channel open_channel = 1;
+ ChannelCloseSummary closed_channel = 2;
+ ChannelPoint active_channel = 3;
+ ChannelPoint inactive_channel = 4;
+ PendingUpdate pending_open_channel = 6;
+ ChannelPoint fully_resolved_channel = 7;
+ }
+
+ enum UpdateType {
+ OPEN_CHANNEL = 0;
+ CLOSED_CHANNEL = 1;
+ ACTIVE_CHANNEL = 2;
+ INACTIVE_CHANNEL = 3;
+ PENDING_OPEN_CHANNEL = 4;
+ FULLY_RESOLVED_CHANNEL = 5;
+ }
+
+ UpdateType type = 5;
+}
+
+message WalletAccountBalance {
+ // The confirmed balance of the account (with >= 1 confirmations).
+ int64 confirmed_balance = 1;
+
+ // The unconfirmed balance of the account (with 0 confirmations).
+ int64 unconfirmed_balance = 2;
+}
+
+message WalletBalanceRequest {
+}
+
+message WalletBalanceResponse {
+ // The balance of the wallet
+ int64 total_balance = 1;
+
+ // The confirmed balance of a wallet(with >= 1 confirmations)
+ int64 confirmed_balance = 2;
+
+ // The unconfirmed balance of a wallet(with 0 confirmations)
+ int64 unconfirmed_balance = 3;
+
+ // The total amount of wallet UTXOs held in outputs that are locked for
+ // other usage.
+ int64 locked_balance = 5;
+
+ // The amount of reserve required.
+ int64 reserved_balance_anchor_chan = 6;
+
+ // A mapping of each wallet account's name to its balance.
+ map account_balance = 4;
+}
+
+message Amount {
+ // Value denominated in satoshis.
+ uint64 sat = 1;
+
+ // Value denominated in milli-satoshis.
+ uint64 msat = 2;
+}
+
+message ChannelBalanceRequest {
+}
+message ChannelBalanceResponse {
+ // Deprecated. Sum of channels balances denominated in satoshis
+ int64 balance = 1 [deprecated = true];
+
+ // Deprecated. Sum of channels pending balances denominated in satoshis
+ int64 pending_open_balance = 2 [deprecated = true];
+
+ // Sum of channels local balances.
+ Amount local_balance = 3;
+
+ // Sum of channels remote balances.
+ Amount remote_balance = 4;
+
+ // Sum of channels local unsettled balances.
+ Amount unsettled_local_balance = 5;
+
+ // Sum of channels remote unsettled balances.
+ Amount unsettled_remote_balance = 6;
+
+ // Sum of channels pending local balances.
+ Amount pending_open_local_balance = 7;
+
+ // Sum of channels pending remote balances.
+ Amount pending_open_remote_balance = 8;
+}
+
+message QueryRoutesRequest {
+ // The 33-byte hex-encoded public key for the payment destination
+ string pub_key = 1;
+
+ /*
+ The amount to send expressed in satoshis.
+
+ The fields amt and amt_msat are mutually exclusive.
+ */
+ int64 amt = 2;
+
+ /*
+ The amount to send expressed in millisatoshis.
+
+ The fields amt and amt_msat are mutually exclusive.
+ */
+ int64 amt_msat = 12;
+
+ reserved 3;
+
+ /*
+ An optional CLTV delta from the current height that should be used for the
+ timelock of the final hop. Note that unlike SendPayment, QueryRoutes does
+ not add any additional block padding on top of final_ctlv_delta. This
+ padding of a few blocks needs to be added manually or otherwise failures may
+ happen when a block comes in while the payment is in flight.
+ */
+ int32 final_cltv_delta = 4;
+
+ /*
+ The maximum number of satoshis that will be paid as a fee of the payment.
+ This value can be represented either as a percentage of the amount being
+ sent, or as a fixed amount of the maximum fee the user is willing the pay to
+ send the payment. If not specified, lnd will use a default value of 100%
+ fees for small amounts (<=1k sat) or 5% fees for larger amounts.
+ */
+ FeeLimit fee_limit = 5;
+
+ /*
+ A list of nodes to ignore during path finding. When using REST, these fields
+ must be encoded as base64.
+ */
+ repeated bytes ignored_nodes = 6;
+
+ /*
+ Deprecated. A list of edges to ignore during path finding.
+ */
+ repeated EdgeLocator ignored_edges = 7 [deprecated = true];
+
+ /*
+ The source node where the request route should originated from. If empty,
+ self is assumed.
+ */
+ string source_pub_key = 8;
+
+ /*
+ If set to true, edge probabilities from mission control will be used to get
+ the optimal route.
+ */
+ bool use_mission_control = 9;
+
+ /*
+ A list of directed node pairs that will be ignored during path finding.
+ */
+ repeated NodePair ignored_pairs = 10;
+
+ /*
+ An optional maximum total time lock for the route. If the source is empty or
+ ourselves, this should not exceed lnd's `--max-cltv-expiry` setting. If
+ zero, then the value of `--max-cltv-expiry` is used as the limit.
+ */
+ uint32 cltv_limit = 11;
+
+ /*
+ An optional field that can be used to pass an arbitrary set of TLV records
+ to a peer which understands the new records. This can be used to pass
+ application specific data during the payment attempt. If the destination
+ does not support the specified records, an error will be returned.
+ Record types are required to be in the custom range >= 65536. When using
+ REST, the values must be encoded as base64.
+ */
+ map dest_custom_records = 13;
+
+ /*
+ The channel id of the channel that must be taken to the first hop. If zero,
+ any channel may be used.
+ */
+ uint64 outgoing_chan_id = 14 [jstype = JS_STRING];
+
+ /*
+ The pubkey of the last hop of the route. If empty, any hop may be used.
+ */
+ bytes last_hop_pubkey = 15;
+
+ /*
+ Optional route hints to reach the destination through private channels.
+ */
+ repeated lnrpc.RouteHint route_hints = 16;
+
+ /*
+ Features assumed to be supported by the final node. All transitive feature
+ dependencies must also be set properly. For a given feature bit pair, either
+ optional or remote may be set, but not both. If this field is nil or empty,
+ the router will try to load destination features from the graph as a
+ fallback.
+ */
+ repeated lnrpc.FeatureBit dest_features = 17;
+
+ /*
+ The time preference for this payment. Set to -1 to optimize for fees
+ only, to 1 to optimize for reliability only or a value inbetween for a mix.
+ */
+ double time_pref = 18;
+}
+
+message NodePair {
+ /*
+ The sending node of the pair. When using REST, this field must be encoded as
+ base64.
+ */
+ bytes from = 1;
+
+ /*
+ The receiving node of the pair. When using REST, this field must be encoded
+ as base64.
+ */
+ bytes to = 2;
+}
+
+message EdgeLocator {
+ // The short channel id of this edge.
+ uint64 channel_id = 1 [jstype = JS_STRING];
+
+ /*
+ The direction of this edge. If direction_reverse is false, the direction
+ of this edge is from the channel endpoint with the lexicographically smaller
+ pub key to the endpoint with the larger pub key. If direction_reverse is
+ is true, the edge goes the other way.
+ */
+ bool direction_reverse = 2;
+}
+
+message QueryRoutesResponse {
+ /*
+ The route that results from the path finding operation. This is still a
+ repeated field to retain backwards compatibility.
+ */
+ repeated Route routes = 1;
+
+ /*
+ The success probability of the returned route based on the current mission
+ control state. [EXPERIMENTAL]
+ */
+ double success_prob = 2;
+}
+
+message Hop {
+ /*
+ The unique channel ID for the channel. The first 3 bytes are the block
+ height, the next 3 the index within the block, and the last 2 bytes are the
+ output index for the channel.
+ */
+ uint64 chan_id = 1 [jstype = JS_STRING];
+ int64 chan_capacity = 2 [deprecated = true];
+ int64 amt_to_forward = 3 [deprecated = true];
+ int64 fee = 4 [deprecated = true];
+ uint32 expiry = 5;
+ int64 amt_to_forward_msat = 6;
+ int64 fee_msat = 7;
+
+ /*
+ An optional public key of the hop. If the public key is given, the payment
+ can be executed without relying on a copy of the channel graph.
+ */
+ string pub_key = 8;
+
+ /*
+ If set to true, then this hop will be encoded using the new variable length
+ TLV format. Note that if any custom tlv_records below are specified, then
+ this field MUST be set to true for them to be encoded properly.
+ */
+ bool tlv_payload = 9 [deprecated = true];
+
+ /*
+ An optional TLV record that signals the use of an MPP payment. If present,
+ the receiver will enforce that the same mpp_record is included in the final
+ hop payload of all non-zero payments in the HTLC set. If empty, a regular
+ single-shot payment is or was attempted.
+ */
+ MPPRecord mpp_record = 10;
+
+ /*
+ An optional TLV record that signals the use of an AMP payment. If present,
+ the receiver will treat all received payments including the same
+ (payment_addr, set_id) pair as being part of one logical payment. The
+ payment will be settled by XORing the root_share's together and deriving the
+ child hashes and preimages according to BOLT XX. Must be used in conjunction
+ with mpp_record.
+ */
+ AMPRecord amp_record = 12;
+
+ /*
+ An optional set of key-value TLV records. This is useful within the context
+ of the SendToRoute call as it allows callers to specify arbitrary K-V pairs
+ to drop off at each hop within the onion.
+ */
+ map custom_records = 11;
+
+ // The payment metadata to send along with the payment to the payee.
+ bytes metadata = 13;
+}
+
+message MPPRecord {
+ /*
+ A unique, random identifier used to authenticate the sender as the intended
+ payer of a multi-path payment. The payment_addr must be the same for all
+ subpayments, and match the payment_addr provided in the receiver's invoice.
+ The same payment_addr must be used on all subpayments.
+ */
+ bytes payment_addr = 11;
+
+ /*
+ The total amount in milli-satoshis being sent as part of a larger multi-path
+ payment. The caller is responsible for ensuring subpayments to the same node
+ and payment_hash sum exactly to total_amt_msat. The same
+ total_amt_msat must be used on all subpayments.
+ */
+ int64 total_amt_msat = 10;
+}
+
+message AMPRecord {
+ bytes root_share = 1;
+
+ bytes set_id = 2;
+
+ uint32 child_index = 3;
+}
+
+/*
+A path through the channel graph which runs over one or more channels in
+succession. This struct carries all the information required to craft the
+Sphinx onion packet, and send the payment along the first hop in the path. A
+route is only selected as valid if all the channels have sufficient capacity to
+carry the initial payment amount after fees are accounted for.
+*/
+message Route {
+ /*
+ The cumulative (final) time lock across the entire route. This is the CLTV
+ value that should be extended to the first hop in the route. All other hops
+ will decrement the time-lock as advertised, leaving enough time for all
+ hops to wait for or present the payment preimage to complete the payment.
+ */
+ uint32 total_time_lock = 1;
+
+ /*
+ The sum of the fees paid at each hop within the final route. In the case
+ of a one-hop payment, this value will be zero as we don't need to pay a fee
+ to ourselves.
+ */
+ int64 total_fees = 2 [deprecated = true];
+
+ /*
+ The total amount of funds required to complete a payment over this route.
+ This value includes the cumulative fees at each hop. As a result, the HTLC
+ extended to the first-hop in the route will need to have at least this many
+ satoshis, otherwise the route will fail at an intermediate node due to an
+ insufficient amount of fees.
+ */
+ int64 total_amt = 3 [deprecated = true];
+
+ /*
+ Contains details concerning the specific forwarding details at each hop.
+ */
+ repeated Hop hops = 4;
+
+ /*
+ The total fees in millisatoshis.
+ */
+ int64 total_fees_msat = 5;
+
+ /*
+ The total amount in millisatoshis.
+ */
+ int64 total_amt_msat = 6;
+}
+
+message NodeInfoRequest {
+ // The 33-byte hex-encoded compressed public of the target node
+ string pub_key = 1;
+
+ // If true, will include all known channels associated with the node.
+ bool include_channels = 2;
+}
+
+message NodeInfo {
+ /*
+ An individual vertex/node within the channel graph. A node is
+ connected to other nodes by one or more channel edges emanating from it. As
+ the graph is directed, a node will also have an incoming edge attached to
+ it for each outgoing edge.
+ */
+ LightningNode node = 1;
+
+ // The total number of channels for the node.
+ uint32 num_channels = 2;
+
+ // The sum of all channels capacity for the node, denominated in satoshis.
+ int64 total_capacity = 3;
+
+ // A list of all public channels for the node.
+ repeated ChannelEdge channels = 4;
+}
+
+/*
+An individual vertex/node within the channel graph. A node is
+connected to other nodes by one or more channel edges emanating from it. As the
+graph is directed, a node will also have an incoming edge attached to it for
+each outgoing edge.
+*/
+message LightningNode {
+ uint32 last_update = 1;
+ string pub_key = 2;
+ string alias = 3;
+ repeated NodeAddress addresses = 4;
+ string color = 5;
+ map features = 6;
+
+ // Custom node announcement tlv records.
+ map custom_records = 7;
+}
+
+message NodeAddress {
+ string network = 1;
+ string addr = 2;
+}
+
+message RoutingPolicy {
+ uint32 time_lock_delta = 1;
+ int64 min_htlc = 2;
+ int64 fee_base_msat = 3;
+ int64 fee_rate_milli_msat = 4;
+ bool disabled = 5;
+ uint64 max_htlc_msat = 6;
+ uint32 last_update = 7;
+
+ // Custom channel update tlv records.
+ map custom_records = 8;
+}
+
+/*
+A fully authenticated channel along with all its unique attributes.
+Once an authenticated channel announcement has been processed on the network,
+then an instance of ChannelEdgeInfo encapsulating the channels attributes is
+stored. The other portions relevant to routing policy of a channel are stored
+within a ChannelEdgePolicy for each direction of the channel.
+*/
+message ChannelEdge {
+ /*
+ The unique channel ID for the channel. The first 3 bytes are the block
+ height, the next 3 the index within the block, and the last 2 bytes are the
+ output index for the channel.
+ */
+ uint64 channel_id = 1 [jstype = JS_STRING];
+ string chan_point = 2;
+
+ uint32 last_update = 3 [deprecated = true];
+
+ string node1_pub = 4;
+ string node2_pub = 5;
+
+ int64 capacity = 6;
+
+ RoutingPolicy node1_policy = 7;
+ RoutingPolicy node2_policy = 8;
+
+ // Custom channel announcement tlv records.
+ map custom_records = 9;
+}
+
+message ChannelGraphRequest {
+ /*
+ Whether unannounced channels are included in the response or not. If set,
+ unannounced channels are included. Unannounced channels are both private
+ channels, and public channels that are not yet announced to the network.
+ */
+ bool include_unannounced = 1;
+}
+
+// Returns a new instance of the directed channel graph.
+message ChannelGraph {
+ // The list of `LightningNode`s in this channel graph
+ repeated LightningNode nodes = 1;
+
+ // The list of `ChannelEdge`s in this channel graph
+ repeated ChannelEdge edges = 2;
+}
+
+enum NodeMetricType {
+ UNKNOWN = 0;
+ BETWEENNESS_CENTRALITY = 1;
+}
+
+message NodeMetricsRequest {
+ // The requested node metrics.
+ repeated NodeMetricType types = 1;
+}
+
+message NodeMetricsResponse {
+ /*
+ Betweenness centrality is the sum of the ratio of shortest paths that pass
+ through the node for each pair of nodes in the graph (not counting paths
+ starting or ending at this node).
+ Map of node pubkey to betweenness centrality of the node. Normalized
+ values are in the [0,1] closed interval.
+ */
+ map betweenness_centrality = 1;
+}
+
+message FloatMetric {
+ // Arbitrary float value.
+ double value = 1;
+
+ // The value normalized to [0,1] or [-1,1].
+ double normalized_value = 2;
+}
+
+message ChanInfoRequest {
+ /*
+ The unique channel ID for the channel. The first 3 bytes are the block
+ height, the next 3 the index within the block, and the last 2 bytes are the
+ output index for the channel.
+ */
+ uint64 chan_id = 1 [jstype = JS_STRING];
+}
+
+message NetworkInfoRequest {
+}
+message NetworkInfo {
+ uint32 graph_diameter = 1;
+ double avg_out_degree = 2;
+ uint32 max_out_degree = 3;
+
+ uint32 num_nodes = 4;
+ uint32 num_channels = 5;
+
+ int64 total_network_capacity = 6;
+
+ double avg_channel_size = 7;
+ int64 min_channel_size = 8;
+ int64 max_channel_size = 9;
+ int64 median_channel_size_sat = 10;
+
+ // The number of edges marked as zombies.
+ uint64 num_zombie_chans = 11;
+
+ // TODO(roasbeef): fee rate info, expiry
+ // * also additional RPC for tracking fee info once in
+}
+
+message StopRequest {
+}
+message StopResponse {
+}
+
+message GraphTopologySubscription {
+}
+message GraphTopologyUpdate {
+ repeated NodeUpdate node_updates = 1;
+ repeated ChannelEdgeUpdate channel_updates = 2;
+ repeated ClosedChannelUpdate closed_chans = 3;
+}
+message NodeUpdate {
+ /*
+ Deprecated, use node_addresses.
+ */
+ repeated string addresses = 1 [deprecated = true];
+
+ string identity_key = 2;
+
+ /*
+ Deprecated, use features.
+ */
+ bytes global_features = 3 [deprecated = true];
+
+ string alias = 4;
+ string color = 5;
+ repeated NodeAddress node_addresses = 7;
+
+ /*
+ Features that the node has advertised in the init message, node
+ announcements and invoices.
+ */
+ map features = 6;
+}
+message ChannelEdgeUpdate {
+ /*
+ The unique channel ID for the channel. The first 3 bytes are the block
+ height, the next 3 the index within the block, and the last 2 bytes are the
+ output index for the channel.
+ */
+ uint64 chan_id = 1 [jstype = JS_STRING];
+
+ ChannelPoint chan_point = 2;
+
+ int64 capacity = 3;
+
+ RoutingPolicy routing_policy = 4;
+
+ string advertising_node = 5;
+ string connecting_node = 6;
+}
+message ClosedChannelUpdate {
+ /*
+ The unique channel ID for the channel. The first 3 bytes are the block
+ height, the next 3 the index within the block, and the last 2 bytes are the
+ output index for the channel.
+ */
+ uint64 chan_id = 1 [jstype = JS_STRING];
+ int64 capacity = 2;
+ uint32 closed_height = 3;
+ ChannelPoint chan_point = 4;
+}
+
+message HopHint {
+ // The public key of the node at the start of the channel.
+ string node_id = 1;
+
+ // The unique identifier of the channel.
+ uint64 chan_id = 2 [jstype = JS_STRING];
+
+ // The base fee of the channel denominated in millisatoshis.
+ uint32 fee_base_msat = 3;
+
+ /*
+ The fee rate of the channel for sending one satoshi across it denominated in
+ millionths of a satoshi.
+ */
+ uint32 fee_proportional_millionths = 4;
+
+ // The time-lock delta of the channel.
+ uint32 cltv_expiry_delta = 5;
+}
+
+message SetID {
+ bytes set_id = 1;
+}
+
+message RouteHint {
+ /*
+ A list of hop hints that when chained together can assist in reaching a
+ specific destination.
+ */
+ repeated HopHint hop_hints = 1;
+}
+
+message AMPInvoiceState {
+ // The state the HTLCs associated with this setID are in.
+ InvoiceHTLCState state = 1;
+
+ // The settle index of this HTLC set, if the invoice state is settled.
+ uint64 settle_index = 2;
+
+ // The time this HTLC set was settled expressed in unix epoch.
+ int64 settle_time = 3;
+
+ // The total amount paid for the sub-invoice expressed in milli satoshis.
+ int64 amt_paid_msat = 5;
+}
+
+message Invoice {
+ /*
+ An optional memo to attach along with the invoice. Used for record keeping
+ purposes for the invoice's creator, and will also be set in the description
+ field of the encoded payment request if the description_hash field is not
+ being used.
+ */
+ string memo = 1;
+
+ reserved 2;
+
+ /*
+ The hex-encoded preimage (32 byte) which will allow settling an incoming
+ HTLC payable to this preimage. When using REST, this field must be encoded
+ as base64.
+ */
+ bytes r_preimage = 3;
+
+ /*
+ The hash of the preimage. When using REST, this field must be encoded as
+ base64.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ bytes r_hash = 4;
+
+ /*
+ The value of this invoice in satoshis
+
+ The fields value and value_msat are mutually exclusive.
+ */
+ int64 value = 5;
+
+ /*
+ The value of this invoice in millisatoshis
+
+ The fields value and value_msat are mutually exclusive.
+ */
+ int64 value_msat = 23;
+
+ /*
+ Whether this invoice has been fulfilled.
+
+ The field is deprecated. Use the state field instead (compare to SETTLED).
+ */
+ bool settled = 6 [deprecated = true];
+
+ /*
+ When this invoice was created.
+ Measured in seconds since the unix epoch.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ int64 creation_date = 7;
+
+ /*
+ When this invoice was settled.
+ Measured in seconds since the unix epoch.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ int64 settle_date = 8;
+
+ /*
+ A bare-bones invoice for a payment within the Lightning Network. With the
+ details of the invoice, the sender has all the data necessary to send a
+ payment to the recipient.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ string payment_request = 9;
+
+ /*
+ Hash (SHA-256) of a description of the payment. Used if the description of
+ payment (memo) is too long to naturally fit within the description field
+ of an encoded payment request. When using REST, this field must be encoded
+ as base64.
+ */
+ bytes description_hash = 10;
+
+ // Payment request expiry time in seconds. Default is 86400 (24 hours).
+ int64 expiry = 11;
+
+ // Fallback on-chain address.
+ string fallback_addr = 12;
+
+ // Delta to use for the time-lock of the CLTV extended to the final hop.
+ uint64 cltv_expiry = 13;
+
+ /*
+ Route hints that can each be individually used to assist in reaching the
+ invoice's destination.
+ */
+ repeated RouteHint route_hints = 14;
+
+ // Whether this invoice should include routing hints for private channels.
+ // Note: When enabled, if value and value_msat are zero, a large number of
+ // hints with these channels can be included, which might not be desirable.
+ bool private = 15;
+
+ /*
+ The "add" index of this invoice. Each newly created invoice will increment
+ this index making it monotonically increasing. Callers to the
+ SubscribeInvoices call can use this to instantly get notified of all added
+ invoices with an add_index greater than this one.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ uint64 add_index = 16;
+
+ /*
+ The "settle" index of this invoice. Each newly settled invoice will
+ increment this index making it monotonically increasing. Callers to the
+ SubscribeInvoices call can use this to instantly get notified of all
+ settled invoices with an settle_index greater than this one.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ uint64 settle_index = 17;
+
+ // Deprecated, use amt_paid_sat or amt_paid_msat.
+ int64 amt_paid = 18 [deprecated = true];
+
+ /*
+ The amount that was accepted for this invoice, in satoshis. This will ONLY
+ be set if this invoice has been settled. We provide this field as if the
+ invoice was created with a zero value, then we need to record what amount
+ was ultimately accepted. Additionally, it's possible that the sender paid
+ MORE that was specified in the original invoice. So we'll record that here
+ as well.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ int64 amt_paid_sat = 19;
+
+ /*
+ The amount that was accepted for this invoice, in millisatoshis. This will
+ ONLY be set if this invoice has been settled. We provide this field as if
+ the invoice was created with a zero value, then we need to record what
+ amount was ultimately accepted. Additionally, it's possible that the sender
+ paid MORE that was specified in the original invoice. So we'll record that
+ here as well.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ int64 amt_paid_msat = 20;
+
+ enum InvoiceState {
+ OPEN = 0;
+ SETTLED = 1;
+ CANCELED = 2;
+ ACCEPTED = 3;
+ }
+
+ /*
+ The state the invoice is in.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ InvoiceState state = 21;
+
+ /*
+ List of HTLCs paying to this invoice [EXPERIMENTAL].
+ Note: Output only, don't specify for creating an invoice.
+ */
+ repeated InvoiceHTLC htlcs = 22;
+
+ /*
+ List of features advertised on the invoice.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ map features = 24;
+
+ /*
+ Indicates if this invoice was a spontaneous payment that arrived via keysend
+ [EXPERIMENTAL].
+ Note: Output only, don't specify for creating an invoice.
+ */
+ bool is_keysend = 25;
+
+ /*
+ The payment address of this invoice. This value will be used in MPP
+ payments, and also for newer invoices that always require the MPP payload
+ for added end-to-end security.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ bytes payment_addr = 26;
+
+ /*
+ Signals whether or not this is an AMP invoice.
+ */
+ bool is_amp = 27;
+
+ /*
+ [EXPERIMENTAL]:
+
+ Maps a 32-byte hex-encoded set ID to the sub-invoice AMP state for the
+ given set ID. This field is always populated for AMP invoices, and can be
+ used along side LookupInvoice to obtain the HTLC information related to a
+ given sub-invoice.
+ Note: Output only, don't specify for creating an invoice.
+ */
+ map amp_invoice_state = 28;
+}
+
+enum InvoiceHTLCState {
+ ACCEPTED = 0;
+ SETTLED = 1;
+ CANCELED = 2;
+}
+
+// Details of an HTLC that paid to an invoice
+message InvoiceHTLC {
+ // Short channel id over which the htlc was received.
+ uint64 chan_id = 1 [jstype = JS_STRING];
+
+ // Index identifying the htlc on the channel.
+ uint64 htlc_index = 2;
+
+ // The amount of the htlc in msat.
+ uint64 amt_msat = 3;
+
+ // Block height at which this htlc was accepted.
+ int32 accept_height = 4;
+
+ // Time at which this htlc was accepted.
+ int64 accept_time = 5;
+
+ // Time at which this htlc was settled or canceled.
+ int64 resolve_time = 6;
+
+ // Block height at which this htlc expires.
+ int32 expiry_height = 7;
+
+ // Current state the htlc is in.
+ InvoiceHTLCState state = 8;
+
+ // Custom tlv records.
+ map custom_records = 9;
+
+ // The total amount of the mpp payment in msat.
+ uint64 mpp_total_amt_msat = 10;
+
+ // Details relevant to AMP HTLCs, only populated if this is an AMP HTLC.
+ AMP amp = 11;
+}
+
+// Details specific to AMP HTLCs.
+message AMP {
+ // An n-of-n secret share of the root seed from which child payment hashes
+ // and preimages are derived.
+ bytes root_share = 1;
+
+ // An identifier for the HTLC set that this HTLC belongs to.
+ bytes set_id = 2;
+
+ // A nonce used to randomize the child preimage and child hash from a given
+ // root_share.
+ uint32 child_index = 3;
+
+ // The payment hash of the AMP HTLC.
+ bytes hash = 4;
+
+ // The preimage used to settle this AMP htlc. This field will only be
+ // populated if the invoice is in InvoiceState_ACCEPTED or
+ // InvoiceState_SETTLED.
+ bytes preimage = 5;
+}
+
+message AddInvoiceResponse {
+ bytes r_hash = 1;
+
+ /*
+ A bare-bones invoice for a payment within the Lightning Network. With the
+ details of the invoice, the sender has all the data necessary to send a
+ payment to the recipient.
+ */
+ string payment_request = 2;
+
+ /*
+ The "add" index of this invoice. Each newly created invoice will increment
+ this index making it monotonically increasing. Callers to the
+ SubscribeInvoices call can use this to instantly get notified of all added
+ invoices with an add_index greater than this one.
+ */
+ uint64 add_index = 16;
+
+ /*
+ The payment address of the generated invoice. This value should be used
+ in all payments for this invoice as we require it for end to end
+ security.
+ */
+ bytes payment_addr = 17;
+}
+message PaymentHash {
+ /*
+ The hex-encoded payment hash of the invoice to be looked up. The passed
+ payment hash must be exactly 32 bytes, otherwise an error is returned.
+ Deprecated now that the REST gateway supports base64 encoding of bytes
+ fields.
+ */
+ string r_hash_str = 1 [deprecated = true];
+
+ /*
+ The payment hash of the invoice to be looked up. When using REST, this field
+ must be encoded as base64.
+ */
+ bytes r_hash = 2;
+}
+
+message ListInvoiceRequest {
+ /*
+ If set, only invoices that are not settled and not canceled will be returned
+ in the response.
+ */
+ bool pending_only = 1;
+
+ /*
+ The index of an invoice that will be used as either the start or end of a
+ query to determine which invoices should be returned in the response.
+ */
+ uint64 index_offset = 4;
+
+ // The max number of invoices to return in the response to this query.
+ uint64 num_max_invoices = 5;
+
+ /*
+ If set, the invoices returned will result from seeking backwards from the
+ specified index offset. This can be used to paginate backwards.
+ */
+ bool reversed = 6;
+
+ // If set, returns all invoices with a creation date greater than or equal
+ // to it. Measured in seconds since the unix epoch.
+ uint64 creation_date_start = 7;
+
+ // If set, returns all invoices with a creation date less than or equal to
+ // it. Measured in seconds since the unix epoch.
+ uint64 creation_date_end = 8;
+}
+
+message ListInvoiceResponse {
+ /*
+ A list of invoices from the time slice of the time series specified in the
+ request.
+ */
+ repeated Invoice invoices = 1;
+
+ /*
+ The index of the last item in the set of returned invoices. This can be used
+ to seek further, pagination style.
+ */
+ uint64 last_index_offset = 2;
+
+ /*
+ The index of the last item in the set of returned invoices. This can be used
+ to seek backwards, pagination style.
+ */
+ uint64 first_index_offset = 3;
+}
+
+message InvoiceSubscription {
+ /*
+ If specified (non-zero), then we'll first start by sending out
+ notifications for all added indexes with an add_index greater than this
+ value. This allows callers to catch up on any events they missed while they
+ weren't connected to the streaming RPC.
+ */
+ uint64 add_index = 1;
+
+ /*
+ If specified (non-zero), then we'll first start by sending out
+ notifications for all settled indexes with an settle_index greater than
+ this value. This allows callers to catch up on any events they missed while
+ they weren't connected to the streaming RPC.
+ */
+ uint64 settle_index = 2;
+}
+
+enum PaymentFailureReason {
+ /*
+ Payment isn't failed (yet).
+ */
+ FAILURE_REASON_NONE = 0;
+
+ /*
+ There are more routes to try, but the payment timeout was exceeded.
+ */
+ FAILURE_REASON_TIMEOUT = 1;
+
+ /*
+ All possible routes were tried and failed permanently. Or were no
+ routes to the destination at all.
+ */
+ FAILURE_REASON_NO_ROUTE = 2;
+
+ /*
+ A non-recoverable error has occured.
+ */
+ FAILURE_REASON_ERROR = 3;
+
+ /*
+ Payment details incorrect (unknown hash, invalid amt or
+ invalid final cltv delta)
+ */
+ FAILURE_REASON_INCORRECT_PAYMENT_DETAILS = 4;
+
+ /*
+ Insufficient local balance.
+ */
+ FAILURE_REASON_INSUFFICIENT_BALANCE = 5;
+}
+
+message Payment {
+ // The payment hash
+ string payment_hash = 1;
+
+ // Deprecated, use value_sat or value_msat.
+ int64 value = 2 [deprecated = true];
+
+ // Deprecated, use creation_time_ns
+ int64 creation_date = 3 [deprecated = true];
+
+ reserved 4;
+
+ // Deprecated, use fee_sat or fee_msat.
+ int64 fee = 5 [deprecated = true];
+
+ // The payment preimage
+ string payment_preimage = 6;
+
+ // The value of the payment in satoshis
+ int64 value_sat = 7;
+
+ // The value of the payment in milli-satoshis
+ int64 value_msat = 8;
+
+ // The optional payment request being fulfilled.
+ string payment_request = 9;
+
+ enum PaymentStatus {
+ UNKNOWN = 0;
+ IN_FLIGHT = 1;
+ SUCCEEDED = 2;
+ FAILED = 3;
+ }
+
+ // The status of the payment.
+ PaymentStatus status = 10;
+
+ // The fee paid for this payment in satoshis
+ int64 fee_sat = 11;
+
+ // The fee paid for this payment in milli-satoshis
+ int64 fee_msat = 12;
+
+ // The time in UNIX nanoseconds at which the payment was created.
+ int64 creation_time_ns = 13;
+
+ // The HTLCs made in attempt to settle the payment.
+ repeated HTLCAttempt htlcs = 14;
+
+ /*
+ The creation index of this payment. Each payment can be uniquely identified
+ by this index, which may not strictly increment by 1 for payments made in
+ older versions of lnd.
+ */
+ uint64 payment_index = 15;
+
+ PaymentFailureReason failure_reason = 16;
+}
+
+message HTLCAttempt {
+ // The unique ID that is used for this attempt.
+ uint64 attempt_id = 7;
+
+ enum HTLCStatus {
+ IN_FLIGHT = 0;
+ SUCCEEDED = 1;
+ FAILED = 2;
+ }
+
+ // The status of the HTLC.
+ HTLCStatus status = 1;
+
+ // The route taken by this HTLC.
+ Route route = 2;
+
+ // The time in UNIX nanoseconds at which this HTLC was sent.
+ int64 attempt_time_ns = 3;
+
+ /*
+ The time in UNIX nanoseconds at which this HTLC was settled or failed.
+ This value will not be set if the HTLC is still IN_FLIGHT.
+ */
+ int64 resolve_time_ns = 4;
+
+ // Detailed htlc failure info.
+ Failure failure = 5;
+
+ // The preimage that was used to settle the HTLC.
+ bytes preimage = 6;
+}
+
+message ListPaymentsRequest {
+ /*
+ If true, then return payments that have not yet fully completed. This means
+ that pending payments, as well as failed payments will show up if this
+ field is set to true. This flag doesn't change the meaning of the indices,
+ which are tied to individual payments.
+ */
+ bool include_incomplete = 1;
+
+ /*
+ The index of a payment that will be used as either the start or end of a
+ query to determine which payments should be returned in the response. The
+ index_offset is exclusive. In the case of a zero index_offset, the query
+ will start with the oldest payment when paginating forwards, or will end
+ with the most recent payment when paginating backwards.
+ */
+ uint64 index_offset = 2;
+
+ // The maximal number of payments returned in the response to this query.
+ uint64 max_payments = 3;
+
+ /*
+ If set, the payments returned will result from seeking backwards from the
+ specified index offset. This can be used to paginate backwards. The order
+ of the returned payments is always oldest first (ascending index order).
+ */
+ bool reversed = 4;
+
+ /*
+ If set, all payments (complete and incomplete, independent of the
+ max_payments parameter) will be counted. Note that setting this to true will
+ increase the run time of the call significantly on systems that have a lot
+ of payments, as all of them have to be iterated through to be counted.
+ */
+ bool count_total_payments = 5;
+
+ // If set, returns all invoices with a creation date greater than or equal
+ // to it. Measured in seconds since the unix epoch.
+ uint64 creation_date_start = 6;
+
+ // If set, returns all invoices with a creation date less than or equal to
+ // it. Measured in seconds since the unix epoch.
+ uint64 creation_date_end = 7;
+}
+
+message ListPaymentsResponse {
+ // The list of payments
+ repeated Payment payments = 1;
+
+ /*
+ The index of the first item in the set of returned payments. This can be
+ used as the index_offset to continue seeking backwards in the next request.
+ */
+ uint64 first_index_offset = 2;
+
+ /*
+ The index of the last item in the set of returned payments. This can be used
+ as the index_offset to continue seeking forwards in the next request.
+ */
+ uint64 last_index_offset = 3;
+
+ /*
+ Will only be set if count_total_payments in the request was set. Represents
+ the total number of payments (complete and incomplete, independent of the
+ number of payments requested in the query) currently present in the payments
+ database.
+ */
+ uint64 total_num_payments = 4;
+}
+
+message DeletePaymentRequest {
+ // Payment hash to delete.
+ bytes payment_hash = 1;
+
+ /*
+ Only delete failed HTLCs from the payment, not the payment itself.
+ */
+ bool failed_htlcs_only = 2;
+}
+
+message DeleteAllPaymentsRequest {
+ // Only delete failed payments.
+ bool failed_payments_only = 1;
+
+ /*
+ Only delete failed HTLCs from payments, not the payment itself.
+ */
+ bool failed_htlcs_only = 2;
+}
+
+message DeletePaymentResponse {
+}
+
+message DeleteAllPaymentsResponse {
+}
+
+message AbandonChannelRequest {
+ ChannelPoint channel_point = 1;
+
+ bool pending_funding_shim_only = 2;
+
+ /*
+ Override the requirement for being in dev mode by setting this to true and
+ confirming the user knows what they are doing and this is a potential foot
+ gun to lose funds if used on active channels.
+ */
+ bool i_know_what_i_am_doing = 3;
+}
+
+message AbandonChannelResponse {
+}
+
+message DebugLevelRequest {
+ bool show = 1;
+ string level_spec = 2;
+}
+message DebugLevelResponse {
+ string sub_systems = 1;
+}
+
+message PayReqString {
+ // The payment request string to be decoded
+ string pay_req = 1;
+}
+message PayReq {
+ string destination = 1;
+ string payment_hash = 2;
+ int64 num_satoshis = 3;
+ int64 timestamp = 4;
+ int64 expiry = 5;
+ string description = 6;
+ string description_hash = 7;
+ string fallback_addr = 8;
+ int64 cltv_expiry = 9;
+ repeated RouteHint route_hints = 10;
+ bytes payment_addr = 11;
+ int64 num_msat = 12;
+ map features = 13;
+}
+
+enum FeatureBit {
+ DATALOSS_PROTECT_REQ = 0;
+ DATALOSS_PROTECT_OPT = 1;
+ INITIAL_ROUING_SYNC = 3;
+ UPFRONT_SHUTDOWN_SCRIPT_REQ = 4;
+ UPFRONT_SHUTDOWN_SCRIPT_OPT = 5;
+ GOSSIP_QUERIES_REQ = 6;
+ GOSSIP_QUERIES_OPT = 7;
+ TLV_ONION_REQ = 8;
+ TLV_ONION_OPT = 9;
+ EXT_GOSSIP_QUERIES_REQ = 10;
+ EXT_GOSSIP_QUERIES_OPT = 11;
+ STATIC_REMOTE_KEY_REQ = 12;
+ STATIC_REMOTE_KEY_OPT = 13;
+ PAYMENT_ADDR_REQ = 14;
+ PAYMENT_ADDR_OPT = 15;
+ MPP_REQ = 16;
+ MPP_OPT = 17;
+ WUMBO_CHANNELS_REQ = 18;
+ WUMBO_CHANNELS_OPT = 19;
+ ANCHORS_REQ = 20;
+ ANCHORS_OPT = 21;
+ ANCHORS_ZERO_FEE_HTLC_REQ = 22;
+ ANCHORS_ZERO_FEE_HTLC_OPT = 23;
+ AMP_REQ = 30;
+ AMP_OPT = 31;
+}
+
+message Feature {
+ string name = 2;
+ bool is_required = 3;
+ bool is_known = 4;
+}
+
+message FeeReportRequest {
+}
+message ChannelFeeReport {
+ // The short channel id that this fee report belongs to.
+ uint64 chan_id = 5 [jstype = JS_STRING];
+
+ // The channel that this fee report belongs to.
+ string channel_point = 1;
+
+ // The base fee charged regardless of the number of milli-satoshis sent.
+ int64 base_fee_msat = 2;
+
+ // The amount charged per milli-satoshis transferred expressed in
+ // millionths of a satoshi.
+ int64 fee_per_mil = 3;
+
+ // The effective fee rate in milli-satoshis. Computed by dividing the
+ // fee_per_mil value by 1 million.
+ double fee_rate = 4;
+}
+message FeeReportResponse {
+ // An array of channel fee reports which describes the current fee schedule
+ // for each channel.
+ repeated ChannelFeeReport channel_fees = 1;
+
+ // The total amount of fee revenue (in satoshis) the switch has collected
+ // over the past 24 hrs.
+ uint64 day_fee_sum = 2;
+
+ // The total amount of fee revenue (in satoshis) the switch has collected
+ // over the past 1 week.
+ uint64 week_fee_sum = 3;
+
+ // The total amount of fee revenue (in satoshis) the switch has collected
+ // over the past 1 month.
+ uint64 month_fee_sum = 4;
+}
+
+message PolicyUpdateRequest {
+ oneof scope {
+ // If set, then this update applies to all currently active channels.
+ bool global = 1;
+
+ // If set, this update will target a specific channel.
+ ChannelPoint chan_point = 2;
+ }
+
+ // The base fee charged regardless of the number of milli-satoshis sent.
+ int64 base_fee_msat = 3;
+
+ // The effective fee rate in milli-satoshis. The precision of this value
+ // goes up to 6 decimal places, so 1e-6.
+ double fee_rate = 4;
+
+ // The effective fee rate in micro-satoshis (parts per million).
+ uint32 fee_rate_ppm = 9;
+
+ // The required timelock delta for HTLCs forwarded over the channel.
+ uint32 time_lock_delta = 5;
+
+ // If set, the maximum HTLC size in milli-satoshis. If unset, the maximum
+ // HTLC will be unchanged.
+ uint64 max_htlc_msat = 6;
+
+ // The minimum HTLC size in milli-satoshis. Only applied if
+ // min_htlc_msat_specified is true.
+ uint64 min_htlc_msat = 7;
+
+ // If true, min_htlc_msat is applied.
+ bool min_htlc_msat_specified = 8;
+}
+enum UpdateFailure {
+ UPDATE_FAILURE_UNKNOWN = 0;
+ UPDATE_FAILURE_PENDING = 1;
+ UPDATE_FAILURE_NOT_FOUND = 2;
+ UPDATE_FAILURE_INTERNAL_ERR = 3;
+ UPDATE_FAILURE_INVALID_PARAMETER = 4;
+}
+
+message FailedUpdate {
+ // The outpoint in format txid:n
+ OutPoint outpoint = 1;
+
+ // Reason for the policy update failure.
+ UpdateFailure reason = 2;
+
+ // A string representation of the policy update error.
+ string update_error = 3;
+}
+
+message PolicyUpdateResponse {
+ // List of failed policy updates.
+ repeated FailedUpdate failed_updates = 1;
+}
+
+message ForwardingHistoryRequest {
+ // Start time is the starting point of the forwarding history request. All
+ // records beyond this point will be included, respecting the end time, and
+ // the index offset.
+ uint64 start_time = 1;
+
+ // End time is the end point of the forwarding history request. The
+ // response will carry at most 50k records between the start time and the
+ // end time. The index offset can be used to implement pagination.
+ uint64 end_time = 2;
+
+ // Index offset is the offset in the time series to start at. As each
+ // response can only contain 50k records, callers can use this to skip
+ // around within a packed time series.
+ uint32 index_offset = 3;
+
+ // The max number of events to return in the response to this query.
+ uint32 num_max_events = 4;
+
+ // Informs the server if the peer alias should be looked up for each
+ // forwarding event.
+ bool peer_alias_lookup = 5;
+}
+message ForwardingEvent {
+ // Timestamp is the time (unix epoch offset) that this circuit was
+ // completed. Deprecated by timestamp_ns.
+ uint64 timestamp = 1 [deprecated = true];
+
+ // The incoming channel ID that carried the HTLC that created the circuit.
+ uint64 chan_id_in = 2 [jstype = JS_STRING];
+
+ // The outgoing channel ID that carried the preimage that completed the
+ // circuit.
+ uint64 chan_id_out = 4 [jstype = JS_STRING];
+
+ // The total amount (in satoshis) of the incoming HTLC that created half
+ // the circuit.
+ uint64 amt_in = 5;
+
+ // The total amount (in satoshis) of the outgoing HTLC that created the
+ // second half of the circuit.
+ uint64 amt_out = 6;
+
+ // The total fee (in satoshis) that this payment circuit carried.
+ uint64 fee = 7;
+
+ // The total fee (in milli-satoshis) that this payment circuit carried.
+ uint64 fee_msat = 8;
+
+ // The total amount (in milli-satoshis) of the incoming HTLC that created
+ // half the circuit.
+ uint64 amt_in_msat = 9;
+
+ // The total amount (in milli-satoshis) of the outgoing HTLC that created
+ // the second half of the circuit.
+ uint64 amt_out_msat = 10;
+
+ // The number of nanoseconds elapsed since January 1, 1970 UTC when this
+ // circuit was completed.
+ uint64 timestamp_ns = 11;
+
+ // The peer alias of the incoming channel.
+ string peer_alias_in = 12;
+
+ // The peer alias of the outgoing channel.
+ string peer_alias_out = 13;
+
+ // TODO(roasbeef): add settlement latency?
+ // * use FPE on the chan id?
+ // * also list failures?
+}
+message ForwardingHistoryResponse {
+ // A list of forwarding events from the time slice of the time series
+ // specified in the request.
+ repeated ForwardingEvent forwarding_events = 1;
+
+ // The index of the last time in the set of returned forwarding events. Can
+ // be used to seek further, pagination style.
+ uint32 last_offset_index = 2;
+}
+
+message ExportChannelBackupRequest {
+ // The target channel point to obtain a back up for.
+ ChannelPoint chan_point = 1;
+}
+
+message ChannelBackup {
+ /*
+ Identifies the channel that this backup belongs to.
+ */
+ ChannelPoint chan_point = 1;
+
+ /*
+ Is an encrypted single-chan backup. this can be passed to
+ RestoreChannelBackups, or the WalletUnlocker Init and Unlock methods in
+ order to trigger the recovery protocol. When using REST, this field must be
+ encoded as base64.
+ */
+ bytes chan_backup = 2;
+}
+
+message MultiChanBackup {
+ /*
+ Is the set of all channels that are included in this multi-channel backup.
+ */
+ repeated ChannelPoint chan_points = 1;
+
+ /*
+ A single encrypted blob containing all the static channel backups of the
+ channel listed above. This can be stored as a single file or blob, and
+ safely be replaced with any prior/future versions. When using REST, this
+ field must be encoded as base64.
+ */
+ bytes multi_chan_backup = 2;
+}
+
+message ChanBackupExportRequest {
+}
+message ChanBackupSnapshot {
+ /*
+ The set of new channels that have been added since the last channel backup
+ snapshot was requested.
+ */
+ ChannelBackups single_chan_backups = 1;
+
+ /*
+ A multi-channel backup that covers all open channels currently known to
+ lnd.
+ */
+ MultiChanBackup multi_chan_backup = 2;
+}
+
+message ChannelBackups {
+ /*
+ A set of single-chan static channel backups.
+ */
+ repeated ChannelBackup chan_backups = 1;
+}
+
+message RestoreChanBackupRequest {
+ oneof backup {
+ /*
+ The channels to restore as a list of channel/backup pairs.
+ */
+ ChannelBackups chan_backups = 1;
+
+ /*
+ The channels to restore in the packed multi backup format. When using
+ REST, this field must be encoded as base64.
+ */
+ bytes multi_chan_backup = 2;
+ }
+}
+message RestoreBackupResponse {
+}
+
+message ChannelBackupSubscription {
+}
+
+message VerifyChanBackupResponse {
+}
+
+message MacaroonPermission {
+ // The entity a permission grants access to.
+ string entity = 1;
+
+ // The action that is granted.
+ string action = 2;
+}
+message BakeMacaroonRequest {
+ // The list of permissions the new macaroon should grant.
+ repeated MacaroonPermission permissions = 1;
+
+ // The root key ID used to create the macaroon, must be a positive integer.
+ uint64 root_key_id = 2;
+
+ /*
+ Informs the RPC on whether to allow external permissions that LND is not
+ aware of.
+ */
+ bool allow_external_permissions = 3;
+}
+message BakeMacaroonResponse {
+ // The hex encoded macaroon, serialized in binary format.
+ string macaroon = 1;
+}
+
+message ListMacaroonIDsRequest {
+}
+message ListMacaroonIDsResponse {
+ // The list of root key IDs that are in use.
+ repeated uint64 root_key_ids = 1;
+}
+
+message DeleteMacaroonIDRequest {
+ // The root key ID to be removed.
+ uint64 root_key_id = 1;
+}
+message DeleteMacaroonIDResponse {
+ // A boolean indicates that the deletion is successful.
+ bool deleted = 1;
+}
+
+message MacaroonPermissionList {
+ // A list of macaroon permissions.
+ repeated MacaroonPermission permissions = 1;
+}
+
+message ListPermissionsRequest {
+}
+message ListPermissionsResponse {
+ /*
+ A map between all RPC method URIs and their required macaroon permissions to
+ access them.
+ */
+ map method_permissions = 1;
+}
+
+message Failure {
+ enum FailureCode {
+ /*
+ The numbers assigned in this enumeration match the failure codes as
+ defined in BOLT #4. Because protobuf 3 requires enums to start with 0,
+ a RESERVED value is added.
+ */
+ RESERVED = 0;
+
+ INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS = 1;
+ INCORRECT_PAYMENT_AMOUNT = 2;
+ FINAL_INCORRECT_CLTV_EXPIRY = 3;
+ FINAL_INCORRECT_HTLC_AMOUNT = 4;
+ FINAL_EXPIRY_TOO_SOON = 5;
+ INVALID_REALM = 6;
+ EXPIRY_TOO_SOON = 7;
+ INVALID_ONION_VERSION = 8;
+ INVALID_ONION_HMAC = 9;
+ INVALID_ONION_KEY = 10;
+ AMOUNT_BELOW_MINIMUM = 11;
+ FEE_INSUFFICIENT = 12;
+ INCORRECT_CLTV_EXPIRY = 13;
+ CHANNEL_DISABLED = 14;
+ TEMPORARY_CHANNEL_FAILURE = 15;
+ REQUIRED_NODE_FEATURE_MISSING = 16;
+ REQUIRED_CHANNEL_FEATURE_MISSING = 17;
+ UNKNOWN_NEXT_PEER = 18;
+ TEMPORARY_NODE_FAILURE = 19;
+ PERMANENT_NODE_FAILURE = 20;
+ PERMANENT_CHANNEL_FAILURE = 21;
+ EXPIRY_TOO_FAR = 22;
+ MPP_TIMEOUT = 23;
+ INVALID_ONION_PAYLOAD = 24;
+
+ /*
+ An internal error occurred.
+ */
+ INTERNAL_FAILURE = 997;
+
+ /*
+ The error source is known, but the failure itself couldn't be decoded.
+ */
+ UNKNOWN_FAILURE = 998;
+
+ /*
+ An unreadable failure result is returned if the received failure message
+ cannot be decrypted. In that case the error source is unknown.
+ */
+ UNREADABLE_FAILURE = 999;
+ }
+
+ // Failure code as defined in the Lightning spec
+ FailureCode code = 1;
+
+ reserved 2;
+
+ // An optional channel update message.
+ ChannelUpdate channel_update = 3;
+
+ // A failure type-dependent htlc value.
+ uint64 htlc_msat = 4;
+
+ // The sha256 sum of the onion payload.
+ bytes onion_sha_256 = 5;
+
+ // A failure type-dependent cltv expiry value.
+ uint32 cltv_expiry = 6;
+
+ // A failure type-dependent flags value.
+ uint32 flags = 7;
+
+ /*
+ The position in the path of the intermediate or final node that generated
+ the failure message. Position zero is the sender node.
+ **/
+ uint32 failure_source_index = 8;
+
+ // A failure type-dependent block height.
+ uint32 height = 9;
+}
+
+message ChannelUpdate {
+ /*
+ The signature that validates the announced data and proves the ownership
+ of node id.
+ */
+ bytes signature = 1;
+
+ /*
+ The target chain that this channel was opened within. This value
+ should be the genesis hash of the target chain. Along with the short
+ channel ID, this uniquely identifies the channel globally in a
+ blockchain.
+ */
+ bytes chain_hash = 2;
+
+ /*
+ The unique description of the funding transaction.
+ */
+ uint64 chan_id = 3 [jstype = JS_STRING];
+
+ /*
+ A timestamp that allows ordering in the case of multiple announcements.
+ We should ignore the message if timestamp is not greater than the
+ last-received.
+ */
+ uint32 timestamp = 4;
+
+ /*
+ The bitfield that describes whether optional fields are present in this
+ update. Currently, the least-significant bit must be set to 1 if the
+ optional field MaxHtlc is present.
+ */
+ uint32 message_flags = 10;
+
+ /*
+ The bitfield that describes additional meta-data concerning how the
+ update is to be interpreted. Currently, the least-significant bit must be
+ set to 0 if the creating node corresponds to the first node in the
+ previously sent channel announcement and 1 otherwise. If the second bit
+ is set, then the channel is set to be disabled.
+ */
+ uint32 channel_flags = 5;
+
+ /*
+ The minimum number of blocks this node requires to be added to the expiry
+ of HTLCs. This is a security parameter determined by the node operator.
+ This value represents the required gap between the time locks of the
+ incoming and outgoing HTLC's set to this node.
+ */
+ uint32 time_lock_delta = 6;
+
+ /*
+ The minimum HTLC value which will be accepted.
+ */
+ uint64 htlc_minimum_msat = 7;
+
+ /*
+ The base fee that must be used for incoming HTLC's to this particular
+ channel. This value will be tacked onto the required for a payment
+ independent of the size of the payment.
+ */
+ uint32 base_fee = 8;
+
+ /*
+ The fee rate that will be charged per millionth of a satoshi.
+ */
+ uint32 fee_rate = 9;
+
+ /*
+ The maximum HTLC value which will be accepted.
+ */
+ uint64 htlc_maximum_msat = 11;
+
+ /*
+ The set of data that was appended to this message, some of which we may
+ not actually know how to iterate or parse. By holding onto this data, we
+ ensure that we're able to properly validate the set of signatures that
+ cover these new fields, and ensure we're able to make upgrades to the
+ network in a forwards compatible manner.
+ */
+ bytes extra_opaque_data = 12;
+}
+
+message MacaroonId {
+ bytes nonce = 1;
+ bytes storageId = 2;
+ repeated Op ops = 3;
+}
+
+message Op {
+ string entity = 1;
+ repeated string actions = 2;
+}
+
+message CheckMacPermRequest {
+ bytes macaroon = 1;
+ repeated MacaroonPermission permissions = 2;
+ string fullMethod = 3;
+}
+
+message CheckMacPermResponse {
+ bool valid = 1;
+}
+
+message RPCMiddlewareRequest {
+ /*
+ The unique ID of the intercepted original gRPC request. Useful for mapping
+ request to response when implementing full duplex message interception. For
+ streaming requests, this will be the same ID for all incoming and outgoing
+ middleware intercept messages of the _same_ stream.
+ */
+ uint64 request_id = 1;
+
+ /*
+ The raw bytes of the complete macaroon as sent by the gRPC client in the
+ original request. This might be empty for a request that doesn't require
+ macaroons such as the wallet unlocker RPCs.
+ */
+ bytes raw_macaroon = 2;
+
+ /*
+ The parsed condition of the macaroon's custom caveat for convenient access.
+ This field only contains the value of the custom caveat that the handling
+ middleware has registered itself for. The condition _must_ be validated for
+ messages of intercept_type stream_auth and request!
+ */
+ string custom_caveat_condition = 3;
+
+ /*
+ There are three types of messages that will be sent to the middleware for
+ inspection and approval: Stream authentication, request and response
+ interception. The first two can only be accepted (=forward to main RPC
+ server) or denied (=return error to client). Intercepted responses can also
+ be replaced/overwritten.
+ */
+ oneof intercept_type {
+ /*
+ Intercept stream authentication: each new streaming RPC call that is
+ initiated against lnd and contains the middleware's custom macaroon
+ caveat can be approved or denied based upon the macaroon in the stream
+ header. This message will only be sent for streaming RPCs, unary RPCs
+ must handle the macaroon authentication in the request interception to
+ avoid an additional message round trip between lnd and the middleware.
+ */
+ StreamAuth stream_auth = 4;
+
+ /*
+ Intercept incoming gRPC client request message: all incoming messages,
+ both on streaming and unary RPCs, are forwarded to the middleware for
+ inspection. For unary RPC messages the middleware is also expected to
+ validate the custom macaroon caveat of the request.
+ */
+ RPCMessage request = 5;
+
+ /*
+ Intercept outgoing gRPC response message: all outgoing messages, both on
+ streaming and unary RPCs, are forwarded to the middleware for inspection
+ and amendment. The response in this message is the original response as
+ it was generated by the main RPC server. It can either be accepted
+ (=forwarded to the client), replaced/overwritten with a new message of
+ the same type, or replaced by an error message.
+ */
+ RPCMessage response = 6;
+
+ /*
+ This is used to indicate to the client that the server has successfully
+ registered the interceptor. This is only used in the very first message
+ that the server sends to the client after the client sends the server
+ the middleware registration message.
+ */
+ bool reg_complete = 8;
+ }
+
+ /*
+ The unique message ID of this middleware intercept message. There can be
+ multiple middleware intercept messages per single gRPC request (one for the
+ incoming request and one for the outgoing response) or gRPC stream (one for
+ each incoming message and one for each outgoing response). This message ID
+ must be referenced when responding (accepting/rejecting/modifying) to an
+ intercept message.
+ */
+ uint64 msg_id = 7;
+}
+
+message StreamAuth {
+ /*
+ The full URI (in the format /./MethodName, for
+ example /lnrpc.Lightning/GetInfo) of the streaming RPC method that was just
+ established.
+ */
+ string method_full_uri = 1;
+}
+
+message RPCMessage {
+ /*
+ The full URI (in the format /./MethodName, for
+ example /lnrpc.Lightning/GetInfo) of the RPC method the message was sent
+ to/from.
+ */
+ string method_full_uri = 1;
+
+ /*
+ Indicates whether the message was sent over a streaming RPC method or not.
+ */
+ bool stream_rpc = 2;
+
+ /*
+ The full canonical gRPC name of the message type (in the format
+ .TypeName, for example lnrpc.GetInfoRequest). In case of an
+ error being returned from lnd, this simply contains the string "error".
+ */
+ string type_name = 3;
+
+ /*
+ The full content of the gRPC message, serialized in the binary protobuf
+ format.
+ */
+ bytes serialized = 4;
+
+ /*
+ Indicates that the response from lnd was an error, not a gRPC response. If
+ this is set to true then the type_name contains the string "error" and
+ serialized contains the error string.
+ */
+ bool is_error = 5;
+}
+
+message RPCMiddlewareResponse {
+ /*
+ The request message ID this response refers to. Must always be set when
+ giving feedback to an intercept but is ignored for the initial registration
+ message.
+ */
+ uint64 ref_msg_id = 1;
+
+ /*
+ The middleware can only send two types of messages to lnd: The initial
+ registration message that identifies the middleware and after that only
+ feedback messages to requests sent to the middleware.
+ */
+ oneof middleware_message {
+ /*
+ The registration message identifies the middleware that's being
+ registered in lnd. The registration message must be sent immediately
+ after initiating the RegisterRpcMiddleware stream, otherwise lnd will
+ time out the attempt and terminate the request. NOTE: The middleware
+ will only receive interception messages for requests that contain a
+ macaroon with the custom caveat that the middleware declares it is
+ responsible for handling in the registration message! As a security
+ measure, _no_ middleware can intercept requests made with _unencumbered_
+ macaroons!
+ */
+ MiddlewareRegistration register = 2;
+
+ /*
+ The middleware received an interception request and gives feedback to
+ it. The request_id indicates what message the feedback refers to.
+ */
+ InterceptFeedback feedback = 3;
+ }
+}
+
+message MiddlewareRegistration {
+ /*
+ The name of the middleware to register. The name should be as informative
+ as possible and is logged on registration.
+ */
+ string middleware_name = 1;
+
+ /*
+ The name of the custom macaroon caveat that this middleware is responsible
+ for. Only requests/responses that contain a macaroon with the registered
+ custom caveat are forwarded for interception to the middleware. The
+ exception being the read-only mode: All requests/responses are forwarded to
+ a middleware that requests read-only access but such a middleware won't be
+ allowed to _alter_ responses. As a security measure, _no_ middleware can
+ change responses to requests made with _unencumbered_ macaroons!
+ NOTE: Cannot be used at the same time as read_only_mode.
+ */
+ string custom_macaroon_caveat_name = 2;
+
+ /*
+ Instead of defining a custom macaroon caveat name a middleware can register
+ itself for read-only access only. In that mode all requests/responses are
+ forwarded to the middleware but the middleware isn't allowed to alter any of
+ the responses.
+ NOTE: Cannot be used at the same time as custom_macaroon_caveat_name.
+ */
+ bool read_only_mode = 3;
+}
+
+message InterceptFeedback {
+ /*
+ The error to return to the user. If this is non-empty, the incoming gRPC
+ stream/request is aborted and the error is returned to the gRPC client. If
+ this value is empty, it means the middleware accepts the stream/request/
+ response and the processing of it can continue.
+ */
+ string error = 1;
+
+ /*
+ A boolean indicating that the gRPC message should be replaced/overwritten.
+ This boolean is needed because in protobuf an empty message is serialized as
+ a 0-length or nil byte slice and we wouldn't be able to distinguish between
+ an empty replacement message and the "don't replace anything" case.
+ */
+ bool replace_response = 2;
+
+ /*
+ If the replace_response field is set to true, this field must contain the
+ binary serialized gRPC message in the protobuf format.
+ */
+ bytes replacement_serialized = 3;
+}
\ No newline at end of file
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Protos/router.proto b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Protos/router.proto
new file mode 100755
index 000000000..1186c718f
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Protos/router.proto
@@ -0,0 +1,952 @@
+syntax = "proto3";
+
+import "Protos/lightning.proto";
+
+package routerrpc;
+
+option go_package = "github.com/lightningnetwork/lnd/lnrpc/routerrpc";
+
+// Router is a service that offers advanced interaction with the router
+// subsystem of the daemon.
+service Router {
+ /*
+ SendPaymentV2 attempts to route a payment described by the passed
+ PaymentRequest to the final destination. The call returns a stream of
+ payment updates.
+ */
+ rpc SendPaymentV2 (SendPaymentRequest) returns (stream lnrpc.Payment);
+
+ /*
+ TrackPaymentV2 returns an update stream for the payment identified by the
+ payment hash.
+ */
+ rpc TrackPaymentV2 (TrackPaymentRequest) returns (stream lnrpc.Payment);
+
+ /*
+ TrackPayments returns an update stream for every payment that is not in a
+ terminal state. Note that if payments are in-flight while starting a new
+ subscription, the start of the payment stream could produce out-of-order
+ and/or duplicate events. In order to get updates for every in-flight
+ payment attempt make sure to subscribe to this method before initiating any
+ payments.
+ */
+ rpc TrackPayments (TrackPaymentsRequest) returns (stream lnrpc.Payment);
+
+ /*
+ EstimateRouteFee allows callers to obtain a lower bound w.r.t how much it
+ may cost to send an HTLC to the target end destination.
+ */
+ rpc EstimateRouteFee (RouteFeeRequest) returns (RouteFeeResponse);
+
+ /*
+ Deprecated, use SendToRouteV2. SendToRoute attempts to make a payment via
+ the specified route. This method differs from SendPayment in that it
+ allows users to specify a full route manually. This can be used for
+ things like rebalancing, and atomic swaps. It differs from the newer
+ SendToRouteV2 in that it doesn't return the full HTLC information.
+ */
+ rpc SendToRoute (SendToRouteRequest) returns (SendToRouteResponse) {
+ option deprecated = true;
+ }
+
+ /*
+ SendToRouteV2 attempts to make a payment via the specified route. This
+ method differs from SendPayment in that it allows users to specify a full
+ route manually. This can be used for things like rebalancing, and atomic
+ swaps.
+ */
+ rpc SendToRouteV2 (SendToRouteRequest) returns (lnrpc.HTLCAttempt);
+
+ /*
+ ResetMissionControl clears all mission control state and starts with a clean
+ slate.
+ */
+ rpc ResetMissionControl (ResetMissionControlRequest)
+ returns (ResetMissionControlResponse);
+
+ /*
+ QueryMissionControl exposes the internal mission control state to callers.
+ It is a development feature.
+ */
+ rpc QueryMissionControl (QueryMissionControlRequest)
+ returns (QueryMissionControlResponse);
+
+ /*
+ XImportMissionControl is an experimental API that imports the state provided
+ to the internal mission control's state, using all results which are more
+ recent than our existing values. These values will only be imported
+ in-memory, and will not be persisted across restarts.
+ */
+ rpc XImportMissionControl (XImportMissionControlRequest)
+ returns (XImportMissionControlResponse);
+
+ /*
+ GetMissionControlConfig returns mission control's current config.
+ */
+ rpc GetMissionControlConfig (GetMissionControlConfigRequest)
+ returns (GetMissionControlConfigResponse);
+
+ /*
+ SetMissionControlConfig will set mission control's config, if the config
+ provided is valid.
+ */
+ rpc SetMissionControlConfig (SetMissionControlConfigRequest)
+ returns (SetMissionControlConfigResponse);
+
+ /*
+ Deprecated. QueryProbability returns the current success probability
+ estimate for a given node pair and amount. The call returns a zero success
+ probability if no channel is available or if the amount violates min/max
+ HTLC constraints.
+ */
+ rpc QueryProbability (QueryProbabilityRequest)
+ returns (QueryProbabilityResponse);
+
+ /*
+ BuildRoute builds a fully specified route based on a list of hop public
+ keys. It retrieves the relevant channel policies from the graph in order to
+ calculate the correct fees and time locks.
+ */
+ rpc BuildRoute (BuildRouteRequest) returns (BuildRouteResponse);
+
+ /*
+ SubscribeHtlcEvents creates a uni-directional stream from the server to
+ the client which delivers a stream of htlc events.
+ */
+ rpc SubscribeHtlcEvents (SubscribeHtlcEventsRequest)
+ returns (stream HtlcEvent);
+
+ /*
+ Deprecated, use SendPaymentV2. SendPayment attempts to route a payment
+ described by the passed PaymentRequest to the final destination. The call
+ returns a stream of payment status updates.
+ */
+ rpc SendPayment (SendPaymentRequest) returns (stream PaymentStatus) {
+ option deprecated = true;
+ }
+
+ /*
+ Deprecated, use TrackPaymentV2. TrackPayment returns an update stream for
+ the payment identified by the payment hash.
+ */
+ rpc TrackPayment (TrackPaymentRequest) returns (stream PaymentStatus) {
+ option deprecated = true;
+ }
+
+ /**
+ HtlcInterceptor dispatches a bi-directional streaming RPC in which
+ Forwarded HTLC requests are sent to the client and the client responds with
+ a boolean that tells LND if this htlc should be intercepted.
+ In case of interception, the htlc can be either settled, cancelled or
+ resumed later by using the ResolveHoldForward endpoint.
+ */
+ rpc HtlcInterceptor (stream ForwardHtlcInterceptResponse)
+ returns (stream ForwardHtlcInterceptRequest);
+
+ /*
+ UpdateChanStatus attempts to manually set the state of a channel
+ (enabled, disabled, or auto). A manual "disable" request will cause the
+ channel to stay disabled until a subsequent manual request of either
+ "enable" or "auto".
+ */
+ rpc UpdateChanStatus (UpdateChanStatusRequest)
+ returns (UpdateChanStatusResponse);
+}
+
+message SendPaymentRequest {
+ // The identity pubkey of the payment recipient
+ bytes dest = 1;
+
+ /*
+ Number of satoshis to send.
+
+ The fields amt and amt_msat are mutually exclusive.
+ */
+ int64 amt = 2;
+
+ /*
+ Number of millisatoshis to send.
+
+ The fields amt and amt_msat are mutually exclusive.
+ */
+ int64 amt_msat = 12;
+
+ // The hash to use within the payment's HTLC
+ bytes payment_hash = 3;
+
+ /*
+ The CLTV delta from the current height that should be used to set the
+ timelock for the final hop.
+ */
+ int32 final_cltv_delta = 4;
+
+ // An optional payment addr to be included within the last hop of the route.
+ bytes payment_addr = 20;
+
+ /*
+ A bare-bones invoice for a payment within the Lightning Network. With the
+ details of the invoice, the sender has all the data necessary to send a
+ payment to the recipient. The amount in the payment request may be zero. In
+ that case it is required to set the amt field as well. If no payment request
+ is specified, the following fields are required: dest, amt and payment_hash.
+ */
+ string payment_request = 5;
+
+ /*
+ An upper limit on the amount of time we should spend when attempting to
+ fulfill the payment. This is expressed in seconds. If we cannot make a
+ successful payment within this time frame, an error will be returned.
+ This field must be non-zero.
+ */
+ int32 timeout_seconds = 6;
+
+ /*
+ The maximum number of satoshis that will be paid as a fee of the payment.
+ If this field is left to the default value of 0, only zero-fee routes will
+ be considered. This usually means single hop routes connecting directly to
+ the destination. To send the payment without a fee limit, use max int here.
+
+ The fields fee_limit_sat and fee_limit_msat are mutually exclusive.
+ */
+ int64 fee_limit_sat = 7;
+
+ /*
+ The maximum number of millisatoshis that will be paid as a fee of the
+ payment. If this field is left to the default value of 0, only zero-fee
+ routes will be considered. This usually means single hop routes connecting
+ directly to the destination. To send the payment without a fee limit, use
+ max int here.
+
+ The fields fee_limit_sat and fee_limit_msat are mutually exclusive.
+ */
+ int64 fee_limit_msat = 13;
+
+ /*
+ Deprecated, use outgoing_chan_ids. The channel id of the channel that must
+ be taken to the first hop. If zero, any channel may be used (unless
+ outgoing_chan_ids are set).
+ */
+ uint64 outgoing_chan_id = 8 [jstype = JS_STRING, deprecated = true];
+
+ /*
+ The channel ids of the channels are allowed for the first hop. If empty,
+ any channel may be used.
+ */
+ repeated uint64 outgoing_chan_ids = 19;
+
+ /*
+ The pubkey of the last hop of the route. If empty, any hop may be used.
+ */
+ bytes last_hop_pubkey = 14;
+
+ /*
+ An optional maximum total time lock for the route. This should not exceed
+ lnd's `--max-cltv-expiry` setting. If zero, then the value of
+ `--max-cltv-expiry` is enforced.
+ */
+ int32 cltv_limit = 9;
+
+ /*
+ Optional route hints to reach the destination through private channels.
+ */
+ repeated lnrpc.RouteHint route_hints = 10;
+
+ /*
+ An optional field that can be used to pass an arbitrary set of TLV records
+ to a peer which understands the new records. This can be used to pass
+ application specific data during the payment attempt. Record types are
+ required to be in the custom range >= 65536. When using REST, the values
+ must be encoded as base64.
+ */
+ map dest_custom_records = 11;
+
+ // If set, circular payments to self are permitted.
+ bool allow_self_payment = 15;
+
+ /*
+ Features assumed to be supported by the final node. All transitive feature
+ dependencies must also be set properly. For a given feature bit pair, either
+ optional or remote may be set, but not both. If this field is nil or empty,
+ the router will try to load destination features from the graph as a
+ fallback.
+ */
+ repeated lnrpc.FeatureBit dest_features = 16;
+
+ /*
+ The maximum number of partial payments that may be use to complete the full
+ amount.
+ */
+ uint32 max_parts = 17;
+
+ /*
+ If set, only the final payment update is streamed back. Intermediate updates
+ that show which htlcs are still in flight are suppressed.
+ */
+ bool no_inflight_updates = 18;
+
+ /*
+ The largest payment split that should be attempted when making a payment if
+ splitting is necessary. Setting this value will effectively cause lnd to
+ split more aggressively, vs only when it thinks it needs to. Note that this
+ value is in milli-satoshis.
+ */
+ uint64 max_shard_size_msat = 21;
+
+ /*
+ If set, an AMP-payment will be attempted.
+ */
+ bool amp = 22;
+
+ /*
+ The time preference for this payment. Set to -1 to optimize for fees
+ only, to 1 to optimize for reliability only or a value inbetween for a mix.
+ */
+ double time_pref = 23;
+}
+
+message TrackPaymentRequest {
+ // The hash of the payment to look up.
+ bytes payment_hash = 1;
+
+ /*
+ If set, only the final payment update is streamed back. Intermediate updates
+ that show which htlcs are still in flight are suppressed.
+ */
+ bool no_inflight_updates = 2;
+}
+
+message TrackPaymentsRequest {
+ /*
+ If set, only the final payment updates are streamed back. Intermediate
+ updates that show which htlcs are still in flight are suppressed.
+ */
+ bool no_inflight_updates = 1;
+}
+
+message RouteFeeRequest {
+ /*
+ The destination once wishes to obtain a routing fee quote to.
+ */
+ bytes dest = 1;
+
+ /*
+ The amount one wishes to send to the target destination.
+ */
+ int64 amt_sat = 2;
+}
+
+message RouteFeeResponse {
+ /*
+ A lower bound of the estimated fee to the target destination within the
+ network, expressed in milli-satoshis.
+ */
+ int64 routing_fee_msat = 1;
+
+ /*
+ An estimate of the worst case time delay that can occur. Note that callers
+ will still need to factor in the final CLTV delta of the last hop into this
+ value.
+ */
+ int64 time_lock_delay = 2;
+}
+
+message SendToRouteRequest {
+ // The payment hash to use for the HTLC.
+ bytes payment_hash = 1;
+
+ // Route that should be used to attempt to complete the payment.
+ lnrpc.Route route = 2;
+
+ /*
+ Whether the payment should be marked as failed when a temporary error is
+ returned from the given route. Set it to true so the payment won't be
+ failed unless a terminal error is occurred, such as payment timeout, no
+ routes, incorrect payment details, or insufficient funds.
+ */
+ bool skip_temp_err = 3;
+}
+
+message SendToRouteResponse {
+ // The preimage obtained by making the payment.
+ bytes preimage = 1;
+
+ // The failure message in case the payment failed.
+ lnrpc.Failure failure = 2;
+}
+
+message ResetMissionControlRequest {
+}
+
+message ResetMissionControlResponse {
+}
+
+message QueryMissionControlRequest {
+}
+
+// QueryMissionControlResponse contains mission control state.
+message QueryMissionControlResponse {
+ reserved 1;
+
+ // Node pair-level mission control state.
+ repeated PairHistory pairs = 2;
+}
+
+message XImportMissionControlRequest {
+ // Node pair-level mission control state to be imported.
+ repeated PairHistory pairs = 1;
+
+ // Whether to force override MC pair history. Note that even with force
+ // override the failure pair is imported before the success pair and both
+ // still clamp existing failure/success amounts.
+ bool force = 2;
+}
+
+message XImportMissionControlResponse {
+}
+
+// PairHistory contains the mission control state for a particular node pair.
+message PairHistory {
+ // The source node pubkey of the pair.
+ bytes node_from = 1;
+
+ // The destination node pubkey of the pair.
+ bytes node_to = 2;
+
+ reserved 3, 4, 5, 6;
+
+ PairData history = 7;
+}
+
+message PairData {
+ // Time of last failure.
+ int64 fail_time = 1;
+
+ /*
+ Lowest amount that failed to forward rounded to whole sats. This may be
+ set to zero if the failure is independent of amount.
+ */
+ int64 fail_amt_sat = 2;
+
+ /*
+ Lowest amount that failed to forward in millisats. This may be
+ set to zero if the failure is independent of amount.
+ */
+ int64 fail_amt_msat = 4;
+
+ reserved 3;
+
+ // Time of last success.
+ int64 success_time = 5;
+
+ // Highest amount that we could successfully forward rounded to whole sats.
+ int64 success_amt_sat = 6;
+
+ // Highest amount that we could successfully forward in millisats.
+ int64 success_amt_msat = 7;
+}
+
+message GetMissionControlConfigRequest {
+}
+
+message GetMissionControlConfigResponse {
+ /*
+ Mission control's currently active config.
+ */
+ MissionControlConfig config = 1;
+}
+
+message SetMissionControlConfigRequest {
+ /*
+ The config to set for mission control. Note that all values *must* be set,
+ because the full config will be applied.
+ */
+ MissionControlConfig config = 1;
+}
+
+message SetMissionControlConfigResponse {
+}
+
+message MissionControlConfig {
+ /*
+ Deprecated, use AprioriParameters. The amount of time mission control will
+ take to restore a penalized node or channel back to 50% success probability,
+ expressed in seconds. Setting this value to a higher value will penalize
+ failures for longer, making mission control less likely to route through
+ nodes and channels that we have previously recorded failures for.
+ */
+ uint64 half_life_seconds = 1 [deprecated = true];
+
+ /*
+ Deprecated, use AprioriParameters. The probability of success mission
+ control should assign to hop in a route where it has no other information
+ available. Higher values will make mission control more willing to try hops
+ that we have no information about, lower values will discourage trying these
+ hops.
+ */
+ float hop_probability = 2 [deprecated = true];
+
+ /*
+ Deprecated, use AprioriParameters. The importance that mission control
+ should place on historical results, expressed as a value in [0;1]. Setting
+ this value to 1 will ignore all historical payments and just use the hop
+ probability to assess the probability of success for each hop. A zero value
+ ignores hop probability completely and relies entirely on historical
+ results, unless none are available.
+ */
+ float weight = 3 [deprecated = true];
+
+ /*
+ The maximum number of payment results that mission control will store.
+ */
+ uint32 maximum_payment_results = 4;
+
+ /*
+ The minimum time that must have passed since the previously recorded failure
+ before we raise the failure amount.
+ */
+ uint64 minimum_failure_relax_interval = 5;
+
+ enum ProbabilityModel {
+ APRIORI = 0;
+ BIMODAL = 1;
+ }
+
+ /*
+ ProbabilityModel defines which probability estimator should be used in
+ pathfinding. Note that the bimodal estimator is experimental.
+ */
+ ProbabilityModel model = 6;
+
+ /*
+ EstimatorConfig is populated dependent on the estimator type.
+ */
+ oneof EstimatorConfig {
+ AprioriParameters apriori = 7;
+ BimodalParameters bimodal = 8;
+ }
+}
+
+message BimodalParameters {
+ /*
+ NodeWeight defines how strongly other previous forwardings on channels of a
+ router should be taken into account when computing a channel's probability
+ to route. The allowed values are in the range [0, 1], where a value of 0
+ means that only direct information about a channel is taken into account.
+ */
+ double node_weight = 1;
+
+ /*
+ ScaleMsat describes the scale over which channels statistically have some
+ liquidity left. The value determines how quickly the bimodal distribution
+ drops off from the edges of a channel. A larger value (compared to typical
+ channel capacities) means that the drop off is slow and that channel
+ balances are distributed more uniformly. A small value leads to the
+ assumption of very unbalanced channels.
+ */
+ uint64 scale_msat = 2;
+
+ /*
+ DecayTime describes the information decay of knowledge about previous
+ successes and failures in channels. The smaller the decay time, the quicker
+ we forget about past forwardings.
+ */
+ uint64 decay_time = 3;
+}
+
+message AprioriParameters {
+ /*
+ The amount of time mission control will take to restore a penalized node
+ or channel back to 50% success probability, expressed in seconds. Setting
+ this value to a higher value will penalize failures for longer, making
+ mission control less likely to route through nodes and channels that we
+ have previously recorded failures for.
+ */
+ uint64 half_life_seconds = 1;
+
+ /*
+ The probability of success mission control should assign to hop in a route
+ where it has no other information available. Higher values will make mission
+ control more willing to try hops that we have no information about, lower
+ values will discourage trying these hops.
+ */
+ double hop_probability = 2;
+
+ /*
+ The importance that mission control should place on historical results,
+ expressed as a value in [0;1]. Setting this value to 1 will ignore all
+ historical payments and just use the hop probability to assess the
+ probability of success for each hop. A zero value ignores hop probability
+ completely and relies entirely on historical results, unless none are
+ available.
+ */
+ double weight = 3;
+
+ /*
+ The fraction of a channel's capacity that we consider to have liquidity. For
+ amounts that come close to or exceed the fraction, an additional penalty is
+ applied. A value of 1.0 disables the capacity factor. Allowed values are in
+ [0.75, 1.0].
+ */
+ double capacity_fraction = 4;
+}
+
+message QueryProbabilityRequest {
+ // The source node pubkey of the pair.
+ bytes from_node = 1;
+
+ // The destination node pubkey of the pair.
+ bytes to_node = 2;
+
+ // The amount for which to calculate a probability.
+ int64 amt_msat = 3;
+}
+
+message QueryProbabilityResponse {
+ // The success probability for the requested pair.
+ double probability = 1;
+
+ // The historical data for the requested pair.
+ PairData history = 2;
+}
+
+message BuildRouteRequest {
+ /*
+ The amount to send expressed in msat. If set to zero, the minimum routable
+ amount is used.
+ */
+ int64 amt_msat = 1;
+
+ /*
+ CLTV delta from the current height that should be used for the timelock
+ of the final hop
+ */
+ int32 final_cltv_delta = 2;
+
+ /*
+ The channel id of the channel that must be taken to the first hop. If zero,
+ any channel may be used.
+ */
+ uint64 outgoing_chan_id = 3 [jstype = JS_STRING];
+
+ /*
+ A list of hops that defines the route. This does not include the source hop
+ pubkey.
+ */
+ repeated bytes hop_pubkeys = 4;
+
+ // An optional payment addr to be included within the last hop of the route.
+ bytes payment_addr = 5;
+}
+
+message BuildRouteResponse {
+ /*
+ Fully specified route that can be used to execute the payment.
+ */
+ lnrpc.Route route = 1;
+}
+
+message SubscribeHtlcEventsRequest {
+}
+
+/*
+HtlcEvent contains the htlc event that was processed. These are served on a
+best-effort basis; events are not persisted, delivery is not guaranteed
+(in the event of a crash in the switch, forward events may be lost) and
+some events may be replayed upon restart. Events consumed from this package
+should be de-duplicated by the htlc's unique combination of incoming and
+outgoing channel id and htlc id. [EXPERIMENTAL]
+*/
+message HtlcEvent {
+ /*
+ The short channel id that the incoming htlc arrived at our node on. This
+ value is zero for sends.
+ */
+ uint64 incoming_channel_id = 1;
+
+ /*
+ The short channel id that the outgoing htlc left our node on. This value
+ is zero for receives.
+ */
+ uint64 outgoing_channel_id = 2;
+
+ /*
+ Incoming id is the index of the incoming htlc in the incoming channel.
+ This value is zero for sends.
+ */
+ uint64 incoming_htlc_id = 3;
+
+ /*
+ Outgoing id is the index of the outgoing htlc in the outgoing channel.
+ This value is zero for receives.
+ */
+ uint64 outgoing_htlc_id = 4;
+
+ /*
+ The time in unix nanoseconds that the event occurred.
+ */
+ uint64 timestamp_ns = 5;
+
+ enum EventType {
+ UNKNOWN = 0;
+ SEND = 1;
+ RECEIVE = 2;
+ FORWARD = 3;
+ }
+
+ /*
+ The event type indicates whether the htlc was part of a send, receive or
+ forward.
+ */
+ EventType event_type = 6;
+
+ oneof event {
+ ForwardEvent forward_event = 7;
+ ForwardFailEvent forward_fail_event = 8;
+ SettleEvent settle_event = 9;
+ LinkFailEvent link_fail_event = 10;
+ SubscribedEvent subscribed_event = 11;
+ FinalHtlcEvent final_htlc_event = 12;
+ }
+}
+
+message HtlcInfo {
+ // The timelock on the incoming htlc.
+ uint32 incoming_timelock = 1;
+
+ // The timelock on the outgoing htlc.
+ uint32 outgoing_timelock = 2;
+
+ // The amount of the incoming htlc.
+ uint64 incoming_amt_msat = 3;
+
+ // The amount of the outgoing htlc.
+ uint64 outgoing_amt_msat = 4;
+}
+
+message ForwardEvent {
+ // Info contains details about the htlc that was forwarded.
+ HtlcInfo info = 1;
+}
+
+message ForwardFailEvent {
+}
+
+message SettleEvent {
+ // The revealed preimage.
+ bytes preimage = 1;
+}
+
+message FinalHtlcEvent {
+ bool settled = 1;
+ bool offchain = 2;
+}
+
+message SubscribedEvent {
+}
+
+message LinkFailEvent {
+ // Info contains details about the htlc that we failed.
+ HtlcInfo info = 1;
+
+ // FailureCode is the BOLT error code for the failure.
+ lnrpc.Failure.FailureCode wire_failure = 2;
+
+ /*
+ FailureDetail provides additional information about the reason for the
+ failure. This detail enriches the information provided by the wire message
+ and may be 'no detail' if the wire message requires no additional metadata.
+ */
+ FailureDetail failure_detail = 3;
+
+ // A string representation of the link failure.
+ string failure_string = 4;
+}
+
+enum FailureDetail {
+ UNKNOWN = 0;
+ NO_DETAIL = 1;
+ ONION_DECODE = 2;
+ LINK_NOT_ELIGIBLE = 3;
+ ON_CHAIN_TIMEOUT = 4;
+ HTLC_EXCEEDS_MAX = 5;
+ INSUFFICIENT_BALANCE = 6;
+ INCOMPLETE_FORWARD = 7;
+ HTLC_ADD_FAILED = 8;
+ FORWARDS_DISABLED = 9;
+ INVOICE_CANCELED = 10;
+ INVOICE_UNDERPAID = 11;
+ INVOICE_EXPIRY_TOO_SOON = 12;
+ INVOICE_NOT_OPEN = 13;
+ MPP_INVOICE_TIMEOUT = 14;
+ ADDRESS_MISMATCH = 15;
+ SET_TOTAL_MISMATCH = 16;
+ SET_TOTAL_TOO_LOW = 17;
+ SET_OVERPAID = 18;
+ UNKNOWN_INVOICE = 19;
+ INVALID_KEYSEND = 20;
+ MPP_IN_PROGRESS = 21;
+ CIRCULAR_ROUTE = 22;
+}
+
+enum PaymentState {
+ /*
+ Payment is still in flight.
+ */
+ IN_FLIGHT = 0;
+
+ /*
+ Payment completed successfully.
+ */
+ SUCCEEDED = 1;
+
+ /*
+ There are more routes to try, but the payment timeout was exceeded.
+ */
+ FAILED_TIMEOUT = 2;
+
+ /*
+ All possible routes were tried and failed permanently. Or were no
+ routes to the destination at all.
+ */
+ FAILED_NO_ROUTE = 3;
+
+ /*
+ A non-recoverable error has occurred.
+ */
+ FAILED_ERROR = 4;
+
+ /*
+ Payment details incorrect (unknown hash, invalid amt or
+ invalid final cltv delta)
+ */
+ FAILED_INCORRECT_PAYMENT_DETAILS = 5;
+
+ /*
+ Insufficient local balance.
+ */
+ FAILED_INSUFFICIENT_BALANCE = 6;
+}
+
+message PaymentStatus {
+ // Current state the payment is in.
+ PaymentState state = 1;
+
+ /*
+ The pre-image of the payment when state is SUCCEEDED.
+ */
+ bytes preimage = 2;
+
+ reserved 3;
+
+ /*
+ The HTLCs made in attempt to settle the payment [EXPERIMENTAL].
+ */
+ repeated lnrpc.HTLCAttempt htlcs = 4;
+}
+
+message CircuitKey {
+ /// The id of the channel that the is part of this circuit.
+ uint64 chan_id = 1;
+
+ /// The index of the incoming htlc in the incoming channel.
+ uint64 htlc_id = 2;
+}
+
+message ForwardHtlcInterceptRequest {
+ /*
+ The key of this forwarded htlc. It defines the incoming channel id and
+ the index in this channel.
+ */
+ CircuitKey incoming_circuit_key = 1;
+
+ // The incoming htlc amount.
+ uint64 incoming_amount_msat = 5;
+
+ // The incoming htlc expiry.
+ uint32 incoming_expiry = 6;
+
+ /*
+ The htlc payment hash. This value is not guaranteed to be unique per
+ request.
+ */
+ bytes payment_hash = 2;
+
+ // The requested outgoing channel id for this forwarded htlc. Because of
+ // non-strict forwarding, this isn't necessarily the channel over which the
+ // packet will be forwarded eventually. A different channel to the same peer
+ // may be selected as well.
+ uint64 outgoing_requested_chan_id = 7;
+
+ // The outgoing htlc amount.
+ uint64 outgoing_amount_msat = 3;
+
+ // The outgoing htlc expiry.
+ uint32 outgoing_expiry = 4;
+
+ // Any custom records that were present in the payload.
+ map custom_records = 8;
+
+ // The onion blob for the next hop
+ bytes onion_blob = 9;
+
+ // The block height at which this htlc will be auto-failed to prevent the
+ // channel from force-closing.
+ int32 auto_fail_height = 10;
+}
+
+/**
+ForwardHtlcInterceptResponse enables the caller to resolve a previously hold
+forward. The caller can choose either to:
+- `Resume`: Execute the default behavior (usually forward).
+- `Reject`: Fail the htlc backwards.
+- `Settle`: Settle this htlc with a given preimage.
+*/
+message ForwardHtlcInterceptResponse {
+ /**
+ The key of this forwarded htlc. It defines the incoming channel id and
+ the index in this channel.
+ */
+ CircuitKey incoming_circuit_key = 1;
+
+ // The resolve action for this intercepted htlc.
+ ResolveHoldForwardAction action = 2;
+
+ // The preimage in case the resolve action is Settle.
+ bytes preimage = 3;
+
+ // Encrypted failure message in case the resolve action is Fail.
+ //
+ // If failure_message is specified, the failure_code field must be set
+ // to zero.
+ bytes failure_message = 4;
+
+ // Return the specified failure code in case the resolve action is Fail. The
+ // message data fields are populated automatically.
+ //
+ // If a non-zero failure_code is specified, failure_message must not be set.
+ //
+ // For backwards-compatibility reasons, TEMPORARY_CHANNEL_FAILURE is the
+ // default value for this field.
+ lnrpc.Failure.FailureCode failure_code = 5;
+}
+
+enum ResolveHoldForwardAction {
+ SETTLE = 0;
+ FAIL = 1;
+ RESUME = 2;
+}
+
+message UpdateChanStatusRequest {
+ lnrpc.ChannelPoint chan_point = 1;
+
+ ChanStatusAction action = 2;
+}
+
+enum ChanStatusAction {
+ ENABLE = 0;
+ DISABLE = 1;
+ AUTO = 2;
+}
+
+message UpdateChanStatusResponse {
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Records/LightningInvoicedNotification.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Records/LightningInvoicedNotification.cs
new file mode 100755
index 000000000..8e02d6dc0
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Records/LightningInvoicedNotification.cs
@@ -0,0 +1,24 @@
+//-----------------------------------------------------------------------------
+// Filename: LightningInvoicedNotification.cs
+//
+// Description: Event notification for a Lightning invoice events.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 28 Feb 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+namespace demo;
+
+public enum LightningInvoiceNotificationTypeEnum
+{
+ Cancelled,
+ Settled
+}
+
+public record LightningInvoicedNotification(LightningInvoiceNotificationTypeEnum NotificationType, string RHash, string Description);
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Records/PaidVideoFrameConfig.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Records/PaidVideoFrameConfig.cs
new file mode 100755
index 000000000..4b1d2824e
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Records/PaidVideoFrameConfig.cs
@@ -0,0 +1,29 @@
+//-----------------------------------------------------------------------------
+// Filename: PaidVdieoFrameConfig.cs
+//
+// Description: Immutable record to control the generation of an annotated bitmap
+// which in turn will be used as the source for a WebRTC video stream.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 25 Feb 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Drawing;
+
+namespace demo;
+
+public record PaidVideoFrameConfig(
+ DateTimeOffset StartTime,
+ string? LightningPaymentRequest,
+ int Opacity,
+ Color BorderColour,
+ string Title,
+ bool IsPaid,
+ string ImagePath);
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/AnnotatedBitmapService.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/AnnotatedBitmapService.cs
new file mode 100755
index 000000000..9c5a47eb7
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/AnnotatedBitmapService.cs
@@ -0,0 +1,183 @@
+//-----------------------------------------------------------------------------
+// Filename: AnnotatedBitmapService.cs
+//
+// Description: Service class to annotate bitmaps. The original purpose was
+// to serve as the video source on a WebRTC connection.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 25 Feb 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using QRCoder;
+using System.Drawing.Drawing2D;
+using System.Drawing;
+using System;
+using Microsoft.Extensions.Logging;
+using System.Collections.Concurrent;
+
+namespace demo;
+
+public interface IAnnotatedBitmapGenerator
+{
+ Bitmap? GetAnnotatedBitmap(PaidVideoFrameConfig frameConfig);
+}
+
+public class AnnotatedBitmapService : IAnnotatedBitmapGenerator
+{
+ private const float TEXT_SIZE_PERCENTAGE = 0.035f; // Height of text as a percentage of the total image height.
+ private const float TEXT_OUTLINE_REL_THICKNESS = 0.02f; // Black text outline thickness is set as a percentage of text height in pixels.
+ private const int TEXT_MARGIN_PIXELS = 5;
+ private const int POINTS_PER_INCH = 72;
+ private const int BORDER_WIDTH = 5;
+ private const int QR_CODE_DIMENSION = 200;
+
+ private readonly ConcurrentDictionary> _qrCodeCache = new();
+
+ private readonly ILogger _logger;
+
+ public AnnotatedBitmapService(ILogger logger)
+ {
+ _logger = logger;
+ }
+
+ public Bitmap? GetAnnotatedBitmap(PaidVideoFrameConfig frameConfig)
+ {
+ try
+ {
+ unsafe
+ {
+ string imagePath = frameConfig.ImagePath;
+ using (Bitmap baseBitmap = new Bitmap(imagePath))
+ {
+ var baseImage = baseBitmap.Clone() as Image;
+ if (baseImage != null)
+ {
+ ApplyFilters(
+ baseImage,
+ DateTime.UtcNow.ToString("dd MMM yyyy HH:mm:ss:fff"),
+ frameConfig.Title,
+ frameConfig.BorderColour,
+ frameConfig.Opacity,
+ frameConfig.LightningPaymentRequest);
+
+ return baseImage as Bitmap;
+ }
+ }
+ }
+ }
+ catch (Exception excp)
+ {
+ _logger.LogError("Exception GetAnnotatedBitmap. " + excp);
+ }
+
+ return null;
+ }
+
+ private void ApplyFilters(Image image, string timeStamp, string title, Color borderColor, int transparency, string? lightningPaymentRequest)
+ {
+ int pixelHeight = (int)(image.Height * TEXT_SIZE_PERCENTAGE);
+
+ using Graphics g = Graphics.FromImage(image);
+ g.SmoothingMode = SmoothingMode.AntiAlias;
+ g.InterpolationMode = InterpolationMode.HighQualityBicubic;
+ g.PixelOffsetMode = PixelOffsetMode.HighQuality;
+
+ // Draw border.
+ using (var pen = new Pen(borderColor, BORDER_WIDTH))
+ {
+ g.DrawLine(pen, new Point(0, 0), new Point(0, image.Height));
+ g.DrawLine(pen, new Point(0, 0), new Point(image.Width, 0));
+ g.DrawLine(pen, new Point(0, image.Height), new Point(image.Width, image.Height));
+ g.DrawLine(pen, new Point(image.Width, 0), new Point(image.Width, image.Height));
+ }
+
+ // Add transparency.
+ using (Brush brush = new SolidBrush(Color.FromArgb(transparency, Color.Gray)))
+ {
+ g.FillRectangle(brush, new Rectangle(0, 0, image.Width, image.Height));
+ }
+
+ // Add header and footer text.
+ using (StringFormat format = new StringFormat())
+ {
+ format.LineAlignment = StringAlignment.Center;
+ format.Alignment = StringAlignment.Center;
+
+ using (Font f = new Font("Tahoma", pixelHeight, GraphicsUnit.Pixel))
+ {
+ using (var gPath = new GraphicsPath())
+ {
+ float emSize = g.DpiY * f.Size / POINTS_PER_INCH;
+ if (title != null)
+ {
+ gPath.AddString(title, f.FontFamily, (int)FontStyle.Bold, emSize, new Rectangle(0, TEXT_MARGIN_PIXELS, image.Width, pixelHeight), format);
+ }
+
+ gPath.AddString(timeStamp /* + " -- " + fps.ToString("0.00") + " fps" */, f.FontFamily, (int)FontStyle.Bold, emSize, new Rectangle(0, image.Height - (pixelHeight + TEXT_MARGIN_PIXELS), image.Width, pixelHeight), format);
+ g.FillPath(Brushes.White, gPath);
+ g.DrawPath(new Pen(Brushes.Black, pixelHeight * TEXT_OUTLINE_REL_THICKNESS), gPath);
+ }
+ }
+ }
+
+ if (!string.IsNullOrWhiteSpace(lightningPaymentRequest))
+ {
+ using var qrCode = GetCachedQRCode(lightningPaymentRequest);
+
+ int xCenter = (image.Width - QR_CODE_DIMENSION) / 2;
+ int yCenter = (image.Height - QR_CODE_DIMENSION) / 2;
+ Rectangle dstRect = new Rectangle(xCenter, yCenter, QR_CODE_DIMENSION, QR_CODE_DIMENSION);
+ g.DrawImage(qrCode, dstRect);
+ }
+ else
+ {
+ ClearQRCodeCache();
+ }
+ }
+
+ private Bitmap GetCachedQRCode(string lightningPaymentRequest)
+ {
+ if (string.IsNullOrWhiteSpace(lightningPaymentRequest))
+ {
+ throw new ArgumentException("Payment request must be provided", nameof(lightningPaymentRequest));
+ }
+
+ // Use Lazy to ensure only one QR code is generated per unique payment request.
+ var lazyQr = _qrCodeCache.GetOrAdd(lightningPaymentRequest, key =>
+ new Lazy(() => GenerateQRCode(key))
+ );
+
+ // Clone the bitmap to ensure thread safety.
+ return (Bitmap)lazyQr.Value.Clone();
+ }
+
+ private void ClearQRCodeCache()
+ {
+ foreach (var key in _qrCodeCache.Keys)
+ {
+ if (_qrCodeCache.TryRemove(key, out var lazyBitmap))
+ {
+ if (lazyBitmap.IsValueCreated)
+ {
+ lazyBitmap.Value.Dispose();
+ }
+ }
+ }
+ }
+
+ private Bitmap GenerateQRCode(string lightningPaymentRequest)
+ {
+ using QRCodeGenerator qrGenerator = new();
+ using QRCodeData qrCodeData = qrGenerator.CreateQrCode(lightningPaymentRequest, QRCodeGenerator.ECCLevel.Q);
+ using QRCode qrCode = new(qrCodeData);
+
+ Bitmap qrBitmap = qrCode.GetGraphic(20);
+ return qrBitmap;
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningClientFactory.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningClientFactory.cs
new file mode 100755
index 000000000..02830b8c9
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningClientFactory.cs
@@ -0,0 +1,210 @@
+//-----------------------------------------------------------------------------
+// Filename: LightningClientFactory.cs
+//
+// Description: Factory class to create a new lightning client.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 23 Feb 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using Grpc.Core;
+using Grpc.Net.Client;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.Logging;
+using NBitcoin.DataEncoders;
+using System;
+using System.IO;
+using System.Linq;
+using System.Net.Http;
+using System.Net.Security;
+using System.Security.Cryptography.X509Certificates;
+using System.Threading.Tasks;
+
+namespace demo;
+
+public interface ILightningClientFactory
+{
+ Lnrpc.Lightning.LightningClient GetClient();
+
+ Invoicesrpc.Invoices.InvoicesClient GetInvoicesClient();
+
+ Routerrpc.Router.RouterClient GetRouterClient();
+}
+
+public class LightningClientFactory : ILightningClientFactory
+{
+ private ILogger _logger;
+ private IConfiguration _config;
+
+ private readonly string _lndUrl;
+ private readonly string _lndMacaroonHex;
+ private readonly X509Certificate2 _lndCertificate;
+
+ public LightningClientFactory(
+ ILogger logger,
+ IConfiguration config)
+ {
+ _logger = logger;
+ _config = config;
+
+ _lndUrl = config[ConfigKeys.LND_URL] ?? string.Empty;
+ _lndMacaroonHex = LoadLndMacaroonAsHex();
+ _lndCertificate = LoadLndPublicCertificate() ?? new X509Certificate2([]);
+ }
+
+ private string LoadLndMacaroonAsHex()
+ {
+ var macaroonFilePath = _config[ConfigKeys.LND_MACAROON_PATH];
+
+ if (!string.IsNullOrWhiteSpace(macaroonFilePath))
+ {
+ if(!File.Exists(macaroonFilePath))
+ {
+ _logger.LogError($"Macaroon file does not exist at {macaroonFilePath}.");
+ }
+ else
+ {
+ var macaroonBytes = File.ReadAllBytes(macaroonFilePath);
+ return Encoders.Hex.EncodeData(macaroonBytes);
+ }
+ }
+
+ return _config[ConfigKeys.LND_MACAROON_HEX] ?? string.Empty;
+ }
+
+ private X509Certificate2? LoadLndPublicCertificate()
+ {
+ X509Certificate2? certificate = null;
+ var certificateFileName = _config[ConfigKeys.LND_CERTIFICATE_PATH];
+
+ if (string.IsNullOrEmpty(certificateFileName))
+ {
+ var base64Cert = _config[ConfigKeys.LND_CERTIFICATE_BASE64];
+ if (!string.IsNullOrEmpty(base64Cert))
+ {
+ certificate = new X509Certificate2(Convert.FromBase64String(base64Cert));
+
+ if (certificate != null)
+ {
+ //_logger.LogInformation($"LND certificate loaded from base64 config setting, thumbprint {certificate.Thumbprint}.");
+ }
+ else
+ {
+ _logger.LogError($"LND base64 certificate could not be loaded from {base64Cert}.");
+ }
+ }
+ else
+ {
+ _logger.LogError($"LND base64 certificate from config setting {ConfigKeys.LND_CERTIFICATE_BASE64} was empty.");
+ }
+ }
+ else
+ {
+ if (File.Exists(certificateFileName))
+ {
+ certificate = new X509Certificate2(certificateFileName);
+
+ if (certificate != null)
+ {
+ //_logger.LogInformation($"LND certificate loaded from file {certificateFileName}, thumbprint {certificate.Thumbprint}.");
+ }
+ else
+ {
+ _logger.LogError($"LND file certificate could not be loaded from {certificateFileName}.");
+ }
+ }
+ else
+ {
+ _logger.LogError($"LND certificate was not found at the specified file path of {certificateFileName}.");
+ }
+ }
+
+ return certificate;
+ }
+
+ public Lnrpc.Lightning.LightningClient GetClient()
+ {
+ var credentials = ChannelCredentials.Create(new SslCredentials(), CallCredentials.FromInterceptor(AddMacaroon));
+
+ var lndGrpcChannel = GrpcChannel.ForAddress(_lndUrl,
+ new GrpcChannelOptions { HttpHandler = GetSelfSignedCertificateHandler(_lndCertificate), Credentials = credentials });
+ var lightningClient = new Lnrpc.Lightning.LightningClient(lndGrpcChannel);
+
+ return lightningClient;
+ }
+
+ public Invoicesrpc.Invoices.InvoicesClient GetInvoicesClient()
+ {
+ var credentials = ChannelCredentials.Create(new SslCredentials(), CallCredentials.FromInterceptor(AddMacaroon));
+
+ var lndGrpcChannel = GrpcChannel.ForAddress(_lndUrl,
+ new GrpcChannelOptions { HttpHandler = GetSelfSignedCertificateHandler(_lndCertificate), Credentials = credentials });
+ var invoicesClient = new Invoicesrpc.Invoices.InvoicesClient(lndGrpcChannel);
+
+ return invoicesClient;
+ }
+
+ public Routerrpc.Router.RouterClient GetRouterClient()
+ {
+ var credentials = ChannelCredentials.Create(new SslCredentials(), CallCredentials.FromInterceptor(AddMacaroon));
+
+ var lndGrpcChannel = GrpcChannel.ForAddress(_lndUrl,
+ new GrpcChannelOptions { HttpHandler = GetSelfSignedCertificateHandler(_lndCertificate), Credentials = credentials });
+ var routerClient = new Routerrpc.Router.RouterClient(lndGrpcChannel);
+
+ return routerClient;
+ }
+
+ private Task AddMacaroon(AuthInterceptorContext context, Metadata metadata)
+ {
+ metadata.Add(new Metadata.Entry("macaroon", _lndMacaroonHex));
+ return Task.CompletedTask;
+ }
+
+ private HttpMessageHandler GetSelfSignedCertificateHandler(X509Certificate2 lndCertificate)
+ {
+ return new SocketsHttpHandler
+ {
+ SslOptions = new SslClientAuthenticationOptions
+ {
+ RemoteCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) =>
+ {
+ if(sslPolicyErrors == SslPolicyErrors.None)
+ {
+ return true;
+ }
+
+ // Allow untrusted root, self-signed certificate or both.
+ if (sslPolicyErrors == SslPolicyErrors.RemoteCertificateChainErrors ||
+ sslPolicyErrors == SslPolicyErrors.RemoteCertificateNameMismatch ||
+ sslPolicyErrors == (SslPolicyErrors.RemoteCertificateChainErrors | SslPolicyErrors.RemoteCertificateNameMismatch))
+ {
+ // Create a new X509Chain and add the LND certificate as a trusted root
+ var customChain = new X509Chain();
+ customChain.ChainPolicy.ExtraStore.Add(lndCertificate);
+ customChain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck;
+ customChain.ChainPolicy.VerificationFlags = X509VerificationFlags.AllowUnknownCertificateAuthority;
+
+ // Verify the server certificate against the trusted root
+ var isValid = certificate != null ? customChain.Build(new X509Certificate2(certificate)) : false;
+
+ // Check if the LND certificate is in the custom chain
+ var isLndCertInChain = customChain.ChainElements
+ .Cast()
+ .Any(x => x.Certificate.Thumbprint == lndCertificate.Thumbprint);
+
+ return isValid && isLndCertInChain;
+ }
+
+ return false;
+ }
+ }
+ };
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningInvoiceEventService.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningInvoiceEventService.cs
new file mode 100755
index 000000000..7c0ae3dd5
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningInvoiceEventService.cs
@@ -0,0 +1,31 @@
+//-----------------------------------------------------------------------------
+// Filename: LightningInvoiceEventService.cs
+//
+// Description: Reactive event hub service for Lightning invoice notifications.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 01 Mar 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Reactive.Subjects;
+
+namespace demo;
+
+public class LightningInvoiceEventService
+{
+ private readonly ISubject _invoiceSubject = new Subject();
+
+ public IObservable InvoiceStream => _invoiceSubject;
+
+ public void PublishInvoiceEvent(LightningInvoicedNotification notification)
+ {
+ _invoiceSubject.OnNext(notification);
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningPaymentService.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningPaymentService.cs
new file mode 100755
index 000000000..eff958bf1
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningPaymentService.cs
@@ -0,0 +1,118 @@
+//-----------------------------------------------------------------------------
+// Filename: PeerConnectionPayState.cs
+//
+// Description: Maintains the payment state of each WebRTC peer.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 23 Feb 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Reactive.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using NBitcoin.DataEncoders;
+
+namespace demo;
+
+public interface ILightningPaymentService
+{
+ event Action OnLightningInvoiceSettled;
+
+ event Action OnLightningInvoiceExpired;
+
+ event Action OnLightningPaymentRequestGenerated;
+
+ void RequestLightningInvoice(string description, int expirySeconds);
+}
+
+public class LightningPaymentService : ILightningPaymentService, IDisposable
+{
+ private const int INVOICE_AMOUNT_MILLISATS = 10000;
+
+ private readonly ILogger _logger;
+ private readonly ILightningService _lightningService;
+ private Task? _getInvoiceTask = null;
+
+ private readonly IDisposable _subscription;
+
+ public event Action OnLightningInvoiceSettled = () => { };
+ public event Action OnLightningInvoiceExpired = () => { };
+ public event Action OnLightningPaymentRequestGenerated = (payreq) => { };
+
+ private int _hasLightningInvoiceBeenRequested = 0;
+
+ private string? _lightningInvoiceRHash;
+
+ public LightningPaymentService(
+ ILogger logger,
+ ILightningService lightningService,
+ LightningInvoiceEventService lightningInvoiceEventService)
+ {
+ _logger = logger;
+ _lightningService = lightningService;
+
+ _subscription = lightningInvoiceEventService.InvoiceStream.Subscribe(OnInvoiceSettled);
+ }
+
+ public void OnInvoiceSettled(LightningInvoicedNotification notification)
+ {
+ if (notification.RHash == _lightningInvoiceRHash)
+ {
+ if (notification.NotificationType == LightningInvoiceNotificationTypeEnum.Settled)
+ {
+ _logger.LogDebug($"{nameof(LightningPaymentService)} invoice {notification.RHash} successfully settled.");
+ OnLightningInvoiceSettled?.Invoke();
+ }
+ else if(notification.NotificationType == LightningInvoiceNotificationTypeEnum.Cancelled)
+ {
+ _logger.LogDebug($"{nameof(LightningPaymentService)} invoice {notification.RHash} expired.");
+ OnLightningInvoiceExpired?.Invoke();
+ }
+
+ _hasLightningInvoiceBeenRequested = 0;
+ _lightningInvoiceRHash = null;
+ }
+ }
+
+ public void RequestLightningInvoice(string description, int expirySeconds)
+ {
+ if (Interlocked.CompareExchange(ref _hasLightningInvoiceBeenRequested, 1, 0) == 0)
+ {
+ _logger.LogDebug($"{nameof(RequestLightningInvoice)} for {INVOICE_AMOUNT_MILLISATS} msats and {expirySeconds} expiry seconds.");
+
+ _getInvoiceTask = _lightningService.CreateInvoiceAsync(INVOICE_AMOUNT_MILLISATS, description, expirySeconds);
+
+ _getInvoiceTask
+ .ContinueWith(t =>
+ {
+ if (t.Status == TaskStatus.RanToCompletion)
+ {
+ Lnrpc.AddInvoiceResponse response = t.Result;
+ string rHash = Encoders.Hex.EncodeData(response.RHash.ToByteArray());
+
+ //_logger.LogDebug($"{nameof(RequestLightningInvoice)} successfully generated invoice with rhash {rHash}.");
+
+ _hasLightningInvoiceBeenRequested = 0;
+ _lightningInvoiceRHash = rHash;
+
+ OnLightningPaymentRequestGenerated?.Invoke(response.PaymentRequest);
+ }
+ });
+ }
+ }
+
+ public void Dispose()
+ {
+ _logger.LogDebug($"{nameof(LightningPaymentService)} dispose.");
+
+ _subscription.Dispose();
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningService.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningService.cs
new file mode 100755
index 000000000..215bb3e3e
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/LightningService.cs
@@ -0,0 +1,116 @@
+//-----------------------------------------------------------------------------
+// Filename: LightningService.cs
+//
+// Description: Service to manage the creation and event handling for Lightning
+// invoices and payments.
+//
+// LND GRPC proto files:
+// https://github.com/lightningnetwork/lnd/blob/master/lnrpc/lightning.proto
+// https://github.com/lightningnetwork/lnd/blob/master/lnrpc/invoicesrpc/invoices.proto
+// https://github.com/lightningnetwork/lnd/blob/master/lnrpc/routerrpc/router.proto
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 23 Feb 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using Invoicesrpc;
+using Lnrpc;
+using Microsoft.Extensions.Logging;
+using NBitcoin.DataEncoders;
+using System.Threading.Tasks;
+
+namespace demo;
+
+public interface ILightningService
+{
+ Task GetInfoAsync();
+
+ Task GetInvoiceAsync(string paymentHash);
+
+ Task CreateInvoiceAsync(long amountMilliSatoshis, string description, long expirySeconds);
+
+ Task CancelInvoiceAsync(Google.Protobuf.ByteString rHash);
+
+ PayReq DecodePaymentRequest(string paymentRequest);
+}
+
+public class LightningService : ILightningService
+{
+ private ILogger _logger;
+
+ private readonly ILightningClientFactory _lightningClientFactory;
+
+ public LightningService(
+ ILogger logger,
+ ILightningClientFactory lightningClientFactory)
+ {
+ _logger = logger;
+ _lightningClientFactory = lightningClientFactory;
+ }
+
+ public async Task GetInfoAsync()
+ {
+ _logger.LogInformation($"{nameof(GetInfoAsync)}.");
+
+ var lightningClient = _lightningClientFactory.GetClient();
+
+ var response = await lightningClient.GetInfoAsync(new GetInfoRequest());
+
+ return response;
+ }
+
+ public async Task CreateInvoiceAsync(long amountMilliSatoshis, string description, long expirySeconds)
+ {
+ _logger.LogInformation($"{nameof(CreateInvoiceAsync)} for {amountMilliSatoshis} millisats and expiry seconds {expirySeconds}.");
+
+ var lightningClient = _lightningClientFactory.GetClient();
+
+ var invoiceRequest = new Invoice
+ {
+ Memo = description,
+ ValueMsat = amountMilliSatoshis,
+ Expiry = expirySeconds
+ };
+
+ return await lightningClient.AddInvoiceAsync(invoiceRequest);
+ }
+
+ public PayReq DecodePaymentRequest(string paymentRequest)
+ {
+ _logger.LogInformation($"{nameof(DecodePaymentRequest)}");
+
+ var lightningClient = _lightningClientFactory.GetClient();
+
+ var payReqString = new PayReqString { PayReq = paymentRequest };
+ var decodedInvoice = lightningClient.DecodePayReq(payReqString);
+
+ return decodedInvoice;
+ }
+
+ public async Task GetInvoiceAsync(string paymentHash)
+ {
+ _logger.LogInformation($"{nameof(GetInvoiceAsync)} for payment hash {paymentHash}.");
+
+ var lightningClient = _lightningClientFactory.GetClient();
+
+ return await lightningClient.LookupInvoiceAsync(
+ new PaymentHash { RHash = Google.Protobuf.ByteString.CopyFrom(Encoders.Hex.DecodeData(paymentHash)) });
+ }
+
+ public async Task CancelInvoiceAsync(Google.Protobuf.ByteString rHash)
+ {
+ _logger.LogInformation($"{nameof(CancelInvoiceAsync)} for rhash {rHash.ToBase64()}.");
+
+ var invoicesClient = _lightningClientFactory.GetInvoicesClient();
+
+ var cancelInvoiceRequest = new CancelInvoiceMsg { PaymentHash = rHash };
+
+ return await invoicesClient.CancelInvoiceAsync(cancelInvoiceRequest);
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/PaidWebRtcConnection.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/PaidWebRtcConnection.cs
new file mode 100755
index 000000000..ecb18b3b3
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/PaidWebRtcConnection.cs
@@ -0,0 +1,166 @@
+//-----------------------------------------------------------------------------
+// Filename: PaidWebRtcConnection.cs
+//
+// Description: Manages the creation and lifeftime of a paid WebRTC connection.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 23 Feb 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using Microsoft.Extensions.Logging;
+using SIPSorcery.Media;
+using SIPSorcery.Net;
+using SIPSorceryMedia.FFmpeg;
+using System;
+using System.Drawing;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace demo;
+
+public interface IPaidWebRtcConnection
+{
+ Task CreatePeerConnection(string peerID);
+}
+
+public class PaidWebRtcConnection : IPaidWebRtcConnection, IDisposable
+{
+ private const int FRAMES_PER_SECOND = 5; //30;
+ private const int CUSTOM_FRAME_GENERATE_PERIOD_MILLISECONDS = 100;
+
+ private readonly ILogger _logger;
+ private readonly IAnnotatedBitmapGenerator _annotatedBitmapGenerator;
+ private readonly IFrameConfigStateMachine _frameConfigStateMachine;
+
+ private Timer? _setBitmapSourceTimer = null;
+
+ public PaidWebRtcConnection(
+ ILogger logger,
+ IAnnotatedBitmapGenerator annotatedBitmapGenerator,
+ IFrameConfigStateMachine frameConfigStateMachine)
+ {
+ _logger = logger;
+ _annotatedBitmapGenerator = annotatedBitmapGenerator;
+ _frameConfigStateMachine = frameConfigStateMachine;
+ }
+
+ public Task CreatePeerConnection(string peerID)
+ {
+ var pc = new RTCPeerConnection(null);
+
+ Bitmap sourceBitmap = new Bitmap(PaymentStateMachine.FREE_IMAGE_PATH);
+
+ var bitmapSource = new VideoBitmapSource(new FFmpegVideoEncoder());
+ bitmapSource.SetFrameRate(FRAMES_PER_SECOND);
+ bitmapSource.SetSourceBitmap(sourceBitmap);
+
+ MediaStreamTrack track = new MediaStreamTrack(bitmapSource.GetVideoSourceFormats(), MediaStreamStatusEnum.SendOnly);
+ pc.addTrack(track);
+
+ bitmapSource.OnVideoSourceEncodedSample += pc.SendVideo;
+ pc.OnVideoFormatsNegotiated += (formats) => bitmapSource.SetVideoSourceFormat(formats.First());
+
+ HandlePeerConnectionStateChange(pc, bitmapSource, peerID);
+ SetDiagnosticLogging(pc);
+
+ return Task.FromResult(pc);
+ }
+
+ private Timer CreateGenerateBitmapTimer(VideoBitmapSource bitmapSource, string peerID)
+ {
+ return new Timer(_ =>
+ {
+ var frameConfig = _frameConfigStateMachine.GetPaidFrameConfig();
+
+ var annotatedBitmap = _annotatedBitmapGenerator.GetAnnotatedBitmap(frameConfig);
+
+ if (annotatedBitmap != null)
+ {
+ bitmapSource.SetSourceBitmap(annotatedBitmap);
+ annotatedBitmap.Dispose();
+ }
+ },
+ null, TimeSpan.Zero, TimeSpan.FromMilliseconds(CUSTOM_FRAME_GENERATE_PERIOD_MILLISECONDS));
+ }
+
+ private void HandlePeerConnectionStateChange(RTCPeerConnection pc, VideoBitmapSource bitmapSource, string peerID)
+ {
+ pc.onconnectionstatechange += async (state) =>
+ {
+ _logger.LogDebug($"Peer {peerID} connection state change to {state}.");
+
+ if (state is RTCPeerConnectionState.closed or
+ RTCPeerConnectionState.failed or
+ RTCPeerConnectionState.disconnected)
+ {
+ await ClosePeerConnectionResources(peerID, _setBitmapSourceTimer, bitmapSource);
+ }
+
+ if (state == RTCPeerConnectionState.failed)
+ {
+ pc.Close("ice disconnection");
+ }
+ else if (state == RTCPeerConnectionState.connected)
+ {
+ _logger.LogDebug($"Starting bitmap source for peer {peerID}.");
+ await bitmapSource.StartVideo();
+
+ if (_setBitmapSourceTimer == null)
+ {
+ _logger.LogDebug($"Starting bitmap create bitmap frame for peer {peerID}.");
+ _setBitmapSourceTimer = CreateGenerateBitmapTimer(bitmapSource, peerID);
+ }
+ }
+ };
+ }
+
+ private async Task ClosePeerConnectionResources(string peerID, Timer? setBitmapSourceTimer, VideoBitmapSource bitmapSource)
+ {
+ _logger.LogDebug($"{nameof(ClosePeerConnectionResources)} for peer ID {peerID}.");
+
+ if (setBitmapSourceTimer != null)
+ {
+ await setBitmapSourceTimer.DisposeAsync();
+ setBitmapSourceTimer = null;
+ }
+
+ if (bitmapSource != null && !bitmapSource.IsClosed)
+ {
+ await bitmapSource.CloseVideo();
+ bitmapSource.Dispose();
+ }
+ }
+
+ private void SetDiagnosticLogging(RTCPeerConnection pc)
+ {
+ // Diagnostics.
+ pc.oniceconnectionstatechange += (state) => _logger.LogDebug($"ICE connection state change to {state}.");
+ pc.onsignalingstatechange += () =>
+ {
+ if (pc.signalingState == RTCSignalingState.have_local_offer)
+ {
+ _logger.LogDebug($"Local SDP set, type {pc.localDescription.type}.");
+ _logger.LogDebug(pc.localDescription.sdp.ToString());
+ }
+ else if (pc.signalingState == RTCSignalingState.have_remote_offer)
+ {
+ _logger.LogDebug($"Remote SDP set, type {pc.remoteDescription.type}.");
+ _logger.LogDebug(pc.remoteDescription.sdp.ToString());
+ }
+ };
+ }
+
+ public void Dispose()
+ {
+ _logger.LogDebug($"{nameof(PaidWebRtcConnection)} dispose.");
+
+ _setBitmapSourceTimer?.Dispose();
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/PaidWebRtcConnectionFactory.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/PaidWebRtcConnectionFactory.cs
new file mode 100755
index 000000000..5b7dac373
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/Services/PaidWebRtcConnectionFactory.cs
@@ -0,0 +1,50 @@
+//-----------------------------------------------------------------------------
+// Filename: PaidWebRtcConnectionFactory.cs
+//
+// Description: Factory class for generating new PaidWebRTCConnection instances.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 01 Mar 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Logging;
+
+namespace demo;
+
+public interface IPaidWebRtcConnectionFactory
+{
+ IPaidWebRtcConnection CreatePaidWebRTCConnection(string peerID);
+}
+
+public class PaidWebRtcConnectionFactory : IPaidWebRtcConnectionFactory
+{
+ private readonly ILoggerFactory _loggerFactory;
+ private readonly IServiceProvider _serviceProvider;
+
+ public PaidWebRtcConnectionFactory(
+ ILoggerFactory loggerFactory,
+ IServiceProvider serviceProvider)
+ {
+ _loggerFactory = loggerFactory;
+ _serviceProvider = serviceProvider;
+ }
+
+ public IPaidWebRtcConnection CreatePaidWebRTCConnection(string peerID)
+ {
+ var annotatedBitmapGenerator = _serviceProvider.GetRequiredService();
+ var frameConfigStateMachine = _serviceProvider.GetRequiredService();
+
+ return new PaidWebRtcConnection(
+ _loggerFactory.CreateLogger(),
+ annotatedBitmapGenerator,
+ frameConfigStateMachine);
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/StateMachines/PaymentStateMachine.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/StateMachines/PaymentStateMachine.cs
new file mode 100755
index 000000000..b2855ac8a
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/StateMachines/PaymentStateMachine.cs
@@ -0,0 +1,275 @@
+//-----------------------------------------------------------------------------
+// Filename: PaymentStateMachine.cs
+//
+// Description: State machine for managing the payment state of a paid webrtc
+// connection which dictates the bitmap source for the video stream.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 01 Mar 2025 Aaron Clauson Created, Dublin, Ireland.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Drawing;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Stateless;
+
+namespace demo;
+
+public interface IFrameConfigStateMachine
+{
+ PaidVideoFrameConfig GetPaidFrameConfig();
+}
+
+public class PaymentStateMachine : IFrameConfigStateMachine
+{
+ public const string FREE_IMAGE_PATH = "media/simple_flower.jpg";
+ private const string PAID_IMAGE_PATH = "media/real_flowers.jpg";
+
+ private const int FREE_PERIOD_SECONDS = 8;
+ private const int TRANSITION_PERIOD_SECONDS = 7;
+ private const int PAID_PERIOD_SECONDS = 10;
+ private const int PAID_WAITING_SECONDS = 15;
+ private const int LIGHNTING_INVOICE_EXPIRY_SECONDS = 20;
+
+ private const string INITIALISING_TITLE = "Initialising";
+ private const string FREE_PERIOD_TITLE = "Free Period";
+ private const string TRANSITION_PERIOD_TITLE = "Transition Period";
+ private const string WAITING_FOR_PAYMENT_PERIOD_TITLE = "Waiting for Payment";
+ private const string PAID_PERIOD_TITLE = "Thanks for Paying!";
+ private const string INVOICE_DESCRIPTION = "Pay for more time!";
+
+ private const int MAX_ALPHA_TRANSPARENCY = 200;
+
+ private readonly ILogger _logger;
+ private readonly ILightningPaymentService _lightningPaymentService;
+ private readonly StateMachine _paymentStateMachine;
+ private readonly PaidVideoFrameConfig _paidFrameConfig;
+
+ private DateTimeOffset _stateEntryTime = DateTimeOffset.MinValue;
+ private string? _lightningPaymentRequest = null;
+ private Timer? _lightingInvoiceExpiredTimer = null;
+
+ public PaymentStateMachine(
+ ILogger logger,
+ ILightningPaymentService lightningPaymentService)
+ {
+ _logger = logger;
+ _lightningPaymentService = lightningPaymentService;
+ _paymentStateMachine = CreatePaymentStateMachine();
+
+ _paidFrameConfig = new PaidVideoFrameConfig(DateTimeOffset.Now, null, 0, Color.Green, INITIALISING_TITLE, false, FREE_IMAGE_PATH);
+ }
+
+ private StateMachine CreatePaymentStateMachine()
+ {
+ var machine = new StateMachine(PaymentStatus.Initial);
+
+ machine.OnTransitioned(t =>
+ {
+ _stateEntryTime = DateTimeOffset.Now;
+ _logger.LogDebug($"Payment state machine transitioned from {t.Source} to {t.Destination}.");
+ });
+
+ machine.Configure(PaymentStatus.Initial)
+ .PermitIf(PaymentStateTrigger.Tick, PaymentStatus.FreePeriod);
+
+ machine.Configure(PaymentStatus.FreePeriod)
+ .IgnoreIf(PaymentStateTrigger.Tick, () => !HasExpired(PaymentStatus.FreePeriod))
+ .PermitIf(PaymentStateTrigger.Tick, PaymentStatus.FreeTransition, () => HasExpired(PaymentStatus.FreePeriod))
+ .Ignore(PaymentStateTrigger.InvoiceExpired);
+
+ machine.Configure(PaymentStatus.FreeTransition)
+ .OnEntry(() => _lightningPaymentService.RequestLightningInvoice(INVOICE_DESCRIPTION, LIGHNTING_INVOICE_EXPIRY_SECONDS))
+ .IgnoreIf(PaymentStateTrigger.Tick, () => !HasExpired(PaymentStatus.FreeTransition))
+ .PermitIf(PaymentStateTrigger.Tick, PaymentStatus.FreeWaitingForPayment, () => HasExpired(PaymentStatus.FreeTransition))
+ .Permit(PaymentStateTrigger.InvoiceExpired, PaymentStatus.FreePeriod)
+ .Permit(PaymentStateTrigger.InvoicePaid, PaymentStatus.PaidPeriod);
+
+ machine.Configure(PaymentStatus.FreeWaitingForPayment)
+ .Ignore(PaymentStateTrigger.Tick)
+ .Permit(PaymentStateTrigger.InvoiceExpired, PaymentStatus.FreePeriod)
+ .Permit(PaymentStateTrigger.InvoicePaid, PaymentStatus.PaidPeriod);
+
+ machine.Configure(PaymentStatus.PaidPeriod)
+ .IgnoreIf(PaymentStateTrigger.Tick, () => !HasExpired(PaymentStatus.PaidPeriod))
+ .PermitIf(PaymentStateTrigger.Tick, PaymentStatus.PaidTransition, () => HasExpired(PaymentStatus.PaidPeriod))
+ .Ignore(PaymentStateTrigger.InvoiceExpired);
+
+ machine.Configure(PaymentStatus.PaidTransition)
+ .OnEntry(() => _lightningPaymentService.RequestLightningInvoice(INVOICE_DESCRIPTION, LIGHNTING_INVOICE_EXPIRY_SECONDS))
+ .IgnoreIf(PaymentStateTrigger.Tick, () => !HasExpired(PaymentStatus.PaidTransition))
+ .PermitIf(PaymentStateTrigger.Tick, PaymentStatus.PaidWaitingForPayment, () => HasExpired(PaymentStatus.PaidTransition))
+ .Permit(PaymentStateTrigger.InvoiceExpired, PaymentStatus.FreePeriod)
+ .Permit(PaymentStateTrigger.InvoicePaid, PaymentStatus.PaidPeriod);
+
+ machine.Configure(PaymentStatus.PaidWaitingForPayment)
+ .IgnoreIf(PaymentStateTrigger.Tick, () => !HasExpired(PaymentStatus.PaidWaitingForPayment))
+ .Permit(PaymentStateTrigger.InvoiceExpired, PaymentStatus.FreePeriod)
+ .Permit(PaymentStateTrigger.InvoicePaid, PaymentStatus.PaidPeriod);
+
+ _lightningPaymentService.OnLightningInvoiceSettled += async () =>
+ {
+ await ResetLightningInvoiceState();
+ _paymentStateMachine.Fire(PaymentStateTrigger.InvoicePaid);
+ };
+ _lightningPaymentService.OnLightningInvoiceExpired += async () =>
+ {
+ await ResetLightningInvoiceState();
+ _paymentStateMachine.Fire(PaymentStateTrigger.InvoiceExpired);
+ };
+ _lightningPaymentService.OnLightningPaymentRequestGenerated += async (payreq) =>
+ {
+ await ResetLightningInvoiceState();
+
+ _lightningPaymentRequest = payreq;
+
+ _lightingInvoiceExpiredTimer = new Timer(_ =>
+ {
+ _logger.LogDebug("Lightning payment request timer expired.");
+ _paymentStateMachine.Fire(PaymentStateTrigger.InvoiceExpired);
+
+ }, null, LIGHNTING_INVOICE_EXPIRY_SECONDS * 1000, Timeout.Infinite);
+ };
+
+ return machine;
+ }
+
+ public PaidVideoFrameConfig GetPaidFrameConfig()
+ {
+ try
+ {
+ _paymentStateMachine.Fire(PaymentStateTrigger.Tick);
+ }
+ catch(Exception excp)
+ {
+ _logger.LogError("State machine internal exception. {excp}", excp);
+ }
+
+ int secondsRemaining = SecondsRemaining(_stateEntryTime, _paymentStateMachine.State);
+
+ return GetFrameConfig(_paymentStateMachine.State, secondsRemaining, _lightningPaymentRequest);
+ }
+
+ private async Task ResetLightningInvoiceState()
+ {
+ if (_lightingInvoiceExpiredTimer != null)
+ {
+ await _lightingInvoiceExpiredTimer.DisposeAsync();
+ }
+
+ _lightningPaymentRequest = null;
+ }
+
+ private bool HasExpired(PaymentStatus currentState)
+ => SecondsRemaining(_stateEntryTime, currentState) <= 0;
+
+ private int SecondsRemaining(DateTimeOffset startTime, PaymentStatus currentState)
+ {
+ int secondsInCurrentState = (int)(DateTimeOffset.Now - _stateEntryTime).TotalSeconds;
+
+ int secondsRemaining = currentState switch
+ {
+ PaymentStatus.FreePeriod => FREE_PERIOD_SECONDS - secondsInCurrentState,
+ PaymentStatus.FreeTransition => TRANSITION_PERIOD_SECONDS - secondsInCurrentState,
+ PaymentStatus.FreeWaitingForPayment => 0,
+ PaymentStatus.PaidPeriod => PAID_PERIOD_SECONDS - secondsInCurrentState,
+ PaymentStatus.PaidTransition => TRANSITION_PERIOD_SECONDS - secondsInCurrentState,
+ PaymentStatus.PaidWaitingForPayment => PAID_WAITING_SECONDS - secondsInCurrentState,
+ _ => 0
+ };
+
+ return secondsRemaining < 0 ? 0 : secondsRemaining;
+ }
+
+ private int GetOpacity(int maxAlphaTransparency, int periodSeconds, int secondsRemaining)
+ =>
+ periodSeconds == 0 || secondsRemaining == 0 ? maxAlphaTransparency :
+ (int)(maxAlphaTransparency * ((periodSeconds - secondsRemaining) / (double)periodSeconds));
+
+ private PaidVideoFrameConfig GetFrameConfig(PaymentStatus paymentStatus, int secondsRemaining, string? lightningPaymentRequest)
+ {
+ switch (paymentStatus)
+ {
+ case PaymentStatus.FreePeriod:
+ return _paidFrameConfig with
+ {
+ BorderColour = Color.Pink,
+ Title = FREE_PERIOD_TITLE,
+ IsPaid = false,
+ LightningPaymentRequest = null,
+ Opacity = 0,
+ ImagePath = FREE_IMAGE_PATH
+ };
+ case PaymentStatus.FreeTransition:
+ int opacityFree = GetOpacity(MAX_ALPHA_TRANSPARENCY, TRANSITION_PERIOD_SECONDS, secondsRemaining);
+ return _paidFrameConfig with
+ {
+ BorderColour = Color.Orange,
+ Title = TRANSITION_PERIOD_TITLE,
+ IsPaid = false,
+ LightningPaymentRequest = lightningPaymentRequest,
+ Opacity = opacityFree,
+ ImagePath = FREE_IMAGE_PATH
+ };
+ case PaymentStatus.FreeWaitingForPayment:
+ return _paidFrameConfig with
+ {
+ BorderColour = Color.Red,
+ Title = WAITING_FOR_PAYMENT_PERIOD_TITLE,
+ IsPaid = false,
+ LightningPaymentRequest = lightningPaymentRequest,
+ Opacity = MAX_ALPHA_TRANSPARENCY,
+ ImagePath = FREE_IMAGE_PATH
+ };
+ case PaymentStatus.PaidPeriod:
+ return _paidFrameConfig with
+ {
+ BorderColour = Color.Blue,
+ Title = PAID_PERIOD_TITLE,
+ IsPaid = true,
+ LightningPaymentRequest = null,
+ Opacity = 0,
+ ImagePath = PAID_IMAGE_PATH
+ };
+ case PaymentStatus.PaidTransition:
+ int opacityPaid = GetOpacity(MAX_ALPHA_TRANSPARENCY, TRANSITION_PERIOD_SECONDS, secondsRemaining);
+ return _paidFrameConfig with
+ {
+ BorderColour = Color.Orange,
+ Title = TRANSITION_PERIOD_TITLE,
+ IsPaid = true,
+ LightningPaymentRequest = lightningPaymentRequest,
+ Opacity = opacityPaid,
+ ImagePath = PAID_IMAGE_PATH
+ };
+ case PaymentStatus.PaidWaitingForPayment:
+ return _paidFrameConfig with
+ {
+ BorderColour = Color.Red,
+ Title = WAITING_FOR_PAYMENT_PERIOD_TITLE,
+ IsPaid = true,
+ LightningPaymentRequest = lightningPaymentRequest,
+ Opacity = MAX_ALPHA_TRANSPARENCY,
+ ImagePath = PAID_IMAGE_PATH
+ };
+ default:
+ return _paidFrameConfig with
+ {
+ BorderColour = Color.Red,
+ Title = WAITING_FOR_PAYMENT_PERIOD_TITLE,
+ IsPaid = true,
+ LightningPaymentRequest = lightningPaymentRequest,
+ Opacity = MAX_ALPHA_TRANSPARENCY,
+ ImagePath = FREE_IMAGE_PATH
+ };
+ }
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/VideoBitmapSource.cs b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/VideoBitmapSource.cs
new file mode 100755
index 000000000..6273b8f80
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/VideoBitmapSource.cs
@@ -0,0 +1,283 @@
+//-----------------------------------------------------------------------------
+// Filename: VideoBitmapSource.cs
+//
+// Description: Implements a video source from a Bitmap.
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 17 Feb 2025 Aaron Clauson Created based on VideoTestPatternSource.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Drawing.Imaging;
+using System.Runtime.InteropServices;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
+using SIPSorceryMedia.Abstractions;
+
+namespace SIPSorcery.Media;
+
+public class VideoBitmapSource : IVideoSource, IDisposable
+{
+ private const int VIDEO_SAMPLING_RATE = 90000;
+ private const int MAXIMUM_FRAMES_PER_SECOND = 60; // Note the Threading.Timer's maximum callback rate is approx 60/s so allowing higher has no effect.
+ private const int DEFAULT_FRAMES_PER_SECOND = 30;
+ private const int MINIMUM_FRAMES_PER_SECOND = 1;
+ private const int TIMER_DISPOSE_WAIT_MILLISECONDS = 1000;
+ private const int VP8_SUGGESTED_FORMAT_ID = 96;
+ private const int H264_SUGGESTED_FORMAT_ID = 100;
+
+ public static ILogger logger = NullLogger.Instance;
+
+ public static readonly List SupportedFormats = new List
+ {
+ new VideoFormat(VideoCodecsEnum.VP8, VP8_SUGGESTED_FORMAT_ID, VIDEO_SAMPLING_RATE),
+ new VideoFormat(VideoCodecsEnum.H264, H264_SUGGESTED_FORMAT_ID, VIDEO_SAMPLING_RATE, "packetization-mode=1")
+ };
+
+ private int _frameSpacing;
+ private Timer _sendTimer;
+ private bool _isStarted;
+ private bool _isPaused;
+ private bool _isClosed;
+ private int _frameCount;
+ private IVideoEncoder _videoEncoder;
+ private MediaFormatManager _formatManager;
+
+ private int _bitmapWidth;
+ private int _bitmapHeight;
+ private byte[] _i420Buffer = [];
+ private byte[] _bgrBuffer = [];
+
+ ///
+ /// Unencoded test pattern samples.
+ ///
+ public event RawVideoSampleDelegate OnVideoSourceRawSample = delegate { };
+
+#pragma warning disable CS0067
+ public event RawVideoSampleFasterDelegate OnVideoSourceRawSampleFaster = delegate { };
+#pragma warning restore CS0067
+
+ ///
+ /// If a video encoder has been set then this event contains the encoded video
+ /// samples.
+ ///
+ public event EncodedSampleDelegate OnVideoSourceEncodedSample = delegate { };
+
+ public event SourceErrorDelegate OnVideoSourceError = delegate { };
+
+ public bool IsClosed => _isClosed;
+
+ public VideoBitmapSource(IVideoEncoder encoder)
+ {
+ _videoEncoder = encoder;
+
+ _formatManager = new MediaFormatManager(SupportedFormats);
+
+ _sendTimer = new Timer(SendFrame, null, Timeout.Infinite, Timeout.Infinite);
+ _frameSpacing = 1000 / DEFAULT_FRAMES_PER_SECOND;
+ }
+
+ public void RestrictFormats(Func filter) => _formatManager.RestrictFormats(filter);
+ public List GetVideoSourceFormats() => _formatManager.GetSourceFormats();
+ public void SetVideoSourceFormat(VideoFormat videoFormat) => _formatManager.SetSelectedFormat(videoFormat);
+ public List GetVideoSinkFormats() => _formatManager.GetSourceFormats();
+ public void SetVideoSinkFormat(VideoFormat videoFormat) => _formatManager.SetSelectedFormat(videoFormat);
+
+ public void ForceKeyFrame() => _videoEncoder?.ForceKeyFrame();
+ public bool HasEncodedVideoSubscribers() => OnVideoSourceEncodedSample != null;
+
+ public void ExternalVideoSourceRawSample(uint durationMilliseconds, int width, int height, byte[] sample, VideoPixelFormatsEnum pixelFormat) =>
+ throw new NotImplementedException("The test pattern video source does not offer any encoding services for external sources.");
+
+ public void ExternalVideoSourceRawSampleFaster(uint durationMilliseconds, RawImage rawImage) =>
+ throw new NotImplementedException("The test pattern video source does not offer any encoding services for external sources.");
+
+ public Task InitialiseVideoSourceDevice() =>
+ throw new NotImplementedException("The test pattern video source does not use a device.");
+ public bool IsVideoSourcePaused() => _isPaused;
+
+ public void SetFrameRate(int framesPerSecond)
+ {
+ if (framesPerSecond < MINIMUM_FRAMES_PER_SECOND || framesPerSecond > MAXIMUM_FRAMES_PER_SECOND)
+ {
+ logger.LogWarning("{FramesPerSecond} fames per second not in the allowed range of {MinimumFramesPerSecond} to {MaximumFramesPerSecond}, ignoring.", framesPerSecond, MINIMUM_FRAMES_PER_SECOND, MAXIMUM_FRAMES_PER_SECOND);
+ }
+ else
+ {
+ _frameSpacing = 1000 / framesPerSecond;
+
+ if (_isStarted)
+ {
+ _sendTimer.Change(0, _frameSpacing);
+ }
+ }
+ }
+
+ public Task PauseVideo()
+ {
+ _isPaused = true;
+ _sendTimer.Change(Timeout.Infinite, Timeout.Infinite);
+ return Task.CompletedTask;
+ }
+
+ public Task ResumeVideo()
+ {
+ _isPaused = false;
+ _sendTimer.Change(0, _frameSpacing);
+ return Task.CompletedTask;
+ }
+
+ public Task StartVideo()
+ {
+ if (!_isStarted)
+ {
+ _isStarted = true;
+ _sendTimer.Change(0, _frameSpacing);
+ }
+
+ return Task.CompletedTask;
+ }
+
+ public Task CloseVideo()
+ {
+ if (!_isClosed)
+ {
+ _isClosed = true;
+
+ ManualResetEventSlim mre = new ManualResetEventSlim();
+ _sendTimer?.Dispose(mre.WaitHandle);
+ return Task.Run(() => mre.Wait(TIMER_DISPOSE_WAIT_MILLISECONDS));
+ }
+ return Task.CompletedTask;
+ }
+
+ public void SetSourceBitmap(Bitmap bitmap)
+ {
+ var bitmapWidth = bitmap.Width;
+ var bitmapHeight = bitmap.Height;
+
+ var i420Buffer = BitmapToI420(bitmap);
+ var bgrBuffer = PixelConverter.I420toBGR(i420Buffer, bitmapWidth, bitmapHeight, out _);
+
+ lock(_sendTimer)
+ {
+ _bitmapWidth = bitmapWidth;
+ _bitmapHeight = bitmapHeight;
+ _i420Buffer = i420Buffer;
+ _bgrBuffer = bgrBuffer;
+ }
+ }
+
+ private void SendFrame(object? state)
+ {
+ lock (_sendTimer)
+ {
+ if (!_isClosed && (OnVideoSourceRawSample != null || OnVideoSourceEncodedSample != null))
+ {
+ _frameCount++;
+
+ if (OnVideoSourceRawSample != null && _bgrBuffer != null)
+ {
+ OnVideoSourceRawSample?.Invoke((uint)_frameSpacing, _bitmapWidth, _bitmapHeight, _bgrBuffer, VideoPixelFormatsEnum.Bgr);
+ }
+
+ if (_videoEncoder != null && OnVideoSourceEncodedSample != null && _i420Buffer != null && !_formatManager.SelectedFormat.IsEmpty())
+ {
+ var encodedBuffer = _videoEncoder.EncodeVideo(_bitmapWidth, _bitmapHeight, _i420Buffer, VideoPixelFormatsEnum.I420, _formatManager.SelectedFormat.Codec);
+
+ if (encodedBuffer != null)
+ {
+ uint fps = (_frameSpacing > 0) ? 1000 / (uint)_frameSpacing : DEFAULT_FRAMES_PER_SECOND;
+ uint durationRtpTS = VIDEO_SAMPLING_RATE / fps;
+ OnVideoSourceEncodedSample.Invoke(durationRtpTS, encodedBuffer);
+ }
+ }
+
+ if (_frameCount == int.MaxValue)
+ {
+ _frameCount = 0;
+ }
+ }
+ }
+ }
+
+ private static byte[] BitmapToI420(Bitmap bitmap)
+ {
+ try
+ {
+ int width = bitmap.Width;
+ int height = bitmap.Height;
+
+ BitmapData bitmapData = bitmap.LockBits(
+ new Rectangle(0, 0, width, height),
+ ImageLockMode.ReadOnly,
+ PixelFormat.Format24bppRgb);
+
+ int rgbStride = bitmapData.Stride;
+ int yStride = width;
+ int uvStride = width / 2;
+
+ int ySize = yStride * height;
+ int uvSize = uvStride * (height / 2);
+
+ byte[] i420Buffer = new byte[ySize + 2 * uvSize]; // I420 layout: Y plane, then U plane, then V plane.
+
+ byte[] rgbBuffer = new byte[rgbStride * height];
+ Marshal.Copy(bitmapData.Scan0, rgbBuffer, 0, rgbBuffer.Length);
+ bitmap.UnlockBits(bitmapData);
+
+ int yIndex = 0;
+ int uIndex = ySize; // U plane starts after Y plane
+ int vIndex = uIndex + uvSize; // V plane starts after U plane
+
+ for (int j = 0; j < height; j++)
+ {
+ for (int i = 0; i < width; i++)
+ {
+ int rgbIndex = j * rgbStride + (i * 3);
+ byte b = rgbBuffer[rgbIndex];
+ byte g = rgbBuffer[rgbIndex + 1];
+ byte r = rgbBuffer[rgbIndex + 2];
+
+ // Convert RGB to YUV (BT.601 standard)
+ byte y = (byte)((0.299 * r) + (0.587 * g) + (0.114 * b));
+ byte u = (byte)((-0.168736 * r) + (-0.331264 * g) + (0.5 * b) + 128);
+ byte v = (byte)((0.5 * r) + (-0.418688 * g) + (-0.081312 * b) + 128);
+
+ // Write Y plane
+ i420Buffer[yIndex++] = y;
+
+ // Subsample U & V (4:2:0 means one U & V sample for every 2x2 block)
+ if (j % 2 == 0 && i % 2 == 0)
+ {
+ i420Buffer[uIndex++] = u;
+ i420Buffer[vIndex++] = v;
+ }
+ }
+ }
+
+ return i420Buffer;
+ }
+ catch (Exception)
+ {
+ return [];
+ }
+ }
+
+ public void Dispose()
+ {
+ _isClosed = true;
+ _sendTimer?.Dispose();
+ _videoEncoder?.Dispose();
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/WebRTCLightningGetStarted.csproj b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/WebRTCLightningGetStarted.csproj
new file mode 100755
index 000000000..36964a0ed
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/WebRTCLightningGetStarted.csproj
@@ -0,0 +1,45 @@
+
+
+
+ Exe
+ net8.0-windows10.0.17763.0
+ true
+ 12
+ enable
+
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/appsettings.json b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/appsettings.json
new file mode 100755
index 000000000..565802119
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/appsettings.json
@@ -0,0 +1,11 @@
+{
+ "Lnd": {
+ "Url": "https://localhost:10009",
+ "MacaroonPath": "../lnd-data/data/chain/bitcoin/signet/admin.macaroon",
+ // To get the macaroon in hex format, run the following command: xxd -p -c 1000 admin.macaroon | tr -d '\n'
+ //"MacaroonHex": "",
+ "CertificatePath": "../lnd-data/tls.cert"
+ // To get the certificate in base64 format, run the following command: cat .lnd/tls.cert | base64 -w 0
+ // "CertificateBase64": "base64 cert"
+ }
+}
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/media/real_flowers.jpg b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/media/real_flowers.jpg
new file mode 100644
index 000000000..79537cea1
Binary files /dev/null and b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/media/real_flowers.jpg differ
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/media/simple_flower.jpg b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/media/simple_flower.jpg
new file mode 100644
index 000000000..52f0dfb88
Binary files /dev/null and b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/media/simple_flower.jpg differ
diff --git a/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/wwwroot/index.html b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/wwwroot/index.html
new file mode 100755
index 000000000..f29f91785
--- /dev/null
+++ b/examples/WebRTCLightningExamples/WebRTCLightningGetStarted/wwwroot/index.html
@@ -0,0 +1,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/WebRTCLightningExamples/docker-compose.yml b/examples/WebRTCLightningExamples/docker-compose.yml
new file mode 100755
index 000000000..2a0aff0e4
--- /dev/null
+++ b/examples/WebRTCLightningExamples/docker-compose.yml
@@ -0,0 +1,79 @@
+version: '3.3'
+
+services:
+ bitcoind:
+ image: bitcoin/bitcoin:28.1
+ container_name: bitcoind
+ environment:
+ - BITCOIN_NETWORK=signet
+ volumes:
+ - ./btc-data:/home/bitcoin/.bitcoin
+ ports:
+ - "38332:38332" # RPC port for Signet
+ - "48332:48332" # ZMQ raw tx
+ - "48333:38333" # ZMQ raw block
+ command: >
+ bitcoind -signet
+ -debug=net
+ -debug=rpc
+ -server=1
+ -whitelist=127.0.0.1
+ -zmqpubrawtx=tcp://0.0.0.0:48332
+ -zmqpubrawblock=tcp://0.0.0.0:48333
+ -datadir=/home/bitcoin/.bitcoin
+ -signetchallenge=5121033da06bd7068e9859ee902a0608df9b948829718c60c587f2e497ad4d7420e43151AE
+ -rpcbind=0.0.0.0
+ -rpcport=38332
+ -rpcuser=user
+ -rpcpassword=password
+ -rpcallowip=0.0.0.0/0
+ -addnode=192.168.1.180
+ -addnode=54.220.84.212
+ -addnode=54.76.175.25
+ -deprecatedrpc=create_bdb
+
+ lnd:
+ image: lightninglabs/lnd:v0.18.5-beta
+ container_name: lnd
+ environment:
+ - BITCOIN_NETWORK=signet
+ volumes:
+ - ./lnd-data:/root/.lnd
+ ports:
+ - "9735:9735" # Lightning peer port
+ - "8080:8080" # REST API
+ - "10009:10009" # gRPC port
+ depends_on:
+ - bitcoind
+ command: >
+ lnd --bitcoin.node=bitcoind
+ --bitcoin.signet
+ --bitcoin.basefee=1000
+ --bitcoin.feerate=100
+ --bitcoind.rpchost=bitcoind:38332
+ --bitcoind.rpcuser=user
+ --bitcoind.rpcpass=password
+ --bitcoind.zmqpubrawtx=tcp://bitcoind:48332
+ --bitcoind.zmqpubrawblock=tcp://bitcoind:48333
+ --alias=sipsorcery-signet
+ --listen=0.0.0.0:9735
+ --accept-keysend
+ --restlisten=0.0.0.0:8080
+ --rpclisten=0.0.0.0:10009
+ --protocol.wumbo-channels
+
+ rtl:
+ image: shahanafarooqui/rtl:v0.15.4
+ container_name: rtl
+ volumes:
+ - ./rtl-data:/home/rtl/.rtl
+ - ./lnd-data/data/chain/bitcoin/signet/admin.macaroon:/home/rtl/.rtl/admin.macaroon
+ - ./lnd-data/tls.cert:/home/rtl/.rtl/tls.cert
+ - ./lnd-data/lnd.conf:/home/rtl/.rtl/lnd.conf
+ - ./RTL-Config.json:/RTL/RTL-Config.json # Mount the RTL config file
+ ports:
+ - "3000:3000" # RTL web interface
+ depends_on:
+ - lnd
+ command: >
+ node rtl --port 3000 --config-path /RTL/RTL-Config.json
\ No newline at end of file
diff --git a/examples/WebRTCScenarios/DataChannelBandwidth/BandwidthTestProgram.cs b/examples/WebRTCScenarios/DataChannelBandwidth/BandwidthTestProgram.cs
new file mode 100644
index 000000000..be21d322c
--- /dev/null
+++ b/examples/WebRTCScenarios/DataChannelBandwidth/BandwidthTestProgram.cs
@@ -0,0 +1,138 @@
+using System.Diagnostics;
+using System.Runtime.CompilerServices;
+
+using DataChannelBandwidth;
+
+using Microsoft.Extensions.Logging;
+
+using SIPSorcery.Net;
+
+ILoggerFactory logs = LoggerFactory.Create(
+ builder => builder.AddFilter(level => level >= LogLevel.Debug).AddConsole());
+
+var log = logs.CreateLogger("Bandwidth");
+
+// SIPSorcery.LogFactory.Set(logs);
+
+var rtcConfig = new RTCConfiguration
+{
+ iceServers = [
+ new() { urls = "stun:stun.l.google.com:19302" },
+ ],
+};
+
+long clientReceived = 0;
+long serverReceived = 0;
+
+bool closed = false;
+
+for (int i = 0; i < 1; i++)
+{
+ var launch = Stopwatch.StartNew();
+ var server = new RTCPeerConnection(rtcConfig);
+ var client = new RTCPeerConnection(rtcConfig);
+
+ client.onconnectionstatechange += state =>
+ {
+ if (state is RTCPeerConnectionState.closed or RTCPeerConnectionState.failed)
+ {
+ log.LogInformation("client connection {State}", state);
+ //Volatile.Write(ref closed, true);
+ }
+ };
+
+ client.ondatachannel += ch =>
+ {
+ new Thread(() => SendRecv(ch, ref clientReceived))
+ {
+ IsBackground = true,
+ Name = $"client {i}",
+ }.Start();
+ if (!ch.IsOpened)
+ {
+ log.LogInformation("client channel never opened");
+ Volatile.Write(ref closed, true);
+ }
+ ch.onclose += () =>
+ {
+ log.LogInformation("client channel closed");
+ Volatile.Write(ref closed, true);
+ };
+ ch.onerror += (s) =>
+ {
+ log.LogInformation("client channel error: {Message}", s);
+ Volatile.Write(ref closed, true);
+ };
+ };
+
+
+ var serverCH = await server.createDataChannel("test");
+ serverCH.onopen += () =>
+ {
+ new Thread(() => SendRecv(serverCH, ref serverReceived))
+ {
+ IsBackground = true,
+ Name = $"server {i}",
+ }.Start();
+ };
+ serverCH.onclose += () =>
+ {
+ log.LogInformation("server channel closed");
+ Volatile.Write(ref closed, true);
+ };
+ serverCH.onerror += (s) =>
+ {
+ log.LogInformation("server channel error: {Message}", s);
+ Volatile.Write(ref closed, true);
+ };
+ var offer = server.createOffer();
+ await server.setLocalDescription(offer);
+ client.setRemoteDescription(offer);
+ var answer = client.createAnswer();
+ server.setRemoteDescription(answer);
+ await client.setLocalDescription(answer);
+
+ Console.WriteLine($"launched in {launch.ElapsedMilliseconds}ms");
+}
+
+var stopwatch = Stopwatch.StartNew();
+Interlocked.Exchange(ref clientReceived, 0);
+Interlocked.Exchange(ref serverReceived, 0);
+
+while (!Volatile.Read(ref closed))
+{
+ long recvC = Interlocked.Read(ref clientReceived);
+ long recvS = Interlocked.Read(ref serverReceived);
+ double rateC = recvC / 1024 / 1024 / stopwatch.Elapsed.TotalSeconds;
+ double rateS = recvS / 1024 / 1024 / stopwatch.Elapsed.TotalSeconds;
+ // almost 2000 MB/s with TCP over loopback
+ Console.Title = $"client: {rateC:F1}MB/s server: {rateS:F1}MB/s total: {rateC + rateS:F1}MB/s";
+ Thread.Sleep(1000);
+}
+
+void Send(RTCDataChannel channel)
+{
+ byte[] sample = new byte[180_000];
+ while (true)
+ {
+ channel.send(sample);
+ }
+}
+
+void SendRecv(RTCDataChannel channel, ref long received,
+ [CallerArgumentExpression(nameof(channel))] string name = "")
+{
+ var stream = new DataChannelStream(channel);
+ var sender = new Thread(() => Send(channel))
+ {
+ IsBackground = true,
+ Name = $"{name} sender",
+ };
+ sender.Start();
+
+ byte[] buffer = new byte[200_000];
+ while (true)
+ {
+ Interlocked.Add(ref received, stream.Read(buffer));
+ }
+}
\ No newline at end of file
diff --git a/examples/WebRTCScenarios/DataChannelBandwidth/DataChannelBandwidth.csproj b/examples/WebRTCScenarios/DataChannelBandwidth/DataChannelBandwidth.csproj
new file mode 100644
index 000000000..d82759f1d
--- /dev/null
+++ b/examples/WebRTCScenarios/DataChannelBandwidth/DataChannelBandwidth.csproj
@@ -0,0 +1,22 @@
+
+
+
+ Exe
+ net6.0
+ 12
+ enable
+ enable
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/examples/WebRTCScenarios/DataChannelBandwidth/DataChannelBandwidth.sln b/examples/WebRTCScenarios/DataChannelBandwidth/DataChannelBandwidth.sln
new file mode 100644
index 000000000..624d48cb6
--- /dev/null
+++ b/examples/WebRTCScenarios/DataChannelBandwidth/DataChannelBandwidth.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.7.34202.233
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DataChannelBandwidth", "DataChannelBandwidth.csproj", "{4D400CB1-0889-4774-A676-66F6BFEE1764}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SIPSorcery", "..\..\..\src\SIPSorcery.csproj", "{B22DEBFD-1013-45D2-A8B9-6624898D33FC}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {4D400CB1-0889-4774-A676-66F6BFEE1764}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4D400CB1-0889-4774-A676-66F6BFEE1764}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4D400CB1-0889-4774-A676-66F6BFEE1764}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4D400CB1-0889-4774-A676-66F6BFEE1764}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B22DEBFD-1013-45D2-A8B9-6624898D33FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B22DEBFD-1013-45D2-A8B9-6624898D33FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B22DEBFD-1013-45D2-A8B9-6624898D33FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B22DEBFD-1013-45D2-A8B9-6624898D33FC}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {3661FD7C-0C07-4840-AAC1-AB386B5FAD96}
+ EndGlobalSection
+EndGlobal
diff --git a/examples/WebRTCScenarios/DataChannelBandwidth/DataChannelStream.cs b/examples/WebRTCScenarios/DataChannelBandwidth/DataChannelStream.cs
new file mode 100644
index 000000000..84fe9e539
--- /dev/null
+++ b/examples/WebRTCScenarios/DataChannelBandwidth/DataChannelStream.cs
@@ -0,0 +1,316 @@
+namespace DataChannelBandwidth;
+
+using System.Buffers;
+using Microsoft.Extensions.Logging;
+
+using SIPSorcery.Net;
+
+#pragma warning disable IDE0011 // Add braces
+class DataChannelStream : Stream
+{
+ readonly RTCDataChannel channel;
+ int currentMessageOffset;
+ byte[] message = [];
+ readonly CancellationTokenSource closed = new();
+ readonly SemaphoreSlim messageNeeded = new(0, 1);
+ readonly SemaphoreSlim messageAvailable = new(0, maxCount: 1);
+ readonly SemaphoreSlim writeLock = new(1, 1);
+ readonly SemaphoreSlim readLock = new(1, 1);
+ readonly ILogger? log;
+ readonly object sync = new();
+
+ readonly IRTCPeerConnection? ownedConnection;
+ public IRTCPeerConnection? OwnedConnection
+ {
+ get => ownedConnection;
+ init
+ {
+ if (ownedConnection is not null)
+ ownedConnection.onconnectionstatechange -= ConnectionStateChanged;
+ ownedConnection = value;
+ if (value is not null)
+ value.onconnectionstatechange += ConnectionStateChanged;
+ }
+ }
+
+ public int MaxSendBytes { get; init; } = 260_000;
+ public long TotalSent => totalSent;
+ public long TotalReceived => totalRead;
+
+ public DataChannelStream(RTCDataChannel channel, ILogger? log = null)
+ {
+ this.log = log;
+ this.channel = channel ?? throw new ArgumentNullException(nameof(channel));
+ this.channel.onmessage += OnMessage;
+ this.channel.onerror += OnChannelError;
+ this.channel.onclose += OnChannelClosed;
+ }
+
+ void OnChannelClosed()
+ {
+ log?.LogInformation("channel closed");
+ Unsubscribe();
+ closed.Cancel();
+ }
+
+ void OnChannelError(string error)
+ {
+ log?.LogError("channel error: {Error}", error);
+ Unsubscribe();
+ closed.Cancel();
+ }
+
+ void ConnectionStateChanged(RTCPeerConnectionState state)
+ {
+ log?.LogInformation("connection state changed to {State}", state);
+ switch (state)
+ {
+ case RTCPeerConnectionState.closed
+ or RTCPeerConnectionState.disconnected
+ or RTCPeerConnectionState.failed:
+ Unsubscribe();
+ closed.Cancel();
+ break;
+ }
+ }
+
+ int messages;
+ void OnMessage(RTCDataChannel _, DataChannelPayloadProtocols protocol, byte[] data)
+ {
+ int seq = Interlocked.Increment(ref messages);
+ log?.LogDebug("{Seq} received", seq);
+ try
+ {
+ messageNeeded.Wait();
+ lock (sync)
+ {
+ message = data;
+ currentMessageOffset = 0;
+ }
+ messageAvailable.Release();
+ }
+ catch (ObjectDisposedException) { }
+ }
+
+ public override int Read(byte[] buffer, int offset, int count)
+ {
+ if (buffer is null)
+ throw new ArgumentNullException(nameof(buffer));
+ if (offset < 0)
+ throw new ArgumentOutOfRangeException(nameof(offset));
+ if (count < 0)
+ throw new ArgumentOutOfRangeException(nameof(count));
+ if (checked(offset + count) > buffer.Length)
+ throw new ArgumentException(
+ "The sum of offset and count is larger than the buffer length.");
+
+ return Read(buffer.AsSpan().Slice(offset, count));
+ }
+
+ public override int Read(Span buffer)
+ {
+ readLock.Wait(closed.Token);
+ try
+ {
+ if (buffer.Length == 0) return 0;
+
+ bool wait;
+ do
+ {
+ lock (sync)
+ {
+ wait = MessageNeeded();
+ if (wait)
+ messageNeeded.Release();
+ }
+
+ if (wait)
+ {
+ try
+ {
+ messageAvailable.Wait(closed.Token);
+ }
+ catch (OperationCanceledException)
+ {
+ return 0;
+ }
+ }
+ } while (wait);
+
+ lock (sync)
+ {
+ int remaining = message.Length - currentMessageOffset;
+ int toCopy = Math.Min(remaining, buffer.Length);
+ message.AsSpan(currentMessageOffset, toCopy).CopyTo(buffer);
+ currentMessageOffset += toCopy;
+ Interlocked.Add(ref totalRead, toCopy);
+ return toCopy;
+ }
+ }
+ finally
+ {
+ readLock.Release();
+ }
+ }
+
+ public override async ValueTask ReadAsync(Memory buffer,
+ CancellationToken cancellationToken = default)
+ {
+ await readLock.WaitAsync(cancellationToken).ConfigureAwait(false);
+
+ try
+ {
+ if (buffer.Length == 0) return 0;
+
+ using var cancel =
+ CancellationTokenSource.CreateLinkedTokenSource(
+ cancellationToken, closed.Token);
+
+ bool wait;
+ do
+ {
+ lock (sync)
+ {
+ wait = MessageNeeded();
+
+ if (wait)
+ messageNeeded.Release();
+ }
+
+ if (wait)
+ {
+ try
+ {
+ await messageAvailable.WaitAsync(cancel.Token).ConfigureAwait(false);
+ }
+ catch (OperationCanceledException) when (!cancellationToken
+ .IsCancellationRequested)
+ {
+ return 0;
+ }
+ }
+ } while (wait);
+
+ lock (sync)
+ {
+ int remaining = message.Length - currentMessageOffset;
+ int toCopy = Math.Min(remaining, buffer.Length);
+ message.AsSpan(currentMessageOffset, toCopy).CopyTo(buffer.Span);
+ currentMessageOffset += toCopy;
+ Interlocked.Add(ref totalRead, toCopy);
+ return toCopy;
+ }
+ }
+ finally
+ {
+ readLock.Release();
+ }
+ }
+ long totalRead;
+
+ bool MessageNeeded() => message.Length - currentMessageOffset == 0;
+
+ public override void Write(byte[] buffer, int offset, int count)
+ {
+ if (buffer is null)
+ throw new ArgumentNullException(nameof(buffer));
+ if (offset < 0)
+ throw new ArgumentOutOfRangeException(nameof(offset));
+ if (count < 0)
+ throw new ArgumentOutOfRangeException(nameof(count));
+ if (checked(offset + count) > buffer.Length)
+ throw new ArgumentException(
+ "The sum of offset and count is larger than the buffer length.");
+
+ Write(buffer.AsSpan().Slice(offset, count));
+ }
+
+ public override async ValueTask WriteAsync(ReadOnlyMemory buffer,
+ CancellationToken cancellationToken = default)
+ {
+ await writeLock.WaitAsync(cancellationToken).ConfigureAwait(false);
+ try
+ {
+ while (buffer.Length > MaxSendBytes)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ var packet = buffer[..MaxSendBytes];
+ await Task.Run(() => Send(packet.Span.ToArray()), cancellationToken)
+ .ConfigureAwait(false);
+ buffer = buffer[MaxSendBytes..];
+ }
+ cancellationToken.ThrowIfCancellationRequested();
+ if (buffer.Length > 0)
+ Send(buffer.Span.ToArray());
+ }
+ finally
+ {
+ writeLock.Release();
+ }
+ }
+
+ long totalSent;
+ void Send(byte[] buffer)
+ {
+ channel.send(buffer);
+ Interlocked.Add(ref totalSent, buffer.Length);
+ }
+
+ public override void Write(ReadOnlySpan buffer)
+ {
+ writeLock.Wait(closed.Token);
+ try
+ {
+ while (buffer.Length > MaxSendBytes)
+ {
+ var packet = buffer[..MaxSendBytes];
+ Send(packet.ToArray());
+ buffer = buffer[MaxSendBytes..];
+ }
+ if (buffer.Length > 0)
+ Send(buffer.ToArray());
+ }
+ finally
+ {
+ writeLock.Release();
+ }
+ }
+
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+
+ if (!disposing) return;
+
+ Unsubscribe();
+ channel.close();
+ (OwnedConnection as IDisposable)?.Dispose();
+ messageNeeded.Dispose();
+ messageAvailable.Dispose();
+ }
+
+ void Unsubscribe()
+ {
+ channel.onmessage -= OnMessage;
+ channel.onclose -= OnChannelClosed;
+ if (ownedConnection is { } connection)
+ connection.onconnectionstatechange -= ConnectionStateChanged;
+ }
+
+ public override void Flush() { }
+
+ public override bool CanRead => true;
+ public override bool CanSeek => false;
+ public override bool CanWrite => true;
+
+ public override long Length => throw new NotSupportedException();
+
+ public override long Position
+ {
+ get => throw new NotSupportedException();
+ set => throw new NotSupportedException();
+ }
+
+ public override long Seek(long offset, SeekOrigin origin) => throw new NotSupportedException();
+ public override void SetLength(long value) => throw new NotSupportedException();
+}
\ No newline at end of file
diff --git a/examples/sipcmdline/Program.cs b/examples/sipcmdline/Program.cs
index 1c5a30256..52823c881 100644
--- a/examples/sipcmdline/Program.cs
+++ b/examples/sipcmdline/Program.cs
@@ -519,17 +519,17 @@ private static Task InitiateRegisterTaskAsync(SIPTransport sipTransport, S
bool result = false;
ManualResetEvent mre = new ManualResetEvent(false);
- ua.RegistrationFailed += (uri, err) =>
+ ua.RegistrationFailed += (uri, resp, err) =>
{
result = false;
mre.Set();
};
- ua.RegistrationTemporaryFailure += (uri, err) =>
+ ua.RegistrationTemporaryFailure += (uri, resp, err) =>
{
result = false;
mre.Set();
};
- ua.RegistrationSuccessful += (uri) =>
+ ua.RegistrationSuccessful += (uri, resp) =>
{
result = true;
mre.Set();
diff --git a/examples/sipcmdline/README.md b/examples/sipcmdline/README.md
index 86a8c6bde..db19c924b 100644
--- a/examples/sipcmdline/README.md
+++ b/examples/sipcmdline/README.md
@@ -12,10 +12,10 @@ To see all the options available use:
Description: Test a single SIP call acting as a User Agent Client (UAC).
-`dotnet run -- -d 100@sipsorcery.cloud -s uac -v`
+`dotnet run -- -d music@iptel.org -s uac -v`
Description: Test a single authenticated SIP call acting as a User Agent Client (UAC).
-`dotnet run -- -d 100@sipsorcery.cloud -s uac -v -u user --password password`
+`dotnet run -- -d 100@sipprovider.cloud -s uac -v -u user --password password`
`dotnet run -- -d 9170@192.168.0.47 -s uac -v -u 1000 --password password`
`dotnet run -- -d 100@192.168.0.48 -s uac -v -u 7004 --password password`
diff --git a/examples/sipcmdline/sipcmdline.csproj b/examples/sipcmdline/sipcmdline.csproj
old mode 100644
new mode 100755
index 6c50ed53f..7b3e0a709
--- a/examples/sipcmdline/sipcmdline.csproj
+++ b/examples/sipcmdline/sipcmdline.csproj
@@ -2,15 +2,14 @@
Exe
- net5
+ net8.0
-
+
-
diff --git a/examples/webrtccmdline/EchoServer.cs b/examples/webrtccmdline/EchoServer.cs
new file mode 100644
index 000000000..a6610b9e7
--- /dev/null
+++ b/examples/webrtccmdline/EchoServer.cs
@@ -0,0 +1,268 @@
+//-----------------------------------------------------------------------------
+// Filename: Program.cs
+//
+// Description: Implements a WebRTC Echo Test Server suitable for interoperability
+// testing as per specification at:
+// https://github.com/sipsorcery/webrtc-echoes/blob/master/doc/EchoTestSpecification.md
+//
+// Author(s):
+// Aaron Clauson (aaron@sipsorcery.com)
+//
+// History:
+// 19 Feb 2021 Aaron Clauson Created, Dublin, Ireland.
+// 14 Apr 2021 Aaron Clauson Added data channel support.
+//
+// License:
+// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
+//-----------------------------------------------------------------------------
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net;
+using System.Text;
+using System.Text.Json;
+using System.Threading;
+using System.Threading.Tasks;
+using EmbedIO;
+using Microsoft.Extensions.Logging;
+using Microsoft.Extensions.Logging.Abstractions;
+using Serilog;
+using Serilog.Events;
+using Serilog.Extensions.Logging;
+using SIPSorcery.Net;
+using SIPSorceryMedia.Abstractions;
+
+namespace SIPSorcery.Examples
+{
+ public class EchoServerOptions
+ {
+ public const string DEFAULT_WEBSERVER_LISTEN_URL = "http://*:8080/";
+ public const LogEventLevel DEFAULT_VERBOSITY = LogEventLevel.Debug;
+ public const int TEST_TIMEOUT_SECONDS = 10;
+
+ //[Option('l', "listen", Required = false, Default = DEFAULT_WEBSERVER_LISTEN_URL,
+ // HelpText = "The URL the web server will listen on.")]
+ //public string ServerUrl { get; set; }
+
+ //[Option("timeout", Required = false, Default = TEST_TIMEOUT_SECONDS,
+ // HelpText = "Timeout in seconds to close the peer connection. Set to 0 for no timeout.")]
+ //public int TestTimeoutSeconds { get; set; }
+
+ //[Option('v', "verbosity", Required = false, Default = DEFAULT_VERBOSITY,
+ // HelpText = "The log level verbosity (0=Verbose, 1=Debug, 2=Info, 3=Warn...).")]
+ //public LogEventLevel Verbosity { get; set; }
+ }
+
+ public class EchoServer
+ {
+ private static Microsoft.Extensions.Logging.ILogger logger = NullLogger.Instance;
+
+ private static List _icePresets = new List();
+
+ public void Start()
+ {
+ // Apply any command line options
+ //if (args.Length > 0)
+ //{
+ // url = args[0];
+ // for(int i=1; i(args)
+ // .WithParsed(o => opts = o);
+
+ // listenUrl = opts != null && !string.IsNullOrEmpty(opts.ServerUrl) ? opts.ServerUrl : listenUrl;
+ // verbosity = opts != null ? opts.Verbosity : verbosity;
+ // pcTimeout = opts != null ? opts.TestTimeoutSeconds : pcTimeout;
+ //}
+
+ logger = AddConsoleLogger(verbosity);
+
+ // Start the web server.
+ using (var server = CreateWebServer(listenUrl, pcTimeout))
+ {
+ server.RunAsync();
+
+ Console.WriteLine("ctrl-c to exit.");
+ var mre = new ManualResetEvent(false);
+ Console.CancelKeyPress += (sender, eventArgs) =>
+ {
+ // cancel the cancellation to allow the program to shutdown cleanly
+ eventArgs.Cancel = true;
+ mre.Set();
+ };
+
+ mre.WaitOne();
+ }
+ }
+
+ private static WebServer CreateWebServer(string url, int pcTimeout)
+ {
+ var server = new WebServer(o => o
+ .WithUrlPrefix(url)
+ .WithMode(HttpListenerMode.EmbedIO))
+ .WithCors("*", "*", "*")
+ .WithAction("/offer", HttpVerbs.Post, (ctx) => Offer(ctx, pcTimeout))
+ .WithAction("/icecandidate", HttpVerbs.Post, (ctx) => Offer(ctx, pcTimeout));
+ //.WithStaticFolder("/", "../../html", false);
+ server.StateChanged += (s, e) => Console.WriteLine($"WebServer New State - {e.NewState}");
+
+ return server;
+ }
+
+ private async static Task Offer(IHttpContext context, int pcTimeout)
+ {
+ var offer = await context.GetRequestDataAsync();
+
+ var jsonOptions = new JsonSerializerOptions();
+ jsonOptions.Converters.Add(new System.Text.Json.Serialization.JsonStringEnumConverter());
+
+ var echoServer = new WebRTCEchoServer(_icePresets);
+ var pc = await echoServer.GotOffer(offer);
+
+ if (pc != null)
+ {
+ var answer = new RTCSessionDescriptionInit { type = RTCSdpType.answer, sdp = pc.localDescription.sdp.ToString() };
+ context.Response.ContentType = "application/json";
+ using (var responseStm = context.OpenResponseStream(false, false))
+ {
+ await JsonSerializer.SerializeAsync(responseStm, answer, jsonOptions);
+ }
+
+ if (pcTimeout != 0)
+ {
+ logger.LogDebug($"Setting peer connection close timeout to {pcTimeout} seconds.");
+
+ var timeout = new Timer((state) =>
+ {
+ if (!pc.IsClosed)
+ {
+ logger.LogWarning("Test timed out.");
+ pc.close();
+ }
+ }, null, pcTimeout * 1000, Timeout.Infinite);
+ pc.OnClosed += timeout.Dispose;
+ }
+ }
+ }
+
+ private static Microsoft.Extensions.Logging.ILogger AddConsoleLogger(
+ LogEventLevel logLevel = LogEventLevel.Debug)
+ {
+ var serilogLogger = new LoggerConfiguration()
+ .Enrich.FromLogContext()
+ .MinimumLevel.Is(logLevel)
+ .WriteTo.Console()
+ .CreateLogger();
+ var factory = new SerilogLoggerFactory(serilogLogger);
+ SIPSorcery.LogFactory.Set(factory);
+ return factory.CreateLogger();
+ }
+ }
+
+ public class WebRTCEchoServer
+ {
+ private const int VP8_PAYLOAD_ID = 96;
+
+ private static Microsoft.Extensions.Logging.ILogger logger = NullLogger.Instance;
+
+ private List _presetIceAddresses;
+
+ public WebRTCEchoServer(List presetAddresses)
+ {
+ logger = SIPSorcery.LogFactory.CreateLogger();
+ _presetIceAddresses = presetAddresses;
+ }
+
+ public async Task GotOffer(RTCSessionDescriptionInit offer)
+ {
+ logger.LogTrace($"SDP offer received.");
+ logger.LogTrace(offer.sdp);
+
+ var pc = new RTCPeerConnection();
+
+ if (_presetIceAddresses != null)
+ {
+ foreach (var addr in _presetIceAddresses)
+ {
+ var rtpPort = pc.GetRtpChannel().RTPPort;
+ var publicIPv4Candidate = new RTCIceCandidate(RTCIceProtocol.udp, addr, (ushort)rtpPort, RTCIceCandidateType.host);
+ pc.addLocalIceCandidate(publicIPv4Candidate);
+ }
+ }
+
+ SDP offerSDP = SDP.ParseSDPDescription(offer.sdp);
+
+ if (offerSDP.Media.Any(x => x.Media == SDPMediaTypesEnum.audio))
+ {
+ MediaStreamTrack audioTrack = new MediaStreamTrack(SDPWellKnownMediaFormatsEnum.PCMU);
+ pc.addTrack(audioTrack);
+ }
+
+ if (offerSDP.Media.Any(x => x.Media == SDPMediaTypesEnum.video))
+ {
+ MediaStreamTrack videoTrack = new MediaStreamTrack(new VideoFormat(VideoCodecsEnum.VP8, VP8_PAYLOAD_ID));
+ pc.addTrack(videoTrack);
+ }
+
+ pc.OnRtpPacketReceived += (IPEndPoint rep, SDPMediaTypesEnum media, RTPPacket rtpPkt) =>
+ {
+ pc.SendRtpRaw(media, rtpPkt.Payload, rtpPkt.Header.Timestamp, rtpPkt.Header.MarkerBit, rtpPkt.Header.PayloadType);
+ };
+
+ pc.OnTimeout += (mediaType) => logger.LogWarning($"Timeout for {mediaType}.");
+ pc.oniceconnectionstatechange += (state) => logger.LogInformation($"ICE connection state changed to {state}.");
+ pc.onsignalingstatechange += () => logger.LogInformation($"Signaling state changed to {pc.signalingState}.");
+ pc.onconnectionstatechange += (state) =>
+ {
+ logger.LogInformation($"Peer connection state changed to {state}.");
+ if (state == RTCPeerConnectionState.failed)
+ {
+ pc.Close("ice failure");
+ }
+ };
+
+ pc.ondatachannel += (dc) =>
+ {
+ logger.LogInformation($"Data channel opened for label {dc.label}, stream ID {dc.id}.");
+ dc.onmessage += (rdc, proto, data) =>
+ {
+ logger.LogInformation($"Data channel got message: {Encoding.UTF8.GetString(data)}");
+ rdc.send(Encoding.UTF8.GetString(data));
+ };
+ };
+
+ var setResult = pc.setRemoteDescription(offer);
+ if (setResult == SetDescriptionResultEnum.OK)
+ {
+ var answer = pc.createAnswer();
+ await pc.setLocalDescription(answer);
+
+ logger.LogTrace($"SDP answer created.");
+ logger.LogTrace(answer.sdp);
+
+ return pc;
+ }
+ else
+ {
+ logger.LogWarning($"Failed to set remote description {setResult}.");
+ return null;
+ }
+ }
+ }
+}
diff --git a/examples/webrtccmdline/Program.cs b/examples/webrtccmdline/Program.cs
old mode 100644
new mode 100755
index f8337afcb..75f111222
--- a/examples/webrtccmdline/Program.cs
+++ b/examples/webrtccmdline/Program.cs
@@ -11,13 +11,21 @@
// 28 Mar 2020 Aaron Clauson Created, Dublin, Ireland.
// 13 Jul 2020 Aaron CLauson Added command line options.
//
+// Examples:
+// 1. TURN only connection establishment test. The browser client will need to be configured with a TURN server as well.
+// dotnet run --ws --stun turn:azamicrok8s --relayonly --accepticetypes=relay
+// dotnet run --wsclient ws://127.0.0.1:8081 --stun turn:azamicrok8s --relayonly --accepticetypes=relay
+//
+// 2. TURN TCP
+// dotnet run --ws --stun turn:azamicrok8s?transport=tcp --relayonly --accepticetypes=relay
+// dotnet run --wsclient ws://127.0.0.1:8081 --stun turn:azamicrok8s?transport=tcp --relayonly --accepticetypes=relay
+//
// License:
// BSD 3-Clause "New" or "Revised" License, see included LICENSE.md file.
//-----------------------------------------------------------------------------
using System;
using System.Collections.Generic;
-using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
@@ -50,8 +58,12 @@ public class Options
HelpText = "Create a secure web socket server to act as a signalling channel for exchanging SDP and ICE candidates with a remote WebRTC peer.")]
public bool UseSecureWebSocket { get; set; }
- [Option("wsserver", Required = false,
- HelpText = "The address of a web socket server to connect to establish a WebRTC connection. Format \"--wsserver=ws://127.0.0.1:8081\".")]
+ [Option("wsport", Required = false,
+ HelpText = "The port to use for the web socket server. If not set default of 8081 will be used. Format \"--wsport 18081\".")]
+ public int WebSocketServerPort { get; set; }
+
+ [Option("wsclient", Required = false,
+ HelpText = "The address of a web socket server to connect to establish a WebRTC connection. Format \"--wsclient ws://127.0.0.1:8081\".")]
public string WebSocketServer { get; set; }
[Option("offer", Required = false,
@@ -78,9 +90,9 @@ public class Options
HelpText = "Only accept ICE candidates of these types from the remote peer and ignore any others. Format \"--accepticetypes=(host|srflx|relay)\".")]
public string AcceptIceTypes { get; set; }
- [Option("echo", Required = false,
- HelpText = "Acts a client peer for a WebRTC echo server (see https://github.com/sipsorcery/webrtc-echoes). Format \"--echo 'http://localhost:8080/offer\".")]
- public string EchoServer { get; set; }
+ [Option("echoclient", Required = false,
+ HelpText = "Acts as a client peer for a WebRTC echo server (see https://github.com/sipsorcery/webrtc-echoes). Format \"--echoclient http://localhost:8080/offer.")]
+ public string EchoServerUrl { get; set; }
[Option("noaudio", Required = false,
HelpText = "If specified, an audio track will not be included in the SDP offer generated by the peer connection. Format \"--noaudio\".")]
@@ -89,6 +101,18 @@ public class Options
[Option("nodatachannel", Required = false,
HelpText = "If specified, a data channel will not be included in the SDP offer generated by the peer connection. Format \"--nodatachannel\".")]
public bool NoDataChannel { get; set; }
+
+ [Option("rsa", Required = false,
+ HelpText = "If set to true the WebRTC peer connection will use an RSA certificate instead of the default ECDSA.")]
+ public bool UseRsa { get; set; }
+
+ [Option("echoserver", Required = false,
+ HelpText = "Acts as a server peer for a WebRTC echo client (see https://github.com/sipsorcery/webrtc-echoes).")]
+ public bool ActAsEchoServer { get; set; }
+
+ [Option("port", Required = false,
+ HelpText = "The local RTP port to attempt to bind to. Format \"--port 60042\".")]
+ public int Port { get; set; }
}
class Program
@@ -110,6 +134,9 @@ class Program
private static bool _noAudioTrack;
private static bool _noDataChannel;
private static uint _rtpEventSsrc = 0;
+ private static bool _useRsa = false;
+ private static int _rtpPort = 0;
+ private static int _webSocketServerPort = 0;
///
/// If non-empty means only transmit ICE candidates if they have a type matching this list.
@@ -171,6 +198,9 @@ private static async Task RunCommand(Options options, bool noOptions)
_relayOnly = options.RelayOnly;
_noAudioTrack = options.NoAudioTrack;
_noDataChannel = options.NoDataChannel;
+ _useRsa = options.UseRsa;
+ _rtpPort = options.Port;
+ _webSocketServerPort = options.WebSocketServerPort;
if (!string.IsNullOrEmpty(options.IceTypes))
{
@@ -204,7 +234,7 @@ private static async Task RunCommand(Options options, bool noOptions)
{
// Start web socket.
Console.WriteLine("Starting web socket server...");
- _webSocketServer = new WebSocketServer(IPAddress.Any, WEBSOCKET_PORT, options.UseSecureWebSocket);
+ _webSocketServer = new WebSocketServer(IPAddress.Any, _webSocketServerPort == 0 ? WEBSOCKET_PORT : _webSocketServerPort, options.UseSecureWebSocket);
if (options.UseSecureWebSocket)
{
_webSocketServer.SslConfiguration.ServerCertificate = new X509Certificate2(LOCALHOST_CERTIFICATE_PATH);
@@ -233,7 +263,7 @@ private static async Task RunCommand(Options options, bool noOptions)
}
else if (options.CreateJsonOffer)
{
- var pc = await Createpc(null, _stunServer, _relayOnly, _noAudioTrack, _noDataChannel);
+ var pc = await Createpc(null, _stunServer, _relayOnly, _noAudioTrack, _noDataChannel, _useRsa, _rtpPort);
var offerSdp = pc.createOffer(null);
await pc.setLocalDescription(offerSdp);
@@ -285,33 +315,61 @@ private static async Task RunCommand(Options options, bool noOptions)
}
await webrtcRestPeer.Start(exitCts);
}
- else if (options.EchoServer != null)
+ else if (options.EchoServerUrl != null)
{
+ ManualResetEvent gatheringComplete = new ManualResetEvent(false);
+
// Create offer and send to echo server.
- var pc = await Createpc(null, _stunServer, _relayOnly, _noAudioTrack, _noDataChannel);
+ var pc = await Createpc(null, _stunServer, _relayOnly, _noAudioTrack, _noDataChannel, _useRsa, _rtpPort);
- var signaler = new HttpClient();
+ pc.onicegatheringstatechange += (iceGatheringState) =>
+ {
+ logger.LogDebug($"ICE gathering state changed to {iceGatheringState}.");
- var offer = pc.createOffer(null);
- await pc.setLocalDescription(offer);
+ if (iceGatheringState == RTCIceGatheringState.complete)
+ {
+ gatheringComplete.Set();
+ }
+ };
- var content = new StringContent(offer.toJSON(), Encoding.UTF8, "application/json");
- var response = await signaler.PostAsync($"{options.EchoServer}", content);
- var answerStr = await response.Content.ReadAsStringAsync();
+ logger.LogDebug("Waiting for ICE gaterhing to complete.");
- if (RTCSessionDescriptionInit.TryParse(answerStr, out var answerInit))
+ if (!gatheringComplete.WaitOne(TimeSpan.FromSeconds(10)))
{
- var setAnswerResult = pc.setRemoteDescription(answerInit);
- if (setAnswerResult != SetDescriptionResultEnum.OK)
- {
- Console.WriteLine($"Set remote description failed {setAnswerResult}.");
- }
+ logger.LogWarning($"Gave up after 10s waiting for ICE gathering to complete.");
}
else
{
- Console.WriteLine("Failed to parse SDP answer from echo server.");
+ logger.LogDebug($"Attempting to send offer to echo server at {options.EchoServerUrl}.");
+
+ var signaler = new HttpClient();
+
+ var offer = pc.createOffer(null);
+ await pc.setLocalDescription(offer);
+
+ var content = new StringContent(offer.toJSON(), Encoding.UTF8, "application/json");
+ var response = await signaler.PostAsync($"{options.EchoServerUrl}", content);
+ var answerStr = await response.Content.ReadAsStringAsync();
+
+ if (RTCSessionDescriptionInit.TryParse(answerStr, out var answerInit))
+ {
+ var setAnswerResult = pc.setRemoteDescription(answerInit);
+ if (setAnswerResult != SetDescriptionResultEnum.OK)
+ {
+ Console.WriteLine($"Set remote description failed {setAnswerResult}.");
+ }
+ }
+ else
+ {
+ Console.WriteLine("Failed to parse SDP answer from echo server.");
+ }
}
}
+ else if (options.ActAsEchoServer)
+ {
+ var echoServer = new EchoServer();
+ echoServer.Start();
+ }
_ = Task.Run(() => ProcessInput(exitCts));
@@ -465,7 +523,7 @@ private async static Task ProcessInput(CancellationTokenSource cts)
{
byte dtmfByte = 0x03;
- if(x.Length >= 6)
+ if (x.Length >= 6)
{
dtmfByte = (byte)x.Substring(5).ToCharArray()[0];
}
@@ -473,7 +531,7 @@ private async static Task ProcessInput(CancellationTokenSource cts)
Console.WriteLine();
Console.WriteLine($" sending dtmf byte {dtmfByte}.");
- var dtmfEvent = new RTPEvent(dtmfByte, true, RTPEvent.DEFAULT_VOLUME, RTPSession.DTMF_EVENT_DURATION, RTPSession.DTMF_EVENT_PAYLOAD_ID);
+ var dtmfEvent = new RTPEvent(dtmfByte, true, RTPEvent.DEFAULT_VOLUME, RTPSession.DTMF_EVENT_DURATION, _peerConnection.AudioStream.NegotiatedRtpEventPayloadID);
await _peerConnection.SendDtmfEvent(dtmfEvent, CancellationToken.None).ConfigureAwait(false);
}
else
@@ -547,22 +605,22 @@ private async static Task ProcessInput(CancellationTokenSource cts)
private static Task CreatePeerConnection()
{
- return Createpc(null, _stunServer, _relayOnly, _noAudioTrack, _noDataChannel);
+ return Createpc(null, _stunServer, _relayOnly, _noAudioTrack, _noDataChannel, _useRsa, _rtpPort);
}
- private async static Task Createpc(WebSocketContext context, RTCIceServer stunServer, bool relayOnly, bool noAudio, bool noDataChannel)
+ private async static Task Createpc(WebSocketContext context, RTCIceServer stunServer, bool relayOnly, bool noAudio, bool noDataChannel, bool useRsa, int rtpPort)
{
if (_peerConnection != null)
{
_peerConnection.Close("normal");
}
- List presetCertificates = null;
- if (File.Exists(LOCALHOST_CERTIFICATE_PATH))
- {
- var localhostCert = new X509Certificate2(LOCALHOST_CERTIFICATE_PATH, (string)null, X509KeyStorageFlags.Exportable);
- presetCertificates = new List { new RTCCertificate { Certificate = localhostCert } };
- }
+ //List presetCertificates = null;
+ //if (File.Exists(LOCALHOST_CERTIFICATE_PATH))
+ //{
+ // var localhostCert = new X509Certificate2(LOCALHOST_CERTIFICATE_PATH, (string)null, X509KeyStorageFlags.Exportable);
+ // presetCertificates = new List { new RTCCertificate { Certificate = localhostCert } };
+ //}
RTCConfiguration pcConfiguration = new RTCConfiguration
{
@@ -571,9 +629,10 @@ private async static Task Createpc(WebSocketContext context,
iceServers = stunServer != null ? new List { stunServer } : null,
iceTransportPolicy = relayOnly ? RTCIceTransportPolicy.relay : RTCIceTransportPolicy.all,
//X_BindAddress = IPAddress.Any, // NOTE: Not reqd. Using this to filter out IPv6 addresses so can test with Pion.
+ X_UseRsaForDtlsCertificate = useRsa
};
- _peerConnection = new RTCPeerConnection(pcConfiguration);
+ _peerConnection = new RTCPeerConnection(pcConfiguration, rtpPort);
//_peerConnection.GetRtpChannel().MdnsResolve = (hostname) => Task.FromResult(NetServices.InternetDefaultAddress);
_peerConnection.GetRtpChannel().MdnsResolve = MdnsResolve;
@@ -612,7 +671,7 @@ private async static Task Createpc(WebSocketContext context,
}
_peerConnection.onicecandidate += (candidate) => logger.LogDebug($"onicecandidate {candidate}");
- _peerConnection.onicecandidateerror += (candidate, error) => logger.LogWarning($"Error adding remote ICE candidate. {error} {candidate}");
+ _peerConnection.onicecandidateerror += (candidate, error) => logger.LogWarning($"Error gathering ICE candidate. {error} {candidate}");
_peerConnection.onconnectionstatechange += async (state) =>
{
logger.LogDebug($"Peer connection state changed to {state}.");
@@ -676,7 +735,7 @@ private async static Task Createpc(WebSocketContext context,
_peerConnection.OnRtpEvent += (ep, ev, hdr) =>
{
- if(_rtpEventSsrc == 0)
+ if (_rtpEventSsrc == 0)
{
if (ev.EndOfEvent && hdr.MarkerBit == 1)
{
@@ -734,7 +793,7 @@ private static Microsoft.Extensions.Logging.ILogger AddConsoleLogger()
{
var loggerConfig = new LoggerConfiguration()
.Enrich.FromLogContext()
- .MinimumLevel.Is(Serilog.Events.LogEventLevel.Debug)
+ .MinimumLevel.Is(Serilog.Events.LogEventLevel.Verbose)
.WriteTo.Console()
.CreateLogger();
var factory = new SerilogLoggerFactory(loggerConfig);
diff --git a/examples/webrtccmdline/Properties/launchSettings.json b/examples/webrtccmdline/Properties/launchSettings.json
index 06f2bbca5..2ceb4b1d7 100644
--- a/examples/webrtccmdline/Properties/launchSettings.json
+++ b/examples/webrtccmdline/Properties/launchSettings.json
@@ -2,7 +2,7 @@
"profiles": {
"webrtccmdline": {
"commandName": "Project",
- "commandLineArgs": "--ws --stun=stun:stun.sipsorcery.com --relayonly"
+ "commandLineArgs": "--ws --port 60042"
}
}
}
\ No newline at end of file
diff --git a/examples/webrtccmdline/README.md b/examples/webrtccmdline/README.md
index 76ff40d88..3b4f93400 100644
--- a/examples/webrtccmdline/README.md
+++ b/examples/webrtccmdline/README.md
@@ -8,11 +8,10 @@ To see all the options available use:
`dotnet run -- --help`
-There are 3 main ways to do connectivity tests:
+There are 2 main ways to do connectivity tests:
- - From a WebRTC enabled browser using over web sockets for signalling.
+ - From a WebRTC enabled browser using web sockets for signalling.
- By generating base64 encoded offers and answers and pasting between WebRTC peers.
- - Using the siprocery.cloud echo server https://sipsorcery.cloud/sipsorcery/echo/offer.
## Web Sockets
@@ -42,48 +41,12 @@ This option was written to be able to test with the [Pion Data Channels Example]
- The connection log messages should be displayed and a data channel established.
- ## Echo Server
+## Echo Test
-- Start the application with:
-
-`dotnet run -- --echo https://sipsorcery.cloud/sipsorcery/echo/offer`
-
-There are additional implementations of the WebRTC echo server that can also be tested:
-
-- Janus:
-
-`dotnet run -- --echo https://sipsorcery.cloud/janus/echo/offer`
-
-- aiortc (Python WebRTC library):
-
-`dotnet run -- --echo https://sipsorcery.cloud/aiortc/echo/offer`
-
-## Additional Examples:
-
-Description: Test peer connection establishment to Janus echo server. Use STUN server to include public IPv4 address candidate.
-
-`dotnet run -- --echo https://sipsorcery.cloud/janus/echo/offer --stun stun:sipsorcery.com`
-
-Description: Test peer connection and only supply a TURN server (relay) ICE candidate. Has effect of forcing all traffic through a TURN server.
-
-`dotnet run -- --echo https://sipsorcery.cloud/janus/echo/offer --stun turn:sipsorcery.com;aaron;password --relayonly`
-
-Description: Test peer connection establishment and data channel echo.
-
-`dotnet run -- --echo https://sipsorcery.cloud/sipsorcery/echo/offer --noaudio --stun stun:sipsorcery.com`
-
-once connected:
-
-`sdc dcx hello`
-
-Description: Test peer connection establishment with an audio only offer:
-
-`dotnet run -- --echo https://sipsorcery.cloud/sipsorcery/echo/offer --nodatachannel --stun stun:sipsorcery.com`
-
-Description: Test peer connection establishment and DTMF echo.
-
-`dotnet run -- --echo https://sipsorcery.cloud/sipsorcery/echo/offer --nodatachannel --stun stun:sipsorcery.com`
-
-once connected:
-
-`dtmf`
\ No newline at end of file
+ - Server
+
+ `docker run -it --rm --init -p 8080:8080 ghcr.io/sipsorcery/aiortc-webrtc-echo`
+
+ - Client
+
+ `dotnet run -- --echo http://localhost:8080/offer`
\ No newline at end of file
diff --git a/examples/webrtccmdline/webrtc.html b/examples/webrtccmdline/webrtc.html
old mode 100644
new mode 100755
index b77dd39ee..57e5161bf
--- a/examples/webrtccmdline/webrtc.html
+++ b/examples/webrtccmdline/webrtc.html
@@ -4,13 +4,35 @@