[
  {
    "path": ".github/workflows/build.yaml",
    "content": "# This workflow will build, sign, and package a WinUI 3 MSIX desktop application\n# built on .NET.\n\nname: Build\n\non:\n  push:\n    branches: [ redesign ]\n  pull_request:\n    branches: [ redesign ]\n\njobs:\n\n  build:\n\n    strategy:\n      matrix:\n        configuration: [Release]\n\n    runs-on: windows-latest\n\n    env:\n      Solution_Name: Unicord.sln\n      Project_Name: Unicord.Universal.Package\n      Project_Name_2: Unicord.Universal\n      ProjectFile_Name: Unicord.Universal.Package/Unicord.Universal.Package.wapproj\n      BackgroundProjectFile_Name: Unicord.Universal.Background/Unicord.Universal.Background.csproj\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v4\n      with:\n        submodules: recursive\n        fetch-depth: 0\n\n    # Add  MSBuild to the PATH: https://github.com/microsoft/setup-msbuild\n    - name: Setup MSBuild.exe\n      uses: microsoft/setup-msbuild@v2\n\n    # Restore the application to populate the obj folder with RuntimeIdentifiers\n    - name: Restore NuGet Packages\n      run: |\n        msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration /p:RuntimeIdentifier=win-x86\n        msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration /p:RuntimeIdentifier=win-x64\n        msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration /p:RuntimeIdentifier=win-arm\n      env:\n        Configuration: ${{ matrix.configuration }}\n\n    # - name: Build Background Task\n    #   run: |\n    #     msbuild $env:BackgroundProjectFile_Name /p:Configuration=$env:Configuration /p:TargetFramework=net472 /p:RuntimeIdentifier=win-x86\n    #     msbuild $env:BackgroundProjectFile_Name /p:Configuration=$env:Configuration /p:TargetFramework=net472 /p:RuntimeIdentifier=win-x64\n    #     msbuild $env:BackgroundProjectFile_Name /p:Configuration=$env:Configuration /p:TargetFramework=net472 /p:RuntimeIdentifier=win-arm\n    #   env:\n    #     Configuration: ${{ matrix.configuration }}\n\n    # Decode the base 64 encoded pfx and save the Signing_Certificate\n    - name: Load Certificate\n      run: |\n        $pfx_cert_byte = [System.Convert]::FromBase64String(\"${{ secrets.BASE64_ENCODED_PFX }}\")\n        $certificatePath = \"GitHubActionsWorkflow.pfx\"\n        [IO.File]::WriteAllBytes(\"$env:Project_Name/$certificatePath\", $pfx_cert_byte)\n        [IO.File]::WriteAllBytes(\"$env:Project_Name_2/$certificatePath\", $pfx_cert_byte)\n\n    - name: Adjust Package Version\n      run: |\n        $appx = 'http://schemas.microsoft.com/appx/manifest/foundation/windows10'\n        $file = (Resolve-Path \"$env:Project_Name/Package.appxmanifest\")\n        $xml = [System.Xml.XmlDocument]::new()\n        $xml.Load($file)\n\n        $nsmgr = [System.Xml.XmlNamespaceManager]::new($xml.NameTable)\n        $nsmgr.AddNamespace(\"appx\", $appx);\n\n        # adjust package version\n        $node = $xml.GetElementsByTagName(\"Identity\", $appx)[0]\n        $version = [System.Version]::Parse($node.GetAttribute(\"Version\"))\n\n        if ($env:Version -ne \"Store\") {\n          $commitDate = Get-Date (git show -s --format=%ci)\n          $epoch = ($commitDate - (Get-Date $commitDate.Date -Day 1))\n          $version = [System.Version]::new($version.Major, $version.Minor, $version.Build, $epoch.TotalMinutes);\n          $node.SetAttribute(\"Version\", $version.ToString())\n        }\n\n        $xml.Save($file)\n\n        echo \"Appx_Bundle_Version=$($version.ToString())\" >> $env:GITHUB_ENV\n      env: \n        Appx_Bundle_Version: ''\n        # Version: ${{ matrix.version }}\n        Version: ''\n\n    - name: Install legacy SDK (10.0.22621.2428)\n      run: |\n        echo Downloading...\n        curl -L https://go.microsoft.com/fwlink/?linkid=2250105 -o winsdksetup.exe\n        echo Installing...\n        ./winsdksetup.exe /features + /q\n        echo \"Waiting for SDK to finish installing...\"\n        Wait-Process -Name \"winsdksetup\"\n        echo Done!\n\n    # Create the app package by building and packaging the project\n    - name: Build App Packages\n      run: msbuild $env:Solution_Name /t:Unicord_Universal_Package /p:Configuration=$env:Configuration /p:UapAppxPackageBuildMode=$env:Appx_Package_Build_Mode /p:AppxBundle=$env:Appx_Bundle /p:AppxBundlePlatforms=\"x86|x64|ARM\" /p:PackageCertificateKeyFile=GitHubActionsWorkflow.pfx /p:AppxPackageDir=\"$env:Appx_Package_Dir\" /p:PackageCertificateThumbprint=$env:AppxThumbprint\n      env:\n        Appx_Bundle: Always\n        Appx_Package_Build_Mode: SideloadOnly\n        Appx_Package_Dir: Packages\\\n        Configuration: ${{ matrix.configuration }}\n        AppxThumbprint: ${{ secrets.PFX_THUMBPRINT }}\n\n    # Remove the pfx\n    - name: Cleanup\n      run: Remove-Item -path Unicord.Universal.Package/GitHubActionsWorkflow.pfx\n\n    # Upload the MSIX package: https://github.com/marketplace/actions/upload-a-build-artifact\n    - name: Upload Appx Package\n      uses: actions/upload-artifact@v4\n      with:\n        # name: AppxPackage-${{ env.Appx_Bundle_Version }}-${{ matrix.configuration }}-${{ matrix.version }}\n        name: AppxPackage-${{ env.Appx_Bundle_Version }}-${{ matrix.configuration }}\n        path: |\n          ${{ env.Project_Name }}\\\\Packages\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n##\n## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore\n\n# User-specific files\n*.suo\n*.user\n*.userosscache\n*.sln.docstates\n\n# User-specific files (MonoDevelop/Xamarin Studio)\n*.userprefs\n\n# Build results\n[Dd]ebug/\n[Dd]ebugPublic/\n[Rr]elease/\n[Rr]eleases/\nx64/\nx86/\nbld/\n[Bb]in/\n[Oo]bj/\n[Ll]og/\n[Bb]uild/\nUnicord.Universal.Voice.Test/\n\n*.priv.*\n\n# Visual Studio 2015/2017 cache/options directory\n.vs/\n# Uncomment if you have tasks that create the project's static files in wwwroot\n#wwwroot/\n\n*.diagsession\n\n# Visual Studio 2017 auto generated files\nGenerated\\ Files/\n\n# MSTest test Results\n[Tt]est[Rr]esult*/\n[Bb]uild[Ll]og.*\n\n# NUNIT\n*.VisualState.xml\nTestResult.xml\n\n# Build Results of an ATL Project\n[Dd]ebugPS/\n[Rr]eleasePS/\ndlldata.c\n\n# Benchmark Results\nBenchmarkDotNet.Artifacts/\n\n# .NET Core\nproject.lock.json\nproject.fragment.lock.json\nartifacts/\n**/Properties/launchSettings.json\n\n# StyleCop\nStyleCopReport.xml\n\n# Files built by Visual Studio\n*_i.c\n*_p.c\n*_i.h\n*.ilk\n*.meta\n*.obj\n*.iobj\n*.pch\n*.pdb\n*.ipdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.tmp_proj\n*.log\n*.vspscc\n*.vssscc\n.builds\n*.pidb\n*.svclog\n*.scc\n\n# Chutzpah Test files\n_Chutzpah*\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opendb\n*.opensdf\n*.sdf\n*.cachefile\n*.VC.db\n*.VC.VC.opendb\n\n# Visual Studio profiler\n*.psess\n*.vsp\n*.vspx\n*.sap\n\n# Visual Studio Trace Files\n*.e2e\n\n# TFS 2012 Local Workspace\n$tf/\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a .NET coding add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n*.DotSettings.user\n\n# JustCode is a .NET coding add-in\n.JustCode\n\n# TeamCity is a build add-in\n_TeamCity*\n\n# DotCover is a Code Coverage Tool\n*.dotCover\n\n# AxoCover is a Code Coverage Tool\n.axoCover/*\n!.axoCover/settings.json\n\n# Visual Studio code coverage results\n*.coverage\n*.coveragexml\n\n# NCrunch\n_NCrunch_*\n.*crunch*.local.xml\nnCrunchTemp_*\n\n# MightyMoose\n*.mm.*\nAutoTest.Net/\n\n# Web workbench (sass)\n.sass-cache/\n\n# Installshield output folder\n[Ee]xpress/\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish/\n\n# Publish Web Output\n*.[Pp]ublish.xml\n*.azurePubxml\n# Note: Comment the next line if you want to checkin your web deploy settings,\n# but database connection strings (with potential passwords) will be unencrypted\n*.pubxml\n*.publishproj\n\n# Microsoft Azure Web App publish settings. Comment the next line if you want to\n# checkin your Azure Web App publish settings, but sensitive information contained\n# in these scripts will be unencrypted\nPublishScripts/\n\n# NuGet Packages\n# The packages folder can be ignored because of Package Restore\n**/[Pp]ackages/*\n# except build/, which is used as an MSBuild target.\n!**/[Pp]ackages/build/\n# Uncomment if necessary however generally it will be regenerated when needed\n#!**/[Pp]ackages/repositories.config\n# NuGet v3's project.json files produces more ignorable files\n*.nuget.props\n*.nuget.targets\n\n# Microsoft Azure Build Output\ncsx/\n*.build.csdef\n\n# Microsoft Azure Emulator\necf/\nrcf/\n\n# Windows Store app package directories and files\nAppPackages/\nBundleArtifacts/\nPackage.StoreAssociation.xml\n_pkginfo.txt\n*.appx\n\n# Visual Studio cache files\n# files ending in .cache can be ignored\n*.[Cc]ache\n# but keep track of directories ending in .cache\n!*.[Cc]ache/\n\n# Others\nClientBin/\n~$*\n*~\n*.dbmdl\n*.dbproj.schemaview\n*.jfm\n*.pfx\n*.publishsettings\norleans.codegen.cs\n\n# Including strong name files can present a security risk \n# (https://github.com/github/gitignore/pull/2483#issue-259490424)\n#*.snk\n\n# Since there are multiple workflows, uncomment next line to ignore bower_components\n# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)\n#bower_components/\n\n# RIA/Silverlight projects\nGenerated_Code/\n\n# Backup & report files from converting an old project file\n# to a newer Visual Studio version. Backup files are not needed,\n# because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\nUpgradeLog*.htm\nServiceFabricBackup/\n*.rptproj.bak\n\n# SQL Server files\n*.mdf\n*.ldf\n*.ndf\n\n# Business Intelligence projects\n*.rdl.data\n*.bim.layout\n*.bim_*.settings\n*.rptproj.rsuser\n\n# Microsoft Fakes\nFakesAssemblies/\n\n# GhostDoc plugin setting file\n*.GhostDoc.xml\n\n# Node.js Tools for Visual Studio\n.ntvs_analysis.dat\nnode_modules/\n\n# Visual Studio 6 build log\n*.plg\n\n# Visual Studio 6 workspace options file\n*.opt\n\n# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)\n*.vbw\n\n# Visual Studio LightSwitch build output\n**/*.HTMLClient/GeneratedArtifacts\n**/*.DesktopClient/GeneratedArtifacts\n**/*.DesktopClient/ModelManifest.xml\n**/*.Server/GeneratedArtifacts\n**/*.Server/ModelManifest.xml\n_Pvt_Extensions\n\n# Paket dependency manager\n.paket/paket.exe\npaket-files/\n\n# FAKE - F# Make\n.fake/\n\n# JetBrains Rider\n.idea/\n*.sln.iml\n\n# CodeRush\n.cr/\n\n# Python Tools for Visual Studio (PTVS)\n__pycache__/\n*.pyc\n\n# Cake - Uncomment if you are using it\n# tools/**\n# !tools/packages.config\n\n# Tabs Studio\n*.tss\n\n# Telerik's JustMock configuration file\n*.jmconfig\n\n# BizTalk build output\n*.btp.cs\n*.btm.cs\n*.odx.cs\n*.xsd.cs\n\n# OpenCover UI analysis results\nOpenCover/\n\n# Azure Stream Analytics local run output \nASALocalRun/\n\n# MSBuild Binary and Structured Log\n*.binlog\n\n# NVidia Nsight GPU debugger configuration file\n*.nvuser\n\n# MFractors (Xamarin productivity tool) working folder \n.mfractor/\n*.zip\n\nOutput-Debug.txt"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"Libraries/WamWooWam.Core\"]\n\tpath = Libraries/WamWooWam.Core\n\turl = https://github.com/WamWooWam/WamWooWam.Core\n[submodule \"Libraries/MomentSharp\"]\n\tpath = Libraries/MomentSharp\n\turl = https://github.com/WamWooWam/MomentSharp\n[submodule \"Libraries/DSharpPlus\"]\n\tpath = Libraries/DSharpPlus\n\turl = https://github.com/UnicordDev/DSharpPlus-Unicord/\n[submodule \"Libraries/unicode.net\"]\n\tpath = Libraries/unicode.net\n\turl = https://github.com/wamwoowam/unicode.net\n[submodule \"Libraries/WindowsCommunityToolkit\"]\n\tpath = Libraries/WindowsCommunityToolkit\n\turl = https://github.com/UnicordDev/WindowsCommunityToolkit\n"
  },
  {
    "path": "Assets/ClydeLogo.ai",
    "content": "%PDF-1.5\r%\r\n1 0 obj\r<</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R 27 0 R 48 0 R 69 0 R 90 0 R 111 0 R 132 0 R]/Order 133 0 R/RBGroups[]>>/OCGs[5 0 R 27 0 R 48 0 R 69 0 R 90 0 R 111 0 R 132 0 R]>>/Pages 3 0 R/Type/Catalog>>\rendobj\r2 0 obj\r<</Length 35605/Subtype/XML/Type/Metadata>>stream\r\n<?xpacket begin=\"﻿\" id=\"W5M0MpCehiHzreSzNTczkc9d\"?>\n<x:xmpmeta xmlns:x=\"adobe:ns:meta/\" x:xmptk=\"Adobe XMP Core 5.6-c143 79.161356, 2017/09/07-01:11:22        \">\n   <rdf:RDF xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">\n      <rdf:Description rdf:about=\"\"\n            xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n            xmlns:xmp=\"http://ns.adobe.com/xap/1.0/\"\n            xmlns:xmpGImg=\"http://ns.adobe.com/xap/1.0/g/img/\"\n            xmlns:xmpMM=\"http://ns.adobe.com/xap/1.0/mm/\"\n            xmlns:stRef=\"http://ns.adobe.com/xap/1.0/sType/ResourceRef#\"\n            xmlns:stEvt=\"http://ns.adobe.com/xap/1.0/sType/ResourceEvent#\"\n            xmlns:illustrator=\"http://ns.adobe.com/illustrator/1.0/\"\n            xmlns:xmpTPg=\"http://ns.adobe.com/xap/1.0/t/pg/\"\n            xmlns:stDim=\"http://ns.adobe.com/xap/1.0/sType/Dimensions#\"\n            xmlns:xmpG=\"http://ns.adobe.com/xap/1.0/g/\"\n            xmlns:pdf=\"http://ns.adobe.com/pdf/1.3/\"\n            xmlns:pdfx=\"http://ns.adobe.com/pdfx/1.3/\">\n         <dc:format>application/pdf</dc:format>\n         <dc:title>\n            <rdf:Alt>\n               <rdf:li xml:lang=\"x-default\">Web</rdf:li>\n            </rdf:Alt>\n         </dc:title>\n         <xmp:CreatorTool>Adobe Illustrator CC 22.1 (Windows)</xmp:CreatorTool>\n         <xmp:CreateDate>2018-07-26T10:43:12+01:00</xmp:CreateDate>\n         <xmp:ModifyDate>2018-07-26T10:53:21+01:00</xmp:ModifyDate>\n         <xmp:MetadataDate>2018-07-26T10:53:21+01:00</xmp:MetadataDate>\n         <xmp:Thumbnails>\n            <rdf:Alt>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <xmpGImg:width>256</xmpGImg:width>\n                  <xmpGImg:height>184</xmpGImg:height>\n                  <xmpGImg:format>JPEG</xmpGImg:format>\n                  <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAuAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq&#xA;7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq&#xA;7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq&#xA;7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq&#xA;7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXY&#xA;q7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX//&#xA;2Q==</xmpGImg:image>\n               </rdf:li>\n            </rdf:Alt>\n         </xmp:Thumbnails>\n         <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>\n         <xmpMM:OriginalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</xmpMM:OriginalDocumentID>\n         <xmpMM:DocumentID>xmp.did:9b84450b-bc0a-2544-b2ea-ef14c86062e7</xmpMM:DocumentID>\n         <xmpMM:InstanceID>uuid:bc49d8db-d7dd-4970-9b0f-10087cc23bf9</xmpMM:InstanceID>\n         <xmpMM:DerivedFrom rdf:parseType=\"Resource\">\n            <stRef:instanceID>xmp.iid:1950ff18-de05-0b4e-83c5-cefa9ca18d11</stRef:instanceID>\n            <stRef:documentID>xmp.did:1950ff18-de05-0b4e-83c5-cefa9ca18d11</stRef:documentID>\n            <stRef:originalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</stRef:originalDocumentID>\n            <stRef:renditionClass>proof:pdf</stRef:renditionClass>\n         </xmpMM:DerivedFrom>\n         <xmpMM:History>\n            <rdf:Seq>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <stEvt:action>saved</stEvt:action>\n                  <stEvt:instanceID>xmp.iid:781478a2-e2b1-1249-beef-6298fb125c4c</stEvt:instanceID>\n                  <stEvt:when>2018-07-12T19:22:57+01:00</stEvt:when>\n                  <stEvt:softwareAgent>Adobe Illustrator CC 22.1 (Windows)</stEvt:softwareAgent>\n                  <stEvt:changed>/</stEvt:changed>\n               </rdf:li>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <stEvt:action>saved</stEvt:action>\n                  <stEvt:instanceID>xmp.iid:9b84450b-bc0a-2544-b2ea-ef14c86062e7</stEvt:instanceID>\n                  <stEvt:when>2018-07-26T10:43:12+01:00</stEvt:when>\n                  <stEvt:softwareAgent>Adobe Illustrator CC 22.1 (Windows)</stEvt:softwareAgent>\n                  <stEvt:changed>/</stEvt:changed>\n               </rdf:li>\n            </rdf:Seq>\n         </xmpMM:History>\n         <illustrator:StartupProfile>Web</illustrator:StartupProfile>\n         <illustrator:Type>Document</illustrator:Type>\n         <xmpTPg:NPages>1</xmpTPg:NPages>\n         <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>\n         <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>\n         <xmpTPg:MaxPageSize rdf:parseType=\"Resource\">\n            <stDim:w>150.000000</stDim:w>\n            <stDim:h>150.000000</stDim:h>\n            <stDim:unit>Pixels</stDim:unit>\n         </xmpTPg:MaxPageSize>\n         <xmpTPg:SwatchGroups>\n            <rdf:Seq>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <xmpG:groupName>Default Swatch Group</xmpG:groupName>\n                  <xmpG:groupType>0</xmpG:groupType>\n                  <xmpG:Colorants>\n                     <rdf:Seq>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>White</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>255</xmpG:red>\n                           <xmpG:green>255</xmpG:green>\n                           <xmpG:blue>255</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>Black</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>0</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB Red</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>255</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>0</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB Yellow</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>255</xmpG:red>\n                           <xmpG:green>255</xmpG:green>\n                           <xmpG:blue>0</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB Green</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>255</xmpG:green>\n                           <xmpG:blue>0</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB Cyan</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>255</xmpG:green>\n                           <xmpG:blue>255</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB Blue</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>255</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>RGB Magenta</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>255</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>255</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=193 G=39 B=45</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>193</xmpG:red>\n                           <xmpG:green>39</xmpG:green>\n                           <xmpG:blue>45</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=237 G=28 B=36</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>237</xmpG:red>\n                           <xmpG:green>28</xmpG:green>\n                           <xmpG:blue>36</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=241 G=90 B=36</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>241</xmpG:red>\n                           <xmpG:green>90</xmpG:green>\n                           <xmpG:blue>36</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=247 G=147 B=30</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>247</xmpG:red>\n                           <xmpG:green>147</xmpG:green>\n                           <xmpG:blue>30</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=251 G=176 B=59</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>251</xmpG:red>\n                           <xmpG:green>176</xmpG:green>\n                           <xmpG:blue>59</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=252 G=238 B=33</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>252</xmpG:red>\n                           <xmpG:green>238</xmpG:green>\n                           <xmpG:blue>33</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=217 G=224 B=33</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>217</xmpG:red>\n                           <xmpG:green>224</xmpG:green>\n                           <xmpG:blue>33</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=140 G=198 B=63</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>140</xmpG:red>\n                           <xmpG:green>198</xmpG:green>\n                           <xmpG:blue>63</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=57 G=181 B=74</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>57</xmpG:red>\n                           <xmpG:green>181</xmpG:green>\n                           <xmpG:blue>74</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=0 G=146 B=69</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>146</xmpG:green>\n                           <xmpG:blue>69</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=0 G=104 B=55</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>104</xmpG:green>\n                           <xmpG:blue>55</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=34 G=181 B=115</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>34</xmpG:red>\n                           <xmpG:green>181</xmpG:green>\n                           <xmpG:blue>115</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=0 G=169 B=157</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>169</xmpG:green>\n                           <xmpG:blue>157</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=41 G=171 B=226</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>41</xmpG:red>\n                           <xmpG:green>171</xmpG:green>\n                           <xmpG:blue>226</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=0 G=113 B=188</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>113</xmpG:green>\n                           <xmpG:blue>188</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=46 G=49 B=146</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>46</xmpG:red>\n                           <xmpG:green>49</xmpG:green>\n                           <xmpG:blue>146</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=27 G=20 B=100</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>27</xmpG:red>\n                           <xmpG:green>20</xmpG:green>\n                           <xmpG:blue>100</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=102 G=45 B=145</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>102</xmpG:red>\n                           <xmpG:green>45</xmpG:green>\n                           <xmpG:blue>145</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=147 G=39 B=143</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>147</xmpG:red>\n                           <xmpG:green>39</xmpG:green>\n                           <xmpG:blue>143</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=158 G=0 B=93</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>158</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>93</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=212 G=20 B=90</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>212</xmpG:red>\n                           <xmpG:green>20</xmpG:green>\n                           <xmpG:blue>90</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=237 G=30 B=121</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>237</xmpG:red>\n                           <xmpG:green>30</xmpG:green>\n                           <xmpG:blue>121</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=199 G=178 B=153</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>199</xmpG:red>\n                           <xmpG:green>178</xmpG:green>\n                           <xmpG:blue>153</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=153 G=134 B=117</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>153</xmpG:red>\n                           <xmpG:green>134</xmpG:green>\n                           <xmpG:blue>117</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=115 G=99 B=87</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>115</xmpG:red>\n                           <xmpG:green>99</xmpG:green>\n                           <xmpG:blue>87</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=83 G=71 B=65</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>83</xmpG:red>\n                           <xmpG:green>71</xmpG:green>\n                           <xmpG:blue>65</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=198 G=156 B=109</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>198</xmpG:red>\n                           <xmpG:green>156</xmpG:green>\n                           <xmpG:blue>109</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=166 G=124 B=82</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>166</xmpG:red>\n                           <xmpG:green>124</xmpG:green>\n                           <xmpG:blue>82</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=140 G=98 B=57</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>140</xmpG:red>\n                           <xmpG:green>98</xmpG:green>\n                           <xmpG:blue>57</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=117 G=76 B=36</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>117</xmpG:red>\n                           <xmpG:green>76</xmpG:green>\n                           <xmpG:blue>36</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=96 G=56 B=19</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>96</xmpG:red>\n                           <xmpG:green>56</xmpG:green>\n                           <xmpG:blue>19</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=66 G=33 B=11</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>66</xmpG:red>\n                           <xmpG:green>33</xmpG:green>\n                           <xmpG:blue>11</xmpG:blue>\n                        </rdf:li>\n                     </rdf:Seq>\n                  </xmpG:Colorants>\n               </rdf:li>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <xmpG:groupName>Grays</xmpG:groupName>\n                  <xmpG:groupType>1</xmpG:groupType>\n                  <xmpG:Colorants>\n                     <rdf:Seq>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=0 G=0 B=0</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>0</xmpG:red>\n                           <xmpG:green>0</xmpG:green>\n                           <xmpG:blue>0</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=26 G=26 B=26</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>26</xmpG:red>\n                           <xmpG:green>26</xmpG:green>\n                           <xmpG:blue>26</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=51 G=51 B=51</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>51</xmpG:red>\n                           <xmpG:green>51</xmpG:green>\n                           <xmpG:blue>51</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=77 G=77 B=77</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>77</xmpG:red>\n                           <xmpG:green>77</xmpG:green>\n                           <xmpG:blue>77</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=102 G=102 B=102</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>102</xmpG:red>\n                           <xmpG:green>102</xmpG:green>\n                           <xmpG:blue>102</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=128 G=128 B=128</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>128</xmpG:red>\n                           <xmpG:green>128</xmpG:green>\n                           <xmpG:blue>128</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=153 G=153 B=153</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>153</xmpG:red>\n                           <xmpG:green>153</xmpG:green>\n                           <xmpG:blue>153</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=179 G=179 B=179</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>179</xmpG:red>\n                           <xmpG:green>179</xmpG:green>\n                           <xmpG:blue>179</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=204 G=204 B=204</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>204</xmpG:red>\n                           <xmpG:green>204</xmpG:green>\n                           <xmpG:blue>204</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=230 G=230 B=230</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>230</xmpG:red>\n                           <xmpG:green>230</xmpG:green>\n                           <xmpG:blue>230</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=242 G=242 B=242</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>242</xmpG:red>\n                           <xmpG:green>242</xmpG:green>\n                           <xmpG:blue>242</xmpG:blue>\n                        </rdf:li>\n                     </rdf:Seq>\n                  </xmpG:Colorants>\n               </rdf:li>\n               <rdf:li rdf:parseType=\"Resource\">\n                  <xmpG:groupName>Web Color Group</xmpG:groupName>\n                  <xmpG:groupType>1</xmpG:groupType>\n                  <xmpG:Colorants>\n                     <rdf:Seq>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=63 G=169 B=245</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>63</xmpG:red>\n                           <xmpG:green>169</xmpG:green>\n                           <xmpG:blue>245</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=122 G=201 B=67</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>122</xmpG:red>\n                           <xmpG:green>201</xmpG:green>\n                           <xmpG:blue>67</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=255 G=147 B=30</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>255</xmpG:red>\n                           <xmpG:green>147</xmpG:green>\n                           <xmpG:blue>30</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=255 G=29 B=37</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>255</xmpG:red>\n                           <xmpG:green>29</xmpG:green>\n                           <xmpG:blue>37</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=255 G=123 B=172</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>255</xmpG:red>\n                           <xmpG:green>123</xmpG:green>\n                           <xmpG:blue>172</xmpG:blue>\n                        </rdf:li>\n                        <rdf:li rdf:parseType=\"Resource\">\n                           <xmpG:swatchName>R=189 G=204 B=212</xmpG:swatchName>\n                           <xmpG:mode>RGB</xmpG:mode>\n                           <xmpG:type>PROCESS</xmpG:type>\n                           <xmpG:red>189</xmpG:red>\n                           <xmpG:green>204</xmpG:green>\n                           <xmpG:blue>212</xmpG:blue>\n                        </rdf:li>\n                     </rdf:Seq>\n                  </xmpG:Colorants>\n               </rdf:li>\n            </rdf:Seq>\n         </xmpTPg:SwatchGroups>\n         <pdf:Producer>Adobe PDF library 15.00</pdf:Producer>\n         <pdfx:CreatorVersion>21.0.0</pdfx:CreatorVersion>\n      </rdf:Description>\n   </rdf:RDF>\n</x:xmpmeta>\n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                                                                                                    \n                           \n<?xpacket end=\"w\"?>\r\nendstream\rendobj\r3 0 obj\r<</Count 1/Kids[7 0 R]/Type/Pages>>\rendobj\r7 0 obj\r<</ArtBox[0.0 21.0 150.0 129.0]/BleedBox[0.0 0.0 150.0 150.0]/Contents 134 0 R/CropBox[0.0 0.0 150.0 150.0]/LastModified(D:20180726105321+01'00')/MediaBox[0.0 0.0 150.0 150.0]/Parent 3 0 R/PieceInfo<</Illustrator 135 0 R>>/Resources<</ColorSpace<</CS0 136 0 R>>/ExtGState<</GS0 137 0 R>>/Properties<</MC0 132 0 R>>>>/Thumb 138 0 R/TrimBox[0.0 0.0 150.0 150.0]/Type/Page>>\rendobj\r134 0 obj\r<</Filter/FlateDecode/Length 679>>stream\r\nHTTn\u0014A\fW\u000fv+\u000b\u0014\u0003\u001f\u0002.\u0004)D\u0005]{*R\u001f\u001e/~x奴ʺm.\u000f^_+S_p}kyẜQUHlN\"dNmj4d,\u001e$ZN\b1.U&\u0010$\u001f__72bi2&htP3\u000bdh8\u001d\u001d8! Β7[_z;[6LG8\u001fɭޡ^Q\u0016\u0014z.:#bj݄F_a\r}\u0007I\u0007\rUIל\\\n>0\t4\u001d'k\u00063I\u0018Z FzD@FlRid_\bS\u0012:G8\u0003G0sL0'68z]IC-T\u001e*:9\u001a\u0000^i\u000e1V\"\u0015*\u0006F̨7\u0006C;\rQ\u0016߲M_HhлDE\u001dqh}+HR1\n5\u0002X\fQdAq\fxVH\u0002DP!5DWfԗفXA0u\u0000?\u000fB!\u0012g N&#\u0001\u001c*Cg\b8M\u0005K$g\u0003Y:D\u0017l3,\u000bp\u0004\fszm8s#,Zm,\u0007H4G-@\u00137#=M]\u0006\u0014XŮo<sjZC}\u0001_5dp_\u000e$ʠ\\\u0000Ӊu5\u001f\u0001IE\u0002KO4Ǥ\f\u0000\n3$Q}Ɔ[\u0000\\4r\u0003\u0002B|+!^N0\u0004>ˈ#c Ioߍr8ˏT>=\u0015`\u0000LS\u0010\r\nendstream\rendobj\r138 0 obj\r<</BitsPerComponent 8/ColorSpace 139 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 18/Length 22/Width 18>>stream\r\n8;Xp,I2#Kb!!3Q/`?#RA~>\r\nendstream\rendobj\r139 0 obj\r[/Indexed/DeviceRGB 255 140 0 R]\rendobj\r140 0 obj\r<</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream\r\n8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@\"pJ+EP(%0\nb]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\\Ulg9dhD*\"iC[;*=3`oP1[!S^)?1)IZ4dup`\nE1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\\.?d>Mn\n6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1\nVNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<\nPO7r\\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(\nl[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\\~>\r\nendstream\rendobj\r132 0 obj\r<</Intent 141 0 R/Name(Layer 1)/Type/OCG/Usage 142 0 R>>\rendobj\r141 0 obj\r[/View/Design]\rendobj\r142 0 obj\r<</CreatorInfo<</Creator(Adobe Illustrator 22.1)/Subtype/Artwork>>>>\rendobj\r137 0 obj\r<</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>>\rendobj\r136 0 obj\r[/ICCBased 143 0 R]\rendobj\r143 0 obj\r<</Filter/FlateDecode/Length 2574/N 3>>stream\r\nHyTSw\u0016oɞc\r[\u00065la\u001d\u0004Q\bI\b\u0001\u0012BH\u0005AD\u0005\u0014ED2mtFOE.c\u000e}\u000308\u0016׎\u00178GNg\u001f9w߽\u0000'0\u000b\u0000֠J\u0016\u0015\u0014b\t\u0000\u0003\n \u0002\u0011\u00002y.-;!\u0007KZ\t^\u0007i\"L0-\r\u0000@\u00198\u0007(r;q7L\u0019y&Q\u0013\u0004q4j|9\nV)gB0iW\u00198#8wթ8_٥ʨQ\u0014Qj\u0001@&A)/\u000fg>'K\u0002\u0000t;\\\u000e\u001b\r\u0006ӥ$պFZUn\u001e(4T%)뫔\u00060C&\u0015Zi\u001b\u00018bxEB\u001f;Pӓ̹A\u000bom?W=\nx\u0016-\u0000\u0004[\u00000\u001d}y)7\u0018ta>jT7\u000e@tܛ`q2ʀ&6ZLĄ?\u001d_\u001dyxg)˔z\u0016çLU*\u0006u\u0016SkS\u0013eO4?׸c\u0001\u0007.\u0000\u000b\u0000\u0000R\r߁-\u000725\tS>ӣVd`rn~Y\u0002\u0002\u0002&\u0001+`\u000f;\u0010\u0002\u0010\u0002A4\u0007 \u001d\u0002\u0014A9\u0000=\u0007-\u001dt\u001e\u001el\u0002`;\u0018\u0003~p\u0010\tGp\u001e|\t[`\u0012L`\u0006<\u0005 \b\"A\f\u000bYA\u000e+\u0005Cb(\u0012R,\u0000*T\u00162B-\n\u0007ꇆ\u001dnQ\u0004t\u000e\u0004}\u0005MA\u000f0\u0002a\u001el\u0007\u0018S\u001cx\tk&\u0013^\u0007\u000f>0|\u0002>\u000f_',\u0002\u0010\u001aG\u001c\u0011!\"F$H:R!z\u0015F\u0006Qd?r\f9\\A&G\u000brQ\f\u0015h\u0012\u001a\u0015E]a4z\u0005Bg\u0004\u0006E\b#H\t\b*B=0HIpp0MxJ$\u0012D\u00011D, V\u0010ĭ\u0003KĻY\u0012dE\"EI2EBGt4MzN\u001d\u0004r!YK \u000f?%_&#(0J:EAiQ((\u0017)ӔWT6U@P+!~\u0019m\u0013\u001aD\u000beԴ!hӦh/\u001c']B/\u001b\u001fҏӿ?a0\u0018nhF!X8܌kc&5S\u001d6lIa2cKMA!E#\u0016ƒdV\b(\u0006kel\r}}Cq9\nN'\u0003)].uJr\n\u0018\fwG\txR^\u0005[\u0004oƜc\u001ehg`>b$\u001f*~\u001f :Eb~\u0016,m,-ݖ\u0007,Y¬*6X[ݱF=3뭷Y~dó\tt\u001ci\u000bzf6~`{v.Ng#{}}\u000f\u001c\u000e\u000ej\u0001\u001cc1X\u00156f\u001cm\u001d\u001c;\u001c'\u001c_9\tr:\u000e8q:˜\u0007O:ϸ8uJq\u0015nv=MmR \u00154\t\nn3ܣkGݯz\u0010=\u001e\u001e[==<=G</z^^j^\tޡZQ\u001bB0FX'+t<u-{__ߘ-\u0011G,\u0010\u001d\u0013}/\u001f\u001a\bH\bh\u000b8\u0012mW2p[AiAN\u0006#8$X\u001f?AKHI{!7<qWy(!46-\u0017aaa\u000f\u0017W\t@@`l\b\bYĎH,$((Yh7ъb<b*b<~\u0014L\u0012&Y&9\u001e%uMssNpJP%MI\fJlN<DHJIڐtCj'KwKgC%Nd\f|ꙪO=\u0006%mLuvx:HoL!ȨC&13#s$/Y=Osbsrn\u001asO1v=ˏϟ\\h٢\u0005\u0005#¼\u0017oZ<]\u0014TUt}`IÒsKV-Y,+>TB(/S,]6*-W:#7\u001f*\u0015\u0003\u0007\be^YDY}UjAyT`#D=\"b{ų\u000f+ʯ:!kJ4G\u001cmt}uC%K7Y\u0013VfFY\u000b.=b?S\u0017ƕƩȺy\u001a\rچ\u000bk\u001a5%4\u0019m7lqlioZ\u0016lG+Zz͹mzy]?uuw|\"űNwW&e֥ﺱ*|j5\u0001kyݭǯg^y\u0017kEklD_p߶7Dmo꿻1m\u0001l{Mś\r\u0006\u000enLl<9O\u0000\u0001[$h՛B\u001cdҞ@\u001diءG&\u0006vVǥ8\u001anRĩ7\u001c\u0002u\\ЭD-\u0016\u0000u`ֲK³8%\u0013\u0001yhYѹJº;.!\u0015\nzpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\\dlvۀ\u0005܊\u0010ݖ\u001cޢ)߯6DScs\r\u001f2F[p\u0011(@Xr\u00194Pm\u00198Ww\u0007)Km\u0002\f\u0000\r\nendstream\rendobj\r135 0 obj\r<</LastModified(D:20180726105321+01'00')/Private 144 0 R>>\rendobj\r144 0 obj\r<</AIMetaData 145 0 R/AIPrivateData1 146 0 R/AIPrivateData2 147 0 R/AIPrivateData3 148 0 R/AIPrivateData4 149 0 R/AIPrivateData5 150 0 R/AIPrivateData6 151 0 R/ContainerVersion 11/CreatorVersion 22/NumBlock 6/RoundtripStreamType 1/RoundtripVersion 17>>\rendobj\r145 0 obj\r<</Length 1342>>stream\r\n%!PS-Adobe-3.0 \r\n%%Creator: Adobe Illustrator(R) 17.0\r\n%%AI8_CreatorVersion: 22.1.0\r\n%%For: (Thomas May) ()\r\n%%Title: (ClydeLogo.ai)\r\n%%CreationDate: 7/26/2018 10:53 AM\r\n%%Canvassize: 16383\r\n%%BoundingBox: 0 -129 150 -20\r\n%%HiResBoundingBox: 0 -128.999999999998 150 -20.9999999999982\r\n%%DocumentProcessColors:\r\n%AI5_FileFormat 13.0\r\n%AI12_BuildNumber: 312\r\n%AI3_ColorUsage: Color\r\n%AI7_ImageSettings: 0\r\n%%RGBProcessColor: 0 0 0 ([Registration])\r\n%AI3_Cropmarks: 0 -150 150 0\r\n%AI3_TemplateBox: 75.5 -75.5 75.5 -75.5\r\n%AI3_TileBox: -222.660003662109 -495.959991455078 372.660003662109 345.959991455078\r\n%AI3_DocumentPreview: None\r\n%AI5_ArtSize: 14400 14400\r\n%AI5_RulerUnits: 6\r\n%AI9_ColorModel: 1\r\n%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0\r\n%AI5_TargetResolution: 800\r\n%AI5_NumLayers: 1\r\n%AI17_Begin_Content_if_version_gt:17 1\r\n%AI9_OpenToView: -24.3333333333349 29.666666666667 2.99999999999999 1584 948 18 0 0 78 87 0 0 0 1 1 0 1 1 0 0\r\n%AI17_Alternate_Content\r\n%AI9_OpenToView: -24.3333333333349 29.666666666667 2.99999999999999 1584 948 18 0 0 78 87 0 0 0 1 1 0 1 1 0 0\r\n%AI17_End_Versioned_Content\r\n%AI5_OpenViewLayers: 7\r\n%%PageOrigin:-325 -375\r\n%AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142\r\n%AI9_Flatten: 1\r\n%AI12_CMSettings: 00.MS\r\n%%EndComments\r\n\r\nendstream\rendobj\r146 0 obj\r<</Length 2079>>stream\r\n%%BoundingBox: 0 -129 150 -20\r\n%%HiResBoundingBox: 0 -128.999999999998 150 -20.9999999999982\r\n%AI7_Thumbnail: 128 92 8\r\n%%BeginData: 1919 Hex Bytes\r\n%0000330000660000990000CC0033000033330033660033990033CC0033FF\r\n%0066000066330066660066990066CC0066FF009900009933009966009999\r\n%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66\r\n%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333\r\n%3333663333993333CC3333FF3366003366333366663366993366CC3366FF\r\n%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99\r\n%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033\r\n%6600666600996600CC6600FF6633006633336633666633996633CC6633FF\r\n%6666006666336666666666996666CC6666FF669900669933669966669999\r\n%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33\r\n%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF\r\n%9933009933339933669933999933CC9933FF996600996633996666996699\r\n%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33\r\n%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF\r\n%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399\r\n%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933\r\n%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF\r\n%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC\r\n%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699\r\n%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33\r\n%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100\r\n%000011111111220000002200000022222222440000004400000044444444\r\n%550000005500000055555555770000007700000077777777880000008800\r\n%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB\r\n%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF\r\n%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF\r\n%524C45FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFF\r\n%FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFF\r\n%FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFF\r\n%FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFF\r\n%FDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDFCFFFDB7FFFF\r\n%%EndData\r\n\r\nendstream\rendobj\r147 0 obj\r<</Length 65536>>stream\r\n%AI12_CompressedDataxk\u001cǕ-\u0000C\u000f\u0003\u0007Gx?|\u000f.X<3\u0006\u0006\u00032|\b$e\u001f_̈&%J\u0019uH$\"*22\u001e;s>򳋯^3{TǏ\u001f>}/\u000f/^|\u001b~/~~Im/o>\u0007c?_|ۧg?-j^߼w0\u0017Ft\u001e.~+mӷohM\u001f^W_}}\u000ei\u000f\u001fF\u0006qvnyI\u000b\u000f\r~zۗ}۷o^x/Qsk[˧\u000e{_Z'>?}򏷘\u0003|nwӯ1z|\u001e%>;\f-~\u00139h\u0017_?T[o^雿-/w7/0\u001f3sgkבF\u0019,d\bJ)\u001b*\u001f>s\u001fǴh罊`ĺm2}~_\u001e:\u0017o}Y\u00169ʟo_ܾWᝂ|\u0004W/\u0017OeޤO|}\u000eo.M)X<;voP'Wx֫w\u0018zײ|:vﾹ}\"qG|0\u0019w\u0016~@\u001dK2bh\u001dtSa]xw\u0015\rG\u001a~f,^9ʟcwsL/?\u0006;F_w<j\u001cRC\u001ex2GlTơ~'big\u001eIIwx\u0015̓߮:K\u000f&KnB~]pV_.H\u001d:Aeo\u0004|+v?\u0017ߢWo^ͯ_G?+_n|u\u001f\u0003\n8g\u00036\u000eon\u000f\u0016ߕ_\u000fOyK\u0007W}UǥCzWO\u001cwES%\u001b޾Ã\u000e\u0006\"H;\u001a\u001e<5u!=}o\u000bܡs{__ݳ?}O?ϟY(.3Y/=ͯx7Og7߾_'뤊|C?~'cz?{q߾}woQ\u001b/|F>kI/=c[՟S?\u0004\u00168g\bԝmS\u0010<=\u0007篾¸l~\r×~ͭ˥K/\u0017쳻2\u001d\u000eM~Wq[\u0017_ݾ:|K\u000bC[;?\u001e.z\u001e?Rt\u001d%X~URPGªUɛr*RS-\rzz=01bWmG\t\u001a,+JZrQЗr\u000b}꿝5\tZ߬zdxǮ7\u000e\u0019X\u001e?**yU.V岔ǏskZL\rܮ뼾^98r]c&U*s^4D5gY֜EV;\u0006?ˏ]s\u0006\\Vˊc۪5NJ5Fv5cKJq咔Z5-k5$庖\u001b\u0016[\u0017[cXS-:We8yS\u001d$uAFt\"Ͻ@Fl('{:缋.\u000b+wr\u0006iQ\u000f>/\u0015bH\u001a/\u000f1pr\u0019)`shL!Ƙb*\r$SH1t.)]\u001bl\u001c{\u0019r\u000eRe\u0006//,\u0006/E\u0017\u0017\u0017(W\u0017\u001bl%Wp2^ˌ͕\u0002IW\u000e\u0010\u0006Nb\u0013^\u0014NNty:]n\t̵\u0011%]c חW87\u001a7׺0Q.Q\r\u001adM,kzUNr*r)\u0015U\tWŭ]\u0015FhjR6?M*\u0005Sƿ/WbUM\u0012V\u0005\u000e\u0016\u0015)vU̪UQKiQ\u0005?WrYJ;ܮvڪmWj:X\u0011+Zog02qNLnp;o\u001b>\f󵝗2'\u0017d)(%kqRl-wr\u0018u-r+P^=\\J%KIǫPP-Rl-&\u001b\u0000tuײnI˺p5IfBmt2{ZZfRf#;ߘoN\u0016\u00172(t2*\u0005\u001b\u001aSzuy\tAe\u0000s v\u0006$\u000f#Ŗd_\u0018^,&\u0000\"@,\rHV2\\^P'#\b\u00074\u001bl\u0013&\u0012d8'\u0011$94dA5n\u001bl\u00132^'\u0010\u0010=Ⱥ\u0005q\u0005nNK+ \u0005kA\u0007\u0011[\u001a}/qqdp\u0004qXܜ\u001a\r6\tKr\u000b'.\nr\f.$#pqK\u0002\u0015ƈk+>r\f}qs%,/^^dxUkt!+\u0016dֲ-W?ٽ\u000ba\t\u0013.Ph{\u0003*=.=,\u0017VeC/nV7Ag\u0019{awݝ}F\u000fo*%wA\u0013W<;7\u0016$0\fm\b\u001b\u0018^hfl\u0005پy\f[9\fpЕ׸\u0018B88C~l\u0017<Ox\nYߣ-L&D&Eam\u0003bA\"<41P1`\u000b-\"0KO\"4H\u001f{w\u0005/lX\u0017\u00117)\u0019^!Xղ\u0016&ZB\u0010-)\u0018r/;Zf\u0012Ve-&G[A)<F$D+)*!\u0016\"\"6e'3\u0012ReY%\u001d?ȼKDbvJA\u001f5E2[IiU~{\u0015DWřϖI@q(2JS\u0011E)~b\"[\u0003=\u0007I)qg1\u0019'z5}b\u000b۸S-okv\u0017ٻM.rzڛ>f9\nnP꩕Sݴ\bMwle9^jX\u0019\u0016SޓV=Iєf;'ju>/\u001eft'tD34Kr\u0006 )Ns/CuwϹSNS}齬q\u0017\u0016p-cɕ_­\u000f\nD#\nW7+\u0011qpŕE!\u000b\"G\u0010(f\u0015!R\u0012\u0011\bYWu*\u0016E\"h*hQԺu)V*G\"li9(7\"\bt j\u0015a)\b\\*p]UD\u0000\f{]7\"vQ*\u0005/_^/'78V*|!Q\fx,B҂fkѢ\u000f\u0016$r\be\u0017\u0010(5ь\u00156\u0006ZI\u0001\u0005ߑË\u0005~A*t:U_\u0017^\t\u0005_\u0015\u0016z]t\u0006M[^䰢/޺}:;\rg#ei\u0014\u001cN\u0013ߑj|ϧ5d럭Rp\\D\"\"\"Rlu~~(aS\u0000l4q2\u00062Wy].R5rs3@ 7)fҴsgJ8[>\u0019=ơ;K\u0018{E(>zz`9=ӽ|pA>g^?g R5ՈRJӡ\u001bWc-MkYX\beii\u001b4Eo]\r7xJ%krfwL6\u0014j6m\u0014\u001bt\u001aBks)\u000e1Έ.<١,Q\u0014x'\u001dy\u0000\u0005\u0019(X:`J:g\u0003L\u00078w\u001fTv\u0005cwUtb(&/f\u001d \u0018 \u0006cXA5ptx||)kt\u0001\nd0iL\u0016sr1([rыY\u0018/Uq\u0018ib&)fǏԜȕ\u0012ԍ\n\\\"9N\u001a9(,|\u0006;!F+jV\u001781`04J{ڽ4Mb.\u0006k٘Jq\u0018i&\u001eh zd1]_\\^\n<\tZ6mč\u00067ۨnV\u001a\u000bzۨBU\u001b5]B=\u0017P5,qE\u00157p[lM\u0014\u000e\u0013\u0003ZP--\u001b\u000eg4ӧ5ϳל:\u0003W.\u000e*r/x᧺r=\u0007CRGsbؘO\u001eNG^\u001d>B~\f;\u001c\u001bJoG\u001d \u000fӎC3!\b!}JzF'14ڃV\thw~ЧT\u0011gGDA\u001e\u0005\nȧaU40:J1K\u0014j\u000fYj\b@V/\u000e΄a\u0019\u0010 R\t\u0010AY\\afo\u0010Xp\u001bE\u0004'E)R?6\u0011xz\"~Q@;#_M>\u001frޣ\u001cuRr>2\u001cضb?ŗÞqݛg~\u0015cбY;\u001eCV\b\u000e\fiQ`tt\u0000\u000bts\u0005-ܮ|}C\u001ea꽄W]\u001f+Ef0RX+vϵth\u0007h/}{/wn\u0017/WWev\u0006y+\u001a;q2-ˢ2&{\bƀ\u0003\t[J\u001fKaGoDO\\ \f腰\u0003W\u000f\u0004\u0016ӎom\u0016(\u0016$6N\n\u0019wx\u0015}q\u0018\u0007Q!\u0012/GtZ)7Q'*\u001eEէHTիwG\u0003=FW΋:8\\߮vsiunN4p+\"GQZnrᖒ\u0012$:R6.T`{)v2\u001dy\"m|[uC\u0002;VE&/q\u001eM\u001eI}_\u0001U\u0012S<\u0000ߩz5/Ŝ/_S _On\"+Wl]vy׋\u001blj\"\u0016\t\u0005'FdE\u001a.\\\"\u0011\u0017x\\ldu)\u0019S6\u0006y\u00108|$SjG9Y\u001c\\7kSKWUEvݱM}%II\u000b/NھJʹ\u0012JJb)\u0012\u0013\t9v.\u001fC>\u0015Kz%!SF/EJ\u0016\u0019\u0013+:~Z+= %\u0018ekx_w\u0007\u001aM\u0005.\u0012\u0002Wo\njh\u001d+P覭%Сق\u001dZCa\u000f\u00122P]$\u0004b\t^>,\u000fK\u000f%X%u\u001e\"a\u0007WS\u0011/O^觮;:bR<Ӗm|/w|c]<~o-T~A/ָ\u001ddz{\u0014CRS98\u001bb_\u001bf\u0018>\n,N=;l\u0014T<r>~T)隖3w뛻\u001fT$9\u001f;t6k}\u001fާi\u001f=_U\u001b\u0001^=W鵬<g/\u001d;{L_goT\u0016i,Rv1vvA(鲟m,Dx}]jP9\nvv L\\s/X\tS ;Y'x@dǘ\"Vv#WQ\u0014S\u0014\u000b\u00142DYGQ-=e'\u000ecnYe\u0017b=z?e73tI\\ϖ>OS5i&9\u0004Ipҽ.$T\u001fA=U+\u001aC\u0010\u0010*IA^2\fIE5eW\u0007T43*\u000eTs\tQQ@ YG*(Pr4\u0002mHF\u0004A-\u0011AZG}Lyª\u0014RΥ\u0011=\u0007>h!GaÔ\u001eȇ觖\u0001\u001fZv`\u001d!Y/:\bm%\u000e\u0014\rJW\u0003.GF)q\u001fZo_}#/Q-zrk\u0016.\u001c\u0002\"\\zU\u001dR\u001bO]З`\u0016qKn\u001c\u0012d-\u0002Yu-K`\u0012>\u000eĽ[.\u001e-aE\f\\7\u0010!vUKW\u0016\u0011@$EDs\nz\u00161!7V\u001b\u001euu\u000bNQdXK%R\u0019\u000eYԺp^|/+^r/\u0017\\.\u0005=6Eyck[{\u000foc AuMPN\u0001\u0018/ru(H\u0019\u0017)\"\u001b\u001aR>\u0014rinA%\u0004_wP%z*ȠVqS\\\u0004V:rJ*\u0003-^\u0006AѬԸvVOy*ѓ5]J}џP{Rv\u0015d?À;T}\u000b.D&(\u000eM[J\u0016\u001bѓ\u0010Ou-I&ݗT$Fx%\t]׾\u0014=x\u0011T=IP4%'K֑PBX\u0010\b kl\bƛ`'X|;⍵Z{\u0014\u0015煵VU\nl|m!\u001fn|9{L6-u=gZ~ۑ9\u001eCuޗjk来L6BŦ/y\u0015Л\u0014Ğ\u001eD(6|ޏ=.KT6|%Tc4\u0016b-/Z2rZ\u001e\u001e0[y|_[4\u001c^%\u0015ŷV\u001eJE\u0014L\u000e\u001c\\Y\u0017ټIG\t~ԯaA\u0015O%\\k%{qKAvUHK)koCZ\fE\u0005\\\bզ\\Nb({?n.3Jџ)\\m\u0002n=\u000fB(\u001b@\u0002{q\u00023N6wUF+\u00168-vFў\u0016\\5E_Xש̫\u0019k:A\u001elA:눽(\u0004RB\u0012rӬE)f,\u0007!`\u0010b\\ljY햢o-DVƃP\u000b+z؛*\r\u0000˪V:A4%\\\u0004\u0014)D\f\tࣔhmo$(\u001cs)Z܋m<pP\u0005*XJZ$uA8D'<\u0006ra\u000bz.{)nS֠[\fxs\u0011~;W==jw\u0002߻'>6iDߠqxo5wM\u0016O&E=* S\u001b=Qt\u001e񞺊~ۯ\u000e_׏\u000ezO׾@{Z^\u0015MU-\u001b\u001dDw\u0010u\u0003\u001d;\f\b\u0018[7j[ś6\u0013C/ \u000fO#U\u0012/Qf%5amyK1\u001a塎c8q\u000f\u001cuu\u001af1jݫj\tu0H٭8וآu}\f\u0014\r\u0003\u0002\u0014h\u0000E?z\u001caIhEp.@rhbR:[\u0006D&9\u0001t\u00196?A\u001fo\bgO>Zƴ;Svi;>G~FhL\u0014r%\u0019'Qp\u0012v[AH$\u0000\u0000(ʨ$8f\u0015<D,wq\u0012LLҟ:\u0002bY-`EW,:ߔ0\u0015\tRiJǏMQ#]T\u001bqД%0ůmZ`J\tM9u\u001b0\u0011UT\u0004c {JX\ti\u0015T\u0011R&Zn]\u0000]b6`\u0012#M+\u0000f*v3oK\u0015K8[\"f>Td\u001d\u0019x.5`{,?xŊibTBYqZ#\u001aqB][WUR\u0018P\u0001wv\n\n뮀\rp\u0015*\u0007\u0000Pe5V\\a\u001b*W0YCUi\u0003 hJ])S\rS\u0002`VTō2NJYT?5-+=\"kQ.UNjR\u001d\rOE#z\fgˎULYTmͼO^ۂ\u001ei=>\u0007=~?5z\tjbR J8MdS%KP+i(L妻/\u0018=\b:\u0016jʽ4*1\u0000vRe[WP끶\u0014;E\u0011+t\u0006\u0014%vj~OcFJ8P\u001d5(7\u0014h\fgPMΗ\u0015B3iS\u000f*?C\u0011;\u000f9V\u00137Z\u0012|עـv\u0006Z4Oojn\u0002ɦpN]s`l0K\bEu\t\u0000:\u00034'\\8\u0001\u0014\u0011\u0016\u001a\bJ\u0017}!}\u001e!)D\u0006\u0015U8B\u0003PsU#\u00188vۚ6\u0002֌y%Җ?߬$䴖ݮ~\u001biGŲ,b?\"}\t\u000f-m;Rʝ*47$|Q |\u0018|A]-rMbj\\MbQF#WB&NW\u0002%|C\u0013\u0003_*ɫe(ZHC`G\u000eU\u0004B<~Ts0׌r\u0006Dn;\".\u0001|\r\u00137\u0015PubpkԶ\u0018f6Ll\u001bh\\\u001bMkgj\u001f\rfsFI.sLi\u000f0D2brN5\u0015^\u001e\u0017\b(O\u0014'\u0013E=DQ~(?Q(\u0000vg\"\u000f\u0014_#\\Q\u0004 u.t\n^\u001cs:\t1qJ\u000b)=\u0013Ƌ>)y\u0014\u0010HۃG\u0005Z+\u001870F\u0004}$\u0000c+0;\f=Dt\rd!=W\u001b0+oa}qZߖݵ\u001b\u001f\u000f)MNd#`\u0001\r9\u0001-Nc(A)a,+:f\\\u0003^\u0019\\\u001acd{ZC\u00195ѭvOH_qVۤ\u001d`\u001c>a\u001ds5\u001c\u0015t\u0002?VC+ء͖\u0004\u0010\r)Ghm\u00109\u0014ZG\u0006ρ)\u0005.GB5\u0015\u0004}\u001a>\\P\u0002݃>9\u0005wh\u000b\u0012*Q\f(\u000e*xRB]pƧL06uDG^۠uR\u00167LJ|:#>'0:g1\u001ff}\u0012DS<qU\u0015Hs\u0003cw.Ojq7k깕M$w>a6ܗ}oޫ&;\u000fu5\u0010\u001c-#\u0004\fS\u001a.t\u0013Éw%$iiZc\u000fjwσ\u001dCG935iuA8K5uEE6\tG\u0011qRN=2eLhޡ\\.\u0015I\u000bW܀\\S}_V,`\u0015\u0002\u0000\r`B\u0005TcK#m\"\u0016n1\u000b9`Y#\\\u001a0ˈo\u0012\u0006Z\u0005~U謝Яg\u0005~\\KqI?s&\u001f?\u0006p>#ʍk\u001954ؽ\u001a ܉&\u001aPG5BzOߙ\u0002}\u0012Fhَ2\u0007\u0011\u001b\u000b]\u0015W\nFݝw+i6\"8t\u001d-\u000e\u0013Veurs9\fJ\u000féYGa/h~\u0013}=E^P\\кDkm\u001aZn*\u0002UxIR'S4lvX=iԶ~q3/dE\u000fJ\u0014n!D\u0001\u0019ATk{1TgJReQ[r\u0017܂TSa<v\u001dh\u0012Dw\t$Bqw\u0003D\u0003ĖP<\u0004U\f^UͲ\u0005lqa\u0014pUᰃ~Ҹ(\t\u0017Y\u0007~C6V+ԸqFZ\\wi\u001e\u0015<\u0005e鮡k'1fݝיk0}n'8__u\u001b.U5}C\u0017ޝ?tЭ\u000eB\u001c8]\u0003\u00159]{\u0013g8:͊K[\u0016G5:q7SٌjihZRC\u0007'+ۗ?;n\\&P\u001d\u0014T\u0005\u0013/:k\u0011Z\t!\u001b|X2{H#Xdug\u0006|\u0000:&07ְ*\r\u0017Ӧ\u001aK ~Р\u0012\u0000\"~\u000eC$c&`!Pg\u0014dDv\u0000a\u0011\u0005s\u0018NH)\u0007TW\u001b>dqðRIR1U\u000eӯ'&F ?&\tAV!\u0019\u0015ȅ}˅ɾi\f\nnWnt\u0015\u000fW\u00119\n_\t(I 7\u0015P\u0017wWrus&#[Ǧn:Uu\u0016uS\u000b\u001beSO-N,M6E琜s683$\\M=Sr젹[7=s<W>\u001eּ/%]TD*\u0014,\u0002\u001a`d\\\u0014!읠y\u0014\u0006e\u0001^&\u0015Z\u0001(\u000b#qJ\u0005X\",\u0001\u000bgq)\u0000\rGt\u0006\\B\u0019V[i\u0004<\u0007Snq3+C$^H\u0001L5K1\u001a\u00065y}`^vȒܬԫj|\u001dO\u000fǇ~cҤp< %\u001c_ \u0015P&8\u0006H\u0002\u0003(\u0005P\u0006\u0004Po%\u0013Ě/x\u0015SuiLJ%`ifYrTƊ9}Q\u001b\u0006/\u001eUS9\u000b\u0014.qL-?~=v\rߕ\u0018.\u0018-ƍ6UqsνU5i\u0018\u0015_34G'%lẛ}N\u0015.:_3\u0004j\u000ej?+pk_.n*L1Er5\u0015\u0005=~w\u001e{b [Țlvj.[㾮1_d\r}!H[WAauhv\bsM4~-Ε=׻Uu\u001e˧9\u0019\"\tzܯ9s5mM^\u0016qXN~m#Ӆjg^\u0006-^fsk-jF;r0jNI\u0015\u000bM\r\u00145\u0004\u0003hI\u0019`Έ\"\u001d\u0012]&!g*^El\u0014yVr\u0014_!:\t0d\u0018֑ms\u0011\u000bh\u0015ZjK\u0000\nŅW\u0016^rEG\\\u000bA-\u001c#$'H\u001e\u000b\u0011Pȯu!q+U`#$&ڕ\u0010\u0015*\u0017;_yv﹊[A}\u0012\u0017w%|~~\u001e\u0016(eEueڗ\u0016x\u00055\u0003Y W\u0001rHo)5\u001b\n^%q$?IP]w|fƾː=.\u0018%NFʆ\u0018ZRS \\gl\u0019\u0019L l,lj\u0007=:\\V%NE\u0012\f)qtQ<\tT>c_#g6}.\tKZۓ&A*-/$+ѐk18{\f\u001a\u00003\u001f;E\u0012<\u0007-f1ٖEj5\u0006k--\u0002ZCzYĸP\u0015qIc\u001esOeNf0V\f#.\"5+\u0005XD[\t\u0012Rû\u001d~\u0019\u0019]\u0002\u0001%\u000e6*\u0013\u0002in>Y\u001b\u0017\u001b_iV4\u001d;j\u001f֏b\u001a\u0004\u0004坄h(mqUQyM&\u0016\u0011d\u001aWGz&S*i\"\u001fʆyp#.\u001b\u0019M`1n>\u001a,ҏ\u001eh} ڝ[\u0004:\u0007oq\u001cOS\\HGͯѣ\u001bإmSn\u000e\u000e^Ar.U5ߧi.N7sv[z~'lMPf\u0015~|\fƦJE\u001dxt+1n<Stש&Y{xX\u001f\t5i<m\u0004n'kHd~gdB>#=;S0\u0018S\u001c\f`~\u001f\u0007\u0013.\r%6줯߿o{_?\u0000<(3H-\u0019\u00195B˘z^%3#{\\\u000f۳\u001eQSXM\\{>s\u001b'vؽgSH\"KX۬$Lڍg#Ww|\u001b\u001d9&w;\u000fy>|\u000f\u001eh\u0014I\u0004\u001c\"\u0017\u0007vOX\u0005̅\u001a\u0012\u001a2^#9~<?\u0010>Jy|_x@7PZ#2kr7o=Q\u0001PMѓz<~ʴK\u001f\\hZHԤ~ح\u0006\u001acZ:jP\u0007\u001eUc'ΛL\u0014\u001f:O\u0000=s&i%)LK#=5\f,[M\u0012Ƚa0U>ou\u000elCc涐CU{S;\u0000F'\u001eP}_\t#n6y\u001dqZ\"%ǝ{\u0004\u001f;B\u001dK\u0010OCPŜgIf\u0000$&G=\u0019~zK\fݍ\u001eO\u0003ەvS4l\u00134Ǐcth,Kt(v\u0007ǇVse\u0010vȞp^h\rOv\u000fP2S~w׳JA<X}lm=-൘8\u0012\u0000\u000e_{z\u0010\u0016FNq\u0005סzK\\)v\u0007GW9=B&\u001f9\u0000#\u0017~\u0013?퉟O{=\u0005ޑ\u000eg\u0004ɏ'O<?l\u0002X<~OH-u?}ͫ_\u001e~vo>^1\u0007\u0000i\u001esGMdH\u0005y0:\u001c\u0019\u0001\u0007Kry\u001fVߖ_Ŀ\u0003\rSt]\u001dz,\r\b\u0007\u001d^\u001c~۬o֏pW\u0017\u0017oޝ?{o~eQ\u0017_y}rw<|/'\u0017?S|[z=\u000fWvx.\u0014qцk\u0012B\u0011{81&ٕ*)C[M?<-#خlB\u0002yh!e\u0018Ѝ\u00193*ͬ|]\"i&|\rt\u0001kC\u0002{JgMG3ÕӚݘc&٣38Líl<|\u0014P\u0011Z\u0007Z#hi壊6\u001c-E(È2,g,s\u0013}<bt&#$\t\u0004h\u0002\u000e\t\u0010>XS^\u0015t3AEb\u001a CnP)\u001aX:0VwL\u001a\n\b\u001eQ5\u001dgЃAV`<+MmS\r\u001e\ts\u0012L^y0|ͽ\f)\u0002Bh-\u001dZoXt7}A`\u0011}\u0006LG_1\u0004z\u000bPiȮPea\u000fc\u000bǌ+\u0003\u0007I,/\"oF+\u000exnr\u000e\u000f\u0016{\u0004\u0012\ff\u00107\u0013\u0001dq>G\u0012Wަ')p\\\u000eKWC\u0005F\u001e\u00027v\n'#N`\u000b\u0004n\u0018xeŃur\u001cHz\u0004\u00100\u0003js\u001d\u0015\u0005&{Ʀv%Dj΁4\u0018׺\u001cwX\u0012\fɶe\u0011\\%\u000fG*5ɯ9ù\n\u000e\u001b\u0004ać\u001f\u0002\u0006-Zi&\u001cb TJ%\u0016.\u0015\u0004zy\u0019P@\u000f\u000fXӹ\u001e\u0010\u001eӃ/:>ke\u000fVaj2M6&\u0017!#uI#ƑLXA\u001cNp\u0006uᅎ\u0001)\u0015\u001a Y3\u0017g8</&c?$tqʩ zԩGS\u000e`\u000f;\u0014s\u001cPB?'\u0011O\u0001')aA\u001b1\u001dT,\rT(t\u0004<\t'\b=\byWS8o9\u0010$\"8R\u0016#\r\u001ak\u001aW?\u0004]Q-_\u0002Er6N\u0000\u0019\u000e18\u0013St\u001b*\u001ea\u000esfDţaP\u0012`F{(7׺rx8\u001b\u00041N4*\"LJ\u0006eHec\ng\t\u000bZlTk\f(2f7֚#8\u0001A\b\u0006ao|7V8\u0011Ago߃+'}\n7O¥olWۯ!#\u000f?\u000f@V\u0006\u0018dHȰ()\u0007\u0005\u000fnv5\u001cF'j6p\u000b^X7n,L\u001b>0.\u001dc`H0E)k\t}D:\u000e\u0000\u0017Hl\n\\X!c\ro\u0006F\u0010[&U\u0005'\bZ \u0018\u001f^Z&\u001a;D_1UX՞4In.C\u00155D\u0018\u000eر_0uG\u0001hH\\S(K\u001d\b*t_:R\u0001r#C\u001c\f\u0004Q\\SL2c-\u0016!&*$^yDqeb aI\"!\u0019\u0010\u001e/k!\u0018\u000e9\u0006\u0005j\u0019\u0004\u001d,rr\u000bl\rl뾵@yi.O\u0015uLNj1QA\u0015ߠ\u001e߹fFr\u0004} Ç\b\u000e̋JH\t\tSOpˉУ9_~+<ip'\u001b'rW\u0001e\u0007g\u0004I\u0005\\v\u00171\tT6pc)w\u0014v\u001e!H#VࣰP\u0001>Ɍ\u000bP=\u001dy\t-{SX#>\u0004\u0015s·쎼P@\fF\u0006C\u0006\u0003ËGR\u0000)&`8l\u001e!XO\u0011\u001f'\n\u001502$\u001d#Ue8D`*)D΀'r\u0015>f\u0011\u0015\u000e\u001fʺ\u001fj?C\u0001\u0005sqWr|3Dy*|\u0013\u0019p`\"0V\u000fX\t&\tN\u000fC\u000f\u0011\u001c\u0018HY_tȵ1o%`\u00149\u001fjgC%600=$r]*jw=\u000bx\u0012\u001f\u0014f\u0015\u001e\u000bpl6u-Z$`\u001c\u000e\fQ@j]\u0012=?׭*-)\"A\u0011Qz\u001a\u0015[:P\u0019\u001ed\u0010\nypvW_\u001e߹f\u0007dMRU]\u001fB\u000e\u00040dCpyRUi*bJ\u0010\u0018&\u0002xqx9.RV\\B\u00102\u0003\u0015'H.\u0015y!ľ\u0003\u0005\u0017(Cx\u0012\u000e\bG#4-kʡ\u0014\u0013}(O#\u0015e9?Qai\rT\n\u0007Y\u0004m\u001cP͆\u0017\u0019j!\u0004t\u0007M<\u0007jQ^(AZ\u0002B-\b$/ܙ\u0011M-Mĩ\t\u0011$AmC\t\u00025sKiP*\u0006~Ha?ZkvZ\u0018\u0010\bG\u0004\b\u001bf\u0016tJ8\u0006.e\fqxEB.\u00040j\u0018.E7ɀ\u0019y\u0016Q`3\u0014s\u0007\u0003\u001f\t[\n\t\u0014_ip\u001f\u0019LJn\u001bK\u001bG\u001fށne#6T(\u0001t\u0019\u0016ہYc\u001ffJhW\u0012\u0002\u001cPSo*\r*k8k\u0000.VT$\u0010:\u0005>h\"!\u0010\n\u00179=M잔2\u0017\u00003\u0016(XM^B\"UG\tó\\=<|ot\u0014y5\u001a\u0005\u0017<XVGK`N6\u0006H\t.C\u0005ܬ`F8r)0!ׂSA=L\u001b\u0006n\u0006uL73ʀg\u0000㈍_Y\u00159\u00022s\u001bI\u0010\r9C\\\u001dEOJsf\u001411w..ccB$+\u0006LS\u00168OJW7\u0006:\u0012U\u001cL~\f$\"v\u0010\u0015\u0013fX%\u00064\u0003!hLܨ`^ehP\u001f4M4P[e!˸8\u0016*1^\u0014Na7Z&kh$P,V\t\f<1\u0013كkI\u0007\u0010\u000b[.SI^\u0003\tO HÉ(c\u0001AeP\u0007^8\u0006I\bR\u000eŷ\u000fw!qjwg,S3e{i ei\u00049;\u000b/k\u0019'P\u0015%\u001bJ\u0010>/\u001b1\bz}\nw_Nn\u0013OIZH\bASE\u001d߳F+\u0016\u0014| 94;\u0015\u0012\u001a_ms@YGQѫ\u0002iFj\u0016<2\u000e \fpGe%\u001ab\u0003_\u0006\r\u0006\u0005\n\u000e\tv\u000b^QŢ\u001eS4妭T+1\u001br[\u000b\u001e\u00063R=\u00186,xGGbn<-&\u0018\\dC\\mom\u0013\u0016U7ei\u00034 \u0010\n ͦ\n)O\u001bG\t\u001b\u0002\u0000Ly]\t\fݔ'?f?U\u0016\u001bK0\u0019e\u0001!\u0003\f\u001aE\u000bX3െ+\u001d\u0006\u0007\u001e:h(Df\u0006t&\u001b&\u0000nZ\u000fANHnqݎ\u0014QpAx8[\u001d\u0012Y'̭p݀\u0007jF\u0017n#uu\u0010\\ҁtfï\u0016ik#j1ʡ\u000fkk8/Xf5%^ƺfkp\u0006pP\u001b;.\roLk.\u00067ν-\u0014\u00190#\u0011r\u0015\njcpC/\na;e3 \u001d\t\u000f\u001e$>Ʈ\u0004\u001b g\u0011l\u0000c\u00067MEsF\u0006_%Φ)g\u0013Éޘ:j;PҬl\u001a\"ء6ۍlg\u0017\n\u0002\b\u0003/K\u000f&}cej);4y\b0T\u0006`i#I\u001165rx\u00159<޷횢\u0002fM\u0015\u001b\\[mbs\u0011\rjcr`i=HTm/t\bmX$lnsmw\u0019z|Y\u0013a2@nS\u0017bm˚k\tl~P5[kj\u0013ۏ\u00075e4;AB\u0015ͭ$\"iAC3@vc\u0001\u0007:Tb\u0007\u0001\nW\u0007Kt\\5Eni\u001b@i@H\u0011j&wOG`C\rTzh\u0019\u001f\u0012X*\nu+8҄e\u0004|^'щ_\bKsH\u00159sD]?Ԓ 0\u0018\u0018\u0014F%A48\u0012?D:Dq\u000b\nn\u0001Nآh:\u0010ѴԤ&R7⩪i1n`\u0010U1ϡF\fqd3r15\r\u000b\u0014\u000bU\u0004zXC-xk\u0002ܳ'5Th!ҲfHs'hD%܁IsG>?;C(o<\u0012$F9R\u001dQ7\bᖺA[zgcq\u0002\u001e\u0007sj|C\u001d\u0001\u0010j\u0000,n\u0013{QZ1Ȳ˴[\u001c,\u0018E\\u8dOF\u001fFτb3zvf\u0004\u0006O(GbNT\"Y@oTO\"\u001c\u0006F\u0011Jw?G2eؽJL\u0013HS]3jA\u001apݔm.d@d3Ba΋PA\u0012S$Mp7a\u001e'\u001e܈\"$iD\u0006\u0000oѝAGG*0ifG3(q\u0012Th1\u001ed8p#\u001f\u0016\u0007fw\u0014!E\u0006\u001c+iH4퉖\b&\";\u0000FK,:?2{^j\u0011TKSE~\u0014r(\u000f\"A\u0002\u001dWLɀ\f15\u0004+\u001e\u0014O}35\u0019vE\u00194sonbMz߭_F\t\r\u0017I\u0002\u0016łمG9 \u0016/.ǣ/hNy&N,.H\u0019tw'\u0018\"ȏ&#o?:ӈ\u001a\u0000\u0003܎<\u0001\u001e`;}ABwhS44UPH̳\u0003(=\u0004DFMjc&WPiRw߸'\u0018mC\u0005HΓs!\u000bD՟si^\b\u001eθ\u0006ɱ\u0006Inm\u001b\u0012\u0019L&)\u000e%s')Qh=.K)o%\u00102Tf\u001cOI<\u0016;\u001d[\u0010\u000b}Qy%\u0012\b\u0003\tgP\\؇Q\r^\u0012\u001cyS}7՝9rRtA\u0003\\YiHbF\u001c\u0013\u0001\f}F[žO9uSa^<5^`ݵ]\r|N#\u0015ޮצ\u001a\u001fxߜ$Շ2Pɋ6|:\u0007L\u0013V0\u0010x@=$4bPop##\r \u0013R\u000fI^447+\u000ex#V$o1yp?\u0007kGMfHlh>\f\u00194ZbC\b#-*Vo\\\"e:+\u000fNFhW\u0017f/Q/\u0015\u00032N$\u0018,ȧ(ܶ\u0010\u0016{o)\u0017(|-lm\u0003\u0015YXU(nΙ\u0012qm)O\tDLf\\\u0016/\rB\u001d#d䦟[T%f\u0014*w\u0003_Nfq;c[\f/S\u001f56Ä\u0001l\u0017F}\u001ae0>Y;12'ӷٜ\u0006p<Pr(3\u0013r]+r\\0)k77L=\u001d\u0007z2\u001aR\u0001oBI/>7Y.jj}9뱎9G.t=c\u000f4V=&\u0019E\u001b\u001fž#oZ\u000e\u0006;^ty+E-\u0019g{z\n'ʩoZwK}NqOo\u001e3§k57\u000ee\u000bhT\u001d'٢yO\u0015Gy\fse\u001dE6BP6QF^f\u001c\f\u0015j9\u001dvU\u00142cž\tp|3p)mߺ05kօɷY\u0017xhŨ\u00193\u0005yc]-馕f4\u00055q\u0002\u0011R\u00057B©13fel\\@\u0007!_\"@\u0013\u0001!m44B}cJh\u001fN\u0016\u0004\bc\u0016\u0010g\u0015(g\f\u00074iGG]v:Vq4\u001cܿ;PtOM>1\u001cFV\u0010cI\u000f\u0002o53\u00031R*\u001aΰבn\\\nNXML-v\u0015;\u0006M<\u001a0ծYai%ܷV\u001e~\u0004?)oЅEZ:7\u000e{n˘3\u0005,J(TwGLn}QH;E«x+(iptG2\u000f//ML Y\u0013bЕj;\fӗ*dgl|E4X[O8\u0016\t\f\u001fcW,*{eE\u0014LU\u001fܙ٦RXJlՊ\u0015Α\u000e6\u001bMtpH\u001cKK\u0004\u001a0\u000fu\u0016O҇h?KZ8\u0006\b\u001cCЩ\u001dD)qQL\u0014\u0019G]a}sڈ\u000bg\u0019+bS+$)>I\u0002t\"z9hwQ''Qd\u0007\u0000+O^!\u001c(Xq\u001e\u0018\u000b\bqN2\u001cPqT\u001cd0-Q\u001e+\"ڢD\u0003\u0014W&C|v\u0010v5\u000f)S\tO\u0015\u001f\u001cCU\u0006\u0010^CwUJ):ع##\u001b\u0002bBQ>`\u001f\u0004\\\u000f-T`S@R\b\u0012b\u001f\u0013-2\u0003ufQ\u0000mEff\u0015**J8?r{\\}49'\u001c\u0012azڄc\u00135\u0010 %A~\u0017WH\u000eKa`RĢ\u001dU1\u001ctg\u001e}%\u0014C\u000b\u0007GF5GepX4\u00176\u0017\u0010^\u0007P\u0016\u0011W\u000bk$t\u0000$\u001f\u0018eNDa:b\u0006d۪6p\u001f?0ǠIFHs)DHN#3ͪ/kI\u00042\u001e2أ\u0012\u0004>\u001bm%\u001eo[=q\u0012nhi{r\u0018F^mtԢ4g\u000f4E\bhc~5ޡ}Os6\rT13f_fND\u0001٫\u0010\u0005<Z_ʪ-9],U.8I.\\6\u0011\u0015\u0000\u0007\"i><)\b}\\A;sE\u0003e&\u001c?R \u0016C4\u0012S\tg\u0011\u0004i!FTV\u0011&\fRʔf-u\fk /Inb\t%\u0014]\u0010)i\u0003\n\r¾5O̅al\t[\"\u0011Dk\u0002q[\u0015yhQ+Mݣx\\U3|\u0000R\r}xH\u0016U\u000f[ƅO6(<\u0005zD5\u0017;3w\u0011B(&Osq,WYjm5\u0014ғDԣ˝f\u001b#D|Pk\\\u0014I\u0015r'~n/\u0012\\i\u0014Df\u000bdE\u0004\u0003bE7D/\u000evQbpU[\u0011}Tq`@\u000f\u001eLՒA\u000euc\u0011\u001aπ\u001cQoA.av\u0010&=$ܫ\u0005V(IXmbXa~\b,P!nBo\n1K\u00147!pw\u0013u\u000bӊ_\u000fEʻ&}0\\.Pʓ脌V\f!\u0012H\u0002ĶEHeą\bbc?81R%axFX\\\u0019Ѳᱱb\u00170؈\u0005xy(#\u001eI\u0011\u001aE\u0011l'%Lz$qLlH\u001e\"I!$w \u0019\u0018y\u001b3\u0014T(\u001d+\u001a+l^v=\bt\u0012\u0013ɂD\u000fEz̑\u0000\u0011χ\u0017J$'\u001dw?<ftC\u0016uzoC~)rZA7CLxl|*9(d|yYN?\f@%ڹ8ӱT5\u0005I\t)#s\u001b@\u0000\"NtX\u001f\u001bԀ3`Y\u001ba[\n\u001d$ >w2\u0018^?jh\u00162Fp/a`\u0018|A\u000f@\u001eK\rə&x\u001a}+ZUi=Q,v6qF\u0006>06<\u0015\u0006>1\u0013\u0004_\f8\"M<&f*\\pq\u0006k}1!\u000f\raj1K}ԌR=\u0019Qt0\u000f\u0001vVߡ^[yj;B5\u000e\u0001\u001c\u0018\u0005)fJ5\u0013a\u001dgѲB*R\u000f&P>I˛tEip \rhv\u001b:0;s`vZ\foU\u001f553TQqyVMo5x&piܿVu175\u000e+ʤ_A0h\u0019\u001d@뉠t\f%[(Su\"k#RK@Ƈ!yL\u0006Ϛ<\u001cJJj\u001f0w34R]\u001cU)\u0013\u00149q\u001c\u000b8\u0018*9D<]O.7\u0001Bf\"NK7\u001f@]䷩L&g.\u001a>\t{\t!K\u0003v\u0017U$MAP\u001d\u0010/iyz\u0016sм Y 4,[u\u0003EQ\"?zqK\u0007\\+\u0011\u0013\u0017ZX\u0011K\f~qφ\u0019Ku[t`ZG/Z6\u001bZ\u00178\u0019\u000e\u0017F\u0018\u0003$/\u001a\u0016|\u001e (a\u001c>&\u0018uЙpC@\u0015TK-B۸5aqM-]h\u00023*]m\u0007Ɛdl42\u0013no\u0011[~|1ql72\u0004Igà\u0006#o词C$\u0014~DZT\u0012\u0016_ly0\nYPE8\u0013j\u001e@,~ht\u0017pdhzvg1ܷ\b+v\u001e_bc\u001a̻O/YܴJܶrW:OS\u001f\u000bV\u0011\n\u0012\u0012}F@\\U!-*1ڂKXlƎ,\u0018Z\u000eZr$ĕ\u000bq\u001f\u0001D>-zdi\u001eܻ Yt\"-Yz\u000bM'\u000bR(\bH#D\u001dɮ'\u0013Si\u0007:\u0005\rG~\u0012c\u0003Z'\u0004SF\u0018l(3\b$n#Ԣ\u0005nPG_Q\u0005\u001aN*4\u000b)f/Q\"\u0019N\u0014=,\r*\u0001#{TTdz\u0011tDcؘ&f3\u001dwDM-\u0002m1pewn\u0005\u0019@q\u0016E\u001b0\u0018K.!q\u0004\u0011P\u0011\u0003ojQ-\u0006ψ]\u0007:Y\"\u000fzE3bRblWO4U3\u0011/k*.f\u0001!A&Z\u000e8bU5&\u0006\u0011\u001e\f\u001c}Gl\u0005Wy)F;ƩI৥$\u0005F;QbE#\u001b@8ZQ2#񦗣\u0006cH\"\u001a\u001d*9k\u001f3\b\u001ey_l\u0007aio:\u0001\rvȝ9Jjp/\u0019}F(6\fXB,\ng\u0000@0\n(\u0016#,,P\u0013\\\u001f\r(\u0001nSa\tS3]F7Uv\f\u00046`84\u0012생W\u0018\u001b'3034c\u001c\u0010׈\u0000C\u0016\tnl5ّx/$i\u000b@eT3/4\u0002c\u0019\u0018ψ\u001a\u0005n^ihP43ejRSiv\u0013|2\u0016tu㉏t\u0019|\u0006 O\u001dY\u0013,&\u0013J\u0013\"ؠ3\t\u001b@\u0011\no\u001ebxg\ft.{$Uq\u0006\u0013\u0015\u0017;:XҶA즙\u0019&w\u001cɽ@'\u0000÷\u000fT&|\to\u0002\u0010*&\tb움*&\u0007}\to\u0002&Ċ\to\u001fb\u0002+&\tA#VL\u0013bń\u00028\"V\u0001\u0001\u0015\ro©\u0001']x)`\t<pA\u0011܃\u0004'x\u0019Wp\u0000\u00067\u0014\u0013Sр\u0006'x8Jѡ\u0007G0A8aP44}\u0006K8aO4|\tr!\u0015#M4\t`a\u0017N\u0012\rp\u001fNbB3\u001cq%&T\tWb7JL\u0013Ąs8n\u0012\rp0\u0010'8\u0011\fq\u001fMbDE$Fx\tK{`'e@\u0001\u0007i6@9L\u0000\u0013\bD-\u0007\u000eH\u0018\u0016{p\f;\u0006Xi0\u00132D{}di2v?M8{Wfan\u0007%v\rH\u000f\raCLЈ\u001bH\tQqڀ\u001e2N-<\r1|\r)߳ff|}3|1T#@fpabs|dH&#ഓv|C\u001d\tJ2@o{[\u0005\b\u0004\u001ezE5ڑ\u0013\u0002\u0005#\\▊\u000b:;72}p\ftZx8;b\u001f\u0006S4M Viצּ\u0016QmV\u0013:ޕY\u001fv59\u0016mbrFU\u0015f\u001aiB\u001a٩\f.HDq31h \u0019jc\u0019}95FfQ\u0004Ҁw\u00072V\u000f9l[ْ\u001b\u00158\f(%)>Ci^~r\u0012wԏ`\u000fa؃\u0012<\r$\u0002>Q\u00144Cf85?\u000358>z\"\u001a:\t\u0015B\u0002\u0019_S\u0005@ռsxW%+`09~\u0004]pNQŝ-w,\u0017Q\u00100sƂ\u00061˝Cw\u001a[w\u001afgy(wʞD\\\u0011LA\u001ad\\6f܁_')i\b\u0005#Q`D\fT_q\f\u001f\u0000Q\"PuDH{g\u001cS}:?5K$ށ\u0007Ö\u0018P褑(\u001f^Ihٙi-ÏzŊ!>\u001a8,A'j\u0011;͈[@>V\u0012\rE\b\u0004C3\u001f[h\u0001T\u0015O %`!A^7\u0006 j9|H\u0016+u,z\u001fm@7(\u0015\u001e\u001c&}mg˃VՉ#Q$x\u0015\u0002{$ңe@$iF\u0004\fFTK\u00175V*פ\u0006QXȨ=5*{N\u0015\u0013A^q\u0000sMz`,Һ\fS_\u0017_\r\u0016Ϛgi61ܷ,\u0016š\rJ6^o!ҨY%H\u0016eS\u000eԃ.\u0015\u0014.dF^*[q0pԿD\fX2\u0013Aa\u001bG$oX̣B;qֱ+\u001ah2o8Ϥ/k&JtQ\u001a{\u001c\u0010\\f\u0012\u000ff\u001d!/l\fL\u0010\u001e9\u0018SH8.\u00142\r\\{y\u001d]m\u0001:=TiplߩmsiQY\u001dD\u001aU\u00148\u0013L\b\u000f\u0014Vݶ\u00195\u0013n\u0012A\tlA\u00156%X[WBHQ\u0017\u0010CŅAR\u001c- \\{ev#.U\u001bC\u0018ޡ_6\u0016\u0004=GS_'bza4x>C\u001fZtani\u001eܷ ?07n /\u001asBJDU\u000f ܜf4J\u0014Od\u000bQfJnSAܵRQ\u00191bB,Ç}\u0018oV_S\u001bՌ\u0003\u0006\u0003fD\u0010\u00158\u0016?\u0010,\u0018|}zE}8\u0005sGdOo9>)\u0012ًP\u0013j\u0004oA\fZSP\t{\u0017\u0016/fتr\u0013T'16TTM=\u0006E\tO:Nq-3r aj1CW\u000f\r\u001b%E\u0007\u00135\u0010\b$/3T'L1}3i\u0018ޏ9T\u0015\f\"6=AmLh\u000f\u001e,^\fw\u0019B+ 43v?\u0010\u0001\u0013Y\u001c%\u0007Ԡ8-i\u0002SӍj\u0006\u0010\u001fG2\u0018^?ihfe\u00030<\u0016&\bŸ\u0016}nfhi0-ԏ+\u001c0\u0016w+PL961\u001c\ru*\bG\u0007g\u0004\u0017A]\u000eat{{ƹE\\ILH~ĩ#\bL,!8*\u001b\u00063\u0018^uͰO0\u0017T\u001d\u0005Sq\u000e\u0006-\u0004\u0014:\bhRyų6o;3;̂,FOO 6\u0010\u0005V#\u0010\u0011Q\rӪ\b16\u0001\u0011@v.~Z\"jQΡ|\"7g@@0\tqFC\u0005igH,hHh\u0004-\u0017:\u0002\u0013`=\u0017f˥QΜ\u0019\u0013\u0016P\\v00<ə$s\u0004\r#Y`l6[H\u0018\u0002gA譝qD+\u0014\u0019x2\u0015I<ӌN\u000bp\n\u001aTmx\u0003O&\u0001A`3\u0018Q{\u0006aT*BR#<\u0019Ezg\fKvvO#nX\u0002\u0007B\u000e\b`Q<F0g!\"\u0006\u00052F$\u001d\u001fTt-\u0003\u0001\"l\u0019\u001eZD\f\u000f:;\u000f3\u0011)5\u001a\\j\u001f\u0006Hlj֐2f\u0001(q\u0018-\r1\f.\u001a$m.Mc`\u0015v\u000f\u0006 Hjh`Y\u0010Z9K؈Esp_vJ͘^\fQ\b%H\u0015Px\u000e\u0006\u00197\u00191\u001d;3\u0010\\LxW\u0018>%\u0003\u0018\u0000\\}.\u0016F`-_bp\u0018\u001fFǛ\u0010:\u0013z\u0016\u0007$i\u0004qT{\u0006BW,.\u0015\u0001#+.4\u0016. ȹEĢw|k\u0004JV_iIEx\u0007gykLW\u001d\u0001?\u0013'WK6%N\u0015U&g}kSa~R\u0005\u000eXR˃\u0006\u0018e|{(Ve\u001a眝ei\u0011/\u0018L{\bUK\b\u0006U=&\u0018)\u0010s(TH\u0004=#w\u001eT؇j#S{\u0004\bU'Ui\\&axٹ[JsPQvg\"!\u00159\";n+fGXp\u0015oEV\u000b\u000e`L9\u0015\u000fj\r_531vvnYdpv\u0010^nk\u0007$.`ڌ`Kה\\»`M^\u0007\u001e΃z\u001evR;`\u001f-\u000f\u001a`.-5~OsL1\r\u001cR\u001c@on=ap9\u0013wj.XӃZ.R(ϩF}Tk\u0004\u000eQ3s\u0015Q\u001f\u0006l\u0000\u001bL]p\b\\\u0012\bj\u0005m@\u0000Evg\u0010%\u0018L%P;\u0013\u001bfz^^#vC\bǷ\u000b\u001b1hOQ+}{g\u0007\u0017_>t'~o<}{ڻ;ׯ4_Oⶼo^?[}B\n{~џ{onox؋'h&\u0018۷1m?{yջ{[7ScKOO\u0005z~\u0017ޞ]kvkWۯ\u001f|۟?~T\u0016ŖL\u0015@\"\u001aB\u0017UR%3LC\u0002t\u0000_\u0014TnciQĿ\u0003\r\u000f=o\u000e_=^(R\u0019%a\u001d~jz߬tw\u0013^鮫x_,\u0017Ϧ3Ԙߕ\b\u001b\u0001%\u0002o\r\u001e\u0001\f&ʱ\"\u000e\fuԒA]\u0017/\bqdXo\u0011\\l\u00054\u001f\u0003\t\u0015\u0004lbg`\u0005c\u0013*i\u001ce\u0016\u0003!hT,\u0015K\u00160/xzɾK AȨT~9I8\tɜL\b!\u001a\u0014$Uu\u001eg\u00106`%\u0014K\u0010CTA\u0012\b\u0019\rc=\u0004rƖŮHuމʩ*LRaSP\b.nTIH&kOTy3*\u0012KfmĀ&B6TX̚1-\u0017\u0006KW\u0010-8\u0003@P|K^!\u0003K[H2,\u0006\u0007)\u0003\u001b\b:ˠ:VS\u001f%W<\u001a3\u001b>V{\u0017TO9r؞l%l d6) \u001anVj1\t-\bRJ|\u00128\u001e_f'ZYHӈ)BVAn}\")\t\f!\u001dd84ZXj\u0006\u00192m'N\u001aӦHhb!\u0005q8R$gح\u0013\u0015υ9-\u00055\u0016xӱji֤p.\u0001Q# kE\tg\f3\u0005\nT =!tY\nĞuI=0\u0017\u001a\u0007'zu44-Dڒ\u0018b>\u0007@:iP;AVN2\u001dH\u000b6h!9B8I\u000b$fI1\u0016TeBc+\u0017T{\u000e&H+#(yϕP.q}\u000b3\u0015\u0005\r\u001d\u0019B\u000b\u0001jA([M=#*_M\u0014kGx7,\u0015bcKn\b)a{N\u000ePXXKLlȬ3naD\n\u0005!\u0017L}Jm\t{p)q\u000b~}9D\u000f*\f\u00071QqXhJz6*\bwO/lbX+\u0018,ۧ\u001dÀ\u000eDN'͂s\u0000u\u001eqU\u0015'\b\u001f$H\\J\b\u0012[^FK\u0012\u0004JHҬ`{R\u0018z*dB\u0013LZ\u0018ڧLئ*\u00100Lk\u0011UTvMFJ\"#\b\u00048%S\n\u001a$o|\u0014c8թ\u001cšPB\u0007\u0003C\u0013\u0018Ǉ'0t \u001b\u000f\bBk3\u000bڱA\u0002Ijٟvgb\u0016$\u0011-\u0019UbT\b8}Ʈ\f\u0014W[C\n\"f\u001bCY\u0019q\tgڗ4Z\u0011rf\u000e\u0012L]y\u001cqd*u\u0015韪\"\u0011XK,8\u0000Yc\u000fvFđ\u0004g\u0013MI\r\u001c T\\d\"{/\"^љ$\u0013R\boI\u001c\u0005&_<A\u0016#V\u0011~G^,F`=CMnŃ]L@ז3LT;\\9U\\u\u0013q:J\b<>JrWj1!\u0015(zښ\u0015N=6C!&<q$L2C\t\tD[\u0010\tFWlPHWlݥb3f\u000b!F*\u0000\u0006K'%\u0010\u001cݑT{\u001b]ƮW/\u0011\u0015_Ѩ`sp.i,u.\nD#\bI>'+CwղDZNX)pfK/H\\xڮ\u0004\u00041T\u0010-\u0012\\\u000f>\u0004kĜ\u0019+\u0004S,\tJ\"Y!*:g\u000e\f\u000fN$1~\t?\u000f݈\u0004f\u0017ÄLmZDւe-q\u0004٘e>B\u0007\t\u000eA\u0011K\u0010?NE'?A9e\u001a\"\u0002\n<G*Gp\u0006\"˪\u0000D\u0001Op\u00000/iThtHv\u0002Fz%\u001fITӨ${1ur%\u0002L\u0017\u000f,-:w\u0006\"BY~-0%\u0007\u0004Ֆ(\"W4+\u0002lE(oԸ\u0004Yr\u0001\u0010!b740G\u0016\n\f\u0000>Ϲ\u0004jiբe%q \u0012\u0003ӄj1Y[或\u000fZ͈s\u0013XB;\u0013d<H\fQ\u0017vC\u0006D98I0#{r\"\u0018*ES\u0002c}ME\u001d\\\u0014\u001aHSh\u001aP\u0010>2a}مvIí\u0019I\u0011\u000bvx\u001bh&\u0012H\u0012Q[\t\f9@@ֶ|\u0005>3X\t%\u0018+HnPAv\u0019bJy\u001a&8b%\u001cgP\t1\b=\u0005\u001bDٗY\u00112gXWF\u0001;\u001cKjyBhi\u0014 ρSM7\u000fLI\u0007\u0002=J𲑉:1\u0005Z\u0002$֫#\\\u001f\u001d\u0010\f\u0018(t\u001cΊǓQQ\u0001S\u001cY,S'zcUV\u0016ZS2@\u0017Y:\u0004BP8u\u0012\u0004n6ADtւ^l\u0003p\u0015%\u001dR\u001c+(S>ȢGޑ\u0001q%EyMi$Ԥ\u0015V\u0011H\u0017F\u0014\u0004M(O\u0012Zc5\r v\"ySBuK^嚭\u001eJ\u0018J\u000f]\fA\ro\\h`8\u0006lКFvHD5)\u0016\u0012\u0013n\ftܔCVj+/E\u0014\u0019\u000b\u0014\u0018i+\u001a(HG\u0004R+& H颔4T$1\u001b\u001a\u0015A0?'T|2(\u001al\r\"k_\u0004\r9ܭ\u00137_|,*],ڃm]\u0011{b\u001c|t$8\u0019`E͢(n^\u001edhyʊ\u0019X?t+VH#bjA,+U\"ڬ\"\u0018Kw`}\u0012I\f\u0015V+-7\"A#u񫳇ׁܰ\"\u0013+r5OHpt|hiE$:\bHt)\u0012.\u0017\b\"ue1\b\u0007ǈ\"_\tCE\u0017\u0007*\u0012\\9\u0002W\nqHQܦɐヲZ.% ]-\bHI\t'8oUBw:Fj\u001e: GIFKْ7txZ1\u000fWM\u0010G\u0015\u0017Z\f \u0004\u0018\u0017=\\pNx0(\u001efFe\u0002\u0017\u0005 Z [Й˖,U $s/\u0018\u0017Q\u0017ﳮk\t>4n8u\u0019RK\f7[Xz+p}|M8B|S04LV\u0001)jw\u00100-BN9\u0011PtEΕ\u0004\u00039/z\n\u0002keqc7\b#6eM\u001ees\u000bdT{N\u0000d*@{;\u0011\f_\u0003_E\b*\u001eS,WPJ\fI\u001d\u0014\u0014ZȤ\u001c</e{z\u001d\nēQ\u0005\u0007EX\u0003Z\\Sa.M\u0016\u0011gtŋɾ%ۻPc\".\u0015Ya\u0005i\\펵DMbm٧`.7V\u0010V\u0016BdA\u0000\n\u0012IEP`\u0010\u0019rvE-f佅PWlRV\u0014Bi`B_\u0007LZ*{<=F5 Ės\u0019.q}CC#6].XS\u0001\u0003\u0016t<$><\u0010v\u00156P\u001e\u0007\u001fƍ·\u0013\u00046R{\u0015F?P\u0001*X*R_LnQ\u001e2\u0003Dyȃ \u0012tr^]sw~tLUG.K\\H\u001a\u0001J(\u0010ݲɩq=U\"\"\u0007\u0018HDw>(`\u0002-Q4f|=f\u001e1Ч\u0003csT\u000f\u001aϨ\u0018\u0019yx\u0014']v1\u0006hitgLѰ%2fBptEƍ\u0001:ZSqq\u0010ݍ@Ђax\u0019\u0018FbE.\u000bn[ya(4\u0014\u001awsSXZ\u00023\\\u0013Z_vb\u001dJQ>Jv/#ݵ*xILCeRv\bG<T=S\u0000HQ\t!XH\u0011HA\u0010,!\u0014hӇG4Tyʚ*<*bE\u0003:\u000b\u0001\u001dҝ\u001d\t+d^\"\u0016\u0010و\u0012hơ\u000b\\-+̊\u0012iYk\n0ނ\u0016_WgԮ$렉\f\b\fE\u0015&i\rna\u0010.na.@\u0010P\u000b\f\u0015d@JHiK+\u00102*ҪX+\\g-\u0001Vr\u000eԇιb?+tc恌Q\u0012\u0012\u000b\u001cuwL ߒ\u001d3݃1'K(\u0007ubhL\u0015KN$R!t\t\u0010\u001c261t+ͤOQ\u00066g\u0019Daw0\u0019\u0001\u0019B\u0018k\r\u0002\u0013ċd9h`r-\u0010,G991WE&5Q;\u0007b%kcWY\u0011w\u0004j?%ܱ/\\*\u00107r2\u0013XRyX\u0011\u00044RtCD\u0004_ \n)7%kl\u001abCQH&r.=J1zX%*5\\ۚ\u0019\r]D\u0011$`w\u0002:nh\u001f\u001c.\t\n\nْ桞sR\u0019D)A\bb#ֶR\u0004x=\u0017U\bǒ6\r\u0019L͈N\u0010-BLl(|a{2\u0007\u0004wE.|x(!\u0014\r}SxP\u000b\u0010C\u0019\u0011\u0000\\V \\t˯E\u000fy/_'lB\u0003t1OF~<dmyC9\u0018Bm\"\u0005ޑucn1J\u001fC\f\tˣ(\u0010\u0019\u001fEXnrQȐS\u00192amO\u0004\fHٴ<\u001c,qs=9<8<YgEI\u0007\u0004FX9Z2%\u000b#fJ;'y\u0014)֔6\u0015\u001d\u0006#3\u0005\u0019[W\u0013wDf)\u000eb$#N\u0015>\u001ci\u0010,\u0011\f\u0000o\u0005#30PP9N.skܒq6LS\t؂6pd\bA4ʣh]e\u001f)u\u000bnUb\u0011^E\u0004DP\u00165(؂j\u0007Nr;/CxI\nI\u001bf#_\u0017'\u0004d\u0011gw6\u0001\u0005U`qHQE\u001f\u000b*u\u0003\u001c\u00196C\u0014\n\u0013E\u001c\u0002\u0010\n,r7\u0005\u0015HLJ*1\u0012U\u0016#\u0001I'!U\u001c61\u0011\u001b\\I̝h\u0017\u00006CV\u0011IM\u0018L\u0011\tr1mc5*M(\u0004\u0005:\u00069.ͩd\u001c##6୊8JK0f`%a׶@Z,Dq\u0006!\u001f+ 9\u000edq\u0012.Zӫf4+FHb\t0K߃JL\"[\u0005>\tFC/'\u000e\tju9\u0007813m7[XQ\u0006\u0012s%%\u0016ܲ@#b\u0016Kiz@Q\r\u0016$\u0006{p(@ƐTX\u0012zHH$$Ԅ\u001aL.Hv\u001flB:9AW%#\u0016,ZGpYL(5#\nә\u000bN\bZ\u0010I:\u0002U6-\u001e\u0001\f\u001e[BX>DE\u0014&El>B2&zkjԦ7<Q\u0012C\"K/INttA#\u000f4g\u0010\u001cGJ\u0011}h\u0011[0\u0011\b/F6/1GJ\u0016\u00128\u001e\u0012TKa<\u0002[*LbX?\\y\u001c\u001d\u0017 ,fOf(Y\f\u001d'#y$h\u0018T\\4R\u00129&KSڼ\u0003\u00111rfAV6Kjχ\u0014ف}ǵ\u0014\"v(H*3!OJ\u0019(XW\u001e%\"([\"@:\u0006N.؀/'\u0015gIF\b\u0000V쬚ԋߔ\u0010t-\u001e}b%\u0018\rB\u0002)_X2(:I\u0017G\u000e\u001e!U/>iJ*+u]C\rL*53\u000eB0k'\u0003Icv,>R\u0000\u0012H\u0010b\u001fM\u0002|R\u0014J\u000bzl\u00199\u001e52Yd\u0004F㈹Pq+\u000f\u000etI\u0012J\u001fPA\u001c_)UBOYnfHJJ\u001a]3\u0013\t8E{Rg\u001a\\\t\"\u0004#l=s4\u0019LFA\"Ky.\u000fDK\u0010R|\u0014x4K @$Ŏ`)k5\u0014ۋ(pQ%K<!\u0002)9\"b\u0011ZP) $Εt&\u001d\u0013)^\u0012>Hnk\u0005K2:Rxk\u0002\u0019\u000btc\u001a4ʹhj\u001e\u000bIIH}W\nD\u0019D\u0012O2(4K\u0019.\u0013_Y\nt\u000bU;E[z\u0011^\u001fKA\u0000'E9s%Q|N_BɼʼJ\u000e >.бV\f&|;7\u0018'Q2]䐳o(]dq\u0005$dg]zW\u000e偶Y#֗  @\f J  :@\u0007zF\u0006\u0001ثfU>d$͂\bcM?X\u001fE\ffǍ5\u000eu!vi\u0016Wh//<\u001b4[+ΥEs\u001b\"ؕ(%j@\u001bT|˗WeX?\u0006Q\u001c\u000bN\u0005{\u00126@HLuE;\u0005\u0014LjcwTMb\u0014\r'o.ef6\"A\u00138\u0007-(Y7$QBK\u0006@F\u0001\u0004Ł\u000b R\tED\u0018=7YF\u0013kOF5\u0007fS\u00190g\rS<\u0012%&m\u0016N\u001d\u000b\u001a\u000f<\u001a.p3\u0005?I4AI\u001bRX_3Q\u0002uj\u0004I(S\u0011\u0019۩\u0001^5\u000es}E`\u0010o\u0015+0k\u0002%b}\u0017\u001d墊M`=_\u001f@\u001dGDn$B|\u00168\u0010\u0015\u001cGp(m_D-~x=Bt.\u0015|\u0018Wgt\u001e\n7uB~.zt7\r04ݻziP.E\u00017P'yܦLvo\u0012m*q;#\u0006~7\u0005\u0018T'uw8\b2\u0000E!IS\u00132\u00123Rm\u0013\nVs\u0010DRs.,$\u0015_qsa+\u0016N@Lt\\\u0016u\u0013i\u0000`Ϩ3\n(.\u000fQ\n)*\u0007\u001aݨ 0UsĊf572\u001akM\u0000o!҈\u001cIW4\u001fXuqD\u0000Dvq\u00013\u0006\u0003G̽\u0015Y* b\u0004\u001b:qѾ\b73ecm\u0007^9!\u0018k])SCl~=fiiI=P##i\u001d(f\r.fә18FϠ;*Z\u0013\u00161#aeHj\u000bc@\u0007qWҿϕުlD1T3:W(~\u001a\u0006aOЀ\u001e|9@p4?|qMK\u000eu\u001d\u0019TA:\u0011\u0006De!\u0016]K\u0006\"\u001al*(:[~\u001dϢ\u000e%ֹ&0VhvE8ӓ&*h-Ee>Cm!\u0003:\u0010>s.t8C1\u00022\u0001H6`WD\u0003\bǙ_Ŗ(Si'\u001d>s.!:AQ}jP嗁\u0003<X\u000b\u00061`]\u001c\u0018]\u0005\f\u00126A\u0019ǪApj6v|P׷\u001c4榋i~FGv\u000e̍\u0012\u001e\tJ\u0018~:7:\u001c\u0010%P)q |\u00119髅{6Gđ\u0016\\)WtgF]ةڣ\u0015ڦ7\u0015}X`zX1\u0018?. \u001d\u0014\u000f\u0017\u0004>\u0014o]\u0010\u000e\u00196\f?\u0007\n\u0010?\u0007\t{P\u0014QsvK*\"D*zae\u0019SJtM\b\\\u0002sT\u00019PGykt1)\\6\u0016\nq(l\u0004yj\t`qy\u001f\u001c\r1f4Ϩ,\u001bO/14G\u000e>G3ɈZC\n\u000fkYHm@l#fGjF\u000e\u001c1:\"靯\u0005T\fk0t=g\u0019s \u0015\u0006=@:\t\u0018\u0010T\u0010QQb1a`'l\n=\u0017_Wxu\rݘ\u0012plr\u001b\u0001UL\r\u0017H[T\u0000\n\u0013Z*9pF\u0010uunvԃr\u0014\u0014\\0@w5y -\b\u001dc\u000e\u001c \u0017`Z\u0001\u0010t`Dp8: !\t\u0006-n\u0006!1 PS*7!\u001aB\u0002A@Ob6r\fc\u0007\fsZ\u0018\u0004==g\u0012O\u0000z\u0017\u001bb}\u0010˕8\u000f_Ƀ\u0007[\\_KtrٝJ2H?.\u0001oJ\u001bUAu-ԇkm?T]o[:=tLm\r\u0011\u0006ߦIy\u001e\b\u0007\u0016B\u00062\u0000>oϯNr{U$\u0013\"\n|\u001e\u001a=s՟d#V\u00053A\u000bv\\\u00180yP\u001aXqe\u0005UXoC:: \\Fl\u0016.V\u0004͟4hj\u0001@(h8\"\u001eߠ)u\u0014$lӛr\u0010r5r`#\u0005M\nj~7oD={cވWԬ\u0007]\u001c\u0016J\u0018}/\u0019Ј\u0014X].S=!\r*\u0010d\u001a\u0012($(\u0012,FBBE\u0010:#/\tGb\u000f\u0011\rqB#dy\u001aG\\ÂZpQ\nJ}%\u0016zE\u0000-\u0003@}+l>\u0004J5H8\nSX[\t!\u0006|$A&WmtAޔ\u001f-\u0006Y밧2c\"\u0012\u0011~f\u0010:\nv\u0016P\u0006<GEmS@Eߺ`9c\u0006J\u001dor-@\u0000(]dࠑP\u0006x\u001f\riAn%_\u0000h\u001b7G\u000b53\u0013O;\n\u001b\u0002hc>0%Ő9\u001c\u0007\n[-\u0012n!\tggp\u0000\u0003Rs(\u0002\u0004\u000f{^?\u0019\"<\u001fx$\f\u001cn3,88L\f\u0006viqpg:3l2\u0007\\\u001akO\u0018/pA@@Uشj\u0018O\u001d\u0006ͶgI\u0014M:\n#d\u001a\fOc\u0006s0ؠy\u001atȋ\u000fQ#Xn£<%\u0010\u0010\u001cew\u000e$u\u0019M2m؞y= 6Rt`1I\u0017g%+xIc`ׄr\u001dJ,qM4W><}\\,*]\u001c|\u0002\u001e\u0007\u0011@Y\u0000{?6$_~\u000e\u0017#\u001aq\u0015\nH\u000fy`~T\u0005\u001f1*\r٪X\u0016g\u000e\\|&}*\u0001т{\u0017sh!Y\\eJ\"\bL䱲0\rGȥI\tqqc\u000f7naj\u0006aǠ)Q\u001dnXQkf\u001aߍvC\u0002\u000b\u0015O\u0000{׷3b\t\u0001\u00010[\u0016Yd\u0017)<A\u0004LC#E{;L\u0005!Y!t̖ݠ0{6m9Œ\u00181$8\u001f\u0014|)\u0014?P:J@.#so\u001bI\u000e\t\u001e'juQdhR;:(x{P\rybz\u0014ʸ5\u001a\u0003\u001c'=\u0003A\u0015H' \u000e28b:\\U#`.\u0005NK (Q%A\u0012qh\u0006K\u0016%p\u001e\u001aH\u001daLNݐX[n\u0007\fm39[޹\u0011In<\u0013=u#iUyv\u001c%\u0007f\u0017\u001by\"\u001b@öS'\"OX-\"w\u0013v$9շ\u001f\u001am%r\rl!\u001fjϴRk??Kљ\u0002I\u0000%x6&\u001c\u00101\u0002\\y-i\u000b\f0K!11~E\u0002\u0013\u0016'1A\"&Q\u0014\u0012e\u0019tY\u0017\u0005\tǔ#\u0016F$';\u0010k\u0005\u0015\u0015CLeoy%\u001dl#IP\"Y\u0018%\\\u00057\u0000\u0017%̘q5.q<VW&^tT\u0011ߝQJRÕu@+0\u0007,98;x\u0019\u0003:@G'K)k _H5eBtRBvV2\u0015j\u0006B\u0004?\tE\u001d+\"A\u0003%픯8r\u0006)\u0004i\u001d1\";XygTL\f\u0002_:\u0017\u0006\u0014U#]\\\u0014:\\\u000e+EmvےU.\u000e#P0E%n,Ɓ8\u0015>࿢ƑWcnT\\\u0014ޣ]$sG]\u001aJVx6jtm\u001a6٨(hWNڒ0/UbC=\tdZR`𰰓2\boXi%h\nKhw\tqP&3\u0010ݺ#m\b}a$\u0002w\"3*׌y\tZ\u0019\u0001^[siBRmQ\u0017(\nau\u0000jE^\bg\u000fM\u001cvB]J\u0013%ͣ9pB#d`7\u000f\bF\u000e\f3kռ<?@(MkE\t\u0014\u0012\t1MtMbU`йkwl8*qv;ҝECqeפ>\r\u0005f젱8\u0015\u0015{<]{\u0015\u0014;S8\u0017\"4\u0006G(\u001e\u0003\u0015 U\u001bwf\u0015\u00137\u0017Q&٠1\u001c\r:\u00071\u0001+\f=p~FC\u001d\u0010_\u0007w\u0013\u001aŀ9/>3G\u0010\u00162\u0002\u0012q\u001e-Ѵ\\0\u0000\u0019gW\u0001k\u0001:Cy6\u001d=o2Fo&iۇQOǳT\\\u001eI/\u0012bw__\u000fo-U?8\u00196B\u0001g]l\u0011%\u001bԎ6CT0p\u001a\u0014!ZB\u001eeA*ei\t20jq\u0010d=ql#-\"Ri--H@\u0012i#t#3L3-ݫԽJ+4O{J1c潵k8\u0014H\u0016LuS\u0014uD\rZ_\nT'hBM\u0001E;%v !׌\u0015|\u001d{+6vD&n\u001cYCHnͰQڕڪtTg;=Qz}v\u001b\"},JS\u0007\u0016|\"e\b\u001a.\u001aM`\u000enа\u000b$UN\u0017\u0016\fl\u00124~\t\u0002\u0018\tJi'hg8:W\u0017\u001bzG\r\bpA|\u0014\tdÈ\u001a!E2/9PL\u0001v\u001f r\\R@˳\u0002me%-\\R\u0002g(\u0004\u001e\rڈ\u0002ThTEnI^i\f˟LUꦍ\u0014\r$A\u001dm}Ɓ\u0006\u00074ְgr0\u0003=\\ӏpcw+/=\u0002\u000fqr\u0013JU1D\u0003띢\u001a6\bVSyH\rlޞ]_]T\ryB\u001d\bI$ma\u001a`f\u0015D+'^WW\u001f\u0011x#&\u0010Ъ(K\u0003!\re6\u0013u<ťg.FB\u001f\u000b\u000fy\u0006\u00103$\u001e\u000b\u000bziϓ\u0001\u0001\u0004U/\r\u0006(l[`\u0012PCks;:.E\u0004\u0016\u00053b\u001b&<\u0003# &o83Ehc>bJ9sn\u0012\u0001\n\u001eQf\u000ehl9p5i\u0006^u8\u00163rA\u0011u>:\u0012\n\u0001Q×5w9\f祢}Y7\u0019\u0007$?p>\u0012Q\u0015;b}\u0019:vwǾ\u0002\n\\\u001dH@Jh\bɄ\"2%R]0\ne5\u0007XNS`\u001d\u0015\u0013D\u0010\u000eĥj\u0005\u000f\nZ\\/XT(\u0005\u0006trF_h{\u00142\u0019|9\u0001k8\u0007N3\u001dC\u001e\u0019\u0000\u0000Ҡ\u0013r\u0007{<ZQ6QPj=k\u0000Ȋv\u0015&2\u0013{|\u0010J\u001aOP~_R^_\u000f 4\u0003hT:\bɓv<ez\u0004\u0004\u00108Nuz#ߡP\f\fȂЬ\u001eI\u0010\u0001e\u0000\u0004}ݱ\u001cܸA.;y\u0001\t\u0000(X7XQ_G!:C7\u0006\u0013\u0010,Xx@mw\u0017*Oӏ7B6o:\u0015\u0000Yz\u0016\u0006ڹ4z[B&3|R\u0015BhQ\u0003q'\u001c\u0010{''4\"D-WٸOT#\u001a^thJQ])\"\u0017/L꨼UdZq\u0012\u0018^K\t$%hW]℩sBo\"M\u00020Ȳ89{,i\u0017)xGfr6\u001cT`\u0007\u0019\u00053@rX\ng*\u00039A&Zs.8c\u0004zs\u000bJ7t7bڼ']4y3\u0015#r\n6=\u0014\u0014B]W\nd\u0002*J8\u0003b\u0001R1|\u0005\"qJussD\b,\u000b>JJ\u0013\rpNfg\u0017쎯<Y\u001c\u001e<\u0003\u000bx\u0005;\u0015Kv\u0005\u0013\u0007\u0017.+\u001c\u0001|\u00196UE%\u0006\u000fyN\t@\u0019>M[Y\u001f\u00110Kuv\u0004-4\u0012儇\"?\u001dE_YiG^~\u0011~C\t4Xea\u0014_\u001c\u001b(\n\u0011\u0012\u0011p\u001f\u0015Ԣ\u0011ŕIs\r*EsR!Dq\u001a\u0015+l\u000f\u001a4MV\u0014Y./0H\"o.\u0003P\n:h_tQ\u001e'4iR\u001c(~\u0013\u0006\f;j Q\u001beӍ$tz\u0004ڙjM\u0002S9D\u0005Z.--\u0010y\u001b>\u0006\u000ea9\u0016ydq4ь#YF@O~\u0004&\bQ\u0003C띇\u0019s\u0002'ߟq\nњR\u0018QQ8d\u0005Q\u0004vh}iĜH\u0019A6nPtyr\u00105\u0014\u001b4\u0007P\r~&m׼\u0019\f\rzlPX(\u0004Luf\u001di\rh\n(`,n*ݛ\u000ej\rJ\u0005-d}`qJt\u00076%ڭ|\r\u0015{ե\u0003-㻾vwo0-iR@kJ?̠,\u0004\u0019\u000fԹZ\\c^هk\u0013kF\u0012ϗW+;JD9d>TB>c=\u001eR{a(Q\u001c+T\u0017T,Q\u0014\u000e\t(N\u001dLn,B\r\n5#\u0019\bV\u0000\u001aKݪ-}~\t4R2\u000e\t\u001e+.o\u000b\u001e}Pd\u0000\rp-]\u0007y\u0018\u00073z!]p\u0019x\u0016PVBWӈ\u0001ARR&JR\u001e\u000fz\u0003\u0017Ͷ0\r\u000bK\u001e\u0014Zh\u0006Bd\u0011\f\nF2,͂|\u001c\u0017X\u000b\u0003Jox\u0014/\u0018\u0013q&P_涇ʣ5\n^wϔ\u001d/G\u0016-5\u0016\b30 \u0016\u0015H\f>(=YG3\n\b:\u0015o7\u0002%\u000fB#Iq\u0018\u0002E4y hI,DosF\u0012 \u000fY+CG\u0005ֵDt \f(\\0#\nl\u001a\u001d\u0006G F>\\\t\u0018V\u00032PEG\u0006 \u000e\u000b\u000fˠUA\u0015\u0017VnFw\u0005ol\u00071D&0\b\\\u0000\u0002]=9Ckhobu\u001b7\u0007J!\u0007{>@\u0015jH\u0011uy\t\u0019ˊ\u0002~2\u0014C\u000f\u0005\u001agc;\u0015H+'/KzΝ\u0016T\rábs-iK>0dY\fJ\u000bnk6\u0005\u000fmF}w\u0010o+=CA!]v\bc+>h\"F7{\u001f\u000f\u0001\u0019\u0001^F7$7\u000bS;؞uթI0`\u001f(\u0018k.\u0005i\u0014Z\u001d/.=W΀) w8\u0014M?ZN\u0017F9Þ\f\u0002/@$hf'\u0001k\n\u0005g\u0006;\u0007]W\u001eBDF(P=$u\u0018\u0015O{\u000e\u0012Jh#\u0006v\u0001\u0002zG\u001cK\u00038\u0006\u000e[sɦ\n% d\u0010JZ\u0002u\t,\u001d\u0010~fe)GU\u0001b\u0010^\nUOX\u0014y5E\u001bx\u000f\u0018?oXZ2t81\u000e ꬺ;\u0001Q\u0001\u0015B\u00110`6\u001d-j([Vz_\u0002`\u0015-јZ7ZZvg8?~:\u0016j;elwrEa^\u0012\u0014kIpe9)KM\u001e\u000eyDoRx\u0007\u001ev[9,\t\u0018y|$T-u<\"CG9S#>Q\t_Pb@<ʼU\u0013\u0003L\"N\"*=\u0003񨶇w;\f,=y\u0006UfAe\u0006jlg ohKM@\u001bP4m$VuC W9V\u0016s12Bͪ B\u0007OW\n[\u0004$`<l\u0018\r|\r*1icW\u001a\u0011\nE%V&!a\b\u00173RW0eI7PF]j9_\u0010h\u000f,]\u0001Vj\u0017\\E\u0012eĕ6\u0003\u0012p):C\bb{ρ\u000b:\u0006\u0014Ia\u0000\u0012/:\u0006}\u0010Pu\br\u0012>-KY\u001eܦ>+&.B\u0018Q@}{m\t\f)\u000e&\u001c>e\u0012+>Uw'\u001e\u001bJ]c\r\u0001F^]}*+z/yD_\u001f33e\u0006\bjogCƽSk:\u001c*>.\u001b~iFV\u0019IB1\u001f\u0015\u00012\u0000@鼍\u0018\fRy(\u0012*$b2,v,LCg\u0001Qh\u001ac\u001f^sa\u0018\u00020\u0007 \u0002k%u\t7*\u0005=Fc\u0013>HVh'Q(#5`\u0016o\nhN\u0015Z&%\u000ec\u0001D\u001d\u0014E)\u001c\u0014\r~&'MKi\u0011QƂ1\u0002\u0006\u001bqM39O\u000f!{r,T\u0016\u0003;Fe\rťl`%]s :]\u000b\u001b9Prc\u0018\u001d\u0000qO/}}\"ag\u0019E<D\u0013'\u0005ϓO\u001b%gϰ5\u0017y]&ؑ\u000e\u0000e?~\u0006굾\u0002;@\rE\u001caN\r\u0003GrtY\u0003\u0004\u0002vNJ{fCWYR7Pq:mϠ\u0007XQ\u0004w#xlF8\u0000@2<۸~W\u0011oP|`Nm/(iv9>=z\ree!_쿶\u0007U_\u0001\u00119\u0017f\u0000\u0014h\u001e*?LSR%J=s\u000bn%ԑ\u00157B\u0011\u0011+Ba\u0015͌.\u001cY8z\u000f\u0018ρ\u0011' su޲0+(=%=\u001b䵂r7\u001b,2-Hf.fQ\bcD(hx\bB/.+\u000eD},\u0011VUZ\u001eXc\u0019$8mQl\u001ct&.K\u001am(8SuEvVl|W1\u000bF#\tT8Q=^G1V,DL\u0004\u0015*hĹ\u001e~\u0003԰O~Ά\u0003cmI^dR$PAEIvtvp*{`Eax2ɍ-,\rGs`a>F\u0001k9\u0015X\u001aB `Q49CI\"\u001aʓů5:ڊ\u000eÞe\u0019\u0011N9\u0002sTGo\ru:V\u0018hJ\u0012u@lm\u000e'P\u001b\u001c\u0000\u0012\u0019\u0013\u000egKܥN,=CtǛY:^\u000fUy'G F\f<?:cn\u0004\\8Js+S3\u0002}%q\r\u00194\u0005\b\u0012:b\u0018^\u000eGCya>c5n-+\n`Z\u001bu.~b)\fx-e9zE\u000e\u0005崅qkY\b$?\f>L\u0000;鈉]%\u000fH;xkAR7t\u0000̍X\u001e[\u0017;\u0003T\u0016\u0001\u0017s!NA:\u0014-,cż\u001e\u000f\u0001\u0003i\n8fi,҇p\t%\"\u0017\u0003e!UKY8N\u0011\u0016ԑu\u0015J\u0005\u0011Wx)nR\u000bQBG&ZVn\u0002\u000esAtv\u0005-ZF?\u0012_ۖO\n\u000e\u0006w\u0015J\u0002\u001dJjlϛu0]%JW\u001e@}ֿ\u0012+\u0002\tS(SrllEL}\u0000!.\u0017BZ~9tXl+\"j_Pf\u0006jg`\u001b\thզL͋\b6hh\u0007AZGND\u0011!Jb#={`]Z\u0004S*`>,\u0016}\u0001\u0002íR1d\t=cm\u001e=xkT~8\u0010#\u000byu-ϱ\u001cqh'jV[^\b\f\u001fE\u0003d\bV­jať\u00164ئ3>J\b~=$\u0015\u0006\u0010gi񄼐^5;d24R\u001buVĿ\u0011q\u00152\u0013TJ\u0018ۄ\u0016iWM2\u0010^Xw\nz$\u000b@%E<J\r=+\u001dܞ!=\u0002M#?z\u0017נIp++\u001cethlK/S#!]\u0017mb[0\u0006ӮU\"#4/>z0P\u000b\u001dv,~1~M\u001a\u0010\t>8%BK'd\u001ec䷢wMD\u00145q\u0003EFbF!\u0005\u001d\u001cC=\"fՌ\t;ұ\"\u00194Z\n\u0002\"ᄚ\u0012ރp^+>\u001fI>n#\u0019c~\u0010P9 گlAޓ\u0016\nm\u00109\t0#\u00046[Dk%\u0019ĥ35u!I\u0015eS\u0011'\u0002كǹ:6M\u0013ِF[\"d|R\u0016쇻\u000e9%\u0002\rا26\rJx\n\bsMb\u0005\u000fx#˝xiBmOڣw4P\\}dw7\u001f~ou\u001e,O\u001fǿ_\u001f/_y\u001dC>?\u0017񿷞y!.@;nZ\ri(\u001dy߾(m4扫-z\u0001\u0016\u0011H&{D\u0005^\u0002,\fmoe_ \u0013\u000f0.Ei\u00157' o\u0018L\u0012DLYS:\b\u000frzf\n\"\u0017>\u001d4\u0005L\u0002g\\QP\u001a_\u0011\u0001fT~\\Cnگ\u0016߶j\u0018ۛ@bq\u00191C4D\n\u0014+d\u000eLun|FVxb NwY\u000fZ\u0004xt_\u001a^\u001a\u001ch\u0006Ejt\u000f{2z\u0004V\u001dD42T\u000b.\u0012FN\u0002E;e7a\f\u0017۲q-<;\u001c=\u0001j]\n\u0018\u0018VqB\t$t\u0013\r*\u0019ۗ!4n&\u000b{j\u000erD.=\u000bbR\u0011|av,D9>0GX\"msaBHC\u0006\u0014\u0006}\u000fB\u0010m\u0014\u0000ڙap\ba+gȽc}x=o1{\u0012/{>\u001co+Ĭ1=Ԭ燭=5/n7_^)\u000f\u0016j?:S\u0004VS|ĊG)f'K黆C\tjY~[309͓k7\u000f\u000eYH\u000f_^B<a'OB\u000fOv\u001f\u000f_<\u001e\u00183^u\u000fx\u0014\u0017{0u\u0013_ym\u0011ߩ?y\u000fue\bqaR/#x2\u00113\u000f\u001bs;K\u001bs\u00070y+\u0005vW3۾Pk\"~@8\u0011\u0015k\u001bTy\b\tm\u001edb4w#\u001c-GmTC\u0011Ku]@_zzrmw/Sq~\u001ef\\6Dco\u000fXT nl\u000fw+x\b(=<c\u0010\u0015\u00198NuK\u000f\u0012<;BA\u0018=!l^\u001ffަp7\u0000~n|\u0000En\u0016mَB;0۩\u001d1j۠B*v[96ck[yz\"Km~v\\<8Ȼ:\\Sw:,\u0012\nMd.ު\u0004aN\u0004\u0003ᙎ3*^\u0007~[\u0016pHBvHGϛ\u000fё&yW8u۠#\r'6\ra\b>c\u0004}Ns\u0005\u0012ifr$\u001e:^[nCs\u001eJh1\u0002\b(KZ\u000el\n3q\u0005&qL6+ G9X^(<\u00057\u000bÈZ_`\u001b㥄n<ev\u0019Yk\u0013S\no/smg-r5!\u0010F\u000fpD)\\\u0016Us؄\u0013̰?\u0015;\u001b\"Rϛ\u0018NE＝&$+G}|+\u0014\"N$^T\u0015S\u0013p\u0006#Inh-\u001b\u0015׸Z*\u00010\u001fkqs.55stJM6oten\u000fnVz\u001bg\r4QZoB\u0018m=\u0013SݽeP˄D\u001b4\u001de{f0PzXe\u0013ӵ\u001a\u0012m8?\u000f\rDl6hy͋>dk\u0014\n\"6yXU֚\u0013ݬc|&x\u000fxxWr\u0011\u000ejmNZnP-|(ۗ\u001aj\u000eS'\fY\u001f.8WøͧΗ4v>^t^Ӛ֗4۽[K\u0004r܎g4Gn\u001fi\u0016\u001es4\u001a\b\u001d\u0015s\\E4\b3:8ǩ\u0005d\\e~\u0007i48_3Nȟn\b][\u00194cx)Y:#PY\u001d7\u0003#\u0018OfͼˮKf|=\r#s\t#s1\u0015z0̾i|r]ªi|Ev,Ry}\u0005\u00162TvRF\u001fN^|}r5j&\t`|pI_ݑ(,clU̐\u0015SVr[\u001f\u001d\u0017oc\\87^R3l7\u001c\u0005mb yFߦŇG9Y!wӥUlmS|̑'>\u0014KK%J\u001d1q\u0018/\u0017bM>͇qCiy\u000eƵq[\r[\u001f\u000ei剸\u0011\u001fp\u0006nGC$D^N6\u0014`\u000e,[\u0014m>6O0I/c]Tx\u0002)xo\u0000\u00026\u0001f5\"\t~xᐵަHβ^;c\u0004%Dp0-^f\u0004/\u000f`\u0002\u001c(׾{`Bo]Ǘ_/[ir\u001a\u001a:o=y\u0017oS^#t\u000b*!\u000f\u0003涹-x8λWY6K3\u0005&M\u001fHq]\u0017\u0015Kx\u001d3_w/]\u0013C\u0015rm[)dw\u000f]zQԛCw<t+[GyY~8FdW\u001e#\u001dsC4T:7\u0018\u0001\"7}{\u0002כC7\u0001\u001eRcfLoCk4\u0013\u0005C7$¯m3,CY0T|.Aal\f<\u00119C7)\u001dE{~\\\u0005\b_O a\u0004^˙\u000b:\u0019Ct\u001b\\ND'#o~Z熑&8𶤽?s\u0003ګ?:gˁ`!\u0014\u0005sĴ}{\n8-o\\$\fo\\^P]2\u0017\u001a\u0005\u001d\u001bp;\n|2ןa-\u0003e[R\u0005{ާe.;\u001b%\u0019-|zڤ?d0\u001bsnDZSu>KK\\\fg.w\u0000o\u001cNA|zFm\u001eL\u001f=s+*WQDr\u001c\u0007U.7Ij?ӷU._J\u0018*דByNO\fM\u0002sm+\u001a\u001e\u0003aB>r\u0003/\tmy~[Q0qo\\O*L)\u0019)\u001eݔ7*W{WO\\\tjt8\u0007\\\"WX4}{Z޼?0\u0010ʽߵx'vL\u0018w\u000e\u0004\u0010G?\\F}#|p}Ӳ}1Ϟ\u00145Gn0i)zJ%cɅt?D^\u0014m|x\u0004XGk[?moC[^?\u001em^;VZeZk[_E\u000fmQk}\u001biF\u0018\u0016\u0007\u0010os_\u0016^;%{zs۪\u0016\u001bHE\u0015\u0012]˙\u0012t\r\u0017[Cu.iHks;F\u001cX6EIv6\tp^mgw)1\u0003kϲVJ\u001bYbLD\u0002?Ql%>:Tl\u0014qOY\u00185\u0010r:pdۉ\u0015\u000bۀց5Ѓ4>\u000bH\u0002\u0011\rh=RtW\u001bF(N\b\u0012Z|yw\u000eH*HvRn<ʩ!?(ˁX)\u0016\u0018G\u000eU\u00164ࣦ^N\"Hď|5?$̰2k\u00152PW&\u0013-\u001avYy;:@@ڱ\u0019u;:`\u001b\u0015\\O'ZQ0\u0015\u0003Rhٿ\ncgޖl\u0017@d<-i3u.Ty6#ONV˔6YuN\u0004vY[;-\u0001\u0011\u000ee\u0006*e\u001fIÄ\u001aQ9\u001b=i\u001dhbOH~ۓց.\u00159-\u0001䀧)}蓒\r/sZ \\S_aN˨BzMk&4P*~i\u001d`ogӥ6F\t[(}ۥ\u000f\n*\u001c촷I-Ӥ\u0014.<.@wԆl\u0001R\u0012\u001cJMjBi:4ʒ&k\f9۲=jg6ys\u0003\u001eIK=@z猸zzzxE\b/+mZ^wjxW/v?cy:XQ\u001btSD$}yzr\u0019٣6)\\/Zl_Y6\rn챸\u001f\u001e&]5\u0003`p׫[:20{\u0010`j}2\r\u0003\u0019G}2w0ۭ\u0019wH#ƭi2\u0014\\Z\u0012cv\r\u000erۦ_#RPv޿mj(k`\u0019\u001e>eJ|\u0013\u000eçV\\1Ӈ?-\u0007NY&<ZOO}\u0018Q]oi!tтOZjrpҸ?m\u0011&\u00180~?B!&ǂ2#\u0003mtOk\u0019R\u0006\u0001vzM\npΐ'FT?-Tմ\"\b8%=iC\u00184\u0017\u000fOKxqYJ{)O\u001b\u001c\u0014\\z:H*-mOI.#9ʶe@\u0004\"\u0005iE\u0003ޑ\u000e;u I~ʹ\rjc\u0000[\u0005iP\u0015p\u001a'\u0005۠օۗHaG+`b#S$1o;ZQKc,\u001b\u0006ˉ]^/bЮ~6\u000fY^< ?E@,LMe[\t@%\u000b<fOM\u000fޝc[\rw2y]ޯE'V\u0013qݯA1je\u000f;m_>xR}\u001a]=IW=`߭_ku?\u000eh8lʽj_>*m\\ԇ+o\u001ajKd,\u0000m:\bMV>6 n־Ȅc+t\u001fF:^?mY\u0007/\u001b+/<&]޼Wi\u001aS|Xc*m+l\u001fZm|*\u00176V\u0011Ay\u001bvSa)X\u0018ݕFh0MVJ{\u0000\r\u0016x%0Z4\u001e,WP\rQ\u001fp\u0005t\u0015;T\nrj\u0014D\n;?)Tuai[\u0005Ԕr2dPY\u0016͢XΥӀ~7,UksLS'}\u001d͕\u0014{!SeF\u0017O E\u0002֣=ǵCa?FAWJke1v\u0015խ\u00040ʻh^](θb\u0005T|x\"\u001d\n83\u0017X>B\u001f~0\bLflہז\u000b(JM\u0010H\u0005Jy\u0014LmrV\n\u001f,5ih䀺\u001c\u0012YǶ4'ؙwO\r\u0019 ڡ?|ӧ0u:;u;}\u000e\u001ah]ӛ'{%$\u0015̜'\t\u0010~\u0002'\u0005:'%\u0010rS7!(zz\u001aDYD\u0001-QE;S0FVV'\u0003ŝ\u00192\u0013}=#\\:Wt{\u0012$\u000b\r\n@ēӘ!mnkOaIV\u001d#waٟv9kOPCNt\u0016d\u000f\u0019-E\n۲\u0004E\u001eai-;W\u000bS]\\΂\u001b\u0012!ey!y\\OGO.RWiv3+,8_6]{w[z:*mKO\u0007\u001eK\u0005o<fK2\u0001s-=D|mTѨO'O{\u0011>#75\fy-m'O\u0011@cdўN_r!\u0010JxYyFWà0$\"\u0003\\<UJ\u000b)ŕؾ}<*KQvN3\u0004];\u001aS\u001eJ\u000fz~x{KY-gF(04|\u0019yt;y\"r]u=m;A\u000b\"Y\u000br\u0011ۤӎ\u0001\u0019i\b?=:*(\u001er2\"ff\u000e\u0017\u001d\u000b\u0002ǯSII\u0015\\ӫ\u0016R\u0015_ӺM;-\u0018Ѡ@\u0014ei\u0001ͻk'\u0005r%Y'~\u0011*J-N\u0001j|Ys\"Qmف\r9q\u001fk.\u001fNO\rXE2p݄sp6O\u0004|nM0Wxq5{\rhفu\u001biR\u0006Ll$\u0014Gڶm[\u001en\u0002\t2&\t5&\u0011,Gfl\u000bwp\u0014Kt\u0004:\u000fP`S\u0007e𺄮\r@嶸T/\u001du,\u000b0\u0014\u001eycYzP$nJa_I)\u0003ZI\u0006H\u0019voRI%`\u001a\u00007%Xu'%%C|\u0012~ƴ='A&ý|XM\"$f*\u0013$gp\u000fCZ4uH\"=\bF<M#\u0011\u0014hJ\u00160ae>!QnCH\"`/o\u001fHXl\u000fG^)\u001fk\u000fmș`4\u0000u$aO-G^\u0014vo\u0006ʓ@\u001fގ|_+)ґ|vrDKj\u0000\u001f}7pR\u0010poFEGʵ\u001a\u0011?\u001ayq Ynw\u0019!a~d)Wbz\u0000o\u0007F?h;0ں=\u0017f\u0014K9h90޽x\u0011y<\u0016ѓ)巨Efz+OV\u0005y\u0007fUN\u0012_^\u0011\u0010z\u0015n\n\u0002\u001cm{E&;Fy,29͎LBݾR\n~?BYt\u0012=]\u0018_\u001f\f\u0017\u00198\u0000gq2X\u001aA;<\u001c\u0017\u001e=\bdb1FJ^}\u000325A\u0017hLs\u0011҇Xh9|\u000e\u0010o￱%*|[\u0002\u001aE5gNM4~W\u0016LgWEBY?\u0014\u0019P\u001fCQ\u001d:Qcw\u00062athaI\u0014 (1عʦ#?\u001c(qgP\u001f\u0010wD3\"$q\u0006\u0007D\u00062j<DfΟ\f\rJ03\u000f\u0001\u000ea%AR}8%T\u0000&\u0014\u0014~`uQ݆\u000f``LtFo~\u0016\u001f?X&z`צsd2џ\u001ccF\u0010c\u000fD_\u001c1Thx\u001b&d\u0018+=\r\u0013E\u0004\u0001\u0006#ih\u0013/6-9Gކ\f\u0012iDNZI\u00170L4ㅞٷ_\"m\\5\u001en\u001e!(\u0019j\u0013>\u0012.9oDZ5sgCOc$Jؚh>l\u0012\u001du.XmD_\u0002\u001amN\u0017cP?l\u0012\u001b\u0017 M\"\u0003'\u001c8y-D\u0006|N!o%Zm\u001a3o(_?PJj޾\u0006C\u0018\boE(MdU߁ʼ½9d0aMT\u0015\b9:jaob@\u000b9CbH\u001bvm.:H!\tA@[.\u000e-ֽ\u0002NrP\u0014\u0007\b\u0005NvPt@d`k˷+8\u0011wBCl\u0019']\u001c@\u0002nD\r9s\"F\u0015`s\u001a$(f\u0005r!#{b#Ae\u0000t`⯷\u00112\u000bp\u0019Hg'\u0002\u001a\u0007h^xST=\u0014Qhk6gK\u0011Ă\u0016 )\u000f/E=>E\u001eu{)2p5\\J^\u000e 40\u0007\u001a8bqbE\u001eqy)bvP(<\u001c~A1I\u0004\u0003\\~T1\u001cm;(\u0011\u001ebIR@V\u0006V2oY\u00170\fؾtԧ\u001ar=}\u0013\u0019ba?훘TMt@leFz&2XmQnM]^\tWF=?\u0013\tѽ@J6N<\f\u001a\u000eo\u0007ůT4\n[\u0003ZI'\u0006rzz*ir\\\u0004܁\u001d^;m44,V1}\u0018,˺^jS\u000f(̃-d>\u001c\u001f\u000eJoQ@t\u001b,8xL\u0011m\b[\u0011(GEtwo0`Q52 \b?4NnE'w\u0019\u001ctZԤ\u0001t\u0001lGOiQ\fSMx8-ZFOwE\u001d\u000e4[\u0016x\\]Zt!3 e*鹨Ʊ\u0016\u0005F\u000bm@=\u0007i̇\"ݻa96]tikѷ\u0003Gx#\u0015ۂt{.\n\u000bTA{\u0004s\u0011I\u0000x7?z.rS\u0007F\u000fE\u001aɞ/P\u0013M\u0017%t%HOEqR\u0017I'\u0003+KȃD3\u001a}L1Ҳ,\u001a\u00177Vc\b:~v_|@3U}Q:\u001atRwEfDc\u001d\u0017Ͱdf|*Kg/j\u0010^0+\u001fz_c#⸎\u0011,khFs_\u001fϯLGz̐]{/2 \u001a\nEm1_y;Egy?#__abpY3}\u0018%_?/JrD>\u0011~\u0011\u001b\u0014\"j0Iw^3~aSr\u00125ۆ\u0014rQGmѕΟ?m\u0018-\u001d\u0017\u0012}/=kbje2',\u0012!5%\u0002\u0013[H\u0015=m\u0013[ŷ[b\u000b6I\u001c!lF/v\bHYw|\u001a \u000em;ӕ3\u000eGH]=\u000e\"\u0018e\u0013XarH\u000e\u0010xx\u001bҩv+ɐ\u0017\u0016a`H[x\u0016Bg\u001dx\u0015B\u000e<K\u0014w@Y¤\u0011pyx\u0013*$\u000ekp\"\u0014qn\u0003Bhj-5\u0019Lm@=|\u0007\u0001c\u001bhf2\u0019T΂D>nCAZ \u0017o\u001fA<p}\u0007\u001cm\u001b\b\u001c\u0016[\u0005\u001eߧ[ U]\u0002sv\ttr0\u0007̗<A-\u0001Aw\u0018ptT\f\u001f\u000eŧvmZ|d\u001e&~[9T2kGˏ\u0017H\u001ayӥTjY}_n\u0018.ޫ1@׵~[=ȷx8\u001f{t܎{\u0000\u0014ן\u0010\u0006{\u0001;vO2Mp\u0017>\u0005\u0014jHJ)җg\u001e_\u0012*s\u001ak\u0011>\u001ch\u0016}O`\u000b\u001f.xMsݢe][\u000f;\u001a-<K{\u0018}vhܲȢpS\u0007\u0014+%`n*h<-x\u0011eۙ\u000eO,nC:>)\u0005\nCWm?G\u0014}]Z)kN`e{Y!s\n_\u000fK9^}[D\u0007v˫pwo8Fv\u0019'i0KBr\u0000\u001f./-\u001c\"\n̈́B>ckM\u0010/Q|x|_n,Rm7 F?\u00150nF۶n,!]ʺ¼\u0000O6KE6\te&\u0000rԧ3|-'SImFeÈR.׊O/51|s[ѩ&ki[m\u0004\ra\u0016T\u001dՆwsFj~w4D\u001dAx޶i#,m\u0004\"-\u0019/2D;\u0010\u000b:^>hR\u0014\u0010\u001fg\u0010syβ-\u000f3ڝhfܷڑ/C3,Gskm\u0014\u0019V\u0006\u0002zy$r[!qOk\u001b\u001d@\u001cu\u001b4\u0012c<\f\u000e{ctL\u0004\u0016ߎc[\u0011,\u0002\u0016zcB&/>fM@ŀq\u000bݎb\nm$\u0006.CȻ\u0018!B6\f)6-.I\u0018\u000b\u0015D%Rxl\u0002\t|\u001b\u0001~\r{~).夻^6+҅^^<F(\u001f_\u001cu\b$4}i>x\u0018x\u0019ww\n\u0014]\u001d{Pztcwݹ\u0010\u001f\u0016jM\u0002\u0017\u0002V5Fd\u0006\u0017PeR\u0019WNp~܆[\u000f^}ǂ\"IL\u000bꉀ ƙ;f/FYkc\u0016\u0016\u000b\r톅^~\u000b\u0004y+\u0017E,˫.65oC+n\u001cozpw\u0002ZQ\u001egx\u0018ZQSVx\tٶL\u0014pyn*#m*\u0000x\u001e&U\u0006uS\t\t+wE>zXQbķ\u0003\u0018!ge<5֓\u0014iDk)4dz\u0014{JbK\"I綐N$pRm\u0018[X>QS}C|\u001e/W(nITfPce?{@Pr~IR z\u0018<\u001dZ}\u0013l7}\u0018~8yӸ\u0001-˳i\u001d%\u0004$\u001a4R\"_~J,\u001f\u0010Jիs\u0012+Pag%$D\u0016?8,|\u0018+uK5ٖFi\u000eOI͞JvOjO\u0003I\u0017@-}/\u0007\u001bf\u0004?%\t?m\u001f.IowrZH\u0010\u0010\u0015ytEj^HdlmeD;T>,ʸ\u001d)>ʈugãb[9\u0002FPH\\p\u000fo{#\u0000%䆷i\rGc\u0005C0K$\u0006\u000f\u000fr\u0006È$/*?X\u0017\u0015\u001c\u0007,\u0006\u0002ލ\u0019\u000f\u0010P\u00141gl7&gLD\u0015tCQ>;t*\u0006iapC{h.9 \tه\u001c*:\n\u0003c\f\u0003OH=Y\\1\u001f\u0005\u0011X\u001aM8UNzg\u0011 AduYHL$ܟ16\u0018s\u0002I=\u0003&P=\u00196?U'ADlU\u000b\u001b\r\fC{ݴa\u0002dĝ\u0006e\u000bzV\u0005\t<amUW\u000bRZKX^\u001b'\b\u0000s\n/Rn\u0012.j~1NU25\u0017T\u0010ʰA\":5Oz][R,YlkpIZB\u001f@ȇ͵\"y\u000b\u0014El\u0006ٵВn7\u0015ዟ\u001eէ2Rd=T¶M\u001c\f\u0016ɹ;;\u001a7buGz\n&,ֹ9\u0014?̹]έ\fEE\u001c@!Ħc\u00069íhlt\u001c9}\u0012Z\u001c%0\u0007^\u0017A0\rP\u000b&.\t!\u0001\u0003\n\u0016&#~+sG\u001e\u0011\u0001q<$gN\u0019\u00071\u001fC;5\u0016\"9to)\u0004ZL%:,u\u001c'דF\u0017sd\u0016t\u0006:׋B^4w\r+!J\u0015ɫ\u0013ip\rg\u000b\u0019񛥸ZT}\b؝ƍ^0\u000f\u000f\u000728d2\u001es_\u001846_/.Ax\r\bρ\f\u0002O.(0\t[\u0010'+?9Б\u001c3RQ\u0012T0TbbZF-Th\u0019210S\"IXChm\u0013ږ֊\r\u0013Tͫ=\u0003͢v=1Z3t!\u0002PWe*WO)\u0000u(\u000f꼦\u0016\u0002i\u001cX\u0017Ga\u0001\u0016b>W\u0003\u0010k,Ca\u000f_Zl=\u0018ӻrɺ6!ddad(W3r9!Z\u001ak}o< #\u0010C.\u0016[ӌ\u0014\\ѕ_jZ<\u0010!3*'\n¡\u0005Ђ\u0019@˙}\f\u0011EQ\u0014+\n>oq\u0018Y;oj\u0010\u001e=NC\u001b߰y\u0002v\u0003Zq2\u0000A|<#6\u00072k\u0014$0\rU\u0015oZ5\bu #0\u001fې\u001d布10U\u0007%9v\u001ek\u0016|?^x \u0004sƁ89\u0002\u001ar_AL\n'{ׅ+TM\u001chͧ\u001f֑%&\u0000R)\bT\u0005\n~wj/</\u0007n(8J\u0016Jp\u0017\t\u0016<or݇\\:]pbrML\u0017t'evGl5j9%ڜyvІ^\u001cvވ\u0011uˡ[\u000bCN;Xt}ާ\blkk\u0017Nm]aNǙ3*wlYD$1ܦ47\u00179fɲyG\u001bE]^\u0018\f&1\u0003yfP|Ma\u0016v/AI\u000b65\u0017\u0019\tFL#\u0000şB'NuV9\u001fږnq\u0013\u0015&_VP%\u0005w[\u0016ǈ\u0014\u0010=~x\u0005\u0010\u000f\"8yvY<]ʺP\u000e/<@!Y+9/ƭ'\u0013j!&u\u0002:,]qT:g6A>\u0016^E\u0010\u0003[>_*(<\u0019s=[\u0011=|@A8c\u000f\u001e@;H\u0014\u0007yDZ_q;B´Do@]x\"E\u0011Yg½PP#Qf7>jɯ/4zs\u001bhȴ<7޵\\1s\u0002\f.bTx23i6Ig0\u0017挺v\u0000\u0019\u00072Ә\u001aa%[z3q @Ç\u0019c7q@a\u00043&ӳ]\u0012܍L@QQ9{n\"0\u001b&ع\u0017[t\u0017\u0010q[A\u0019\u0002\\\f5\u0012\u0004O\u0011\b\u001bvBIf8c\b;Ѯ\b\\jfngy]M,Fu(HaY\u0003Py\u0001\f'dϽq\u000f\u000fέ-_ƴ>σiM\u001bU4\u0017h'\u0013́y\u0015\u0017F8yN {E|3؎\u0019BPY\\\u0001'\u001b\u0014\\8\u00190@s/Tn\u0013Ţ_K8jSJgKթиօ_$\n}:C\u0019pMKD\u0016*D_\bY;]\"4jU\u0006 ~q.b5\u00064n\u001ec\u001c>X\"gRm;ƷX(X.-txeD5\u0003\u0014*Gؒ\bRi\u001b4\"\u001a\u001dzpmlm(<ZN4ZDwΈu=\u0007ݍ0mq3w\u001d\u000f \u0001q\\gos?\u0013\u0002jx!\u0004M\u000bO:~\u0016\u0018<\u0004-\u000e;,rϐvEw&͠\u0005!$]0O\u0010Fu\u0013S\u0015\u0012Z5|fc\u00115\t2Kz#ן^E5eEǨ}!ɟpڜc'D{9Ҝ\u0016\u0003pnؠ]fAW@F?\u0003\u0016\u0006\u0019ڮmļrg\u0015\u001e F\u0013@N2#\u000bP$V#]\u0019d>!;dS\f\u001aWC\u0006=\u0003^I\u0018\u0002n\u001c\u0005y\u000f*{ƪ08\u0014~@4Y`=\u001b)\u00112Jqn\u00148;UPRAݲZ}RK}\u0010F3j!̀5\u001c\u0005E@\nGDUc4M0\u0010s^M\r}X*]\u001c\u001awִW\u0007W\\\u0019]p.<4~\u0011\u001ftm\u001f-(k\rʴyǑ6Ό$#dQT\u0011AEy\u000f!|ӝTҝ,p7#\\4<d\u0018f$KV4\u0013Oi\b/8uiH2\n)r\n<*\u0002\u001e\u00135x3Cr8P;坍Io<\f]K3Qe[\u0001\\Ec\u001fŴ;E\u001c9\u0003 \u0013T]=c2\u0006r3#>h뱩\u0007;N8:eC.U3\u0002Н\u0011͙'p\fڑNsƱ19^\u0013\nՀ\r\u001b^\u0017JC:{_\u000e\u0014%\"P@ \t2\"}\u0004m\\%460ETi\u0015FfBuM S\u0002\u001eZ\u0010k\fΰ\\RmW#\\\u0016\u0011I_r40=?Bs\f\u0019D\u0019\u0015_#.X\u0004d-h,m*b#$$g\u001a%r\u001b}\u001c\u0015W/9)U\u00126SmBV*jy>\u0002ו\u00124\ncP}\\Rc\u0016EG#\u0014\u00070F߶\u0005`8\u000f_e\u00023d`]bo\u0019{+o\u0005\u000be\u0018\fm6U_h޾)\u000eQwKP7\u001a,f\u00113CTsB0̲SHV)at-b\u0002H&؎pGh˭჌\bHGQSZ&ςRK34w\f]FN[\u0018tBN<n\u0016\u001c\u000fܞO\u00156eJ/cp%%\n͕\u000flް`t\u001dbcͣ\u000b3\u0016\u0010՝$_\u000b\u000f\u0007v9\u0014r hƒ&5r\u0000ո.tv\u0010mu\u0006I~\u0010f,\u0012\u001b@8GE=dJB8\"E[?(\u001b#q\"̵0\u0006D\u0002cY\u0001\u000e3\u0017ou=й\u000e$\u000e\u0016-l\u0018>\u0004G]\u001f\u0018]떩\u0001ĻG ZY:\u0000鈶n[3(A\n}\u001c\u001b<ЋB#XE\u0001-\"K[\u0015eM\u0015p+kGd\u0004\u0019ڲs;x(w+.f\\YBr\u001c\u0012o'\u000fS\u000f\u0003\u001c˱rY#\u0019͏\u0006\u0006֬nFf\u0004l\u0005w$)\u0016\u0000iC?`K\u0001HsYi\rUqLSh%\tW 1l_zGy\u000e)f$\u001c3H)j\u0011;a\u0016i\u001fܷ\u0016ܷ)\u0014qZ=°sB\u000e\u0011jGt_YcLNĕFxg4=,>\u001e(n\n\u000b\u0006.-_GYV\u001d\u0005=:\u001ff\u0004_d}hwp\t4\u0013\r\u000e\u000e\u0016lݖ\u001f\u00163x+/>%@\u0011vծ\faY\u0017\u00137+d\u0018H\u000fՎ\u001bg-{]cޜ\u0014wZ\u0002-HRȔcQ*)\u0006\u0006El\u001f>{+Ukh-ˇ+\u001f2\u000eD1\u000363\"J^\u001a\u0015i\u0004ƨG:d\"\u0014Ühĩ@ǋ\b$+\" zI*\b\u00106\u0019[2\u0003mf\u000eL7;%\u0012W\u0015\u0019]\u0005;eh\u0002>/Ks3|L\u001a5K\u000f\u00066Zp|Qsp\\\u0006\\Z\n0\u0000߶8\u000bMqq\n311\u00022\fRi\u0011\f3\u0011%8Dx\u0014]αrXo\u0018ǐ&H2\u000ee\u001dg\u000eჶDHߊ5xE\t-\u0011w~r\u0006\u000b\u0013b&6s.'2Ӎ\u0002H\r0ņb\u0019btN\bԡKlynR\u0004O\b՟y\u0013S\r@MG~\\CwΈzlb:k!\u000bę2`2-5\u0017\u0007޷n£E\\\u0011a3k\"Z(e\u00044^TzC)6\u0016Lr\u0002,\u0018\fՠ\u000b\b3oM\"\u0007\u0013\u001d(#6tqorƽtpO(RV\u001dX[[d6\t\t)5eE7kM\f\u0000\u0013\u0015ع׍\u0001*Lx\u0002kS5+ 9֑y+ϴ#Lԙu\u0006\u000f>\u001avRx\tY0Ś홐B\u001dK\u0005?\u0003B\u001c8ZkQZk\u001dfz.KQG㜓\u0002Z˺Ftu͈:X1b\u00067V*s\u0012vo\u001d舢]ym糹]\u0006#)\b\u0006'K=\u0014\u0017_\u0002,||\u001b={\u00062F\\Z\u0012#\u0003\u0010]-\tt)=\n\u0010\u001aΈ.(\"o捿³XG\u0010\u0004lUU=#s͘\"\u001d|ƒ2ESO\u0014T\u0005׬\f\u0003?\\NQ-D\u001f?7-\u0012}S2!Çԙ[!@\u0019+(ue\u0001\u0001TǨ\u0010ف냘ZAκa9xA\u0018uOVLcu\\-5_APƎ\u0019\u0012Q3صS1]o;j{}\u001asL0\t:j\u0019\u0019\fz\u001d:)i<LE`w9A\u0001\u0001\\G\u0000@Qm\u001e\bZPj\bџj\u0014\u001dho\u0003'x)\u0004H\f\u0004L\n\u001e9\rbaA\u001fI\u00171bMIZ.d\r9\n\":=$!gzdZ<υF3M19:պOYܵ./\u001434Hbۼ\t\u000e(ΠuO\u0016/άyF&-,T-VX\u0000q[<b\u0006\u001a3оṛ3Z4242@r@t\u001e(x\u001c\u0013r]$[\u001fug\u0012.0WvRUZI<m\u0015׷vO\f*a<'\u000b(eD8XNC\u0017^5o?o~oW\u0002p&.Ҽ\u0002M%\nJ\u00037\u0002+\u0015\u0004\u0013#gS˻jWW\fE;\\.\u0015`ZpSbF\u0012Heg/X\\= 67wD\r\u0019$r\u0017L\u001b10öP\"nB3'\u0000#\u0003C/|R\u0004{ (Kzf\u0004CLsOȮlԣ2B6c}\u0019\u0004\t :Nػ<~,KNC\u0005[$e\u0017\u0016\u000b(^\u000f[B_.\u0014\u0018vYP4ף+Q#k\u0015U=\u0003܆\u0017\u0010,k-@6%\u0007\"\u0010\u001a&ChU:\u0013*M\fÒy;ôƑawF\u0012w3cn~.!_\u001cZzƠ\u0017\fR\b{|;QߜȌ\u0016H\u001c>s\u00061\u00156\u001f}lL\u000bdXO@f\u0014\u0012U\u0017\u000bPA\u001cX>B_\u0014(G\bōl[Q0;ct|\u001c5&\u001291 ]F`4U*Ugah\u0015%v\u0001\u001fA؆rem5T\u0003\f98\u0019\u000b @mp?>A9\r/E)\tRP^\n\u000f8\u0002Sixj\u0017 \u000bIDh.'ԫv|\u001fp\u0001Δj;i L]c\u001cLP8xي\u0003B\u001fo!\u001aq`\u0003 w\u0006z~Vb}\b|~\b\u0000\u0000\n\\M$\u0016qc',0BJd\u0005\u001c>r8wui3\u0016C\bi`|\u001f\r0W)!aSp\u0000O\u001c~^\b\r[\u0005\u001aX6J\u0017\u0002ڴC@l\u0018^k\u0011\u0010\u000bDo\"-%~\fKOW#\u0017 }f\rȌ1=\u001c\u000eʗ}i\u0005nv˗MQfV\u0010.8m\u0016\u001bC2`\u0015.'@u4x={/W:\u0002G\u0005\u0004\u0000Qp\u00142Tpb`<\u000bʧ\u0013W}8׌\u0003\b\t\u0016 c}.vaX\u0014PR2+p,\u0002J\u0019,?յM󙹈)uUzz{ފ\niP,tI\u0017ysop\u001d+BJWV/@e>WCns G\u0015JCuz\u0006\u000b0s``\u0015l\u0006O\u0016qB0-:#9g\u00029\u001dMg`\u001e\u00168_fV[mye\u000e\u0001Jp0\u0019P\u0011\u0012?/UT\u0003f*\u0005Y\t2\u001a\u0003sE/iL9p\n\u001e\u0001{\u001a\u0002\t\fp\u0001L[\u000fr-_\u0012_`Zy\u00196l.0ZUWtI\u001c6S`2\u0001¢l\u001921\u0019oa{ǜB\u0013#辧9s8\u0002\u0003w*H1́cK+\u0011hZǯH>e7\u001cFg¾jkfU\u0011gwݏ'>\u001a0'BO.\u001e,|\u001ficZ!\u0012@x\u00171sD+X_\u0013\u000e9#~p\n\tSq05>a\u0000*41؃9\u0007Ӛpu\u0006W@F}4\u0019\u000eN?DEF`e\rFr=0xr\\;2|\u0019WN[Z3G;\u0016\u0012\u00189\u0019\u0010]U\r\u0018S\rHd\u0003J]3A錜\u000f~\u0007u\u0011\u000by'Mef3!\u0005uS\tsK\u001c&B)Ge_j0 \r$ N愀^\u0001\u000e2J{\u0000zL\"Xb\u0003<\u0012\u0002u\tC\nׁ9\u0019WIm\b\nZߟBwz><3Bن=\u001d.5,/>\bwjń3j4 Ԣb$VZsF \u0014\u000boj<A=6eYHٖ\u001bWNKW\u0010`V8\"49\u0000fdfc\u001a\"L\u0003\f\u0011\tOcƚ|\u0002q\u00199G\b<q\u0013;op7`s1.j=\u001eb\u0016J΅s\u0016?\u0001\u001ad~ӟ[qB|TqE\r\u00128!eRY9,\u001bHm=NF\u0019\u0018aHP\u0011;F\n\u00167<UUxCP,emjL\u0000JVzqs;\u0018ZQ\u00121JԼo3uyx\u0012O#\u0004\u001d\n`=OL\u0014xYT^t\fIa\u001eY\u0010\u0018\u0002\u0012.Ӕ%/*\u0016\n@\u0011?~Q}ʠ\u0016zجg\u0012g8F!sٙq4B`Vu\u0019P\u00048GY\u0019%qZ\u0011\u0012rVe%\u0004Uc5*dWU\u0001Fn:8:5xQ))\u001eL\u001afl\u0006E\u000bU}\u0016A\t\u0015bD P\u0019\nX)y\u0019Vs\u0002\u00115\u0006_ j\u0001\u0001A9#rF\u0005jq5U`=$pVu BXY\u000fRH8QvB$Ġcq\u001eSstU\u0015\u0010T\u001bev\u0004MVUN>| o\u000b*BZJ!7\u0004\"k,{\u0015ޠhYggKKV\"\u00072팜v1g̈\u0016!jF/a\u001ah`SX=\u00047\u0019z\r\u0013\u0010\t|\u000bZ@W~pS6\u0007=׫d6@h\u0011\\CTJo\u0012Y%\b\u0013~w9B\u0001:`{z#IT\u0001\r=\u0016e\u0015vG\u0016?\u000b\u0003\tsV\u0018kh\u0000ZCfL4༏|\u001a\u0007>\rʨ\u0000\u0005@%J?\u0007V!G?7}\"\b8?\u0007Ǣr\u000bHlW=z,Yy+3'-yq8a{`Ry1x\u001f߯ Їn%w~\u0011FqBs\u001b?\u0010\bX21D.}-\u001ab~%GE\u0004EreGEQS^׍\n_\u0004ZPR[\u000fQІZ<k\u000f\b+@\u0006d-_ƒ>缜q\u0012l\u0019͟g,e\n)k\u00193^r\u0019\u00031M~\t\u0012\ba\u000e<*5Q=TU6\bD\u0007.0vNs]0\u0018#@1Ѯ>Z1\u0019\u0017 q`\u0015!q\u0010\u001f\u00147\u0019\u0015­U\u0011e\u0017\u001dA\u0017:T<\u0018(\u0016v%pq$G\u0005=,-υZ|Bh\u0014\u001fyx^\u001d\u001d( Ȅ\u00027p.,3Elp\u0013\n\u0013\u000b\u0010\u00137\u0010n^ݚ\u0003߿\u0002q<U7=a\u0005\u000bԐM@|UjPz\u0004S,ьb\u000fYE^\u0012jpDiB\u001aH R|TJ\bM`a4\u000fsS8\u0002Q\u0006Q)oTY_\ns\u001aV\u0003&sx\nf\u0004\u0017\u0000\tqy\\R\b#\u0016zA\u0007D\u0002<X\n$\u001e\u0000y\u0001h&Kq8bL\u0006dvEY?ύڼl<LO9v:\u0006;)#F\u0013`cy%Z\u000f\u0003`qOCRЯ\u0000@IA\u0019͕u b}W\u0007.e(H\u001b\u0017n34F\u0013\u000f3\u0014һt\u0002]S9\u0002.ًF.K\t,\u001csF},\u0012 \u0014~}\u001a)#0q,~M\u0002\t-x:z(B나 QC\t0xhjfgK]\u0000Eɑ\"\u0005z,|cm\u001fe9>}kU\"\u001a&?f\u0010܉C\n\"\u0015'h\u0001.q[!t\u000bq\u0017Pc]Sr\u000e2!BݎM挳\u0005\"i8`ytqK!.}khQX\u0011-W\u0010mNpQncT/T(a%\u0016^R0AS6Z\u0000Ás,|:7~1\u000fӮ\u0010t3\u0006*ӧmmaȚ,<Bx=6\u0001-*uv\u0007zdlY\u0005V['fjz^X]a\u0012OSp`I\u0010J[1C=\u0000v\u0001ԮP9JԥY$2*.\u001e(f\\$ZsF\n\u0005\".Ē·j\u0004bZ1-.\u0016t\u0017/\u0016ɣ&\u0013$\u0013?\u0003}HlQea\u0011޵*M\u001dB#\"\u0001\u001c1i=É 44Gn2ϡ<\u000e@|0B\u0017@e\u0018\u0016\u0010x *N[xk<\u0017.Wl\\|M$k\u0000n|F%\u000ecJ\\{,ߐ|\n{\u0001p̌j]8r\u0006qWFXZg\u001a\u000f(N\u0014s)[[ߣXC`\b&xc5ҩ\\N/i&`>\r\u0011D\u0011zO8\u0011{?Jґ;\u0013F\u000bp\u0006EykA&A\u0006:\u0007'|Oq\u0004\\X[$\\wm=:&Gy\t\u0001B\u0007G\u0011\r>%ȸ.EjY\u0006òtVHm\u001fJ\u0015q\tĉ\u001b\u0005Q\u0004x{nhZX\u000edIZ$zb\n\u000e\u000b}<'n\njE\u0013\u001bS#aEᾚU\\=\u0019sSc\u0013C#/\n\u001bǬ6Q(mFzt2\fQ\u0017>bG\u0000{JTy0#\u0010ˇ_o\u001f.ց'WHIg>IC2댺b\u0002$l!\u001b\u001bJ\b\u0004<\u0005_2\u0011\u0014\u000b\"J\u0019AE\u0017\u0003\u000f\u000bRA?JԊ>KVHW&*3ɤR{9~\u0016HڠZ^>U\u000fڢV|N-\u0004N\u0018[nEcXy!3z\u0015UIsԖ\u0011橌\u0011r_.\tTk6\u0012\n|Z`\u0002O\u0016~#Q\u000b\u0010A\u000b\r}E\u0002\fC!$I\u0007\u0015XgC\fO\u000e^4B UK<9-ְ\u0002ub˹Ì\u001eGt.\u001bqe}`v'UL\u000e\u001c\u0004\u001dQ6v\t/o7eh\u000byXX\u000bnK9 A\u001d'\u000fΙ\u001c!\u000e\u0001YfoH\u000f\u001ekJ:@S\u0014u+\u001evw\u0000\u0013\"_\f0w\u000fN/,fX\u0000+Lz\u00130Ærl3J\u0016\u00059'+%F`G\u0002\u00152le{NDD5\u0017Ee{>F#\fShd7\n33{\b\u0005~.燾\u00132\"NfpkS~ shr>\u000e/gskk\nA-Rj\u001c\u0015n<-Lk{&4(\u000bT%\u0001s>5cgV#\u0014X-XW\u0013y\u001d|+8\u0001\"ctM)a%>6\u0011%#BeP9\u0013\t\u0001OH\u001c\u001fh()q\u0015Nʹ<HG\u001a|l\u000f\nTэ\u0016\u001aʲz#(=!R3O#IMf)*a\u001b$+S#$\u0014-=;gTST\u0015\u0002Gzk?(ce\u001aL\u000b\\U+hQ\\V-c\n&9\u0010z5>*AtnM\r~0-I)נSvSebނ\"\u0016\u0001&^=R*k͐66wu.O59o+*\nUps\u001el\"9\u000e\u0005\tٹ\u001dH-!Nd)n\u001aT*o\"1\u000bS\rP\"-\u000fa\u0005A\u000bc+PݯV0N~pmNmIbU󶠣&\tG-UCƫ\\ٺS2`g}}BRuIU9C'*\u0014}\n*4W%d\u00030/\u0001I>\tg\u0002B\f\fN\u0015-\u0014}0\u001b9H(!:[t~g\u0000U.8C\u001c\u0003(\u001a \u0016{(\u00195\u001b!\u0011\u0007\u001a舟Əy[A!zg*jCK\u0010̂KPhp[\u0003'g'\\1h\fj5ek*=MzB\u0014iPѕ8ŁD0M#]\u00103f?}T>B}QB=&\u0005q\u001bzYX\u0015%J9-V\u0004'|\u0019E Q3*w5j\u0003n\u001d\t\u0012x.[fWQ\u0015h0\u001eBȋ/[1/ƴ\u001aѴ9e@%\u0002 dP*%XB7NaȆڇlnfT_\r\ffdRcZtH!yA\u000fR`-=I \u0010Y+F!\u0016պ\u0001#\u000eh򽖃o\u001eiTB\u000bYUV\\yj`Ѣ\"\u000e~bFz챳|\u0002F^:dO\r-;֨B|\u0006LB#.W\u00101s\u0011:ϐ\u000b$Rk3)ݜV\u0002\r|DC*\u0001u\u0007W8\u001aG\u001e%\\f7B4i8.4g{J)\u0019\u00038\tqu\u0015\u0015Z(NKbE\u001e\u00076cI@)s($\u0018\\A\u0014\r|?s\u001eGȳ\u001a]JP\u0000(U \u000f=Ag\u0000֬L[i\u0011c5XKԎ{dfK.zx^9\u0015\u0018\u0007\n(,\u001b1\u0010\u001dPr\u001ebI\u000b_n\"\u0013iJG)BFԥs\"|\u0002R\u001c\u00003YRg=hAq\u001a\u000b\u001c{\u0006'*ȑX\u001dMV#EE)?r[\u00169^0w.\u001bؗʋgKt;\u0001APPr[K%6gI{\u0017n@:sCw\u000e\u0003c\u0005Rt7\u0004d9:>Mbn\u001f48^I_\f'i\u0014!5\u0016\" )d^~uO<>gVj\nd\u000f{N˖\u0011y\u0007GsBv\"NX(u4\brcU&&m\n\u000e5$[m[\u0013{=\u0010V=i \u0019\u001ed6*\u0001=J6S\u0014\u000f~й`j\u0004\u001f\u0015&l\u00017Fz\u00038D3@\u001e;@&`>n\u0013n;BS|7\u0016\u0004\u000f\u0001]0j\f\u0012oXjqKGl2?wE_\u0007q\u0017:[\u0014\u0012#{\u0019|\u001d\u001bp\u0016\u0010a;@/4e&,+\u0012\u0005\u0002\u000eUl\u0015Mq<hP]ߺ(\u000f&H:ˤˆnVhT\u000f7\u001dc(O]ea͆?%\u001dխ\u0014|S\r1e/Hyt_h9X+\u0007D|=0|\u0000lk){bo\u0001;\u0013q}\u000f\u0019W \u0019\u0018\u0003x{\u0011/AUI\u0013\u0014ń\u0011`r6G*xU\u0000\u001c\u001dV󝸈)\b2JC!i\beGtЬ=p\u0018NIf;!\u0014^=VW_\u0002Z)d&\u001a0^=j[\n\u001bz\\8\u0012\u001f\n=\u0000p\u0015us+_ZdO\u0004\u0019Y+3Q\u0005񺢔*S}\u0005d1V\bCzK\f4@Y{\u000bc\u0011(n\u0014J*Y\u0004([L߁-\\^\u0014{C\u0006ۛR'\u0000ӌq[n=pǪCbm'\bAE\u0001|A6ETSܤ57id(p&,3h|_&考!\na\u001cT`\\\u001b\\ l*\u00146Pv9bu\u0012\u0014Ւ\\\u000bE\u0006C\u0002wK\u0000;(\u001b\bD.\b\u0017oF[aO_t\u0012`\u001a0h{\u001cwE驇E\u001el@\u001cM,\u0014\u0007r5C\u001aAvDm&\u000b\u0012/NemX,IY\u0006Whjcޔ0ǄlU).AGbS-p.C\nXPK\"L_WēnisA4lxc9]U\u0019F\u001e\b]Z\u00149AEQֆS\u0015ʵwh#R[^!\u0007~/5\u000b%zAd\f5@^WV#o{e\t@H5e@\f\u0015RqR\\\u0004#\u001dKSI\u0001\raD6c8>@㆝\u0004j\u000071`1jf1ӎ\u0004`LRP|SeJ\u0012+B\u0016/=T=B\"\u000bIػ/h\u0001{W7)>r\u000fm3+K~\u001bLmxCh)✌47!a5FPaDk\u0019\u0002S\u0011Pu]\r\u0006s9J\\,f\b-F݌\t0t S\u0014\u001e\u0014!uYmWQ^~A8%Ε\u0007o85b{&Pъ/]𽤚\u001f71\r'&Đ9_ʈ/soidڑG;\f-셥-N,T\tT\u0015FUSzX{d5IΚ\u001f\u0006*\"\f\u0015?1Bn}\u0003~RdWjg}nV\u0018DZ8ah`r\r+W{\u00122}-\u0011鰫jH}z\tm!'\u0014k%fi#\u0005'\u0012^og\nH (\u001eo:T\\\u001c'Yy+\b(\u0012Es^t=\f\u0014.\\60DET\u000fdE++J\u001dG9 ؿpYЮ\u0017'gsIf\u000e[\u0002\u0007v\u001f\"S\u0001\u001do+21\u0004Ht{7h\u0001+RlY\u0003r\tQ\u001a_:(\u0018|q \u0004Q؋;9Qmx>\u0011cTL,j#-Y\u0011m\u001eo\ni>AE<!r}sm֟\u0013i,ɵqSL1\u00108\u000f\nn\u001b:Fc}\u0013\u0013nni\u0016\u0012H\r.\u0001i6E4XAK{=)&!?+\u0007)\nr!\u0014ڍu\b$ ތw e\u0005(s;vRy%\u001b{bذ$?`\u0015 \u0011^6\b2Xc\"M'q\u0012\u0011\u000bY,[F>j\bޠ+xrw0\u000b\u001dD>\u0004X-(9(\u0007(\u0003m9r%F4`k$(yFbDχǴp,\u0005!)/k\u0004?J\u00111O[\u001c[\u0004\u001e<:z\u001a{(߄u\u0015\u0015\f`F\u0002D\n{Fi_ݗRp\")5K²\u00007GM\u0015<\u0004$\u001ceɠZP4)\u0007\\Q/]\u0012.!e\u0019\u0014'\u0005)iB$d,z8Hg<q\u0003\f8#h\u001dS!DO%5(*ʱJ $F\u0019\u0000\tJ\u001dE\u000f-Iw\u000e\u0005J\u0014ΒJ\t\u0010)TDېX\bkNM\u0016<>\u0005NBrbR\u0002[Q\u0015)\u001avfD-҂kA\u0012H{<\u0014\u0001$\u001e>\u0019\b.0(i\u0007>鑧\u0001\\5cpR\u001fu1x\u0018BZ尨s@m0ϬJ?2 9\u000e\u0011bb(\u001b$\f\r\u001b_̲\\\u0017\u0016\u0019=\u0000\u0019M\u0002&#A?\u0013,wZhf\u0003cHx:GQ&Ӛ\t-w>WkN\u0004\u001c\rW\u0006j\u001dY@\u0018+&y\u0005>\\7מb\n\u001ch\u0012,:7>(o\u000fyTlC1\u000fG\u0001\u0014r7\n9K$O\u0001CR$6\u0017\u001c4{\u0017#ur5jmZ\u000eP\ttԈȽiu\u0001疠&.Fd\u0005En<\u001a:`\u001a\u0010tw'ĸ^d\u00174\fxwC}G3\u00194$Oa#Ӎ˾qiD\u0006QqkY\u0004\u001e\u001dC\n\u0016\u00185A\u001d\u0016ߤd\\61 \u0004`\u0017\u0017\u00032z:\tuEj\u0010ls1E^7B\u0005Pí\u0005G.K\u001ew\u0006\u0003fIoJz\u001bx\u0004d\u0019\u0002+\nCL\u001dr酼\u0018N\u000b\u001a\u001c(hL\u0002X=\u0015k\r/\u001bo\u0002vB\u00115(\u0001\u0001\":CLAMA=B\u001b\u0015\u0002%酫ђ\n;K:q&m^\u0002z\b\n\u0014SsԢvWCsH\u0001+\u001cRN=XvuSsC\u00142\u0018*WT\u000ej\u0004\u0002\u0002N/d\u0007\u000e+ZD\n!\u0005\ruz\";c\\\f(Y?ڜnh\u00186\tqn\rw\\\u0003yhr-h\"!- \u0006z\u0006L`f[\u000eC<3\fagŒ_\u0010\u0011\b\u0012\tק-YN\u0019\u0001uh\u001e !\u0019\u001cB}~~jL£r@΋\u000bA\u001eع\u001e](\u0014v)i\"9t>ս\u0005z\u0003)\u0010\u0004bcӍA\u0017}F\u000eRi\u0004y2TU닡|\u001b\u0015tm\u0017hhmT%^\u0014Sp$\u0004Is:.Q&#ZE8*_C\u0001\\DzYըnApq1F/\u001b(#(2\u000f$X\u0012\u0016vxƕ\rEB+B\u001d2{1\u0018OhHz\u0004H9&\\ɭDyP>\u0001j%7nѭl3vS(A(#Ԫ\u00170\u000e\u0015Ǥw\u0016\u0013E|`\u0004_\f٧uŸ\fV\u000eR\fPC[\u0018b_\n\u001b9)+$f-'XD^\u0011F7!*A,Ayl\\ĩ8D\u000fd\u000byWl=JU\u0017%G\u001a8\u0015c-汶8\u0019[]HLj\u0010)9\u001bQ!\u0006P!|>:egb\f3!\u0007\u0012\u0006[>by,{uF\u000b1ޙvFb\u0006\u0012\u0000;zl\u0001e`\bq7\u0013v\u001fi{C9A\u0016\rt-\u0013<Qr66\u001aZz;tl:>cH\u0001>T[ek\tY\u001e/KMvBtIvI=\f\u0012,~$T\u0007LXBX/L\u0017o\u00005.:u\bih\t@>\u001aV*Q%\u000fU\u0003u\\5X[2&0\u000bQ\u001bǤI\tJ\r\u0002̬H\u001eY\u0007^\u000fb6khLB\u0018w;3sL\u000b:? Y5_Ǯ-X[u\u001bEdln>JgAaK$Yy\u001d7Lݒ\u001eQ\u0017\\\u000f\b3-a\u0010t\n\u0001\u001dV\u001d5\u000fq<5\b&/\u0010|)-<٤\u001btm\u0013\u0010DͶ0Ӫ֥^RRz\\\u0011\u0017\u0002dg\f܌YW!^_1\u000e\u0005+y\u0019'G\u001a\u0018QkW.c\b4:S5۽mе\u0007ca\rg.ؗj\u0017Cq5K8\u0016+r=\u0004Y\u0019Pv\u001eoYQ65D8*\u0001e*3)+hY'f\u0011f]jB.C,b\nb%YO75]FzSu\t\u0002#uF\r\u0004f\u0015u+\u001c%s\u001cĤ\u000ep\u0019͑$W#ZЫEKA!2#vKڎpgP$\u0004m\u0010*\u000en-/k2b2:Ss1Go'?fq$\u00041dw\u0006j.##a˱+|N^LpzoXM\t\u0007;B<#Q),֡o\u0018~\u001c\fKxäĄ*:{0wң\u001f\tn\u00135\t˞D5?Sq\u0006\nPĺf!\u000bf=z0t@\u0004U\u001a??޾\u0011(\b\b\n\b\u001dPP}\u001did|el\b~̀] tk@\u001ev@m\u001f\"SnJ\n\u000e\rՔGm\u0013)MK\u0001\\I=`oJ-M{~PO\u0006u(h3X\rٗ\u0003\rHkCish6f?k z`\u001e)8\u0005B|1tGڑ>NvE5\u0002yAz\u0015k\u0010V3x\u0002h*\fL{6{jDSaȝ\f_ [pI\u0006u\u0000\u001b\u0016Y}ڴ3mz\u0000\u0011\nmBȭ<i_:PX\u0013Hm\"ӰGor\u001aCBr}8\u0001r\rOD\u000fFlj۪vt\u0003\u000fG\u0000PXC\u0007N<_jeY\u000bbJ\u0016I\u00030}\u0013K\u0013æ=\u0007\u0007jʆ\u0018m]ݮ~BVC.SrF\u0016noD!BLCʮD{w\\ll\u0001@ۅ\u000fz\u0002+\u0014n9vd\u0003duvW\b! %\u001ar\u00127?\u0012=TQiP\u001dzӀ;I1rHK<W_\u0011A\u000etd\u0016k|\u0003D\u0015\u0019<\r7\u0002\u00018]Kb5y\u001bz: ΰ\u00123\u0014\u0014\tfQUø\u0006nH\u0000DօSi@A]q`5mi\u0001_\u0012d%\nXѨ\u0018:ɓ\u0003Aθ\u0019Cpg\u0006Ϯ[0ީ\u0010v\u0012\u001cu(Na1I_\u001fW+\"i-+K68\"Vw 7\u0002q\\1P\u0014l!%Td~~A;'$QX )S?((ʟpW8z \u001fӥH~q~fD5\u0003T.)ID\u0002LZo(.\u0006\u001e{\"%G}&NB\u0007\u0000\tb\u0013\u0005\u000eDTEI:i\u001b``$\rB\u000e-\u0019G$l(`^>\u0019HPKve}lLbG%bnz>\n5?Y\u000fѣfM\u0000*@Zf1\u001bds\u0010\u0005:\u0019\u0012\u001e$\u0005L{zVzp۔Qʶ\\\u0004\u001d3^yFR0\u0010b\u0000aJ)\u0014[,\b@Z\b\u0015QRV}a\u0015%qS\u0016D\u001dLo\u0005EZZ5\u0004\u0010AGq6W\u000euڦ0'Y)FNV,E[%l:\u000bɀ1aQ\u0018ef۴O_0h\f[Vpx \u001c'oK+1q\u001cV./(v\fe\\\u0012HY\u00071\u0012HﯶY\tjD!6^\bX\u0018<SBk4K)W(еG\u00051i!v:Q#bؿZF:EU5\u0011_\u00193a!}\u0001l\u0011<Յš&\u00001Q@m\u000eCj`\u001fevft\u001d\u001b&bOUM1W\u0011>:`\u001dSx\u0010)\r΍(E\u0018i\tUh\u0018H\u0015\u001a`\u0002\u000f!rvp#pbB]\t\u0000!\u0000 Q\rܰ\u0015Xkݖ\u0017JQ~r^hG{hO&q\\z\u0010v\u0002\u0000]\u0014z\u0010o\t(\u001e\tp\u0004%}On]qW7\u0000`\t`QrB\u0017`\u001afy~C'M\u0016vckqofZ\f~,\u001c\u001dF\t\u0005??\u0005VV\u001deM\u0002\u0006u\u001b(r\u0015F-m\u0014DgR\nG<D|%$\u000ezu\u0000;5$%6#[Ż\u001e\u0004\u0013d\u001d@\u0004ͪ4>\"H<\u0019BR;wxT^J\u001a\u0011\u0000(\u001b5\u0005u@\u000fY}7ѝ\r+QAQ+]\u0014FF\u0017S\u000e\u0019Xd\f~M8{6\u0001ƌpY\f#\u0000V/\u0000x{t)1vc/pӞC\u0010\u0018q*Rώ{E\u0016Zu^J⥭9^\u001d\u0001ƧJ%2KkNznT;\u0014\u0019mnڻ/Vyjh$r]T\u0017\u0012aW.\u00152偷T8\u000f\u001e /IWEޡ\u000bA{\u0013|,<\u001b]P-\u0019Ox}Ok\u001f 0(<=eXJ+%= \u0017j͈9\u0002\u001e \u0012۞lP57\u001dVvU\u001bĦPE\u0000Ս\u000b\u0016F\u000bӧ왦TU!!\u000eN^|aJ8/}\u001c)@i:\u0017\u0001\u001b:6.Q\\2\u0005BC!d9\u0012Jd&\u0001J\u0006k:\u0019\u001fQ$Y'od\u001cFO\u000b\u0016h-)[ZfI쏂(m(\u0019Ϯ@.\u001b 7y23%\u0004U\u0011qo\b_\u0014c?\u001f~?/~۟_ۯ|?}Ww?ocow_}~ogo\u0004|!\u0010$X>U&q1ߐXH&gNH\u0019_\u0004\"hLb`>B3F\u0005\u0019\u001a>`R\u001dP'r\bjq\u0016P$]\f[gG\u0014Q\u001a\u0006:\u0005)۹ep/\u0012>M#\u0006 \u0013A\u001eHJw\u000f~\u0011D!rVTb5dP4\rC c\u0002S\u000eL\u0002i\u0016xF\u0018`+\u001e#,-\tћU{\r\u0000:4\r\u0013\u0018B'\u0010>.vE%]\u001e{W${W36F҂(dEԈ}#\u0014\"\u0003Pa\u0002i=:ݵg]zl}DLq\u0001U\u0000KK=\u0004/آC1^?\u001c%,r\u0002tT4\u0011-!GbZ\u0001i\u000f=x\u0005䣲@3V\u0010fYEM\u001c\u0000\u0016dBYQ%L28ק)=ա\u0016\n'!o<x,E\"7Zl-\u001a\u0017\u0013cՎTO7I? o&PWȚ\u0015\u0014H\u001e\b+>GrM|91Q`\u0018$o$2$8\u0010\u0003:jA&&άQ@&Wjcc C\u0007X2f%d%;=t*8\u0000\u0003m\u0003q&\u0010\u0007]DB\\t\u0011a\u000fP\u001aT\u000e\u0012ߺ掉;<\u0005FjhH\u0012zWo\u0002<ϛ\u0003~AI\u0006m=J8dպ}\u001c6&\u001c]E|lѯᚺ{BfMdy}(RO<\u0019o#f\u0019\u001d\u0014\u0000pW\u0014BP\u0006\u0002ʟ1!4:H}oE5\u001c@AU\u0019oj_N\u0003\u0012#\u0012\nՙ;6`\u0003 u\r\nendstream\rendobj\r148 0 obj\r<</Length 65536>>stream\r\nv_eCd)6[\"n(8T5H)k%|v$`(8YӬXfUaE{c^\u0011\u0018\u0016xȭr\u0015z(]<|!8.T\u001cu0yC\b]Zt\u001boU\u0017R]ZH\u001aNAؚ87~RZ.'\u0013\u0002r'50pP0\b5Gn]uORvK^8@\u000f\u0014MRVWHYM\u000f`~l\u0017z<v!;\u0011E\u0015ZTh!0VetHrX\"0\u0019\u0007ۭ?#H2DUh\u000b!7\u0013\\>\u0011m\byf\n\u0002@iD̓uDx#'HO\u0005w\u0017Yz\u0015K\n~9\n)R;\"\\-{\u0005\b\u0017X\u0015\u001d:\u000e\u001cX\u0010C^,>4o(kL\u000fՁ\u0007tO[*w\u0000MSeof\u000eIჂlpjf:Z< 44\u0000j\u001a6屨\u001en%\u001dѡv\u0001{j\rX\u000bf꤂\\D(󨌸\u0002\u0000{\r9b9\u0001\u001ce:\u0016%O\"\u001dҍP\u0007\nhGi{^q]G%Y6\u001d\u0005\u001âYnuu(V:t<MȀO\f7T\u001eJyDTͽaq\"虢Rֵkߣ<\"0l&\u0015-m}z5\fUK7tbO\u00171F \"ěRx_\u000e\u0014+!k\u0007M}:ϊJʌ\u0002|W\r\u001d8+\u0001ֳ>\u0019\f\u00111\u0010 m\u0001s\r\u0007\tt\t\u0012=&\u0016\u0002٥a\u0000!\r\u0003fY=\u0000$⥗\"\u0005,YI\u000fo\u000b*\u000bu̘\u0010ydn 051N\u0017\\\u001eH\u00166`\ny7\u000e\u0017\fr8rR\u0016W\u0018ҳNhx\"kA\n\u00109!\bRZGI,chI\u0000\u001aڿI=w8w)!7\u0014X|\b=nCwt/\u000f]7\u0004\f\rh\u001a\u000fk\u001a\u0001mi\u001f*C-)\u0019{=q\u0001[\u0013ro(-\\.18x\u0019:\"NF\u0005[4?ߠ>P\"PWVI\rZ2Wq\n\u0004˨ΑT\n\u001ch@S!.¥\u0001hi\u001bM\u0012\u0012\u00139yg(@2Ú\u0014W\u0002Ig{PeғR$'\u0012z\u0004\u0011㭻\u0003~PF\u001f.m,\u0010>H¹@c\u000fj)\\zuWJ!\u0007۵9VlP_\u0019ݜ ~0Eur|\u0018\u000e\u0000Z)Fvy{QE\u001c|S-\u0001R\u0002ӏ>z\u001c \"40dGpDҫ\u000eP\u001a.gTh\u000fs`1\u0004)켫\u0018M\u0018b\t\u0015c4UA\tf+p4j\u0017\nC\u0016\u0005߮eO~\t\rq$Eّ\u0018\u0010誖\u0003EJ\u000f-\u001a3IG뀊*\u0007w}\u0012^+kp!c\u001d\u0019\u0017ٖ\u0004\"rI\u00062tG@塡Cy\fc3,\"1!ΐBRȫO\u0019l:2-\b#(@;0Je\t͔%-ĦEE#\u0005\u000b\u000fM%,Z\u00101)\u000fmY\u0001/ܚvle+Q/Hq B=\u0005\u0011hI\u0010\u001bTw\u000e,oE1krY\u001e?\ta?i\u0012\n\\(*\u0012kJ*e#dnOo\u0015x*kc5)9>$\f͇.x港+e>\u000be\u0001<QA\u00110\u001a,-L\u0006K9h5\u0007\u001a2hSa9iO+3Yh6\u0013U&m7GB;\fC\u0012oSuxb\u001fSfC,BeI!\u0005*!I?\u001ep\u0007B|<xlپh}7y\"sZ,Sjx\r*WZQe[蔷\u001eA7J\")\"\u0013\"T\"\u0005~6-m\u001a'qή{.\u0011ϸI\u0019Yz:\u0000,5S\u0005M\u0017\u001fL[ 0\"\u001ds\u0012m\u0018ڎ-JP'5.jކ\u000e4\u001b\u001dxZ\u0015i(6\nkZ\u0014M(q\fՄI\\{\u0013|j5\u0004P\u0013ݵb\rae@\u0016)P(6(&PW!\u0014ֺe:\u001d{J6.G{t\tk\u000eʏ',Q)\u0007=]9@@Z'-LW܋)jG\u0002R,\u0015,hl6\bo\u001b7\u001c(.\u001d5\u000f\u0013r\u001f\u001exvώjOՔ{/}{\"\u001f%]٦W}\u000ep{ρoޣ֬rE\u001c\u001f60[\u0019|\r;Fʞ\u0011v\f%6\u0012k\u0014_fʸBכ:\n6?0с\u0007\u0019%ፐ`2FՏ+r|\t\u0001譙71\u0005>\"R`%MgdԺ_!6\u001fZ\u001e ˾<ԽwEbC6\u0006eL3N\u0004P寓оTT\u000eqCY\u0019)ȭ\u0007O'w-@!^+'BS\u0011ʖ\u0004®)l7$kevxS##lԱ\u0006\u0003F~֌whvRs\u001cQK`b\u00150\u0004\u0014\u000by\u00074\u0014~\u0003x!S\u000etmq'so+H{\u000bj;\u0011m^ыr\b\fGW\naØdTuT7\\+\u0014\"а ZgmR.%\u001bwH\u0005eI>TK4ݖ5\u000f&$f^B5i\u00041<Hsީ@(\u0006@Ҹ󼔊h\\+T\u0002EަlVȚ.r\u000f\u0014\u0014\tNQx\u0006\u0005Q\u0002Gs\u000e՛Kĉ!M\u00165\u0012\u0010cYte/\bȯQbC+\u001d\u0013o\u0002\u001bk)%ñBߴt\ro\"sj³wĆLf+\u001d>(\u0007tMb\u0016k?R:5/J3bn\u000eA&q\u000b\u000f\u00048\u0016{S\rm ~3\u0015@,\u001c;y\t\u0018!Vrܮ\u0012'\u001b\"eL{ɖ:0g\u0014B\u0019\"aJmH\u0000'Z\u0007&FoQ%0X\u0004\u0005@\u001b6Jlj@J6]մ\u000bt\u0003x\u001cM`\u0016\u0013\u001f9CAy\u00139oxky\\G$y\bDz(Sn^f:I)\fy*F\u0015*YxƵ|wUf\u0014Xti='J1\u0001c\u001aElW\u0007.e8uT\u0002:k3\u000f-T25r\b1\u0000K aI'^ޟX<ǟ/0\u0012\u0015'\u0003 ҵ\n,'ܮi\b \u0019\u0017@Sm5K#fQ\\H\u0012_\u0014J-mX\t\u0017\u0002I\tcG\"Sv@\n\u0010.\u0017C~*=M\u0010\u0017U)P+W-E\u0014\f5bq\u0003I\u0002\u001e&$ݔJE[Zn[;5ù\"\u0014\u0017J.\r;\u001d`%&\u00114\u0019\"ֈa\u0016\u0018\u0007L$X\u001ckz\\\"h\u0002J,\u0000D2z(\n&d\u00047׸]VհCŐ^wgj\u001d0rDܒ鯫\u0019\u0007*R8+XGV\u0012$\u001cWP\u0005\u0004&\t}sP^\n\u0015\u001b\\\u0012i.\u0019,Q\t]9KJCjbջbջ\u0017h\nt*;^R[\u0017\u0014VQfl5C\u0019\u0012bvz9\u0007Fw'Mwo+[\u0010h\u0018ׁ>\rU\u001dS/(] YZTR.7K0$\u0017[\u0001)>}-zB\u0004\u0017O=\u001eg\u0011\u000b|\u0004V\tt*I\u001bHv\u00035<FL\u001ew=ٌ\\/1LW\u0003`p:|W\u0002d1\u000b{d50Ia$*Qo$;\u0000>Q\u0010:GB%\t\u0005^q\u0001O|rv\u0010.\u001fx\nyr\u001f\u0017Ht5=\u0014L娺$55-Pݢ|\u001ark($2D㚅$\u0001\u000bp\u0018\u0003d-RW\u0002=\u0001N\nHB\fnN]\u0002\n$!aTS\".Dl\b\u0001QJv\u0000-\u0001cjFgA+fWEiMӂZ5\u001c$/cS\u0001\u00155Xl&e>!:dhu\u0018yeۿ-ꦭ\u0007\f\u001d\u0018\u0018\u0014py0SEb4u\u001c\u001e*üb\u001bBjͦ@_\u0017R\u0010Yj5\u0014J\u001euZ4*yy䅔`kfKz}%\u0016d\u001dQC8uNA]\n\rB\b\u0003@lu6#sU-B\u0019ͦ\u0016j*]w16b\u0011Y\u0007ÒaP\u001d\t\"3ʹID,7*u\u0007sx1Hr;\"I2\u0017z{\\g':(\t\u0015R0ʋr\u0019K\u000f.K)\u001e\u000eȫ\r\u000f%!\u0018W6U\nkUR80Kb[\u0012'\u0011\u000e҃@w6UCNbT@X\u0007d\"\u0003B^\u0014C_~jRn:;^s=5\u0017; s&h\u00158bxr&DA\u0018F\u000e(\u001c:\u000b1_\u0016\u001d,!\u0002L\u0015|\u0005\u0016V'\u0003Iku\u0012\u00146[BspBK`SIqr\u0016/S\u0005$\ng\u0018^EyB\\^\u0015\t0(\u0001\\\u0010*\u001aH9$69\u001d]8n4ޮCB\u001aC>k\fS\u000fa苻v\u0019/X8R\u0002qf\\\n>=c\u00045W)\n\u000e\u0010\u0014$լ\u0000I)\u0010\u0002i\u0018\u0003\u0015\u0018\nG\u0003j\u0012ouKݵ\u0006+DP5\f\n*\u0006R\fN\u0004Nt/(\u0016\u0005)^m:dޤ3\\yضzKy@>^҄q\u001eH\u001f6?0&5\u0011&Z樔I\u0006\n%݀`iGk\u0005)\u001c4l\u001fљD\u0003dR\u000bZXD\u0017J\u001d8ԁry[\u0013ť$5GGT\u000fշ宇\"Y;\u0016f\u001a]>}\u0003_\u0013ån9\u0006/\u001d*V\tw\r9\f\u001cJ#)bW\u000f\"B%ǧL5Cs2ɒwr)Չ,҆y\u00052\u001fVU\u0014k84{\u0012ν\rښd^씵U]@\u0000cݟR*ME\u00042u\u00033OWź\u001cR~|\u0015\u001cjy}IÀ$!cXZaխK\u0006hN$ך\u000bd\t%=BpCG5P\\~~H6- \u0015\u000e\u001d\u0006d倲|쇌\u0007})\u001b\u001b\u00072\"x%\u000b,\u000bx\u0007OJV*acEv -(W \u0012#]\u0016x\u001ex~ddg\u0014Y܇\u000eQ,$*n#Qh\u00042\u0006#W*\\|`Hю,j\u0014=.K\f\u0015଻jh\u0017Q_!>fTŚ_a΋MP%.㡅&cNcMhoJRM.\u0003Z˸k6\u0013=C\\8Phfw?\u0012aS(\u0005,2LV\u0012e\u001bEα*-\u0014ĒU\u0011\fFĺazo*s@]\u0005>\";¥܁KnX}\u000bw;\u0019]p1V1p\u0005PH\u001d\t^9S3\n\u0018`A*\\\u0019Bb\u0011\u001e%g\u0017$.TB-]>,\u0019v\tr8|\u0001\u0017\u001eR \u0002n%9.\u000e\u001fS4.$VQ.)*d,͝Ӽ*Cnz\t_(:o}\u0002\u0010JwG\u00031W!\u0010/S3O*#YDQ\u001e\u001d?\u00163$VC]\u0011OzX^\u0000J\u0001\u0010\u0012G2\u0007\u000eɿ`S,\u0002%\u0018\u0011@2G7ؕiI\u001a{\u0010_=G\u000f\u0014-\u0015\u0016d]z.\u0006$9g؄S\u0000uUX@{5\u000eѐ_7\u00035,\u0017\u001dr\"lm\u001c`\u0004/J\u0017!\u001cw\u000b\u0014'5\u001c\fwUF\u000f\u0007\u0018'G0\u0019̓nH[r+@XPʇ\u0019l5\u0016^Qiv\fz\u0017\u0007H=Ҍ27ِAɠ+J3u#E?r\u0001Nn\u0017ZdJ\u0018\u0002LɼI\u00054)\r\n|\u001b~J`xt7ˁ\r^\u001b-s\u0005?pݚTK?\u0012\u0012hI\u001b\u00068\u0005\u001fo\u000bPӇ?c?7c\u0005,p^\u0001ZҶ\u0015Uy]h\u0015_m\b૱0\u0010\r,́E@\u0014VT\u001afHd*y\u0001\u0011.\u0012>ԕѭ_^v\u0007rfRT\u0002\fӝEB'!0~m|n&L\u0007\u000f\u001c4/^\u0004\u001b\u000e|\"\u000fK\u0015\u0012I\u0000\u0006EiEAI4\u0010T't \u000e$$>\u0012G\u0001+TL\u0003wUɾ \u0003 +֍UHc|c!{ro\u001d \r3OY+a\u001c\u001bs@[6~HFp]6>\u001exg-HT\u0007z\u0003աL\rEqke84vW \u0003Kش.l{YšDJoKF1g*G1:d,IIkgC=82x\u000b\u0015\u000e\u001c7]f\u0018\u0014c\b\u00015^YUw47z(]p\u0011\u001a$\t\u0018_Vdu)u\u0014/스Tx\u0018'Mc)\u0001Dxkay;#\rlENe,q\u0011YK$:`\u0011]RqR\u0005X\fkkB\u0018`@h@\u0014!c\u0017cmIƸUpkk:x\u001d_l,Y\bZ,Ե©[apJmX$A~&w(E,\u001eA\b+g=\u0003bEBk[{7T\u0016 `7\u0012\u0018|gҤjTʂ\u0004\b\u0014;yx/\f?H`\u0005\u0004ǁ>\u0011\u001eqԦ\u001db\u000fd\u0019Ny͔\u0017i|wp\u0010$\u001c6}h\u0017Y\u0007?\\.[\u0012ݴj&\u0019\tAIUϿ^NZm0,Svr[*\u0004H\u0001\u0006BS(9\u000e\u000f)\\\u001eM\rWA,]-,o:;z8У&4\u0000\f\u001bG>uX{@Ǭ<X\u000bWp\u0006gH?NL\u0007\u0013w\u0007ϸR~X\u0007[ֲLџ4\u0017m\u0002\u0017ċp\u001b@moX<<&\u0007I\"yZ-Of}xhCQ!\u001b\u000f\u0004\rUis[QQ\u0003\u000fBjKIvȖ]m\tSQM\bNG6\u0007k\u0011klzM\f\u0011\u0002\u0018\u0012l\u000eR~_o\u0002f:H^E\u00171c)\u0010nEQ\u001f\u0014@(\bz\u0018'\u0007#UT\u0005\u0006Ζ %r`C\u0002=|\u0004Xd\u000b\bք{ϾJ\u0019jI\u0010\u0017U0 \u0014;^׻D\u0019$#DLQ\f\u0015>Z/G\u00021w\u001f!\tiL\u001c1\u0015\u0003}!'!duN\u0007F?K`pރ\t=@2n$\u0003/]OW/u\fGS}F̦x\\r{\u0014\u0000\\R=E~I2?$\u0000Gk-\u001abͬ\u001a;qI}\u001c\u0014\u0003!\u0003M\u000fI\u0013\u0006+~2fo}+lG8\u0007\u001db\t\u0002\"q\u000b%l|&Bja0J\u000fX5kr\u000f\u000f/%^~ʖZam\u0018{\u001d8\u001d\u001e\u0007>vE)ayE\u0003\u0003Ϸނ\u001dm\n1`5(v[JR$j$.캪Q&ܛh#G֗؎񇔅8\u00075ңS_^߁\r|5#'H\u001f0M\r:96Km.\u000eZ\u001a<\u000fIiA\u0000ۥbc*e&W&/\u0006sj4\u001cdxzl\u0005\u0013G3JᱷP\t̍m\nwu\u0014wpߐ*\u000fLy]pNv}IZ\f<p+@\u0006\u0002Ƣ\"p\u001df\u0015`v\u001eƝ`qYk\"\u0015#!\u0012kuVTyW\u0013\b|\u0007\u0011kx+qJ\fۥUy\u0000Dex9`\\\\u,\u001f\u000e'xee\u001e\u0001W w\nx\n\u0016\rg\u0005\u0018Ձ3\u001dw\u0007\\G\u0013Z,\u001fnqY\t65\u0010\b\u001dno(ݷ~`?>PC\u001d@)wd\u000e^Ó~2O&O\u0007\u0015v`|\\R-=`F$\u0006;\u001cUJ\tNyb\\x\u001bLI\u0017:7-b\\$2\u001f.\u000f~\u0004YR)\u0012\taH\u00169\u001a\u0018\u0013TT}O|\n\rJJ3$i\u001f\u001ag\u0016\u0017ڍ\\\u0002S\nhȀ~QOk\u0015\n ;*/\u0014֨= \u0017Lr\u0006J|!(9\u0004Ϻ}\u0004j뭤\n f\f\u0003k#K9(]byYY#b/+,c\u001b\u0001\u0015z\u0001>n\u000bYtG@4@\u001b)6+Y\u0014aH\u0011S\u0013s`\u001a\u001dPbB\u0019V-\u0018\u0014\\hجDؘ0n-D=\r\u0017(wh,*G\u000bY\u0001bkEm;\u0001%wց̂*n\u00175\u0013\u0011\u0012\u0002ײٙ[3\fn\u0010Ci;hO\t\u000bKq\u0006_L\u0014傆gKH>@\u0012,\u000e\u000bV\rٮS\u0013\"M)e*4{ip^\u0002Uo\u0016y?^T%}ȧwѢ\u0001\u0015O4,d@}]ѦVLTg*92->@\t\u0005#o$gWCs4\u000f*U\u001d0\u0006YBOOi\u00052%YW\u0015ŽqzAS\u000fӛW\r\u001f5T*.%T\\R=M\n,NJW` PJՁ\u0019,KxM\u0015\u00115\thc:\tm\u0006;3`/$NƖZr!s\r$zKLM\u000eh^2Ca*[%N\u0012\u000e}[\u0015X,R1[\b.k\n؃pNxR+HH\n+\b\u000eȮ\u0003[\u0001^\u00138|\u001eD\u00179DgşEn\u001cg%EП)\u0002[(dR'vK\u0004\u0002n\u001dQ\nz\u00116eb\t\b\u001c\u000b{2\u0010~\u0000P۬9+{7\b\u0001\b\u0004dl\u0001#2jmTD/u/梐vBqE\tC ]\u0012zm\u001er\tшH\u001d_B\u0011\f\u0005i\u001aXm\u0015wIB\u001ab\u0014\u000e\u001aGS\u0012e1(O\tM0OI3E%qO\u000b-4\u0019SG\u000e%\nP%tz$\u001dicf\bBuYV)檬\u00194a\u0002\rt6v덿y[I#D7}$X=hGsq\u0011L\"RoAC%\u001edƜrl敥\u00192W7\u0018R\u0016PO\u0006Sc\tl\bkϿd\u001fG\u0015\ru#|48@*FK_\u0010i87\u001b\u0013#[/uW\u000e\"\u0006w\u0001\u0010ƣ!=?\u0001;lw&)d\u0017#\u001dEA\u000f&\u0001A*Gos?|>zD4]p\u0002>\u0019(%C\u0017מM\u000eɳ\u0012F6>Cv\u001a\u0010%)}ld(#Z\u001e<dqFQىN\u0005\b%\u000f\u0011bB=w&͗ULZ0x&KLЫF9=ֽ\u000e]_\u0011\u000f-\u000bJ\u0002nM\u0019J\u00066\u0017\u0003J@@0L\u0016C~k\fK3\rf\u0001X'\u001005Rraڲ->,e~g]d'%C+\f\u0014놬\t\f\u0018`xB}\u0016N[q %C`]W\\?uݤ\u0010\u0000@\u0004\u0003J8Ф1)p'\u000bJͪ\u0013$)_*B]\u0000PÐO\\j\n\u0011x뫗\u001eLZbq$NѢE\t\u0003\b}[,l\u0001A$.rVEduZ&Lmsɰ]\u0017W)^5r涌USH\u001c\u00138孌\u001aHꑭ0l(2e*fjI\u001d5%T9<hlX\u0010Łv-פ6 7{b\u001brk\u0002n\u0004NP\u00003)sx dH*8\u0003Q\u001aI9:,Y\t\u0002d\u0001`a/>G]6PxAc8h¢GH\u0000P\u0012T:\u0016\u0002\u0004N0 r$U%{\u001dP\f\u0018AڭM]C,]g\u001epjޝS\u0002{L~$}\u0005S^=\u0005؝j퍈_\u001ee\u0006\u0019\u0010\t2VU$\u001b\u000ba]!rI{f=A9mh)<m\u000e2 h\u0010*\u001d\"\u0010Lڈ4:v\rAZ芆\u000b-@\u001eB^/(\u0015\u001f\u0006\"\bȐ;6\u00140\u0012\u0007~S\u001a_-ѳCLX_\u0016|F\u0007\u0014%\rZr@R@Z+Љpμ:TR2\f\u0015a\u0013d]\n5(?\u0014\u0010\u0004vj(Pm\u001b\bhyWT=P ,6SJ\u001fl`ET6Z\u0014TJѢ\u0019Nm\u0007u<èV\u0015X6\n\u0014f_+ez@{覶o\u0019\b|\u0002zZejN\u000fDcCDp\u0015_)FL\u0012wQ\";Q'\rwV\u0007\u001b7!\u001c\u0019nq\t\u001c7\u000bLR|@𸵅\u0013\r\u001eʖXt\u0007%S\\/? nv5\u0004?\u001f{TRJak}\n.]2x\u001f\u0018n\u0014,}\u000fM'-긂I2Á\u0019\u000f\u001fO;~\u001fe \u0005-J\r\u0003?0$R(\u0016fϵ\u0007\u0017=⧮p]3;\u0003\u001a;o1}\u001d@6\u000fI\u001avx\u001b#\u0019>j\u0003.?UԣPWSܶ{2I}mo7 36-?[I~\b]\u0017h#\fޒ>B2@\u0016Y6ZH_=\u000e8e:@dqP´>\u001bUziwJ309ZUjh]덾f[{]\u0010R\u0003pGH9j,Q J2+,\u0014e\u0007fo\u0010=U]@\u0017bzX\u0004\u0019\t~*i\u0017Pv]\u001b~طK:E;\u0000ʬ\u0004SvH2pZpqJ{\u0017mmQMH0@Ev y$\u001eMRb\u001e֎֛\u0014$;0\u000bukNd\u0015YqSkð\u0015tnz\u0010\fj\u0010\u001f&<hM\u0005Iٵ%UyVf\u0012?\u0016Ee$a\u0013l`\u001ckUӞ/a=ݒ$},{!$zRe{TMk=C\u0002\u0005afLN'lnyc:D51\u0003;fB5Ԫ\rZ\u0017jKu6٧K6㒈\u0015yA8~ׂ%\u0010Q`IJb\u0015R2\u000f\nL\u000e\n~Gb\u001dLː\r֣\u0013_\u0004\u00149銨!\u0007p90\u0013y&ZZ'Aw*Óiqh07\u0012\nZ\u0010\u0011о\"7-Bڠ\u001eU\u001e\u0012kI)[\nbeQ^p\u0018!T3\u0012glon\u0004zo䇕WZ`u͹\u001d#9G_@\u0011hJ'F=Dt$<\u0018-Tg\u0010N\u0003\tѶO\u0014òja_ϴ^Cu\u000fW\u0011' tB&^]Wr\b\u001cT\u0010ݫ;4\"\u0003੺\u0014\u0019_ʟ59_>Auٱ)*e\u0002%1@*\b\u0003F\u001f1W;c<ւԨv}\u0000\u0002\t}8r҄=e\u001c 9ʖfsw\u001c\rYcG\tY\u0010\f\u000b6LRW?8P>zV+eFU\rߴ\u0005JTe(\u001dML#\u0011>q\u0014.):eK*UHqU\u0011\u001a}O\u0013qp\u0014.cd)9޴\u0017p<+\u0003B\bq \u0014D}ߟ\u000ed\u001f\u0010f,9=l\\\u0016we-\u0001n\u0011\tJ\u0002\u0018q]\u0013EC\u0002eW@\u0012+R4`3@tQf\u0012\u0018WB\fvc\\x*\f\u0005x\u0002f\bh\u0014\u000ftiM\u001e.p$\u00033q\b\u0000)2o7Wv|k:KTu^*M\u000fvS v%'gk&5oucp\\oo4b\u0016\u0011#`z\u0019t$<}ʾIG\u0010V\u0015AwO\u00123A\u0002\u0001\"zګ\u0007*Gx\u0014\u0011}KnT(\u0005'\t9y*d3rItRx7\u0015FaQ\u0016\u0001\u0019z:\u000b\u001c`}\u001e\bW\u00121QX|ׁUO+c3.D\t򀕿:k\u0004~$\u0005r8\u0003o\u0018$.$\r#ȃ۲R\u0012 \\vAJTZC|\u001c5\u000e\"\u0003Mz+\u001c\u0011i8_,\u0019>c&B1\u0019*DbO\u000ff<\t3\u0001]I\u0012/\u000b%@M<mWp\fv\u0004w\u0011ג\\Xa \\|\u0003Hh=愒\f,]\u0004\u0011-\u0015:\u0016\u0019čВ6ګke`\u0013/mmG*\u0018;I]F\u000e3E@o\u0003Jr\u0001\u0011~_\u0011GeYS&H\u0011_jɆvioF\nB!\\o\u0019%!b\tR\bBTd,]\u0004\u001b5t&RLRħ\u0006\u0006¥\u0004u@c\\P\u0014)\u0018e\u0018\u0016ARfH?\u0007}]D\u001aj\u000ez0u\u000f#xALҏF\rd*\nwPTp@\u0001cJvjs\u001c{\u0016\u0004\u001e\u001d-*\u0005$Yr\u0011ʆh,\u001a\u0016!.\u001dpU\u001dc*\u0004\u0018y_WxGgdmDC+L-\u0018`\u0018\f#3\nrVA\u0000\f\u0006i\u00121\u00053%>V.lRqH2?*u_!jB\u0011\r\u0016zF ;z\u001d\u001aT\f\t\u001b+\"ۘiBd0ĥg{\rJ[\rx\u0006\tW\u0015b\fVoFZo_sx.אO%ހ\u00032ZRu}DQLg9H\u0012veFD%` ܥ5Op<\u0001)²}\u0000ؑY_\u001d|PC\n\r#ޣ2{(Wb(&G_\u0005y3Qg\f\u001es HA\u0006\f]G]~\u0019\u0007CI]/,\u001dD6wEv\u0000\u0005Fb\u0005AV຿i\u001duXMkS\bh\u0004sbG^0]*3!\u0013\u0005oeY~jkW7}%G\t:0E)\u000e[\u0013}%^k5^k\u0013n$M\u000e\u0017W)]ULCJܟ3\u0017Is\u000b\u0000\u001d\u0012Y\u0014A+.\u0002״(ńu\u0017,\u0017G!\u0018*>V8}S%\u0011ܟ\u0013>XI齴g\u0003\u0018Ob\u0012\u0005,L\u0006ŵny^\n\u001e*ҍ j\u001d27eExJ\u0010E#tAk\u000epqг>Z07̶,\u000045\u001d\\y_Ut\u0013YTRŊE3Xb#\u0014G\u000f\u0004YƄ:z\u000bl͇\rwt(vOfľ]2#[K\u0018awr\"\bh^1f ۭmaN1_\t\u0012*\u0012f\u001cߐ?`n;CBӆ&cLV\u0015\u00137\u001cj}_w\u0010\bZ\u0015#<.\t1HPÈ\u001e\u001dÐ\u0011ipc6a\u0017F\u0003+\u001fl\u000en\u0013\u0007$\u0005K$aSD\u0015\u000e:3^\u000b6\u0012\t \u0014:\u001a&9fs\n\u0003ڐQV9g\u0011\u0014#mGCkZTx\u0018=\u00116G\rpt\u001a,!\f~EN6)PO`>\u001e%UD\u0001l9\u001a\u0017\u001eqf/2ˤ\u0014\u0013VVݶ\u0016| PjК9\u001fh.6Zލ޷8\u0004\u001b!\u0017]P%@|b~C7ʹ+Yý\u0003\u0010P\u0000:`\u0016\u000eH.0g<Ǌwh\rARٟ3:\n!{_NY\u0013\n\u001eg9#2#Q6z7=\u001b̏$\u0006\u0003\u0007b\u001fh!:2C\u000eZ\u0003\u0017<T\u0001LEyW(K\u0002!\u0019\u001a\u001e\u0016{w{1\u0019֏G'\u001bn\u0001<\\̫((\u0014>Pq\\5L\u001bbk;Ą4:\u0014\"z\u0003XSfh(dO\\|\u0005B\u001f8\u0005\\B\u0001\u0003ޱ]\u00077Zx\u0001P,\b%յ\u0014ԤU2?\u001cxwxp<uA\bȗh#\u001d8\u00143-6ȻX۴g_uP%QlV9\u001eٴ;06\rqh\u0004Z>k\u0010~f>ẅϻAwT3U\u0005S0\u0005\u0006ˋa䯙E~<1Zzzb2q>u(\u0018(Е\u0016\u0005۱bQ&|cgsP,dk\u001dwny\b\u001dMƻػ2\u000eKJ\u0011 \u0000d{;\f!\u001a+l>\u00194\"\u0001\u0014[\"\u001e\f0A|w\bc;nҠ%\u0000E@$r\u0012\u0012@3R\u0019!Qtm/\u0007{~\u0014\u0007DK]\u0007\u0012;\f\u0002#uvgG\u0019zE\"\u0005aFVo\u0013\"nbX#;z\u000e#:䨘\roݴ[\u000eN\u0005?\u0017#:\u001douL\u0006׋^جv48ۦr_Ju\u0001ߴDT\u00050\\}z,Z׬؝z}`O7\u000fGs\u0016d`ufZo\u0004\r\u001d$N\u000bP\u001e\u00072G\u0006H(H\u0014\\<ZGx|\u0011@Hf\u0000\u001b\u0002IuL\u001f#^\u00018hxt\\ƫ1XCe2E\u0010\u0007r(flt8R\u000ea75D\u001f%8,a\u0016.YCzc\r{K\u0015Ӎ%]H\u001d[wc+;T\u001dUI\u0014\u0013'\u0017*\u0000\u0011\u001bQ\u00193^3P;}\u0014[\u0012VkOC$R\u001fY\u001f\u0003J^K9\"+\bB\\^a\u0005!;ɱ\tjk(\u0018]J\b8\u0013\u000epq/;riҠK<i\u0014O]\bS\u001b\u000b'\u000fso2tl\u0015aȝ\u0001e\u0004^,g7^^(#i/dH!x\u0017j,\u0010#U+\u000f/Vs\u001dM㓹\u001d<+656X*\u0016KE\"߃|GX\u00005O\u000e/_/~7~o/~o\u000f_?o}?\u000f{o۟w\u0007\u0018}o\u001f?//$\u0012_{\u00067\u0000_~o~w~_u{r)~ݿOvu\u001f`o?t~{/\u001f޿'\u001f_˷_ş7^\u001fE_~֩\u001c_~cw|7mٟ\\o'z/#\\oo[}~\u00063,aBbi&\u000b4\u0019y?Oa~ũ(b:\u0010\u000b\u001c;ɡ7M\u0011~v,\b$*BY\u0012/UG\r/\u001d҂ϗׅ\n;ۀ5IEb_F\u0010nL_\u0011't;jw\u001fndj'\u001fB}ZS\u000bZN\u0015Sc7\u0001\u0015?Keٍ=or΅\u0002e\u001fMcD#\u001b\u001f_\"\u000f7&dh[w_F\u0000\u00140}鲳\u0000\u001e1(څݸ[Kt\u001d\fr4$~)\u0016j\u001bPmqR4ˊNq9ho+\u001e\u0010ux\u001e{\u000e_G\u0004s\u000e%v#\"\f[;{<kZ~pe\u0010ir{p~\u001c:r^dhdkoxh\u0019a92^\f{֧g\u0013O?k}ej߭RD\u0013jѸ>h|Ӥ97iD\u0011ȍ$>='Ր:vs\u0013{\ny%7x\u0013Ÿ\u0007\u001e\u0017B\u000f%3\u0002\u001e6Bh<\u0013L=iĥEOr\u001a\u000e``\u000f;wgҬ8:\u0007о'Fi7i*J'\u0019\u0002\u0017*=\u001dNhDQxF nL\u001e?g(ߟ\u001b\u0007w{+\u000f2-\u001aAHQ2E#\\<?W$MK7\u001asE1|)\r0x~wޟͣ*^_'t9<d뤍Q>=s\u0018yG\u000f\u0018\u000b\\;ګ\f\u001aɇS\u0015r<q=|>I\u0011r\f9ӣ!uQwX^[\u0016l7w\u001e>iݡS0B>8?_Fx=g)}zky_i\u000fw<[<\u001dv\u0015OG[\u000fe̟@l.h\u0007i\u0007\u0019s)#}Ҙn=H\u000f@F?s8H|\u000eI^\u000f\u001d\u000fDݸ\u0003\b^\u0007'YMS{+גDua\u001c^>yz\"e9=_30؍g&|{Y\u000b\u0016;\u0005\t޺w\u0017go7\u001fG\u001dgV]DW5Ujkb[#ҬeN7sx=q\\;\fjewj_=ގON\t]H=r⪹ທ\u000e\u0001S\f5xƼ\u0018ĥ>\u001d%\u001de\\NoEc;S _\u001b[9\u0013]ӞvNtgOc{5~I3F.eC\u001f$\u0010*\u000b$]u__\u0012Wt&Ih\u0011cߊ숐fp\u0016ќO\u0004\u0017Rm$ܢw3ۓ$Y]\u0011(\u001a~+NFQf4\u0012_\u00141&\u00160EU{qLڳ؀Ʃ'eHQ\u0011|\u0002h5i$ͪ\u0006\u001b\u00110½緟\f)Ǿ\ng7\b)+7^WՋ=Uw;;ov\u000e\u0018ϛگ |$8[\\фnēm7\u0001 1`ӑ+EJ޷x^#\u001aeNsGG8_]\u0000oj^?\u0010>kͻko\u001f@/F;D;ӉGY<\"w{n^_iZ`zsyTh,}\u0019@gq߅vg\u0018\r:#}\u0019\u0001t5[4u1sj\u0004P\u001fuwם/Ws#\u001dƶ?\u0019ްq;p\"\u0012J;ȈX'\u001e8\u0017O5J\u000f y\u0006ba%??8]3]i2{b\u00182$\u0010z~>{YO\n.\u001awr{b\u001aSU\rg桞}ZIc=\u0006#𡱵(;dwc%.WQ\u001ba\u000e3%(۹Si/)^J}>Vǣh*,gAwdg|=P\u001at\u0019u\u000bHe^qu\u00056n\u000e0=\u001f\u0003\\g\u0000*\u001d\u001f\u001a٬;Ϋ̸=Di;b\bԳ\u001e3Dh?e[N\t370V{\u001932\u0014{\u001f}=|\u000e=P<\u0013N3BN\u0019s:wկxF?Ƶ!Pc/C0\n_\\EÁ1F\u001e/\u0000\"Y7\u0015DvD/4CQx9Ʀ(b\u0017L=Nt7羶'Q)^}R(<T@<#q>}#~j܅\u001azO@;yXyFx{W6̅FV6eX)}f';\u001c\u001fb,񞓜_!\u0018\nŤ㪽de10߻1\u001d\"^<\"򴃹T\u0000\u0004׹#s{\u0004HN\u001eqc.Dtʵ\u001eY^\u0000v\tng\u001eܵ́35C{~BБ*͊x\t8EB֟\bek!N0HOpdg CT[#qY32҃nq'[Gv̲\u0016\".nkϥ;+\u001ea$ )\f\u0010y-e\u0006VS@\u0015\u0019\u0001=h,\bH+Թ\u001fGw'Jd嵇yȈָi\u0002S&}n2O9w8^o\u0018\u001au~.\u0003Ww=uf\u0006*F8\u0006(+F˙W\u0012bBObC$F8A(2;\"]\u001bq?\u0017C:9\u0002&\u0013\u001e\u001eg_[9۞\u001d9F\u001a-bȷc\nҦrj\u000eq^Ὲh/\u0011Wܮ\u0013\u0013EyʂW<Fx'r0i\t]C\u0016]1k~\u0011Ԏr۽+ד7\u000fI\u0006;P/\ng2OmɽEI\tɻo4E2_v(\u0004iSh|O&-舨y>\u0018\u0018sل\\\n<_(\ny[ih<~ISscM|Gg\u0004,k_>3B\u001d瞵\u0011\u0010\u0001t\u0003[X.Y\u0010~m*#3G\u0015\u0017^w5W6\u00125\u0000\u0015x˱#&\u001cc2w?\u001f%)yY\u000558Ŭ3\u0017_QXYr\u0017pWwO.\u0005\\\"nOfj>}\u001a;8\u001f'2wrS<+ryO\u001bqH*\b~A\u0003\u0004:f\u0012e8s\u0011&GQx?1s{TN\u0005|Ǘ9)2狟QӉ\u00033\u001b}GFQ'a5ONrC繜#\u0015\u0006_Aq=\u0017|\"H\fs1=w-;#\\eϼ9\u000e4ߢ>ሥ=G\u001f|\"KnZO\u0003+{:5Fϋ[]\u0011\t\u0014]s{>7qB/\u001d'jW|\"V5,\u0016Oiliù5ֽ'%\u0017<\"u;Yt]Oh\u0007\u001b_=S4\u0000{X\\?9)\u0016Wr٧Fl\u0014vQ^c>-8|W:\u001b7c3\u0002N'F\u0015ƧsU\u001f}Yc\u0004\nܴ+\u0011Nz\u001a\bOh5zq\u0011\u0019\u0005qȺ!m$YJI\\'w@\u0014d\u0015\u0004\n=&IO\u0003)g},=:OF$pE|Y{+\bϮ'\u001ay\u0014FIY\u0001=# J6D<\u0000,WOcvT˹y\u0018/{\t2q/R\t$\u0015Hn\"TyFr}0܎{<\f{.m\u001c]yFHε\u001boM'$O:\u0000l\u00114Fr;1YJ\u001b:(}\u0018\u00116dg%́qv!I\u001d\u0007<\u00022݁6\u0015mr>pKحO}.\u001dy\bJs+i\bS\u001f֨\u0011F\u0001\u000fwc{\u0002k\u0006 }۟HcI^>\u0016L\u001bEϲ[/!(g?\"\b\u001e,v\u001em\u001bZpxmظf۝w\u001cɸD\u000bFeٍ\u0012zrOx#S+\u001em\\>\u001b\u0012\u00189z<\u000b8\u0010>I(¦1dJwLID<y\u000f\u0003\n\u001aϊTr\u001aςVj)\bOLiovv]'P8厴<\f:'\u001d%NsFj66'eټ\u0016T;0Ĺ\u0015(\u0013\u001cWH0#\u0005Hvܷz|*퉅+\b5uN?̉Hݜ\u001c\u0000\u0011(nH\u0014X\u0012Wa٣)p?㦴;H.\u0002Ǖ\u0017,\u00001B?(K$\rm'3N~r\u0007[Otϕ9Etg\u001a\u000fRTݹY5\u001b\tkUi\u0011K/a\u001bSCo^\"1=kٹ4q!%f=\nq\u001f\u001c\u0014kf\u000edrǁ\fߌw\u0000u?3/qg (\u0013z5}]!3q\u0003ϵMiڹ\u000bx\u001a뉕\u0017#ԳNBdI\bީ>\b(.,ѹlJA4l1\r;\u001b~/7}=oU\u0007#@8\u0010\u0018:6{pa\u000f6\u0005,Y_xsh\u0007\u0018=놳`Euh\u001e\u0007!\"\u0018`\f\u001a \u00063B\n\u0005\\>qT>;z\u000eu\u0002K>/||\u001d={\u0018\u001d\f\u001a(Λ\f\u0011~\u0004::\u0015MH7aH\"\u0001?`R)9\u0007h{\u000b8x\u0015\u0018g!v0\u0013\u0006\u0000\u001d[n\u0017>SSس聙\u0016cw)>\u0002S=܀y3x&eԗ\u0011rV\u0015\u001a12=ىȡɩ,[{IVCbSgRUs?\b(?\u000fo\u001axYt>QνHfɋ\u0014ZW%.'6t>\u0013X{\u0000|}/1\u0002|\u0016|\u001beo\bV3\u0013@H̖msMZDO\u0012P\u0014mT[9_₾EJ\\|9\u0007\u0019\u001a<R֠*B\n\u0001XzV\u001d\";t\u0010\u0011\u001a~Hy#s5ua\u0007\"SKm24#K<\u000f\twq.Iqn\u001d\toE\u001cVϟr:yZ2^^x\t$y\"%\u001aoY`Q6Qc;QKJu{Ti-QyFx\u001e\u001bX:Rs\u0015eh;;O,1}\u0015g(\u0018\u000eɣ;*ܓf\u0011Tݸ,s7^@͵\u001ds''\\Wr獾J槹k&\u00174#vM#g]G+ԗQ9eݸE\u0001\u0000^QؿX\u001erV#[\u0016\u0019w:G,Y\f.\u001dS mg5-<q\u0019v\u001fw߶\u001f~XE+GĚ6ʹk7neb=\u0014\u001d=O(3tV\u001c~*>Ԟ9u\u001bHbN{)@W\u0016ЕK8|\u001f\u0004G2,9\u0002Kgymz\u0015\u001d!\u0003\u0018?7ʎ9w`z/4?(}n\u001aX'о7.\u000f/>\"\u0001=׵\u0012\u0014g\u000bQ,a[C^F)0FiwRۓJ{˗B6I$7{+/GY=\u0002tEƾqSHo{Lx#\u001ei/_\bet\u0018>cֱ;{mulC\u0016g\u001c;bD=L=\u0012d49a_p)E\u0000fkϤB\u000f|w\u0019\u0011u\\64G,!t\u0013P\u0018ՙ\u0004Ѫ=#!2l>'6ҹ3￤\u0018\u0011\"ECO9ў>\nKT\u001b\u00196)?޴wt\u001f쓾 ѝ\u0011r\u001d_\u001br\u0012yxrzr /46\u0014C/\u001b\u001e?^F\u0018%nlne~%K}Vܳ[,Kdk%N\u001abqk|c?|\u0019-xnw\u0006<)\rJ|d#[^\u000f|Vrj\u0015XcdTy\u001aBiLs/:h,;X\u0015bP\u0013\u0018@Ic;\u0016C)\u001aǽ3@m\b\u000f\u001d1Ns\u0001HSiLNg\u0005Wf\u001dS7\u0012K'۪_vw5!gJ&x\u001c)ov;N/3\u001bM\u0015\u001c~\u001bM|:g97\u0011\u0014Y\u001cULig.-D{\u000fh\u001f\tO;\u0019_֓\u000er:>*\u000by \u0017\u0006)k\u0016W?]͇Mk\u001d\u001e>aUH\u0004dgq\u000fp-͆P&;Zq\\\u0002\u000e\u0018542t]/#l\fu`04^\u000b=\u001cs(G:\u001ciV29<5?J:=jfbxF=#lH\u0017\u000eT\u001ac),Ɲ\"s>\u001f?!\u0010^W\u0002BhBGa<\u0011\u0013_Oz={I5\u0014\u0019\u0001F]\tg\u0018l\u000ea>0\u0005:q]^<cl\u0015<#)(zELhle</B\u0017t\u000eEݾL'gc\\_FnGB3^\u0006ol.s\u001fv/k\u0014Ǿoma\u0004_<:\u0000a'o8t\u0012\u001f*\u0019㤶A$<1N繥,j+\u00077I>\u0010+A%Y\tT\"lY9󦉷qFŎ0ƺ۝#TcnW1v\u001c.y\u0018ʙnU\u0011-_ d\u0001Ci7-v/r\u0015#\u000e\u001c<\u0019_g>\u0010Ƴ\u0005\u0013sn~t-\nI>vy&\u0004X{7T~i\u001b\u0010#gc\u00137t\u0007*`8\u0003yrN8\u001dH挀%+}3h>ĜG\u0000\u0014L׃\u0014\u001bM~Obj^'Fc91_O|5\fOb\bcGN.&<\u00018\u000bL@2=\u0019ף7S!W$h{7G[Δ3@됅u\u0015~f\u0018F\u000eV\u00136ino|\u00015\u000e\fc9hlc8}\u0015N(ؾA)\u001a\u0018!t\u0007m7G\u0001jDbI{,G\u001c\u0016-PN%\u001dsW$R|\u001e.T]:Ԗ\u0004\u0002'u\u0014{QDǌ\u0011\u0017JGwD3ܟH.v\t9]=ܒU\u0011ɤ=2j'|^-\nmRO؉4\u001eaf'3D\u0014A~aEx:9τ\r\u0005X{n~&K#j\u001f\u001bv|IJ_ڍ`Ǯ&\\\u0013\u0001<xxu>f\u00116H,~+F_Do܍O\u001d+7\u0018\nB>Y\u0013c#\u001b˩\n^#`k +/gܸ>OڈR=\u001eu0\nv\n\u000e:\t:ٜ-/\u0013u05xv{@GݷZR?3q!,j5nio8#\t6\u0003hN;*w]\u0011\fe]\u0000p\u00129o\u0000'GY\u0003P_w9Lx3&V^.\u0001\u001d\u000e<xp/ݘ\f<\u0004\u0015\u0012$vTbsM.\u0007П6%Qt Ȕ\u000b-)B2\u0010^l_w܋zθ(]hN[Lfl\u001b穨-p\n\\GIm?ko\u001d\u001fEҭ\u000f\u0011$bY\u0016\u0016$6ޓ{\bIpw_!\u0004!m{ߛo鞼|fT:UysN\u0012\"04⪇m=\u000206RW*H\u0001abS\u0019^TXon7\u0013&T\u000f\u0003z\u0016\ne-MU\u001bxu\u0015x\u0014\u0002\u0018){0\u0012V\u0002Sc1HU \u00115D\f,=TMM\u0015Iu\nu\b>=_½\fp0hMf*\t6\u00149,\u0015\u0003v4NWx&(>UH0WXGG\u0014Yh\u0013Bu:\u0002e4R\u0006ܨ'*_q\u0007AY\b\u0015DyS@&|P\u001f\u0013oQ+2{\u0013C\u0007C]*+*AP\u0000|\u0000b\b\u001d]qbv\"X٨+=P\u0015φ~z&)\u0013\f\u0014\u0005CaPza'!\u0014\u0015$X\u001azlxg(%)Q\u0019^\u0004\u0003[a[B1+{0P\u001chb$\n1\\*0\u0012S%\u0007\u0002G\u001b\u000eЇf]`\fuaĠ\u0010F!8$@ʞ\u001c \u001dI#E}=\fnU@Ю'zo\u0014\u0016\b&:1\u0012\u00130t\u0014QAdq\f_v\nB\fŽF\"W-zbH5s&\u0003<BU\u001d8}At+.6f=Jj3j{Bl\u0016M:\u0000\u0004KQPtߺ*0`\u0000Ob-c΅g3T\u001b\u0006o\u0013?e\u000f:Hb\u0013X+\u001d\u0014x\u0019\u0017b\u000fpශH\u0003Tn\u001dea\u0003\u00031<(5@ܷ#\u0016\u0004U\u001a\bAO(naM\\\u0006\u0003\u001dE\u000fg\u0013D닚\u0002Σ\u0017\u000fB\u0019,WaRh\u0003jp\u0004\u001ce\u0003J܂kl\u0018\u001a\r\u00075\u0012\u0003#2D目X\u0012wT\u001c.lz\u0017YY\u0001\u0003<5&\bQDL$\u0010\u001dNT4\u000e(0\u000b]\"|;Ў\u000b(c\u0002jP-ϫSM8\u000eR&B\u0006\u001d)zvc\u00184\u001a\n/\u0003e\u00056=]@iQS+\u0004\r*ˌ鉕jt\u0014N\u000e\u0006da*u\u0014\u001c\u0015^%3R?0\u001a\u001c\u0007xLLgQz$\u0002\n1\u0015G@,\u0002ƊN\u0006\n,`]e@o@\u000f\u001bJ4ϡ\u0011'WOGc(FhĿ7\u0010e\u0014\u001cPtH,ȭč:b\u0004PMG%\u0019\u001b\u000fkʞ\rŚb\u0017\u001a\rTi:w\u0003ǀ\u0018\u0019\u001aPPP,#(h4\u0013ب\u0012b0m\u0000HvJ*1;4$\u0005(k$^\u001fE'\u0001\u0019)Gh`@p4\u0011/61\u0010GW\u0006%\u0017\u0005A؁~(F=cЫ\nԚ\fx\u0004UL[}\u0001\u0018*vC+ED7XHGAٕ\u000fl*\u0000X\u0010ئl4\u0010qPUX\\8/IzB\u0010o,\"\u001bE)+c\u001e\f&\u001a\u0004m \"fcbA\u000b\u001a*\u0019\u000f\b\f(\u0007EİLDІ*Tk\rT\u0001^\u001faȢQ\u0005W6B#n,Tce3\u0013>UT1\u0014rb\u000fz\"nĮJe\u0007q\u0006*Fh\u0017PP\u001b\u0012\u001a\rT:\u001e`\u0012=\bU8\u0006\\l<\u0000\u000bv`\u001aDk7P>LP\b\u0015b3\u001b! :@PWQQ9F\u0016Z\fŭ(2P\"(W7?eԁb83288FB,ed\u001a\u001aţ=TyuG@WŤ\u0011jF\fPUn\u001eTM\u0013JƪUtI<(M\u0004TK4\u0015T`Ѡ#ހL\u001dcӂ\u000e;V\u0019\u00176늅@DM\bTK\u001fBQ\u0001\u001db\u0004h\u00176>mh(xpꫲQuDg@XcCQvk\u0018(\u001crz\u0003\u0019*\u0004UDl@|0eO\u0013gZ1b\t\u001bhW\u0005J\u0014{$b\u0000tLTƆVЅ\u0000H\u001aBEwx\u0016\u0000j\u0016XESB\u0014E'E\bF\nQW.U;AԱG^:\u0017_1bv-2\u0006O\f)<3<g\u0015@DD\u0006z\u0003\u0019%\u001e{D\u000e)}SG\"_-`j<r+.\u00177l銵W z&~\u0002\u0012y(\u0003.%87*OBM{\u0001\u0007}}Ҏ*G7W\u0016+LĐbPi\u0000qe\u0012|@_vc\u0002\u000f.%?`r:ʳ-$\u0006U,G+.a_be%P\u0003=#U\rfkN*gj:t\u00036T\nU.B:\nǘ\u0001xBORUiUWPD^{PU)U\u0015\u0006ǳjo\u001c\u000e\n0FP6E\u0019\u001dT\u0005\u001eE'\u0013\u0016(.\bv\u001c*\u001bz\u0018&FB&3U^_ʌ\"\u0010\u000b+u\u001bV\t\u0006-8\u0014]\u0013\fōxR\rU1\rQĺ[\u0002Շ+kr@R\u0019±ZPlJ]/l\u0001EJ\u000e\u0002hTgWTPR#ܢ0b˷r+9\u0016\f1 ̅RS\u0000\u0000\u001eb\u0013\u001d=՟\u001b0\u0005\u0006\u0007ъ[MM\fF\u0003\u00134\u001e\f}FUy\u0004ep\u001b\u001f+y\u001eD'\u0010K=\u0018N\u0019P\b$6tB\u001d-]q%n7U\u0015S\u001eRk\u001d\u0001%R=v=苅|,\u00185\u0005pm\u0011\u0007GC\u0003\u0007T\tS)\u000e\u001a\u0016\n\u001bAD\u0010.LXW(ځ\u001b\f\rUߕʅ<kj\u00110Jg\u001b=vV\rl46\u0001F]\u0016ﵐ\r\fu\u0005$/en{\u0007%\u0007\\ڛ<?j?f \rB@(k$\u000f)nh\u0011JՕ\u0003H!Z1B\u001c==][#Ub\u001dA\u0016/僉\r\u001e\u0016\u00174QH\u0005gx8W\b@\u0001Rhƍ+\u0010_\u001ev:\"z44\u0012y\u001a.g \u0012\u0001LHSn č\u0006\u0002\u000b\u0017\\׸Q\u0000Fb)\u0002e\u000fzl+?bh]\u001dAD^=v1aD~p\u00156RLs\rYF*:3G Ƿ\u0013L\u0005qQO\u0004vBX\n\u0013h\u0015\u001b|?\u0011`=#Ux;x\u0019O$^<_\u000fP \u0000qO\u0011-l\u00053\u0011z\u0007_l$Q\u0011\u001eQs/8\t^sU_LR=UUxy\u0018n\u000fl\u001epd\u001f\nxG\u00061ve\u000e\u0015Ub{}](}'n\u001dpԩ]寊\bxNŒЮ*&T\u0012F\u001aP\b⯊Z(o\nn$qhLpXlM_8DߪL1+q\u000fb)b5\t]݁[Q6\u000f<5\u000b뉧f\t;PHUr1\u0014\u0002}bIhcW\u001eTU,'EXNTTH.sq?Dn,GXOLV6\u0015\u0011\u00144{c2\u0003n&V\u00193\u0004\u0007\u001es\\\u0001\t+NXy$VR\b諒U\r8|2Մ\u000f(\u00075`guă,\u0006\u0019\u0011+I\u000b;z㈚\u001a\t\u0015\u001fw*\u0002Yʟ@0\u0013K\u0005)5TE\u001e\u0013\u0014(\u001a\u0005i7\u0014j`\r(<:/8?a\n˘8\u001eF,.a\n\"\u0012È7UUB%ϛ\u001a\\<KO\u0018&\u001e]~W\u000f8Lz\u0003Aw\"?5TG\u001a\nB\u0015:\u0011TpvzVPQJ+#,_CCBn\"h\"R[\u0019\u0000o\u0006T_ZUK8p9\u0004\u0003TOmX\u001a\nzj#1&0b5\u0006S}q˯r=.#͔$\u0003\u0003Ӯ;jopj\u001fU[ӣ\r4MF9\u0003F(}`+\u0006Y\u0015b\u0007P(_JEUgDb,*kp]f*\u001ccgP.\u0013\u00160\u0010\u001cb\u001811\u0012ĢVe9\t{WĜ\u0017ԯʪ(h\u0015vH<\u001a\u00004\u0015ץ=&bM\u001c=dGfu\u0007dE\u0018i\u0015+(J%\u0015UY\u0006-ln6\u000f8Qcq1P96\u0001\u001b_.*̮+\u0005(7\u0016\u001aг8pi,\u0019h\u0001C\rF\u0012d|_#j25PH7X\u0015V\u001ew\u0015*5꟟A\u0005}\r\u0007\u0006,O]u\u001e3?'&ӛC?aGtT{BmsWn4Y/. Kٺ\u0017ȼ<\u001d\u001dq6j_8RG{%5*X8,/\u0010<\u0015+}G]m\u001d\nwn-X[WG{6h;?Û\u0018Bh<}\u0017}\u0003;\u0011ZM\u0004g*\u0006duϽ\u00133Y{Vv-K.DH\u001flc-&mjH-V\u001bgt\u000b}\u001a,ܔ׆Md+\u001a~\u000b\u0017ЭuM!IK\u0013ŏ.\u001bmso2Rڨa#)Yzd\u0016Ra\u0005\u0006-65sݠ;\rڰ[c%1J.\u001dc\u0006\u0013NCNQN\u001c4-8_+%˿ ٸl%\u0007mm3$kVZJ6l4%\u00163^Kꖬe\u0018F|ĜuS\u000fА:&\u000e\rdimfɣ>%koD_$\u001a\u001c9Dol]\u0007\u0011N9\u0011|XDyxdylL:t*\u001a<r\r\u001ax\r\u0013Fs^1#8\\|\f>r&\u0017U<JOE\u0014N<G\u0010|5Xt-\u0013Q1b\\Br1SC:|\\6\u001b?Ң=W-l\u0018\u0013=,\"p}HD%d(?X4C\u000f\u001c\u0004!}3)Hǰք )!\u001f$cըm\u001ac\u0010Wr\u001d̸\u0006\u000e\u001d\u0006\u000ejV2Z\"P2ic\b&\u0014I#q>I6NjRA̶AC`\u001dw\u0016\u0017;صmE\u000e\\\u0007g\b-s)\u000b\u0007\u0003\u000b>\r\u0018G`\u0013Z \u0003SFQ\u0001`<\u001dZ0t\u001dj{[y>1#ILTT.\u000b&4s<\u001b<\u0016It\u0014&\u000b* s\f\u00108M\u001eĎy#l\tV͂uR)G$iݠM\u00165Ѽh\u000f5\u000b\u0019ͬd\u0019'ٴA*]ԬYOu)z\u001f\u001e)y\u0005-Yfz kP5YK暪%\u0016ixK\u0006Ir7u+Vk5F玵U7HV7lBh\u0017:\u0019M\u0007䍥<FH)o5KCR\u001e\u0011]qBf0b0<qU\t y\u001f\r)d0\u0016;\u0019\u0006.\u0000F\u0014LGHgPcC'pQ5\u0006m.l\u001a\u001f=\u0001$>b\u001a\u001f1\u0001\b\u001eF\u0006\u000f«@;u\u000f\u001fGOJ.\u0005\f蜩p\rd\n\u0019F{\u0004\r|SG\u0013j\u001b'|\t\u0006\t+*\u001c\fC2'\u0011Y>(\u0006i)sє]\t\u001bWuKD\u001eEE#ɟ,*G\u0016Me\u0002\u0012FNQh\u001dbK1u3\tG\u0016?v\u000b\u001f\u0004\u0001'4(G_M;i\u0014\u001bd#(e,\u001fV0ػ9\u000f.xF\u000f@ι\\lL6y.6\u000b-a<\u0012Glr\r䖯&L館=)l`87a5\u0002\u0003\u0012\u0001s\\L6i6\u001f[1\tJ\u001aC{EjQذq|\\,:0u\f\u0016<\r\u001a\"y#m=4X'\u000fM:~\u001a0܂qT[\fu\u0012+\u00127>HÊQ2h.\u00034dcŸmHn$RAR:\u0019>p\fFk~L.bo]դ4(!2PM3e\u0004鞤\u0005X\u001c\u0006Y΃,\u0019A\u000e[0:h<\u001c?̚S{ t`=n8\u00145\u0014Ϗ[0\u0019\u000eo.6HySCYRGݚCz[u\u001f΅Oq9a|HDyX$>x0\u00106Ԣ#&1\u0019{;ɑ#<~ɣ\t\\@85`\b\u00164\r*)d\nsr\u0019sJOɇfMdCѸN\u0004A[\u0005|q=>}B\u000e(<,\u0002\u0001@?A\u0006xǍ\u0000b|\u0013F\\QaC)/AfD$KSֹ\\殅\\Bl.j\u001aH\u001eRbyCz\u000f\u001a\u0005ebGx#r&1i-sv΅%7ѳ&j_IjT5P5]\u001e\u0015W\u0016\u001b3'>^eSfsĦ/LxD'y$8֢<TNgg\u0011l`hX4\u001a\u0007Ыlp8xVB\u0012\u0011/\fO9h\bDUA%\u00042[g.1l%!5\u0014\rdfDʠG:ӔNj֠Cnڹ\u0013\u001aR[OMR%F:\u000f&]cQ\u0001\u0019R9H\b\u0010M3q\u0004-&p\u0002\u001bR>N@Ϝ5N\u001a\u0006egHǐoh6 gl\\^\"<XQsWC!=:\u0005;\r\u0010t\u0004\u001eP/q4F-b\u0018\u00169\r\u001eϥť_\b\u0001dqG\u0013ٛilL4.b\u0006\u0015h爡[P.8\u0002\u001b]1M2K3\u000f捋(\u0005us\u0010>!\u001dme\u001d\\\u0002K۳\u0000t\u0011\u001f6\u000eB-G\u0013t,\u0003\u0016\u0010/n$\u00179\u001c˄\u0016LB'\u0003\f\u0004\\Z<6e\\>\u0001Rt\u0017lH.^?L@h\u001at(<\u000bCX$&(s\u001c\u0013%.il6\u0012&\">Y|RMlD}\u0014N\u0001<\u0003s153o*L|\f7n\u0004\u0010\u001b.u\u000eŴ9tމe|J\\>n<KtɰHO(:$w<>h?y\u0014%a^hõ(aX\"]KďsQxb]\u001b\u0003\r\u00148\u0004ƃt\t\u001dbM\u0007Yv(Wd\u0017ܢ\b$M\u0006-\fkP\u0002E\u0019\u0006\u0005p\u001a7\u0003%`\b>\u0018ȑ`\u0011^cJP\u0019ciԯ\fa\u0001c&:>N?8M9\r.H\u0007hHz5i\u0003\u000e7I,\u000f+\u000eM9\u0001v\u0004=Ij\u0012:'x\u0017\\Z\\ЗG\bƁgp.8c⽋&a\f\b:2\u0004h\tc+cyF2\u0001\u0007=\r.\u0004X\u001buTXT6$o\u0002ov0|D\u0014.\nЂI\\hx>0i\f\u00171\u001el0\u0006(l ]u,ҩ`Ka\u001eq|B\\B60\boX.q\u001czVX7\\\u0012Uɍ_r39al) |܎Lyl\\txF\r\u0018Gd#\u0016\u0019\u0017Y\u0017Q\u0005'Q\u0016БUS2+WЙp\u001ds.\u001d8\u001e\u000b\u0010doE#&q\u0011H@5\u001et?_H:x2+&m\u000e\u0013^:\u0019\u0005='~$\u00136\u0016ˀ\u001f٠q7q[@H[P\u001e>\u00012h!}\f\u000bϛz'$\u0001\"G\u000f\u000f\u00124c^^ ʢϸ\fc\u0007ϐsz\u0019^[\u0003n\r\u000et\u0001`\u001b&R)f\u0019YvՐ>\r͛zë'\u0016QU\u000bn\u0018О9̭@Oa܃_3\u0005GGKjFkr\n\u001c<\u0000z\"|\u00195\u0010/\u001e/\t;怮\u0002Cٺ3N.\u0003^J3*9\"\u001d\u0007dw\u0018\u0017>M1<\b\u0011p\u0010\u001a7\b\u00130\u001a[xL\u0000,x\u000e|F㰎\u0018\u0003cɂCd~uD(m,~$gXfd\"\u0014\u0002\u0007,l!idI4_\u000f\u0018\u0007<9,:;NoE^\u001bd\u000bǺ\u0012\u0011Y\b\u001eCψ\u0017ҙ\u0007SiRuө\u001c$+I9il:\u0015w\u000fHa22'_̱؄Yt%ltt\u000f͟sP\u0003x>/u\u0014>(Ƞu%}Ed\u0002J!\u0001\u0016MAo\"\u000e\u0000rK!]cYzK5AW`+Ki\u0015\u001c\n|oI{Y!%\u0006am~؞H;*nHVI;O\u001bM\u0006:/@\u0007#|\u001bϤKXL'}IEULJ'S\u0013Т\tTL\u0017!\u0012\u0019#\u000e\u0016\u000b£\u001ej[\u0016\u001d\\0M\u001d)s\t\u001dl%V\u0003L?\u0004dr\u0000\u0006sƱ\u0001\u001c [\u0001C|\u00031Wp&<w7T]J̿]ÆaWV\u001bYMϷD%l\\\fO\u0003\u001aA\u0000Fc9\u001c\u0015\u00043A 5\u001a\u0013p\"\b\u000e\u0003\u000fΡy`#s\u0014v\u0016\u0017\u0006\u0017\u0018s Y砢\n'\u0001e\u0010nv\ba\b\u0007\rZ\u0018 I+\u0011FA\u0007E~A&A\u000f9\u0002k\n3%d\u0017\u000e?[JlY#Siݣo~SNa}`0!\u0005\u0013\u001d_RHְ\u000b \u001d\u00025a=Id4W3x\u0003g#\u001c+thT2\u001b_`mcCƁ>]\u0011@6tG1t01\u001eO?{\f\u00133\u001b9B\na;\b|I\u000bH\u001b\u001ejV3!nȦ#.\u000f~\u0002g0HgMFXx\u0018qh\u0011/t\bSL4)#A\u0003>$5dN>\u001aR\u0007_\rl\u000f3F\\C\u0007K\u001d\u00034-8\u0016\u0010/f}\u00116\r\u0000\u00048\r԰\u0000z\u000ejǀOIm|i\u00176=ӮC\u0019!An4\u001b8n\"#i)5v~\u0017)wf][k]ܔJnEחe0xOÒ\u0006Q]Ȓ\u001f\rKzt`8&p\u0018\u0006\u0018\u001171\u001f.\u0004\u001f\n[ΐ\u0007#L\u00139\u000e\u0002Ʌ\u0007>\u0004%<c`Ma6HIM\u0019\u0011|0a\u0013^D\u0018\u0003}\u001fxOX\u0016E\u0013E6\u000bٷ\t\u0018\u001b#l\u0004ǖ1[\u001ad}г>*`@5@zjI]d\u001cX\u0006|M\"\f0\n\u001d\u001e\u001e5.Н`\t-H\u000ft=J\u000b\"\\`\u001c\u0002 p\u001c5\u0006エZś\u00010)\u00101&J\u0005$&`lb\u001d\u0002\u0007|\u001f\"q&\t̻6T\u00133Bj\u0013~DxovRc@oHCʺä\u0007\u0013S5IhńMBki\b\u00185t\u001a*C\u0012q\u001a\u000bk\u001b%c?H#NAQ.Hv\u001d#\u0006#y\u0004n#ce,Z \u0003Naa\u001dJm5\u001aC:\u0016;\u0011\u000f\\@8\u0003\u0000F\u0006ށlLhXW%ͤ/\u0018\r\u0001cΈ8.YvNt\u000buཱུl\u0006tt\u0014X̭\u0017FUO5<;\nH\u001d\rp@F\tVǸ\u0006m\u001e0ނI\u001e[=\u000b(o\u0005!/\u0003I1G2\u0005\u0010l9֡Ƃ.c1_O\u0019d3-d3v/7z\u0006P3\u000bp,\fI|\u00187hMpQ\u0005S1^Nk=Quӄ\u000e\u001c\u000bLe>K6e>Yr͐t5bt˕D\r\u0013:\u001eҙ\u0019\u0011`k\t!2!lXdd\rc\u0001\u001dY1\u0005!\u001a1MءMV6%\u001a~\u0000<7ͤQQ\n~|\u0011UvǔyX[\u0000t\u0003+qUӁR%\u0011ZRL\u0017Lvmч<=*ndU*\u0001_\u0006ŖMR\u0005_Gr\u0005k\nx9x?\u001eS7X?`m\"\u0007?\u000f\u0013hQ\f-$Dϰa{eې\u000f\u001f\f@.t\u0012\u001dX5=\u00062\u001d\tK\u0005jLRn\tZo\u0018>ԭ){55z\u0018>u\u001e\nIxj\u0000\u000e,\u0002|\u0019Y8ؿM߻\u0003\u001e0\\P\u0018zlt46 a4\u00135I)n,Ɍq\n2`\"ȟ\u0005\u0006~Y)b\b8\u0018+\u0018{Α<\u0002ot\u0007\u001fR؟?_\u0001c/C\u0006\ff\u0017\b\u00147\u0010_gGo\u000fD6\u0015cx\u0019(\u0007W'1B|Iۇc\u0013\u001cS0_\u0019\"'?\u0014ޓMi͠Y\u0017P\u0013P_ǂ\nN\u001eCAz<Nl\u0013[:R*U\to\u0002 \u0017\t:b\n\t<\u0013\"\u0013Q=*>#kx\\Zu݈N%\u0015;pC6/\u0010&mX\u0007ldMwD]t\u0015cx\u001fIؘ)LTLL|L4[r,66t\u000bu\"yk\u0002_D\t|`]c,\u0015Z8\u0011\u000347@\u0000\u0006\u0006,Lff+\u0015|=(c\f1\"\u000b\n*Ax|2R&\"&l\u0012\u00142\u0004~τO5%\u000f\u0004d\u0018\u001b.|\u0012%\u0001>V\u0013;ҷ#\"\u000e\u000fu\u000e\u001f\u00061!>mG\u000e\u0007\r\u0015\"]F~}ݜ\u0003\u00011@6\u0019!NL\u0014O!JN{oftʉ7鸚VNqCh\u001d \u001a\u0018q`Hģ&\u0003?\u0014\u000bJ\u001fG\u0015\u0001|OhCv\u001a}\u00050^5+co(6\f:?@߂oPG\u0002ǂg\u0003\u0002\u001a\u0019LZ\\ĝ\u0017b\u001c\u000f~x31\u0000\u0003]w\u0011pz&\u0012ЉDuc*2*\u001b?t\u0018\u0002\u0007%l\b>\u0007\u0000v\u000e\u001abP7(j$cJe\u001cO\u0002\u0006k\u000bq]_2Nc.l:2bB!^l6\u0001g_dS4.U=X>^ͦ\u001e^\b\u0018\u0003\u0014yFv*BG#\u00110\r\fsF]15=_.iU\u0004\u000eG\u0014:Xw=õ\u00000H2\u0005u:m.~\u0016_1e\u0000^\u0011Z_\u0015Y|A9,Q9\u00186ĕ\u001d3ܳK? nH{}[tl֡\u0003\u000ek\u00150zA|=i,y\u00049>-\u001dȾ\u0003G~9/C[@(&s\u0002&uW\u0004\r4Ll#\u000bfjyQZ{͔;vEc\u00139:\u0003~\u001f0X\fw<뀩?\r\u0000\u0019f1_$$\u000fLΉ=\u000b,빘3i;3b\u000e>D\u0013@\"=L\u0015\u001c_F]0 O-\u0005:)1WC\u0014si\u0010\u0013c⫦SY.$j}C7v%{#L5=yN#vL\u0006\u0018c\\tY5c띟Vӱ;fZ\u0010W6IH;_\r=RFH\u000fGOFk\u001copX;\u0010?bbf\u0002&&lA\u0005i1\rꎕL]jx?#a8P\t?0k\u001clCK@R\r*ıs`+36}<Ymwwk;Z+g\u0001&1K3OP$\u0002\u0004l\u001fաʮ\u0019SuSU7\u0005\u001d\u0013T>D_uڠ\u000bGk'06dE\u0003,\u0019{CNߏ>{Q9羦ڴ\t\u0011\u0010\u001f~⛴a\u001e&_t\u001cJy\u000fمiBlvD\u0007\u0003w\u0006\u0000Ñn\u0007\by?.\u001b\u0005f\u0003<J\u001d^B7_5Īl6\u0011\u0016ȑŜ\t?藈j\t4⢀-1\u0006\u0002;\u0003\u0011l\u0003'45'r8\u001dp{p\u000f=r:g\u000eudBqĘ1\"g\u0012\u001b4\u0006\u0007C#n\u0004\u0000\u0005\u001fYKAw\u0007x\u001ca\u001b\u001bq,z\u0006UrJ=\f#<c\u0003\u0007;{5⥉y[H8&x\u0006d3\u001f!56[\u0012\u000b\u000bNe\n9=(ψaSXa`\u0000ʓ'\u001f0NC!5g\u0011vG8\u0011<\u0013[gC޵eB*<\u0002b\u0010\u000e<HVnLT3%s/f\n\u0018\u0000w#\u000e13Q|2ZHgo\u0016'+w8F 4wn$\u001a_\u0010\u0005\u000bx\u0018\u0006)&J\b8?>\u0012\u001f{ć!N֒T#G\u0012\u0011C8\u000f\u0007`.<l; g\u0001p<Z[(p\"1\u0018@8\u0001K߱Y\u000f\\ƌguSwi\u001b%\u0016f\u0012)ք [O\u0006\u0000r3\u0013\f~I 웁9&>I#)!b#}\u0003~\u0014&4\u000f|7\b\u0010Xŧ6S\u001a@\\\u00167ė\u0000\u000f5%g\tA:\u001b/K;e\u0014m=*;o~\n\u001aTʮy`\f\f\u001e'sр\u0010\u0010We|\"9Czl5p#\u0019Q1\u0019|)[\u000e\u0000u,3ș\b\u000f\u001b\rs\u0016N6*w*2;z\u0004l\u001ca\u0001r#\u000fE\u001c9|(7\u0018\u0017g\u0001w\u0004.#cw\u000e;QGӺW+ȆdE]\u000fL\u0019Mx\u0006)\u001d\u00187\u0012O~9&=\u0003J\u0007\r\u001c\u001e\bkF\u0018\tp\u00056\u000f\fp!E\\u\u0004As >\u0000|\u0018\u001f5\n%몶a=)Y&ɪ7H6m$kvE<,b\u0012mHxaA?a1E6\u0013֌\u001a7\u000b\u0004^x\u0004\u001b[5\u001dl&`r\u001by8ѸPtdͽmDkʐ<7|Zb\\BR6cM\u0012\u001e3,|\u0010lFJ6o\"$KPyH$?\u00122\u0014\u001b54W'\u001fM\u0018+\u0003\u001f\u0003\u0019s\u0010C\u0018[\u00144d+/~\"`Nu\"L\u0017֣.\u0018\u0001Τ#\u0000{\";t\u0003YvR\u000f8jb6QA\u000fEt'f2ģAoC\fE\u001etyZ\u001c\u0006Ӛܜl['~`B&΂uBg'9\u0003)U\u0007ϐoid+F6Ϡ.\u0003?\u0014s\u0001\\%″a\r\u0010\u001f͞\fV\u001e3\u0015Oh\u0019ͅS`U`0ޅ0do4gg\u0001\u00119K'sS\r;^\u0011\u001fV_M\u0015\u0013U3l[G4v7\u0000\fK\u001f>\u0010Db\f΋\b+\b\u001cGՁ҅t\u0000\u000fs\n\u0019{!\u001f\u0005O&yl!\u001dc3e8\u0019\\8\b\u001f\u0003iŹ_k.YzdzK9㡀;ˉZCCJ&\u000f˚@w0\u0013 \u000bdt\t\u001cL#.\r5YO\u0015]6mþ\t8\u0007\u001cӀWۿ?H\\O\u001f]\u00022#c1\u000e>g\u00163w\u000b\u0018GU-e\nOq\u0001icf\u0013\u0001'\bkQ\u0015xȅ\u0002\u001c2\u0004|mV2^Bm'r/\u00019\u0017Is@Wb=\r[~ޔ)d,kІ\u0004;\u000b9gHp)u\u0011\u000eZZqJc\u0004Kyj`][ug9vϊ.;o\u0004j{lFg\u000fK\u000f\u00123\u0001rH\u0007\u0000\u001dԢMC\u0015#\u001e42c[\u0013mvtS[@p\u001e\"u\t\u001d,sK\u001cF\u001d'\u001dY\u001dx\u0019)>q.o)P0\u001dwd˘K3\u0006\\\u0018\u0007\u0003\u001e@\u0003 }\u000fsE\\nl\u0002\u0017|de=ݰu}d5O%\nPG瑹g`\u001dux!UpN=\u000f0\u001d\u0010\u0000d\u0000rU;5\u000fV\u0000!&\u0001ox=\u001e>\u0000C\u001e\t\t[߱j{?ЎÐ9\u0017a5q2Q\u0010Ѱl\u0007Y\"9\u0005\u000eB!\u001clk\fZx\u0019!@7\u0000.3,'X k-ɿ\u0019 f\u0010ebш;*.\u001bR'u}\u000br\u0000\u001f\u0000\u001cɓ*SGAN\u0002w\u0003\u0005>/c\u001fF`XG\u0018Oh8oj_V^ّ\u000e\u0003sgF\u000eWġƁ\u000f\u000eK\u0019KZHkwNg\u001cYif\u0015'l\u001d[\u001d\u000fduL@P-ɒFL|,&\u0002\u000f#K\u0002F\u0000?Ǣ9Ej\u0012Ee\u0015\"\u001c$d;6۳JjOlA!CJ&P\u0019g\u00171'\u0017>\u001e\u0005\u0012gĘ\u0002e'&`\u0007\">\u0010ߠ\r\\\bx*SpB\u0017~O?XI7v{%L:TځyDѱ%DU)qj\u0011\u001d0\u001d\u0001r-l\"%`+\u0015y\u0006Xk\u001e]V[6v'\u000b8\u001b\u0010K\u0005\u000e4#:\bS\u0017\u0013\u000eVެ@_JM\u0013G\u0002\u00049c.!dB6\u0006y7CxlfXȾ#;yE\r\u001dA8r\u000f\u001c\u0002ylbt]8v\u0004e\"}d1yl1\u001f%Ą\u0000\u0002a F\t\u00154+\u0006:\u0007<\u0004G\u0012=\r,F<z\u001c6>?.\nS`\u0018f\u001f\u00052\u001dd\u000e~ukl|05Ӏ/\n}lB'ƍ\"&-\u0001]\u000bs+k^#?~0P\u0014T[̤\u0012Mo'+*\"ɦgk\u000fגFllrWq?h2(螺8\u0006g\u0001Qy՘ZN BIO\u001f]\u0006|BZuۘߩMx&j<R#\u0019N%\u001f\u001cZ\u0002\u001cNA\\|&Y<N@>^s`䶹\u0004*\u0019-[˹\u0007غ\u0007kp\n+Ce\rW0-\u001d}B?^ \u000f\u00131\u001f!YDm\t{!n݅C.sh\u0011+\u0011`ӑ%YDO\u0003\u0000}\u0000܌jYOgN̦Ѻ\f-@D\u0015M\u0004_\u000b\u0013\u001d\u00035!f [\u000e8޵AX\u0011|O2Y\ra\u0001|\u0011v^\u0013h?vG\u0003 \\5\u0003(B\u001d\u001a)`e\u00149\u001fS\u0000#st!1t8?\b\r\u0010G\u0016\tq*Al\b|\u0014%kr\u0003qm>\u0018\u0005S\"=\u0003\u001c\u0019d\u000f׀:\u00048#|\b/e^\u0004T\u0019\u0003AV1\bi8G+q\u0004\u0018B\n;V\u0006|&LR6a}s@\u0003E2\u0007VLk\u0015a^SǾf\u0013\u001a\u0015\u0014KRYS\u000fd޹dXDȉ'Щ犫&8\u0013_=\u0013r8_⾑\u0004\u0019\u0018\u0010QqPVv^\u0017MR@\bAN#K\u0019{\u0016>\u0003EX;i\u0012_aZma5qYZ\\\u0019t\u0006m?Wh\b\u0005\r\u0002\u0004\u001dQ>\u0019>8\u0010\u001bH?115 \t1?9\u001c}c#d(m\u000e1Z>D@H\u001c\u0003M\u001die\u000e<YM憰t\\6w\u0000p\u0007\u00134\u001df8\u001e{c\u001c\u00151C\u0010\"_\"\u0011{}/5m|7r.'XϠ 6( {\u0005\u001ee~\rs\u000b1kS\u0011h\r\u001f\u0013/\u001c_'~!\"݋cÂC8\u000eI\u001dh\bz\u000e5\u001fA6q>C+\u0011x\f\u000bN\u0019Gt)UUT\u000b3YSr:<&(w\u001c\u001d=\u001c\u0019殍\fش\t]}\u00107\u0000\u0005\u0002m\u0002SYÃW\u0014-k\u0002:\u000fO9\u0003=\u0004-\u0004\u0006adFds\u001aYkjRI;fщ۵!\n|=L\u0005]Fk\u0003ocw\u0001Ċe\u000f%jnn\u0000ن\u001e/X¤\u0010_8/4 \u001f,b@(0e\u0002r\u00128W\u0012|\u0010Τ\u001dXFNc\u0003qSW\\\u001c\u0007*Fp?\u0010b\u001aӁ\u000bs\u0019;\u0017bۏGt{[2\u001cu8-E\u0001?MSo\u0001%k\u001bou\u0019˼daeK\u001d?kA\u0015\\#\u001aZ\u0004j ^ft,b\u0005܁eyʩBUAT!\u0007)R1Qu\u001f9[A!O&+K\u0001`'~l1\u0014\u0015\u001ds،\u000bc_W0f\u0005\u001c\u0016V4\u0019pܑ\u0018\u0007_\u0018K\u0017f\u0005ʫ\u001e\u00026\u0012\u0007ɆG+[ߒŧp\f\u0005;{\\\u0013\u0010\u001dg0\u000b'dψ?\u0015\fq;e\u0014\u001fZ0\tlޡeO\n\u00137\u0013WȊ+TQ\u001dD\u0015!\u001bފl\u0018\"\r9L恅m6w-R[k(\u000ebRd\u0015]/vSw+z\u0003Q\u001dKkFDo2\u0002=\fqTď\r&\u0003\u0007l\u000eqx1]x|\u00196>]M j}C̆;\u0010n^!M4\\E4^A\u00156q\u0004\b9T5}2t\u0002\u0015Q;N\u0015l\u0015ܽm\u0016\u001ba_\u0017p\u0010y\u0002\u001e\u0006A\u000em\u0003R.ZxJܞ\\YC\u0006qwdۗdG\u001181G\u001em:ql*BY\u0019/`ְI±DT\u00142~,Y\u001d}\u001bȽZe?\u0012\u0017!.}F\u001e{O;?o~^C|XKe͝v/>~NqTtōomR=#_\u0002箢1#\u000e D3:tCjǄ]=v[=]\u001d+rA>0o<\u00061JwaC^\u0006Q;$Ƙs\"lOLD5[K?[\u0005q\u00135zg9ܷV\u000eKy'$Z\u0005B@b\rx+\u0019o\u0011|у\u000bAW:e\\2양*{\u0015ҽm6gZ:7=dOg\u0004\r<7 ' D\u0015;B|cFbt2ԡ\u00172릷?H~#km\u001du\r{?}ϓ;L\u001dyJ1\u0007]\u001f찡\u000ftK\u0003أ]\u0014Qp[(#4ji9y%͟p=\u0007,ꐑ-o6J[\u0004\u0002foE]7ja<e\u0003Top>Lj<w\u000e>\u0012x7Y߳\u0003\u0007\u000f\u001d_֑Wu\u000b̳K\u0001oS5V%`1l0A\u0011PCn\u0019\u0017yc\u000bFAQ!4kA&%K>6ۢ걮3\u0012\u0017~eWnG^Iz뿷Y'\u001cɼ~F~&񥯼󀱓߻fνu\"O}`39\u0013\u000fG6\u001e˛;|\rTC\u001a{y%O/ꞮvXxLuֱY\u0002WMGMO\u0019g2)yCfH~8\u001dGjssj{K3>gocO?vf?sbw?'\u000f'J_<\u000f=(4C\u001fe\u0007JdI\u001c`I\u001f|N^Y'zYp\u000f\u001fp=ӟ=|wV\n9*G\u001dK1ruLS32mA6wv\u0010\u0019c\u001dؽ\u0002t\u001f݄_]rYȚ^,Ye\u001ar绍W[d\u0007>l&}B\u001cdN|/ϼEz5M\u0017߸^ncw<`=s{{9K+1[\u001fe/[e~\"KWe+;\u000by\u001ay\u0010i{F\u001b^\u0007rjg\u0016Fx6\u0001\u0002lW\u0010>\"♣y:\u001amouV[mT\u000fԐdX嫡|Cmoܾ,w>!\u001e3V\u0019yr1\u0015^6N?4,i\u0004\u001ftOC/l\u001aZ\u00057\rئ\u0017\u001b׫~^)~ojj̪]Br/e\u001d?{\u0013=?R>%~?sxs\n\\,yߓ<ۗwK\\\u001f?HFȑ?ڍ$\\~ӏ=\u000ft\u001d¥P\u00137}\u000f֟Jk~~i-?B{+#*\u001f\u000f|LkV,;\u001eJ?pP\u000e|lz\u0006Yh[O\u001ev۲\u001f;=\u0007Yvg)y̗ʍ:VNxG3gӗQ>;W;S_RP~r%ÑW\u001b酟\u0019g;+\u001fٝt\fH\u000b;\u001b)qk`=PHs;mG\u001fd-}֧\u0013A3\u0007z)r+Krw\u00163;eǜyfGLv\u0016z3\u0019q+8NN^őڇOzM\u0011@=#}c(MĹ,qTv❔9Ð\u001d'\u0014Ҟ~\u001f~' I_8[Gbd!\u0011SAL\u0013rK>ʪV9W\u0005;<\u001fW?ZGXbn^@Zm⭑u߰\u001f7[{evWܹ\u001eDK#s\u001d\u001enm{nʎ끧oDЈ1CZa,=۟bϷrs/2_e0;3_ޥQ\u001f%q\u001f=m+i*KSUt7¥o_\u0019qܻ<\u0017G*m_*ϻG}h<}\u001f?:\u0017>:J[[%k?c{nd\u001bs3y#A~qBm{orwz\"\u001f{<ٛO\u000fѶS[=G>G>ܥ.?B\u0013m'H\u001e{orW\u001e\"gc\u001b#s*;\u000eZw')WwW]̻tuW6E_ۿ;IJ\u0014|?\u00178:^}%#/S{ޚ\n\u0017\u0011ݟ6A\u001b{½ >\u001d6#6\u0007\u00138\u000b+^?N=ueO>\u001dm\u0007+\n_S'H8ytW׋^\u001c|*w\u0017*\u000f\u000f3)읎P;[S_ak\u000eoϗ?WT\u0015*QU_W}Ӷ2\u000fo\u001d{X\u001d\u0016p\u0005ؖYDË\u000fffvIβhdD]bZK%vd9)wXδwGHfHJ䳳\u001c\"\u0006o1\u001a\u001bKc{e\u0005vm{\fk\u001ee\u001eE Ǘ2\u0017ӻ-,\u0019yWǳ\n$s\u001552og\f:>Tjr!j%KLݎ+=t;t2r\u001eɭ㫣U\u001fq{\u001d^^(:?Y\u001dL^Z[*<r\u001blOw\u0004\\e-FwkUqR_)LU.OUۼm/bz;\u0013OҷQʿlϦnyJ|>\u000f\u000b\u0004u\u0007uiW\u00178\u0013؇w\"-myC}\u000f[\u000fsKRx/~bUvGzMbG^m@OCӫ#\u0015\u000b2e>vx}Կ2w'\u001f?VS{~6>Evz&b:>`W&ls\u000f\u001evlZ\u001eKgft\u001f\u001bFO\u000bO=mI܏aNm2YկJn-(\u001fItyqjyߝ\u001cEG;A]ɏr\u001eַW<i{o\u0005ؽQ\u0012YА$3=#hbi2˲oefO/\u000byRQb͛${o\u0007;L\u0007Ӈ0;J\u001f!==짮La//<{vUYٳ{IҎ\u001eZŖ̛^\u0019Z\r{iж77\u001c^/zDR7_zQ\"5w[P^lftș\u001bl;t}vRgGj\u0003GtT<*zW ^\\ɁGQŗ\u001e\u0016\nλ\u001e^x~D\u0007\u000fC=\b+};؝;w2*}:*l_g?tdٿ:U\"{_֧#cM\u001d՚:eOmcv~\u001a~Y|IR%;}A\\eo\nE\u0012Q\u0001^\u0001M\u0002Lۅo\u001fP/Zv慌!ﾕƿoϷ}$#>Izc@O\u000eg3\u001c_pyuվIeڣJ?\n+\u0019Zp+*zqXGa\u0005g#u l{\te)\u000f+/g,\no/ٿ9厽\u001f~e]}3Ѷz._iۇղwn)w#+lG\u001ac\u001f4=^\\z.w3'ҝ?Ne\u0006l^GR/O\u001d^\u001f-\u000b.y\u0014WY(֧+{\u001cw:;&IVeգQE9 $\u000bw#Kߌ<s3혒;Inwz)gGPHX\u001b%7S\\ge,OWP\u0019^PYw3\"^V-MV]n.H?ͨRzRYR$_uu\u0005г\u0011\u001f>nֿ-Ҟ|oϮ\u00039r\u001eyr^8sn@⣂\u0016'\\x\u0010Qat{qŇ:\"w\u00166vF;>XA:M?XXۋ+\u001fWTN,mT\u001aI}ߓr\u0012yϔo\u0017]9|L\u000embh}ԯѻmoϕ:9S|z.{0\u0004\\eNX>wLx\u0018w2INǗR/o֬SՍ3[?Xh;+\u000b\u0012+\u001e&9Wb-/m667gS[>[g@dd?l6vϷ8ҿO\u0007fO\fC\u000fK\u001bJնM\fl_?ftяG\u001fo;:bۋk\u001fT콒XvZlq*V+}ъƬǙq\u001dE\u001eZ+J%]Hw+rz}Y[UPOeeœʔY5LOD߯\u0011V^ߺG\u0005S6횾fJy?MUt3\u0004ٽ\u0013JRd\u0017{v7\u0017;)H\t.~vDvܙq}~:anq%\u0017nE\u0015\u001f\u001a_vZ<bKH*w|lE`_3gU\u0011SrfTa\u001bY\u001f\u000e>בKzU!ǧ؍V\u0007:W3zwHΈ\u0011y)ows\u001ed=x߂6_5*oz\u0017\u001f5\u0001j[s\u0012Uf\u0012o~\u0018\u0019\u0018|/hD\\\\\u0016=hm䩱k[{눟),~!lIEW2*/e5]I*)]wWk%MͫE.\u000eV\"\\T]p'ZJ[\te\u0010n(\\\t8Ϻ_6.\u0015n\u001fWv\u00013]\u0007\u0016\u001cx\u001eZD3}ˮφ%cVob%kKfkL̒LL|>EC,bd*VT[/OP;R2ot4TtTHI1j_HhhK\u000f'\u001eT2{d\u0012C\u000b\u001fɪ\u00137vK{?#}_ĵ~\u0007O>}7Jڮ%U\\\u0016]tft;\u0011oD\u0017K(/R 6A~MݵxN\u0013JnV\u0014J+t\u0010Ȯ'yh\rU.|îߗn3,y̖C66ƣ24;Yy+\\%sIfOJ=i\u000ez\u0011a\u0012-\u0019~, V(3^[Rm#VV^Vټ?Ͼ}t}Ld_pgWڞSU}-rR%H/\\I.;y3[QE;n&\"}\\rjlɏWb܊.jPVz?'(O~Pk\u001bNq\\ oVKӖ,zd䝓\u0012[&u\rW;K[2F2J2T2D)4{$jʟ5P\bZ'u6\u00029rDG|Kd9пyw=|vI٬Ғ\u0019%3JoV^I+~%tC\u0012J]+9v9hm\u001e\u0019Wrzl;E\u000f_2d~\u001c\u001f[^q\u0007\u0005ݱ\u001b^oM`\u0002$ó\rAO\u0002f8\u000e?56p%HɐAcQjO\u0013%S.,5tIid\u0001ٍ1HG9rz{wW]J*r9ZbiۍRc_.L[iTAݼ*\u0013Wc\u000fވ-\\7{WfLW^Ub{)q%#&w\u00180zB~$z\tHơAz?7\b\u001ei&\u0007\u000fɊ̧\u0013_C\u000b&EA}b]e!\u001d*.^DX\u0016$aմ2ǣ\u0017.\\\u0006Λ1}wO7PNiw\u001eֿmտNh\u000fQM9\"MM\u001a2W2{Vu!\u001fG}տ|7\"v]^̲ͅ\u0003?&\u001cWvRBũUGnĖ\u001c_~BBK72J?;,lD%*A\u0010\u0001E1`@\f(:\u0002\u0019D2\"IrFJU\u0004mhl\u001bQnnSN7tߙygyS\u0002UTq+S׶mݣ۴${EryrΑU\u0016.GU'\u0010\u001b\"{mN5by\fc_\u001fG8T!s?\u001dUdd1\u0013!U1hyH#\u0007㷹!}^3|zeKP\u000f'>k\fJ{5W௛7F\u001cno\u001449\u0019cnF]׃ǚp~!sN\u001bgi6ܫ?\u001f\u001f}|m5əgH\u001b@FG\u001dAj\u001fU?Kм1qA\rJ[wʌ%\u0019hma\u0017vܸ\\\u0010_GW\u000bv<\u001do嶞RЊ\u001dWZ|?($=#2;8ncxM5'8&\u001aڣs$hS\u001aZ*RY[i22-g*Z\u000e-m={ʥ\u001d.\u0015\\ra\u0005ͽKro76ãh\u0019;M\u000fn\u0019QΟ}\u001ccP?]SiWu?\u0003h%b\u0011I8OCF\u001a\u0004H_\u001a\u0019h-@Mмu\u0005q\u0005\rKJ;ͥ<4x\u00001v]쇑gkcl>48|\u00174={޸\u001fל\u0019\u001a[UFx3{\u001cMV\\\u001b_|%Gq\u0012\u001cYhR4\u0011\u0019@\u001c2d\b\u0019C:\u000b!|\u00183qF3#=jnJ\u001b+et䓃5qwwAnvLi\u000e\u001c^|U<Rί\u0015V[;)\u0018xs?ٝ\u001d##y]PwV.\u000fA\u0002T\n\u0019&\b\u001fOUsKI6h\u0002deu\u0016nh\r<\u0012Ge\u0019ߧ;\u0003aw\u0017U6Eyǵ.\u0017py.UAk\u0005͗?=w-\u0005oQR<},M\u0011ĳxG>~?\u0011_GS\u0019h\nNF\u001eYEܑ\u0010YL!25wG{#9,Cr9]Qɾ9p-_mm>y\tf-mKp\nǡK8؍\u001b\u000foj^3>&_+cZ/uıu|\\'\u0013ϠN\u001fccPd#\u0013$L\u0006\u0019!k,[9\"\u001eͰď\u0018d>Oghl\nM&@Lє)^5;Q+Z@\u001bg[eDؓ#剷jv|Q|˒G\u0017w\\T\u0003\u000bWs~4\u000fr\u00019oJ5@r\t\u001fǱ\u0007co5=\u000124C:<dj\u0010\u0016p525Z֒c\tF\u001624.\u000e@GVn{mtLir]<\u0007eTá\nA<[~Ra#|4\u001c1wz_>2kz\u00075{msX\u0011~\u0010\fU͐\u001a2cXm\u001a~n\u001ap\u0002~\u0018Ft\u0017c[L̖ct6\u0019,\tF\u0013t\\4+\n:\\\u001b-\u000e;z_&\u001bQ.f\\OOܳ䫆ʯj\u001ao.>\u00137ZN\u00187r=Hn۹/Gs/~ߚrrل)ucHefL5c\u0018?#k\u0016T\u0006C|tߴG&kѴ\u0019\u0014^\u001af@3=\n,\u00024m]&tߌg!\u001bQ#Z\u0014Sueŋ\tNs\u0005_mSS|\u0013[~YBŋ\u0005-P3lUѾIge\\'<M!?+w:eff/rukA:e:V[#S\u0019O\u00169ئ\u0011gjo:ctc߈\u001f\u0013!\u0013c}m\bZ\u0018/E3䣙\u0001hO5<P@gA\fJ'\u0007ɿ>Sp[gJF\u0017<vb~9ͬӃwϲznY\u0018wҌ5\u001bˁ?|X.\u000e\u001ek\u001aTd:\\+SKWlh\néKh\"\u0016\u0000d>\u0007NqF=`4\u0011\u001a$ڲ\u001cfFKG\u000e|2jUC\u0016;\\\u001ah볻;aNϏ\u000fj4\u0017撚+\u0005V+Oqcه\\d5\u0019M̦b_\u000eLc\u0003xfa\u001aOY,M\f\u0001à\u0019K{!Z(Ev돫.)5~q3mǓʩrYR YV\u0013e\u0017\u001a\u001am}tS\u0017Z#\nT\u0004\u001e_C_\u0014\u0005RyTurTox\\cMd%I\u0005\u0011z\n2d\u0002dőhG\u0006\u0010f\u0015\u0019 K/\rm\u0003bRd1e\u0005)\u0005h\u0002\u0006M_$E\u001aiGP[RJw)\\Q\u0004|PF\n(cߖF=;P\u001fp5ۣqO}ak{ӡ\u001d!_o.xwoG3:4{Uҋc$ǣGbDdJ\u000euWA_\u001akX\u001c\u0002GSd\u0001\u000f+do̦\"u8?N:5{}|rI=7slzcbk\u0005tW\u001cq\\\u0007J?)R&?]-\u000by'MPAM\u000eI]/\u0017|y-qfv\u001b9G~z\b|\u00046>rOȌMǙ#\u000bh|_d뙄lL4'\u001e-9n[qEsI\r%WۥR=g*\u001e.˽6~yq%z.'.\u000fWZ;>3q\u001dV|}TJ*y\u0007ezڽFY9N}\u0011\"o\u0017\u0004z\u001a}OyO\u0012A)4\u00159k\u0007T%\f$S\u000fOvB&ܑ\u0010qIB\u000b2*Gv:4fC}CJug\\rG\u0012ߪ\u0006ˣ\u0007U^Ѭ2nƚ\u0011\u0015ύ~p;\\\u0013/?+E}H~ZiF\r}w!\u0014闿\u000f\u001e \u001937\u0013p\fᏽ+Nދ]z\f\u0002*\u0003djjs܃\u0010\u0018i\\\tj%B\u0007#kX4#\u0013يJ\u0002Mhh4ߞFs\u0016#\u001b\u001b\u000f`9S*+RN[Kty\f\f~5/\u001f%CoYϕ_\u0016^Oi?\u0014\nn*\u0019Ѩ2D}\u0002A\u000eͽ7_>\"j\f\r\\r\rܷ/Jn\u001a\u001dټdյ\u0019V\u0005T\r\u001ex4ҙ͗YK\u0003\u00128@t\u000eZ\u0015ۥ<~S\u000f\u001b:]@e4+(۽LO3\u0002RRR2\u0012`K\u0016qZ~>[W\bN\u0016P\u00062\u0015ļ\u0011P{ʓ\u000fu\u0005\b\u0011\u001b\u001e֟Y,\u001b~DȄZ汩KgUN6}|ݦ:ٶbnA\u000eq5VT~ث4ŶG%\u0017eo\b_2JG[ʥ)\\iV~chQSFsE0mCT\u0019\"zL=[˽ZoP:\u0005\u0004Ũ:/]|<\u0011Q:F\u0013p~4k,ހ?n/}\u0010='S|`8k7f܂%Bd7\u0005m<\u000bX\u0013le<\u000fV]]\bۏd\nU\tL\f21\u0005\u000fT-%wC/|\fWf\u0005~\u0015Rr\u0001g^¦Öţ`~_ A!z\u001b}☕hǃeЏ^\u001f8qTݙ\u0005T̑d[WC\u001e]O}\u001bupc\u001bF\u001dؚOِݪ\u0011(ū_f&Dq\u001d\fM3C\u0001u-uW\u001fwx\u0012xS*=c\u0015קWp҃}z;+}\u000f\u0014K޾\u001cpY)\u0010T6\n\u0012֫\u000b6n\u0014\u001c_?)<\u0011\u001f-\fu޿-I՗fi\r\u000fWG?ξ\f>\u0018I\u000b~d/+Wz\u000foB?Q:mܣ3}ZRgfc\u0002;\tZU8瞝vGR\u001122\bk\u0010]__>\u0014ay`'Zr1\nHL\b<KZ~=o?/\u0014*y?,`Ip^\u0019\u0010jly_|R\r\u001c7f$\u000eJV\r J\u0011Ft@ג|K4i\u000f$\t[t\u00023:\fuW'f$Ftv&6y) A+\u0014*N-Mq>\\H/Jo_\u0016s}T\u0019l#=/a\u001eM\u0012A!^I|Y>wm싼\u001dW\"V\"X.\u001c\u0017wOa5;Qz>AK..`\u0015K-uLJ{*gs#\u0006\u001f2nf\u0006\\-Uy\u0010\u001fZ\u000f\u0010QߺQ7Miօmzd7&\u0013碩\\\u0002D:8ϔW2\\\u000fst>k%/\f?wG\\\ro`*F`Q1Ya֛k\u0013\u0001~\"0}\nriVc\u0014 \u000f70_qK锪\td[?&:&W\t\u0004-Y;ڃ?{*c$4W7>\u000f\u0011̣7o\u001eJu[o\u001a\u001aP[~{4cy^xk϶̇E\u0016'^\u000eGm\u0017\t\u0007~Z!8t\u000f\u001cmm`ZNj\nZbn$^(4>I;rs)'\u0016x'whh?G#\u0017wIْ*Cnl\u0013\u0001YyCͦ7\u000fLjR5$\u001aekAIA\u0017\u001fQg޳\u001bD'g\t?,\u000fzȧฉ,_u\u0002Ʊyuhs\b\u000fWqvrE8~=\u000f\u0018y4k\u0007\u00142\t>4=Rxp`{GqٹTVd:͈dY0Uz^}Z$J$D2yD\u0011\u0014u./\u0016_Z\"qɞn|dǅe7ї\u001c<YWs:[cI\u000f!hd0ꠛ\u0017m\u0012\u000e}\u0015Tv uO$gֆ-XEIzVh<\u0007p\u001djH/Ott^?PDK肒\rܧt\u0016u\u0018\u00072TORz\u001e]k:\u0013_\u000bNc\u0003\nXx6\n\u0011=\u0019\ry\u0018y\u0003`;-eTq\u001b\u001cvˑ9ҁg>aw\\#m\u0012`0\u0007\\\u000b%p\u000fȾWxz*p9Kzŝ#K\u001fؠ+_i~}\\)M)2\u0015ǳxWJrwD'A(W|}f֫4/$m7\u0012B\u0010Ѩ:e#\u0015棵\u0000\u0017g\u0014,\u000bS\u000bO3L3\nMʟȪLw\n'\u001f\u0005Sǿ\u0016Q?z^+)﷤\u0003\u0004V\u0017\u000fQ˥\u001f\u001c}'j\u001d]Lo6⳵Iǫ}\u001ee\u000bs\u0005-\u0017\u001eWz\b(\u0002[ߖU{\\R:zS\u0006Y)y\r8\r\u0004g~N['k\u0006%\u0005&x{!\u0017\u0007\u0007#\b@tx&\u000b\u001a\u0011\u0001(4E\u001d\u0005gNsKWN@*gsLل\"]6u*\u001al\u0015a\u0014I/\u001d\u001bzL\u0019}[\fqvCL٩;`\u001dڵ,;Jl\ffSK\u001beS.Eާ=rN\u0019'L;6#eQ2\u000ftX'\f\u000b(\u00184\rBNܑue*$Ib\f\u001f\u000b遧N|mX']DH\u0007h쮇AH\u001fnq\u0015h`Hv>]\u0007c;N٪Oen3dj̓\u0013y\u0000=\b_܊\u001e\"\u001f{\u0018~t\\#z5\u001d|J=H\u0011\u001d#<I~\u000b;\u0007T_+C\u0003^)Cu>\\L\"u\u0004S(G\u0001t5QjDw_)Z|\u001b9-GkX4|g\u0000r^킼\u0003X@#\"L-$9K?ofH\\\r\u0017[@#7/#C?Jr[M]S%\u0003?8I/Z\tպ];/>Ka\u000faH\u001dLm7*1.쵐T\u001c\u0016>\u0017\u001e5p\u0002;F\u0016\tv_\u001e0ʀc8\u0014\u0004]\u001exѿ\u00122\u0013\u0018\tw>\u000elTf$ټc$@G8-_\u001cf٠5#?<\u0006Zz\n#b\u001aïݗG\u001fg\f֛j8a\u0014ts\r^s&\u0013N3j4\u0018\\K_ON(\u0012U<:O.̉\u0019$X_]$)̦R}`\u0003s{oO}X(<\u0014\u0004|t\u000fhy?︩K@4aT\u0003һ'\u0006\u001eSzkN\u000e%²4$Bz3\u001evh\u001dGʉoa\u0004pA*\u0001lh\"XVRԋ\u001bq]|\u0005\u001a\u0010w\\=VL^dd`\u001azA<u5}u&'Pgғݡ/\u0016Iw\r`\\l=3ޙ9\u0017X-'u;\u001c:Θo,$84MPm c\"]ՃWe\tTU?a$PNy]\u00001\bMuT\r:F\u0002C,\u0004P\u00185I2Q\u001a\u0011Ac\u0005\"L\u001ftɅ|R.\fsGd+\u000b\u000b%Y&TӕŢwNt\u0019\u0012bU)l/Ce]rH5\\c-Fᙠ\u001dHx\u0017(8g?\u0007\u001e-p⪃3D%-ٝ$\te:p]|?&\"ǶnBW\u001cMm\u0007\u000èR͚8\u000f\u0011ȑD\u0014[\u001d\u001cgN\rzFDOSZ\u0007v1]Og/Nc\u0014t[ۍZ\u0003zs\u0019=V\u0004}$9NH`|-Ͻ\t.~\u001dE\u001d'\u0016\u001d̓>N*\u0017\u0017*Tǟ\u000bQ\u0011\u0006'A\u0016Go\u001bn_)T\u0018eξ\u000bseLOq\u0014Z`:\u0013כZ \u000f?\u00167k7l\f\fKR\"5ŊMN.h-k;\u0012\u001e\u001bR$B\"U!V\tiڲrC\u00124-J\u001e\u000be\u001e˘\u0006Re\u001d\u0016tFx#'\u001a2\u0006|vSf࡫ԵȰ\u000b~\u0010|f$\u0013zи3\u000eLѹly\u0015]n\u0011S{h.\u0013抆~r\u0012\\\u000bj6\u0014\u0015\">k-Ni7pu*z+rvBp\u0015\u0014Ŗi϶Eh\u0011Z0\u0002\u0007WA\u0005=ӥۏAO|\t[Κ|pH#V\u0011N\bR:QZ`5X^Y+\u001d]si[;?zsŻ\u0001\u0002\\9\u0001\u000btԎ؝oX=dl9j\u001dY\u001ex\u0011|B\u0002ז9*\">1ё*c)-\u00121\u001e\fp\u0012 \u0001G\u0017Os\u0006n\u0014\u001d7NDc\u0011Jol00)ƏK\u000bo\u0019zV\u001cCiQ%LA\u001fp>bd6c[g.̾Wo\u0004܉\u0001g߉OCth\u0013\u0001A-\u000bk/);?\u00115^\u0015\n( Ib̑\fwv}p\u0001LlYkD9\nNn\u0019\u0010Ylg vhբ%\ry\u0005 7/\u001cp~\u0013!\u0000\u0006yy\b\u0010\t\u0012$\u0019\r=\b\u0005zAk\u0011X:L\u0012aCE\u0012~\\\\S73hvS\u0005:L՞ާ\u0001\u0003R]bКo\u0002X\u0007\u0012rs\u0019s{\u00015;'O\t;s\u0017֙U;3\u0007\u0004_\u000fSTsFR3@!ﭣl4axOR\bCթ\rٚ+\u0017; Ѫe.s\u001fb\u0004HІmk#!m\u0016kC\u0007z\"\u0002\u0005\n\u0018Dx\rf\u000f/|GT&ɔ)t?]EK\rA}an0e\u0003ٴjCғ>7_-&URg\u0016\r\u00172e銃3Ż^\u000e\u001f\u001cNHɕr\u001a2Dd5\u0001^U\u0014NT\u0004\u00029X\u00074\u001a\u0007ln9[q̆j}\u001c\u000b4q^1I@'UqTlxЎdK\u000eXKv<^Iz>\\\t8\u0005ɏ\t=+Ύ&\u0017\u001e\u000f\u001f(iű_Л\bk̅D?;sM)\r\u0013%E\u0003\u0016_C\\ \"\u000bhI5`NC \u000bW%:-#KE\u000f\u001c)\u0019.}\u0005+*/l\"\u0014 X\u0016*eb.-JV\u0007\u0006%x\tOӠ3\u001aS\u000b@\u0007t]\u0015i\r&AQZR.\\U\u001e(v\u0002'ƠsL=3kN>U\u0001=At}1sH獳h.ɷx陧}\u0005=-l~d<Ɂ\u000fޤww2qq8Jk4ޭ\f]G7_T\u001eEuˏΐ\u00199;\u0007 c\u001f\u0002'b\u0015\u001e\"Bh~&\u001aLl8L%v&pؖ\u0019ړ\u001fYçL\u0012t6K\u001dB\t\u001fŻ]\u00153댹҃3Ag\u001bY-\u0010'63\u0019׃8\u0017/5k3#Z,-:XT~nCn7ǁ<\u0007AJ>K\u0013Ao<>b!X\u001bH\u0004\u00103\u0015_ux\u0011\u000f*>Γ\u000b5]l\rlv\u0007\u0002f+h\u00106aM\r\u0006_Kؓ/9w̶\u001c\rIWKCo\u00034__B$ň>\u001a!{+\u001cA;R,c-4Nڼ\b\u0006$/MWRQ}<y\\\u0007y ?_\u001eq)\u0013-\u00033@+\u001eϥ\th\fX\u001c3^\u001cI]\u0014\u0016\u0006\u000es\u0011X=\t$\u001e}\u0004u@h\\\u0017O\u0003QcRqx<:2-'\u0017V]#|C\u000f-Of\u001dwf^o\u0003S_\u0007we)_R<R\u0002!\u0017fp\u001fK2-صg^\\zo!3wO\u001auX$qUL.ޠ/F\u0015MT\u001c)Im5\\\u0005A\bmndٞل\u00183OHX\u000fL@S\u001eJÃX8~-?p_\f0Lh\u0014~l\"h{wq\u0006m3\u0003\\_Т\u0003f\u0001\u0013ʤr}ǜ)q\u0016\u0017,\u0015Lv\t͘n6\np}̀Inl3tR=\u001a`\u00027p@elF1R\u0003N\u0015L%Z\\_s\u0000\u0018\u000bl&\u0018bSK&\u000bk?\u0013#9\u0018j\u0004Ќ\u0013!Tφ-\u0002'\u0012О\u00016\b$z75S|\u0015\u00190?\u0015uZBB΍-=`\r@\\@M\u0006\f b\fQРs\u0002Dr\t.ِ)\u001bO\u0017\u000eOcۉrdN0\fD~<R5\u001dSAG\u001ct\u0002\u001d``>!X'L?\u001bυ%h\u000f+\u001d\u000eZ2,mMT떡|,|Ryh\u000e|v1a|)\nRt3)!GnDp\u0003\u001e\u0005ѧD˛[B^^^9*\u001dB_>\u0018$M_,\u001aDㆃ5/6wu\u0016W o\\\u0013\u0013I%~#'\nCS}\u0005ao!6,C\u0013/\u0004u\\t#i1:\u0015\u0005\u0012g3\r n?\b=z#?\bt@Sj?9^\u001cI,#Sz\u001a4jS6|M3\nE@ǖ8\u000bu84^\u001d[@#T;Q\u001c}f\u000e\u001b}]Z!\u000fz%Qi\u001a8\u0006J8\u0004:Ʉ\t8V0H\u0010Cc\u000e\u000b\u0018piE\u0013\u0015F\b\u0005\u001cT+\u0001:\u001cÜ4v\u0000;\u0016\u0011ͨ\u001ac1\u0004\u000fI\u0017 ,X6[\ny\u0017w9\u000etr$8Z\n\u001d62\u001d+شVc4N5žPa#3A\fasԊ\t 8\u0016Ǒ\u0000̳\rDg\u0012b\u0004(\u0001B\u001eѡI\u001a/u\t_o\u0006L,a㲵`LǨ\u001cAE\u0012l1`Ɖ\u0018SāV~n)Wk&ׁn\"\u0017{ۉk8hm\u0016/\t¦3_d\u0004\u001fU\u0010mKaJ/C,|\u0016_}\u0000}zPÃ+\u0013\u001c}\u00065&\u0001\u001e\u000b&f\u0002UYm&P#ITVsV uH\u0014!'yKsiCJ\t[(\tQ\u0001MnП\u0006RR4t*\u001dQϨ5f\u000e\u0001\u001f\bMte\u000fxg\f_\u0002]X9ʗ?\">g.҃rt\u0016;'jLO\u0013\u0010pg\u001e\u0018p,MOo\u0011\u0002H8e8\u000f`pL\u00066'\u001d\u0011\u000eW\u000b4\u0004b\u001e11|2Ԓl2\u001eKy\u001d#\u0000\"öD\u0019lh\u0006ѫ=f'9h\u000b\\b\u00134Am?\u001f\ry-\u0013\r|\r#\u0015r3\f%Vs\u001ez,UAz!Kw\\[\u0001c\u0018\u0004\u0014>M\u0005T&+ӑo\u0000V\u0006@\u0018`c0.\\\n!CJze``\u0007ڿ\fH,O3\u0002wYѐ5\u0014[\u00000]q\u0002Z\u0012\u0018\u0001-f\tLz\u0011a\u0018\u0014t[\u000f\u0010=)l<nzv\u0017J{yM]\u0001!3m\u0017W=7\u001e\u000e\br:yj0\u0006JjϏ\u001e9!~244}vELL\u000e@+P\u001aJEfhRp.4\u0005\u001cy\\ehr\f*X5:ސٺ&Zc\u0000:J8i\u0015:`\u0019\u0000\\\u0010 EDlO+G\u0007B\\]Wb&)9GW}ˑy\u0013|\b1&J\u001f\rU_\\{\u0007\bl\u001ex*i<\u0010\u0004yy\t\u00105H5\u0006\u00148\u0001Y\u0011\nzǁ\fPU&\u001a\tٺ\\b\u0016\u0015Ihcu^^-:o\u000e욉L\u0000}0J:rkMHvy\u0005{c5p\u0018\u0005沒\u0001W\u001d^\u0000Zt啲=Dෞr}Ih:᜗!64\u001f\u001b\u001ff/\u0003O\u0016Sޙlt6\u001bM'\u0003tSt|\u0003h\u0001G\r\u0019̥6\u0011\u001bO<|˅܎N|KOyS?yC?Z`!J3jie\b:z\u0001􍙂\u0001KsT\u001e6__w\u0013\u0004\u000f\u0011Iw\u0005D<\u0017J:H-a{]#6\u001dHNs\u001blt\u001c\u0012=\n}`bݏװ|70o\u0001\u0007͔M#q?\u0019-{g\f7<U\u0012ENm0\u0012\u00026Dy\u001bZj\u001d{B\u0001T\nA\u000by\u0004:\u001cV(b\u0011\u001d\u0011\u0001\nYY\u0007@TmHشxù\r-WV-S@GK)';pU/MO%z}\noh\u001f]Ơ(nmsl\b:s7\u0000;\u0011txf\u000bE~\"\u0012j0:\u0014x?p*\bq\u0013@\u001b$\r?eh*jಂ(a+\u0007^k\u0014w_\u001dzB\u0006\u000byVĨ\u0011\r.C7Y\u001d\u001fW\u001dnܾ\u0007Bvtj\u001eh):lB\u000e0\u0015\u0002g'3Ɣ\fOg7ODn\u0004\u001e\u0019\u0013Aޙm\u0012ې\u0015~|V9Ѯ\u001bx*\b5/0`^Õ\u000eN\u0007w=\u00007\u000by{-\u000f\u0007\u0019:5\u0013\ns\"y.kt=[+y}\n\u000f5\\F\r\u00180$~l17,\u001b+\f\u001aH\u001d7V\u0002?b\u000bZw\\>k½*lt[_~\u001b!OT˵\\١Yd|Ț\r\u0010(ݎ}$~q!\\7Jܢ\u000bn \u0001.֫\u000e\"ɈǟOt$\u0019NFy1U@P^}ltlnS4r4݌N{׋b/nJ!B}`q\u001fYT+\u000e\u0014N<\f'j= e\u001b?S\u0012AS\u0014W=U^o\n\u001aVKЃXK\u001b8ނ.>ae\u0019\rW\u001cd;{\u0004u8\u0011wR\"yB`|\u0005\u0000c#]p~3ƴCs\u0003\u000fъ\u0013@\u0007\u0005cZ#\u001eݷ\u0003S}WW\u0011-n){5\u0012\u001czD@\nŹ\u0015\t{\u0011\u001947M//\t\u001e\u0002Gfq4\r{_\"-\u001a.-;0.΁\\\u00014H\u001e<8`[b.^\u0015|`\u001d\u0015]Oe\u0015\u0017@+\"T\u0002\u0010\u0015\u0006\u00060Հ2S=|6Cи[\u0013.|v<UZ\b:p\u000f\t\u0018G!I\u001a\tD2y}\u0000\u0005g\u001dQ\u0003؟5_'\\ns\u000e^,fʎfj\r[yd.뱓Hdؙ3#E>ug\u00162.۱\u0005\u001cܧc\u000b-a^\u000f\b\u0007\u000e\u001bpO};\"\u000e*ELd\u0006EJ6\u0000V\n̿\u0013At\u0016;YJ\u0004\u0006AX\u0005]nﮧt\b4o|$8\u0001vbmqX:e%\\Q\u0005=nyB<@\u0007\u0018'DS64M#\u0005DSyL\u001e\u0001V6\u00118Q<\u0007\na\u001b'\u0013naAՓ\"?\u000f-ni\u000bOkQrG_0`3>nB4ij\f\\ ]y`\u000ea\u001f̓\u001f~\"\fH}\u0018MY8f\u0013Pv\u0014`gIᄝ%'vd\u0007W\u000fV\u001fEr1vV)a\u0005\u0010MJ\u001e)\b\u001b\u000eL\u0005g?YGn|37bx8U\t-`{dj\\;\tiiQ4'.*O\u001e\u0007|yy}7\u0007p\u000f(x\rW!\u0016`W\r> \f\u001aOKﺃ.\u00134\u001e'p#Tҝ7\u001ec.˗~(`k\u000e%y(=N7$5\u00160-\\(b:h\u001d8/.(k\u000e $b\u0002\u0013Q\u0016*\\hsO\u0004.\u0012\u0000\u000f:<ES\u001a&\u0018ϥ\u0013vV)>\u0002=Ya\u0005hʳpbcKuD8\u000fw \u000bWeo\u0005qaq\u001a*mn\u0000{6$|<\u001cȜHJ\u0004*z:@ӛ^]F4<\u0012'\u0002.(nl\rxq\u0005\u0007ZܕCs%}O\u000092bq\u0014_Giq\u0013PǨ#љ\u00053\\~\u001e\u0005ZXFq3\tC\u0011\u000b(YB\u0018;\u0017\u00074`g)P\u0000<qn\u000b8$KΚ\f,W\u0007;+\"{\"ghx\f3ÿPp:\u0010bV1p,\u0005M/ƾ\u0010_Wit\u000eﺳ8\u001eN\u0018{s,A\u001aM^n :0;{'d\u0000R7<ާ;\u0005t\u0015'a\u000b)4`hrvXH\u000b\u0006I5aNBa8nS!xf\u0005P*\u0002:XE\u0002\u001c|\u0015YS \u0001ۏ\u000e߬)fUD\")vN8\u001bK&\u0010\u0016{Z,RV7k1<\u001bp`~Q\u001e`\u0000\\+A~^%d*\u0012\u001f0G\u00041Q\u0010@\u0001\"\u001c_\"U!>#2ˣ\u0019Z҈MࣁMySd\u0005m?لL-w-z\u0001\u0018?D~S!2c?0OtA<l+\u0001ko`\u0014ZC\u0006&͸ΐ\u001c4:_[\u0016\u0003F\b\u001b:̷\u0010o^%i\u0004*,Ap$1\u000fvV]\u0017\u0017̥΂x+ݴ\bϪ6\u0006^\u0019\fY\n\\\u0007ǪC|QNS5a삆lc!@sEmS\tls\"g\u0019!va\b{\u000b?(m\t\u001fPJ{f6aAtakPy\u001a\u0013}\u00063an98փ\u001f^\u0000:\u00056\u001ey?0\u0007a/ݺk\u0018w=Y\u001dX\u001f@OHGHE@\b\u0001b\u0019\u0002&6}\u0006[wq1|B^0\u00041/@\u0018E<DQc:pС.'lS;\u0007l``\u0002\r{XS\u00005+{oR\u0003;+\u0000JrAΒ0\u001cbm\u001c\u0013agy㿇\u001f~o2\u0016M\f\t.\u0003F#\u001fɆ'hHq\u0004v\u0017|L` \u0002C̝\u0003׬st-y}\r]&>+`T!χ\u001cS67\u0013n:Cl!rw\u00141\u00026ηF\\\u0014M\u0016|Fl\\W\u000e\u0007oK\u0014{K\u000biN@Y߾w6q\u000e,5_\u0018\u0004U.%hu\u00136=%\u0007~2Yfg%J\u001d\u0004EQ,-e8o\u0017;,A\u001b\u001b\u0000\u000bLVg9\u0015qG\u0007oPp\u0015RA@?c\u0003\u001a8/\u00199=Sϥ4._ɢ7\u00034͌n\u001d~+y\nTp\u001a/\u0003j5R'm\u001aOyK5yD8\u0000!ĊPU~s1#B\r>\u00170;M'Ռl\u001e*!A\u0012\u00046\u001bqr\r|I^6\u000fd\u000b3\b\u000f[Q;:\u0011v\u0016hfhJڤ \u000bue)\u0013Œ\u0010\u0015wmýRyVdY\u0005A%3R\bߚY͓\u001e{UG+q\b4D\u001ex\u0005M8߼\u001d^3!\u000e\u001dV=L׵t'sa>2=Vp\\\\\u0017K@K\u001e=*.\u0000.l\u0000eAiFlXbC6,!\u0007p-;Ɨ\u001ccg1u-tY A0\u0012\u000btqt\r*h\u001f,_\u0002\u0000+m%9`++nN{a\u0015}|i×\u000b])MՅb0aD^m6X2Ҟpc:w!vHUsl|yfhuo\u0001k?v?p5r\u001dX\u0005u6M\u0019\u0013sl!a+\n>k@r\u0011\u0005-bcl$(\\\u0015b'A?׃EP\u00156l<\\\u001f[y<\u0001m;4_ ý9s\u0010\u000b)yP\u001c\"5?8@.\u0005qL5H\u001c\bg\u0017<q\u0006`t_2hl?\t\u000ePs1'\u0017\u0001@<:,!\u0004u\u0010 >j'ŵ*0p`~s)\\c8ơ1\u0014S~<0Qs\t\u000fkº\u0013`\u0001}A\u00050|\u0003\u000e\u0010\"J\u0015\nか\u0002\u001f\u001dM`dX4\u0004u!wx\u000eO\t\u0018J8%=\u0013>\\\u0013&!G\u001bK1\r_.ۮ/\u0007v|1#\tYs+3\u0000-k9KY\n*l\u0002;x7m\u0002b\u0004o1_nIrM\u00020zڞ];/NX󥃳dqW\u0010-sI)3P\u0000\u0018~\u0015C6\\3{ǝ\u001dYCU{l>\u0001'Y剅63&2N?\u001f4dѐ\u0017NTk,RkT\u001e]w\\[˷\\v<I \nA\"U\u000bIׄ9\u001fYR>pPe1\u0019JckPm!al3\\P\u0010\u0012lی\u001c\u0001\b捁G\u0003\u001a$\u0007#lmyn\u0005-\u0001=&dhȚ\u0005{˄\\m>)_\u00170$>8\u001fg\u0010{|\u001e\u001bN}e簭\u001caNDZ?\u0003\u0010Y-\u0004\u0015Q\u0017Z-YM\\//#j@gTM\"\ff|m \u000fq5\u001ac\u0003yQi\u0015=\u0013G\u001e\u0002Ӑ\u001d~$\u001f\u001eU}w\\xuGp0j\u001b\u0010\u0017p \u000f+%\tb\u001b.%u[a\u0005_wb1㒮+~DfjJpϦw\u0000+MZŉ><qJ\u0003ۈ1v0eŻ>o*\u0003\u0005C]g\u000eWwĖm?ml%x,dΪzh.|\u0006aÕa\u000fr\u0001ۀ;([k\u0007o|\u0011GXc\u0007eU'\u0016u\u0019\u0013\u0003!'n<~*1H@f\u000ba\u0017r,ǀY֍\u001b/-;0\u001c\r&b\u0006U\u0006Ԅa]8`\u0005-\u0016\u000fظVHpn(Fb\u00021 ?bZZ\u0006\u0012\u001c'*tK5`\u0012a\u0012UZHX\u0006\u0011`ʑ>\u0007\\\\\u0014\u001b\u0015\u0001-8ؚ\\>h6:W'\u0003G\u0019K\u000e!|\u0014r\u0017TӀ\u0006sKם{Vy\bs`\u0017'J\u0002\u000e\npMrK2\u0006g˫>\u0005'\u001a曀U1\u0015>/\u000b,-64YCV?\t^\u0006\u000f>Jw=\u0012\b\u0007\u0010\bw\"\u001aZٖ=s\b\u001c8#9k\u0010|\u001c\u0018XlTep\u00177^\u0012\u001d\u0012\u0003?\u000f4Ā)9S]V\u0010teTI;8?Yz^,S\u0005~\u0005aB|^Y\u0017aCAp8$1\u0002{f\rs\\,|BaP&*{\u001c7=cw?\u0002\u0006 \r;nf/\u0000\u001cf{\u001eZOG\f[&\u0012\u001f%\u0004\u0013\u000b q\u000f殠\f>ܛ\u000eP\u0017b,|>\u0013\u0001k2`.\u001c8ElF\r(h2\u0019*pLpoܠsZ)7b{یx/V\u000bsp\u000f\u0012rFir>ab\u0018\r9\u0012웼lhra'+?2h\u0004k\"ظ\\mi\u0006p,\u0002qR\n,\u001c\u001d\u001b\\\u0006#\u000f\u0002\u0016Z'CM#\u000b\f2\u001d|p^\u001a(\u0001\u0013\u0016OuG`\u0017{H\u0007*[ȁ\u0001Aw?]K︻\n|\n\u0012UX-Y\u001881pR+\f\u0013k5@\u0015m2\u0002\u0018~\u0006\u0004徻k$]7VM疐{:8v1670'\u0001a>\u0002\u000eg7\u001dSa\u001d\u0001uN|L*,CC\"ߨ\u0006\u0004p \u0000&\u001c\u001dǙ&S\u001e<3KVdN5\u001d_v__5wLX۠BǱd\u0015q\u0001>ܯe\u000ec+\u001d﷡9R헗S\u0017\u0017\u0002>&\u001b%ݲs\u0016\u001a=3\r8\u00152ZLU(\u00056G؇\u001e\u000f6k.]\u0006\u0005xSL\u001dvc4ڈ/>˂ᚉ\u001b}p/-\u0015@1 \u0004]8'V\u000e,\u0017El\u001b\u0018IZ\u001e>>[[\u00062W\u0005 ْ\u000eX\r\u0018W\u001fpXj\u00023o#\t7}S!Ys\u0004,m8\u00198\u000fWSF\u0013`:\u00130W n\u0019>9\u0015FD|\t\u0015Lp\u001e\nc~b\u001f\u0001\u00148¹\u0002V,̳1&M\b\u0019O /\u0002\u001b5Rp\u001d!'d:\\Ixb\u000f\u00050<yz\u0001Ws\"Iw>>:&\u001d۰\fóEGxep.\u0018$`&\u0001öz}3a+p\u0013A\b\u0005a|\u001c\u0001[W$.U\u001f%Lp|֞\u0019N+v[NͧOe\u001b!#\u0006^:o8x\"D\r^+\u0000n\u001bn/]\u000e\u0013\t!k7\u000b8=8\u000e%\u0011؃\tdɸ>n}>mOۧi}>mOۧi}>mOۧi}>mOۧi}>mOۧiy5=>-$%DOӞ,\b?#\n٘\u0012\u001d\nsNNq\u000eKN\u000fIΰr$ϱ~_HFDrТAsVY8{/^\u0014߁_k\u0000~w%VvX+\u000f¯[\tⰐ؈\nӦȮ]qI޴q0$\u0005-.\u0011y\u001b*>>$.\"܊<mZ6Wo\"+6\rw\u0004,ZD\u0019\u000fn\u0003~.j\"++|U8~#+Ӷ]xr+_\u001ca+ƞ'>~[\u0013\u001f\u0012v\u0004Ix=c#\u001c?~OK`3\u0017\u001c멧m\u0016\u001a\u001d\u0016ZHlə%\u0007\u0003\u000e.Zp\"\u0007\u0007+b%pշ\u001f\n+{\u0013WSgoE>\u0000,`=V/_[˛A۟Ap\u0015!\u0013\n\u000f>TU@\u0004\u0004\u000b\"U|y&B>R$W\u0011GiBk$2GS\u0012)\nO\u0010ʒTݝ\u0005hj/\u0000:F%@\u001a Qas \u0010\"]\u0013׫\"6j\u0004$Qqڒ\rڂL\r_Q\u0010\u0017\"\u0012K\"ǉ}\u0003\t\u0010#u\b\u0005rQj\u0001\u0004r*td&ȧ3'L\"c*C{-\u0006-Ё6kN\u0000ZZ%\u0019;C\u000b}\u001a@\u000b&\u001d.lY\u00069ZY{d\u0011B\u001a\u001fMd/WL-i\"Ȣԛ\u0015C߇ȍ\u0012}y2*\rA\u0006I!r\f\u0011bhc\u0015*4L\u0015$@΀\tOҀ6FhU\"5A[Dq\nU㒷\u0019@\u000b\u000f\u001dIJ&5 dkA&ȶ%*b>T\u0005\t\u0018|\tڲZSY\\y~4h\u000eE0a4@΁\u001c{Yrh]?\u0007ZQ|&o5 I]Ңӹ܎)̦2}6\u0016?_ge\u00193Q\u0003j \u0015%\u0012V3\u001as\u0002\nS}\n% \u000f\u000e\u001d\u0014Fs (Gt7H?\u000b\u0002#U\u0010\u0015_\f̓\u0018!X\"!'EP hY\u0015K$x0|N 懠\u0015dRm*\\[\u0012\u0001r\u0002L\u0015 b\u001am\u0004\u0011l\u001bk\r\u0002Ò|y)@R\u001bLR\u0019q%\u00126A\u0015\u0010\u00145o{ޮ \u0007\u001c\u0002H\u001f $\u000eJUgLdlC<.OWlbPn\u001d4iV\t,q*Mn,a./\u0002\u0004yZ1HB\u0012\t\nc\u001f.6MNӔmϯ\u00140r[-dMVJNskw8l;\\|\u00161\u00109.Қ?&1\rl>(L'ONבW\u001aL\u0002X\u000f2\u0015LF\r<\u0004\u0019:(Z\t R1ylr.p*rZ,O)җFh\u0011Yfsh\u00189 \u0005FQlD\u0006LHӱm\u0019@b|i͑f\u0013>.WM\u0006;A@\u0013\u001ahBZ+bu6eӈV\u0015|jhr)\"]\u001c_\u000bl\u000f9\u00053\u0000\u0006&-%iܦ܆}\u0005Zmu#-\u001a\\v9\u0017W##T=|@\"\u00067yOT1ZS!7\u0007(\u001d(ՈLMD\u001a\u001ea*BJ@\u0015\u000f$bqĕ\u001f|\nW\tdTt3>\u0006hR\u001bB-<Y\r\u0006Ha@۳4@\u0007(\u0000c q\t%6&ctCD&a?\u001a.P#K>I\\e(֑dhA\"Ƅ\u000bLMh岷4||}\t\u0003_\u0007\"\t^e,K0vG\"ߗ8\\|I;hohf\n\u0017Bl|ۉ%{ʈ|lh%>\u0010ϱVa쓱τ\u001c+\n\u0015\u001b9\u001eZfi\u0006.KZh\fh'\"-\fa,O2\u001bHg\u0011).Y5]o5K^24\u000bƚtL\u001ak)\u001c&-i%}dy\u0016 (mM\u0016H)$\u001d\u0016FZgH\u0010ZQr\u001bu0Hj\u0013T\r78>Tp\u0002o\u0005\nrc\u0002_KGh\u0011>\u0003\u0013$1ب8\rh\u0003)\n+\u001f\u000f\u0001\u0013!\u0016h@\u0012\u001e\u001f$:,YC\"T\u0005C\u000eǁolP#ԡW Al*\u0013Y\u0002)] i\u000f6F\u0007k@{1-h\"T\tEx&p|\t%j#8\u0002)\u001fِ\u0018'dRhՉ*ЦA\u0012HK'/\u0004\u001f!\u0006Y\u0006ir\u0004 onւ6HYy5J\u0000c}IZA\n\bZxD,m;i+TMڳue\u0005de\u00033q~`\t2F-\u0003dU\u0017omg\u0003H\u0010D\r*\u0001\u0016|q\u000e+\\9IҀϨ\u0004#D\f\u0013 \u001ef7Alh\u0017a[V\\he\u0011i7/`\u000f\r& #\u0005\u0004c\tZaUG\u00166߆sK\u0005\fZ֠\n\u0019\"ϓ\u0012>\u001b$ˡ͕Mv|]i\u001e;h\u0003[ܲs&A̒gw[B?[0O,\u0007zf\u000fr\u001bKILh2sY\u001b\u0003Ož\u0016\"D|\u0013)budz@k:\u000f\\\u0017\n\u0015:8.l\u0006I[&(E\u000b\u0004)'ᣱ_dѪ@$Hq\u0013܂\u0002<HXK\u0007r&i\u0015\u0006nM\\H`uAzx\r\u000bK/%xL\u0006A^\u0007`ZMe^\u0004kl*3~\rNҠ\u0011cRX .C8\u000bM'y,.On0!9 t\u001csqNfA\u0019hp\u000fMk2\\\bdLl5#m8~Cn\u0007אȶ<.΄@m*(K0\"K6Gm\u0006Z\u0011\u0018i6#m yQn(/.+궂a:+KVA\u00187 \"%\u0012\u0012Sa?4\u0001Hbc;\u0004=.YFZ#6\u0016[q\u0006A<b\u0003R 7\u0002\u0015|&iǂ>Khm%-@\u0002AeLF\rr|.}\u0019\u0007Y6X`8ʆA\u0005Z0!\u0000'\u0016AK#dlՆD\u0011K)ң6g°\u0003\\h/c\fc\u000f2e\tz Gcl\u001c\u0007\u0006\u001eK95Px\u0014bҵN>Ԝ#c\u000b\u0000\u001bxï/܆:i\u001d3>>L&l6wL~>xf\u000bDcԤ&ö|1;hG'd{Em%sƸŜb\u0016\u0010\u0001ݕ:\u0001\u0015TTr\u000eshrF@\u0001s&H\u0019\t;9p{޽{\u0006RUk9ǘk\u0018?HayE<5\u001aWkT|\u0014̑_^\u0002\n\u000ecrD\u001ed0^\u0004\u0012/6P\u0014Ei \u001fD\b8\b?\u001bb\u0004d-#.\u00134?T\u000bBS.W,\u00009\nd\"yXDGş5\u0016p?<\n1\u0003r /)\u00008\u00174,4\u001a/\\_\n<\u000b\u0010deȽ5 ō\u001fE1*\tŹ\u0012\u001f\u0017\u0002\u0001F\u0003(Ȭ`{\u0001[>qK%AxNg=\tg+@\u0006\u0001HӤ\u0015X\"\u0005l53s\u0006a0\u0006p~ \u0003Â\tȑ=s\u0016~\u0013!\u001e\r\u000b\b\u0005\u0016&\u0000\u0010 M\u001fu\u0019\u0007;\u000b\u000b# WB\u0010;c\u0011c1j\u0018}E\\\u00057bO\u0010\u0012F\f__\u0005rZ+*\u0001d\u0017\u0010>߇L\u0013^\tz\u001ad\u0019Y`%\u00067Mt9q\u000e\u001ccl_\u0002)u3#\u001e\u0006c \u0013X]\u00006!<i9\u0010'ma7\n0\u0000΅Nqj\u0005G1\u001b8_l)qBX>\"E\u0015cpMDK&\u0004~*\u001a93U\u0011r\bj\u0003l8/kPݚ\u0004\t8\u0011?X`\u0005\u001fp\u0003Hƈ8l\u001d\bQ}<1\u0007el\u0018>\u0013?>p\u000bC\bC`\u00137\u001c\u001b\bױ\u000b3\u000b1\ty\b?\u0002s\n+u!Bs\\\u0004\u0017 N\u0005\\\u000e\u001bd`߁\u0003\b àXu\u000e$ͭG<\ro\u0015\u001cqf\u0013\u0019\u0019T(rq\u000e\r\\4\\\u000f?'?Tlj,{\u0014q\u000eTh\u001e\u001c\u0019Iz\fV^\u0010`W\u0001\u0019\u001e7\u0014 B\f^\u0012B87\u0018x\t9\u001e{\u0018cr \u0007BO\u0000\f\u0019,\b\u000b\u0011Y\u0005\u000bj3βg'aIT\u0001\u001fҦǇ\u0016\u0005Vq=87<j3\u0012dvA:xpMЧ<Q&\rN\u001brǀO}\u0013\u0018[ʃl$E<=0\u001ad\r\u0011Hϸ\"\bpwRa \u001aw\u0005y)d\u0016R\u0016O\u0001\"\u0000b6rЙFx\u0018QX렩\u0011\u0001)\f\u0003B+71\u001fv\n\u001e\n1@Pz\u0001a\u0002K\u0017\u0002\u0014L\u0003>\u00036- \u000es\ns\u0005ĵ\u0011F\u001a\t\u0012\n u-%\u000fل\u0004*B\u0012\u0017#f\\j\u0016آ`l\u0000qr\u0004`\u00126z!\b \u001fdv\u001d`sی˭X\u0014XzO\u0002|kϺO\u0000[\b|QA\\\u0003\t\u001a0['CD(C\u0000\u0013XO\u0005K\t\u000b\u001ccykq@\u0005h=N\u0001KDr\u001d\u000bs\rb\u0013X4\u0017+\u000bZ\u001a:\u0004f\u0004g\u001d?G\u0000X\u000bX\u000b9X,)\u0000A\u0019Q\u0010t\u0004HWf4\n\u0000#Iī\u00101\u001b\u0013FBaX\u0012\u000e9bH\u0004\u000e<\u0001l ea;\u0012p<P%N\u0004>\u0000`d\u001dV\u0002\u0018\r*|\u0015K+\bpFqAڦ7~ե\"ʷ\u0007cq\u0006|)N\u0005\u000b\u0018C\u001ea]\u00042G\u001bdY\u0000B<*ݕ\u0018[=I]\u0012\u0016\u0000\u0016\rĈ\u0012[!<\u0000\u0012/A\u001aC8\fb=\u0015q}\u0015:'\u0017'.\u0000\u001c\u000b=C]Lmcl}\u0017S\u0015{\u0005)Ē\u0013q\u000bE~Y7[65*>l)\u0019v;\u001br\u0013(\n{Z\u000b:QQ`\u0004xy\r+:\u0002|H\u001f\u001f\rRtl\u000e*i/q\u0005[/乌c\u0010F}`\u0013Uɵj\nUH\u0019IDu5~\u001eR,\u0017\u00042Pv#C\u0011ctVO1J\u0002\u0002z\u0019\u0010\u0017z:!\n\u0014@\u001f\u001f0\u001a\b8'O &{@?(D\u0005Сo\u0007<Ht #\u0005Gu\u0004Bɐ\u0001@O\u0018!&A:^h\u00154\u0019\u001c{idhM\u0004\u001c*9{u \u000f\r]t\b%9$!\u0002<$p=&\u0003r)'a`Ϥ_Ȅm䵏A}AV\n\u00106\u0003P|\\\u000e \u0003\u000e8\u000e\u0015y\u0004 M\u001a5\u000f{u%'O\u001c!\f;\u000bg\r\u00147\u0010_\u0007#KQM\u0005h'5$q+ʓC`\u0003x\u001f\u0001_?<N\u0004\u001e\u0017cI4,\b$\"A\u001dd\u0019\r/\u0017|@5\u0019Ǳ`\u0013H\\<X\u00076B9\u0005aN\u0001W)U{/P\u0017\tȇ\u001b\u0006e\fc3\u00162烧RPͳF8+]\u0011(RNM%a\naS\u0010\u001f^\u0013DΡaց\u0006H\u0019a6\u0003~pAO\u0016J\bRwa\u0019Nc郧G\u0000_gCD\tzIc,e\u0013>\u0003\u000346 \u0000\u0006\u0006,XO\u0012\r~q\u0011\\\u0017 _-tk9\u001dt/ol&cqq\u0014,йId{ѽ\u0011\t򹂃`sJ\u001e$(BL8<\u0017a1&$\u001dA\u0006\nQ.c\u0017\u001e!p֣@\u001bbS\b}6\u0014Tԓ\r\u000e]ѽF)A\u0013dv`-GӦ\b\u001d\u000eNx6d*-C\fH(\u0000?)1C,\u0005Rΐ?S\u0017+^\u0001/D,So\u0016:? b!>\u00018\u0016\u001bt/YJ̛\r^M=\u0006|k\u0002\u0002N/\f[\u00039+ƄZ\u0004\u0002L!\u001c\u001d\"=\u0017\u0002>a\u000f\u001fe잼)R\u0002+\u001br2h\"4]N!햻P蒫\bu\u001asITA:\r,\u0010+Q\u00066J\u001elJ\u001c_OT\u0006$1 E\u0001ȩy\u001a\u0013jWk%&:\u001f\u000bb|k\u0017\u0000c\u0006#`)q\u001f/c_|\u001d0\u0014S8'bNoa\u000f6<\u0015n)\u000b\u0010\u000f^\frAA\u0002\u001ek\n)f&\u001ab\u0004+i\u0010W\u0002yD\u001f\"=\u001d2\tEлV\toa\u0002\u0006\u001a0_ǁ$>^_C\bqb욱H\u00123\u000fuS\u0002-;{g/|\u0019^;8Qe\u0005T>\u0013Y*LT\u0017\u0019\no6LV \u000elCq\u0014ss-\u0010\u0011YS3Cr\u001c\u0006s\u0013\u0001l\u0005\u0003\u0002\b5\u00002D\u00163A\u0018pJl\b`Af\u0016\u0011u!\u0002\u0000\u00079\u0014a^e/e\u001a֡O\u001a¥\u001f\u001a1`r!T\u0013쨔\u0016eIl(\u0010&y{'\\ƑC؆B/6\u0014`κ\\ňD\\ـ$hS6\u0014\u0013D(\u000fۇ*\r\r\nendstream\rendobj\r149 0 obj\r<</Length 65536>>stream\r\nn\u001c\u001dlq\u000b`b\u0004ڐ\r(VUܬ\u0006\u0007PC\u0019\u000b\u0003\u0019nA^\u0005K\u0013*\u001eq{e|sIջ`\r\fVbDp<-')J,=&Bl\u00027ۘ\ne&.,}\t\tҙ\u000f7؂2Y\u0011ˇ\u0017g7\u0018e\u001chXߛ˱[k\"uk\u0011G \u0015a\u001c&A_>0\u001adlIS\u00110d\r\u00126\u0013w\u0007=܈\r\u000f\u0010\u000eGKr;E,\u000f,B\b$PLu\u0018b\u001b\ndP\rEА%\u0000/\t\r\u0005(`s#})@Pg`>Bm`\u0010\u0004IV5'\u0007Mt{.qXkK؀{\u0017 \u0007>h&ȩ\u0001Ј\u001b\u0001&_0gq.\t\u001f0\u0002Rm\u001d\u0000z\u000f9}0\u001fdZq?8g\u0004\u0003GN\rPDgr\u001atq\b6\u0014\u0012PL 7n?\u0006p\nX<\r6\u0014pmҿl(,\u001cF\u000fIi>\"\\\u000bk\u000b=Rĉ鑽\b[\u0004\u00023:t\u0017\u0013~=ؤ2`\u0015\u0019[\r$C\n1\u0000Fx\u001d GIF9\u0013zX\u000eMm\u001b؎\b3\u001b\fX\u0016!\n\u00026\u001cW\u0002DӾ\u0013p\u0001G|Xp\b\u00030mu\u001azr`M\u001d\u001f\u0005V\u0014\u000f.<EB?\t,\u0000\u0002HD\u0000N\u0004=\u0006H\u0013\u0006\u000e80\u0015\u0013_[\u0014x\u001d<@N(Ef\t;{\u0000A\u0010m}M-lC!@\\OӆB\u0011r\u0003]\u001bH\b#]\u0011O[N\n\u0016qo\u0006!61\u0006\t#GA\u000fK\u0004\u001e\u001b裀<\u001f\u0010,\u0007VV~r%\fKd_\f1$m|~4\u0003h-\u0011?EQgP[b\u0015ܷ?3<\u0005\u0016*C\u0019[_\fJ[\u000e!ئPVkhXl(\u0004s8f\u000fi\u001f4\u0003=P\u0018]ՆcȆ\u00028l#Fj8a̡3#q5e\u0001pGlu\u00111\u0004iGLVS;UW\u001bq{\u0012uk?Su\u0002?\u0015<\u0014-qPme\u001f\r{xS\u001bk$9^eAF\u0015\u0010uDЀ5$\u0010\u001f\u0006<\u0007\u0007\u000f\u0003\u0002&B^\u0004\u00034\u000eo\u0001\u0002l[?\na3*\u0018f\u0005\u000e``,g\u000b\u0015L\u0017U\u001e^ r\n\u0005\u001b\bT3\u0001C\u0000\u000b\u0012p_hfF\u0016S[\u001bl(\f@x\u0018\u001c|%\u0011?^c\u001b\nmա\bh)}|G.\u001afF\u0016#^N\u0003ֹ\u001dQ<EģWq^\u0004\tN\u0005xT\u0002\tҌ0\u001bh٣MC\u0012!:G\"bIȈ\u001b٬\u0006m\rk(R\u001b}R+\u000fH\u001a\u001d\u0006tf\u0006P\u001dPy][Fc\u001b\n:t\u0007@\u0019[\u001b\u0013r`\u0004քЇV^\t\u000b\u0005P\rPՆ/\u001b\n둴QyJtL\u000e]X\u0013Fu+\u0014`\u0011=\u0003k+ `i\u0017 I^Ѧ\u0006T/-rX8\u00007yAn\u001b\u0012\u000fC\u0007<9\u0019\r\u0001\u001cGՁm(?衉-.\u00046Y\tt仭yIq \u001dO\u000b\f\u0013\u001fT7 T4\t-M#=C\u0001w)5 q\u000bS`yd5\u0012\u0007`\u0017(}z$4\\8L(*F\rm?\u0002RdJ\u001e6C\u000bP歁!iCaӆh\t\u000ed|@o\u0013\u0005{O\u0010֔8Ε^(/^\u001b\u0010\u0013\u0017Bg`{sᙹ\u0004r\u0015+C \u001ab0\"5U\u0011\u0013`W\u00019E일\bd\u000570Z\fu`|\n2eIN\u0005ORPk3.~\u0010P]\t<\u00007eC`\u001bnmQv\u0001ӯI^nRa/e/5\u001e(\u001111P\tMňAeDu\u0012yZ&\fF\u0018tj\u0001\u000fځ|\u000fcE'\u0016\u0016&Uejtj\n/鈂Mv#\u0002Km\u001bĆ]Tx\u0006R2:\u001a\u0002\u0004K2t\u0018:\u0004}hZƖf\u0013Tv\u001b`\u001ex\u000f\u001fa\u001e\tvQJ\u0001&]GrTrEH\u0007=YM&*aS3\u0001\u0013a\rof9܈1\u0019f\u00148\bp\u0000/ \t^\u0014\u0017\u0019hS\u0004\u001erAPwoRgO\u001a`]!J*W\u0013o\u0019`\u000eM'X\u0005[G\u001bBl\u001b{\u0010\u0003=GR؅KK%yaO\u0010I{\u0007:3\u0005\u001des\u001e\u0006xl|B\u001f\u001cz+juQlɞ!Ύ\u001d︵J❱\u0014z\u0012C\u0007L\u001e\u0000F+ze6RGS\u0000a-t$V_xFLߎm#;X\tA\u001e\u001bG\u0015\b\u001f@.l&\"\u001c.HU\u0002\u0019\u0005C\u0013\u0019!{\nP\u0006M<*0k\u0005\u001e\t\u000b\r\rHP\t&L?\u0012k\u0007R\u0015\u001bX\u0018ϦTiꘟ6\tX\u0005\u001e\u0015X^z:CrxA\u0002\u0011k\u000frq\u0015*&M:p#\u0007\u001d&\u0004v>\n\u001c\u001dziP\u000f\u0011G\u0012ݨL\u001f:-yXm\ns\u000eyIV\u0000}:٠8\u0017$\u0007v:U\r]\u001bAҔ'B\u001dy)qR#`[zz\u0014wə@X\u00111\u000fK0\u0011-=?.\nAjkBX\u0013\u0002`\u0012WX^19\u000fOl1\t8\u0011YG\"\u001e}u(f\u0001l\u001d\f<,\u000f\r:M\r\u0007\u00184\u001eBĹI\u0017\u0005}/*XN\u0012\u0007Ĳ?m#al\u0007L\nl;\u0002X\u0016\u0010P0_\u000eF\u0006]\u0005Vtz:X{)ldJWbl\u000bkv\u0011\nУcN{NkbCA!ׅ<\u0016e:\tA|6Nz%O\\\u001abd\u001euk)XPc;{DUb~\u0011eC\u0001u\u0002\\K<\n5[╳\u0014_Ui1IU\u001atF?迬r^*X>L<Ǡb\u0011K\u0007]]P}`{-=\u0002`Y:D)\u000fzN2\u0017\u0002\u0001p3&E\r\u001cFz^[\u0004\u0016ՔMt1b\u0006Z`/\fm\u0017=z\u0004\tQ-\u0007\u001c%h\u0011\"\b'RxX\u000e\u00026΁\u001a)C?=\u0007!&\u001e8؍<X\u0014(_\r)bh\u0007\u0014g=10o-\u001cA\u0000(\u0007/u*X߃!Q^\u0005G\"W\u000e\u0011\u0006\u0007d~\bG]\fF<7\nA\u0010x\rF\u001c\u0002\u0011\u000e`7\u0007Z[|U\u0001H\u0010\u0019`*P{\u0014Ny=G\u0005\u001d\u0013*wB\u0004dqn\u0007N\fҵx\u001f}A`\u0007]q*XY_\u0007\"krXȄYGW%\u0013JѾחҶ3`OĐ\u0005\u0012\u0019[D؂\u001c\u0014@\u001f`\u0003\u0019+ؗ[Iًo\u0002U}'B\u001f\u0019[[\u0006[\u0003\u0016\u0012k>\u0007\u000e{\u0017a\\Je\u0017f\t-k\u000bpOR\u00196u\f\u001cx\u0005[\u0001\u0001)w(#|\u0003X\u0017lw\u0013º'1p݇1O\\\u001c:̃5Z>9[ͤ.M\u0000pI`kJ\u001eCX5[Q\u0018R\u0005p1}\u001eͧ'x\tyNُ\u0013z%~\t\u000f\u0007x+R}n,|#(o5Kq}h}a\u0015o\u0007Ň8FQ@Z\u0018[XzlW\u0001}LX~!>G\"\u00175S{Z>C8xi\nΣ`\u0004k\u0010\u000f6`\u0002:gbl\u0006:\u0016Q\u000bzyM7+m|T88gcլ\u0010jZz\u00107؅\u0002m\nS2J\u0019*\\й|\b[v5赕`\u0018XЙV52\u0017\u001e\u0019\nz=db\u000eaˍ/\u0006\u0003qn\u0015V-\u0013\u0000\r{~\u0011o\u0011\\ea}\u0001y\u0001q-tN v\\\u0014(+\t=EX.B4\u0017E΂^\u0011\u0003K:c8~n\u0004_\fQ~\u0013]Yk?\u001f\t=ƱǼ\u001fu\u001d\u000b{Q&0>6p-OCϘ<4<l;\u0012\u001auMτocʷ\\\u00003(\u0002.\u000e\u001cBf\u0014KaC_l\u001c\u0007ѳs=HOQ\u0015\u0016y[!aGbK\u0001\b\"aMq\u001fpy\tpe#\u000b0f\u0005\u001cf\u001b\u000fOj/%\u000bɿ@a/6\u0017_Gu\u0005X\u000fؠ\u0019\u001dx\u0013^C\u001d\u0014\u0004aM\b\u001dg앺\u0000'TϨtxDWu~QȝOc_l\u0006\u001bWT\\\u0012\f\u0000yGy\u001a:T\u0003}Q;\u0012cZ\u0000\"[+q< lRf.e-߅ e7Iѡ\u001b\t;YtV\u0001*q7\u0007`3D%UB5K\t0\"~\u0005z\"+K @\u0011]͆?X{`m}ѐJIf-\u0012Ы:vj\u0004w`\u001b޵JQaK}\b{X7\u0019YtZ>Qf\u001eX~#<\u0005\u001c\u0004<\u0001\u000fC\"\u00032G<gU\\-\u0012;g,=dn\blA`O2<#n\"q}\u0011\u0013\u000b6n&i\u001d>rLE. 6W?\u001d~U\u0017Ч^}3?\u001eO:dTր:{/~|XJ\u0014Sdhow\u0019_J^*=i?\u000e\u0012x*g`3ra\rljJ=eS!:^ADq\u0012:d)\u0011cTRnψBo}\u0019Trn\u001b\u0013a{6.AISgR\t\u001c`\\z2\r6i{2ܗfC\u001eIeuCna[TZ\u0012y ~7V^*/z{%1z_[J?YO)Q\u0003f\u0003aV.XK)\r{\u001c\u0003N&V8:T`\b}6s\u0007̝$?w m']yc,*~-<)~r\bo\u0003v1{Y Ռ6RdbҍT\rdlv^ge~\u0017+yZ{\\r\f$>h\tT+\u00125`d;ĉڄ\u001e\u0001\u0013Ws4{\u0019ҺO\u0010f\u0003e;\u0001x7Ңl|v!:\u0006\u001dZ\u0001wEa۷zeh\rc<d;\u0012 \u001b^\u00045\u0014\u0010Yv㵰E^o(Jт\u001e\u0014s2ğfѮi+\u000bH\f7\u001a\u0005O\b$dt7\u000b\u001dWpft\u0017\u0007a{\u001f\u0013]-;\u0001NZQ.u\u0012>ﵠ\u001f\u000fb\u0013'u'ԘI3kyjuIr\u0001&y?=`\\'k6\u0015\u0016#(]C\u0014d\u001dpE\u0013E\u0012ǐ&g\u001a{d-\u0015F\u000bl\u0011\u0005֡N\u0007a\\7bY6U>8(zRXBt\u00074].\u0015Z\u00070h\f;\u0003\u0006F\u0001#v\u0007M\u000f[E-bZs\u0017%gE\u000fL\u000e\rAjn2[\u0015\u001d*\u0010sL\r\u0010\u0010c.\raf6\ns: 6Wj)J!YA5@cQKnV5\u000b22a\u001f?wp?}OޭG\u001aХn|ԣn}4`\u001eK٧(\u000f\u0012Շ#]\u0007E75n\u001b\u0007-\u0007\u0007bN\u0017\u000fz{_\u0004y_ǟi6aAM_²6kqYɫM=%]%e1\u001f؈-P\u000bp]AzQ\"둰i\u001a,\u0005\u0007j'̬%\u001a\u0017\u0014HUX\u0018\u000bz\u001b\u001d\"IN\u001b%@\u000b[E=lV6h5hwQ%Jغ4\"+\u0017\u000fa%[E\u0019\u001dڢZtZ\u001a?狪 \u0007/\u001e^\u000fe\"5s\u0005\u001f(\u000b\u0012w_NS-_l\u001et77`IQگǊ\u0007E=\u0003\r!&]QG_$J꫼}\u0014ӯ\u001e\u0014\u001c\u00134I_6\u0011nHo՚/?ye\u0012+\u001a)E]ԶSx/_{KRq5;\u0007=cav>C5\u0002ӛUHo\u001d,Bf&}'k6\u0011;&yxRp\u000f]\u0017\u0001_*,j\u0012w\u001fcJ}Y\u0019[~t.?̔X1z-7R\u001c^3\u0016\"\n?2ݖ2_I;?QU\u0003)}\u0019\"S|`v\u000e~){ertȬN5avaao[\f}ۈک'N5\nR׿j?7I*O>즨\u0017}R:!m%[yy}|<C=\u001f\u00103\u0019M^\u0011u|'\u0010m\u0011\u0005LC۸]x1XYj9\u000byӎy{E\u001aj\u001f3\u000bx\u0019i\\p)\u0007Wk]M)\u0014U\\x$N\ty&yg|<@s~S\u0015*\u0014\fjI[I;ǤEŶen\u0007\u0015yڋמl\u0016r:0Vܫ\t<FuBPIpy vd73ӻ `i{n?Fk\u000f3)\u001e(\u000b9֖\u0013u%]]\u0011\u0014\u001fQ~)H\r\u00195𻫸9{q&=\u001fZ$\u001d\u0001t]\u0005t?-׃\u0016C\u0001\u0015ɋ&KrgcW\u001f\u000e\u0006)IXƤ$X\\ |rRTvVR\\e+)v2.$zb-yYg)zSg)o:þ촠_w\u001d\u0014h@XyRRPj%.B9({'?R^\\&ޭpFTqaQ{<TW\u001d*n\u0015{\u0002ҿK4!K\u0010T~9J \u001cl|\u000e~\u0010+\u001cLW?C2z\r7\u001bW:%G\u001dxMeyrKi^!Fcj3զv1|Ͳ/[-D\u0005/O\u001f\u001d\u0015=0#o#\u001f\f\u0018Tٗm\u0016J\u0007Q]״8I'ۮ&\u001d\u0017ehOZ-*_ڬؖ\u001aW7/bHlInH?_\u0017/;Ӕ\u0012w-Gf<\u001f\f~\u0014z\u000f=φM\u0013d-R+W\u0006ڐ۠v\t\\-0L\u0014\u000e\u001e1x\u0013j֞\u001feZW\u0018piy\u0018au=Nl\u0011~1A\u0016r\"\u000byffd'o&[7ed\u001cm}dP\u0007uB4\u0019}zI}UYjf\b\f~='\u0016\\l;/i@\f࡞;ƃ\u0005OEf\u001f\u001eD9G)uS\u0012Cfْ\u001a#Aq{;/hXIU%м륌i\u001ct]e/\u0007LԞ<<Jf\fy\u0017YN\u001b#m|\u0016qqou]{m:)<)(di\u000fżm;TY\u000bj\u001da]aL̻\u001eD5e\u000eFyi\u001adl6\u001eء~>k֬\nJZDڐs-I\u0016b%_*şۂ\u0003E\u0002{\u001eDmJM8֖+3{\u0014q\u001fj̵/\u00066T\u00074~\u000fVś\u000129=:m\b!w4Ϊ\u0017HRڵʽT[%GM˶ƕeJg\u000f\t\"K֓!EkyQ֓O\u0006II]ǑO\u0013\u000fw?Kv\u0005z\u001b\u000fEoJJ\u000bJ\u000bJJv\u000bJLF54D4dUD:E\\tD\u001bS/\u000b|\u001f\u001dX+\u0010\u001bsÃH\u0007O4lTeiQN\u000b^k1\u0012}l\u000fr.-\tgZ.X\\I>r#EYO|>+DP(Yc\u0006o8C\u0017AzV\u001fw޶?DfBƴ~p`JN1\u001dV\b?\u001f\u0015g6\u001b2uEj·\u0015gL\u001a_\u001fm\u0015o8X$\f8hǆ*Ȭ\nר[uu6aeM\u0017B\u000b+KkmBjlB\u0015Uᥥ\u000e\u0011˜\"ܢ,\u001bc_\u0006j\u0003̺\u001fGZ\u001fs<?̭o|AHGC&J\u0017F\u000b:Kz]l{OI]SE\u0018=]__\u001an[\u0015Ŵv9''E\u0005'|$ա&okCR\u0002\u001b|εd_6z&\u0016\u001dy\u0016{v\u001b15;ՎQuᅍ6alz۰:۰\u000eyhޥU2d)\u00152X駂\u00102Nh\u0018^S\u0015\u001d\u0010\u001f6\u0013\u00171)-0i,\u000e2(\u0014i\u0012\f}jfa!IQyq!/Ij\u0002+\u0003\\jLۊmkk\u001a\t|`\u001eMM)'n$\u0016\\\u001fcW\u0012)\u0010jޓ'k%%ֹy$YfH߅nG;o'x4\u0007%z6\u0004׹F]vvc#4N/\u001d^=-q.u+>֑\u001b-\u001a(hT_\u0012\u0016\u0014و5ڈ+j\u001c`nD\\Bq\u001d \bs\u000eK.\r\bH>\u001a&\u0011\u0012⊽c2=e(*}s\u0006\u0006]pz\u00069=Aw+O6J\u000b\u000e\r\tεliѕ\u00176V\t+yԅe8>zSdFkZFF=c_{\f?pGq@~b8ĩ:2.76#:3ڡ*:ƪ!%LCj̱(釢\u0010Q\u000fMMA6_ͩ\u0011>YsY-9ߎ=<\u0018\u000e_oLo[uΛ2QF\u001dq\u001aÝw\u001a\"\u0018_2xg۪\u001fxmT\u0003)\u001b*\u0010Q]Nǻą5y׸,oD\u0019Ɲu?pb~N\t9Fo33ʝ1Yߪ^/zX7y=Nz\\\\bgRSwNSMtjtORV{]S\\*Pw؋$!g\u001a3]#\u0012\u0017z\u001eqiG9Y\"¬0Ƣ;/|KrZ@kmD҉XKtg\tΊ\b'sϷ6y\u0007$\n?Sݟ\u001do:L׹;C7,nNH<\u0012Nת`ʀ\u0012(T\u0017Gy\u0005FlΌ\u0016\u000fx\r\u001fW\u000e:~mt>q;&8NkwyEn[o\u0016KT[ϘC]\u0015G@}\f{91<\u0007*\u000b\u001fQrg}@.Z\u001c;g}rslqŰǍQy!)AUP\u000fM\u0007yƩ;L<b)\u001eؾOزs/c\u001fIIذe\u000fVIؠd@(N\u001d\u001eOQJzN\\\u0016\u001eGvgtD,.O^\u0019\u0015V\u0010\u0018s\taMq\u000f~ݕ\u0011Go!\\\u0010V旘;.㝻,\u0017ᆘ\n8y\u001f7\u001fQ*{&[m6a:l\"\u001fz\u001aDMV\u0011\u0011)\u0012$\u0016\u00103y4b\u000e:\u0014F!YJ'\"\u000erRwibٔy\\b6\u0004d9Ĭļ\biE\u0010+W*\u0013[\r-}3\u000e<vUsBAן\u001b\\泥Iۨ7o\"ޔ8E\u0014ه?y\u0014\\\u001e\u0013S\u001dS\u0015^\u0015;&\u001eSb#\u001c}\u0012Evzush\nm\u0018z!\u0004͡\u0004Gv#gp u\u0007Mն͜|gN[E/\u001bU\u0001S;~\n(Dq=hbBq\u0012t\r3\t8b<1\u0018I'\u0005b:(?X2MX͈k\u0012.rxՄ\u001a͜\u0017\u0014Wָy;@4!j\u0016t\u0004\u001e}#RuP|\u001b\u0002ϨE\u001eQ(/Fg\u0015z\u001e8G~\u0018q=\u001agE.Q\u000b]\"\n9Eˢ+[Z\u0007qݖa_m;\u001bx35Bw\"ni{Ķ6T#/S$֬]AZiy]5]\u0005db\"1\u0018E \u00110B+UE5\u0012$_\u001b>ذID\u0002V\u000b=^\u0004F=\u000b*)y{):GQ\u0015}3N{\u0002ר\u0005^EFsVkԽb7e\u000e\u0011U\tN?\u0006?On\u0017Zcb_\u001av!,%@7\u0018b\n\u0014SùBg%\u0002f\u001c:L\u0011\u0001\u000f9|5p\u0007&\u0010MA_'\u0012#&f\u0010!m5'{W\r19\u001cuH\u0012xj\\NgtaKD\u001b蜷(D(v\n\f38̫<$\u001ebas.Qq%^۳\u00067;7W\u000ehq4;_z=\u0019\u001aF\u001f\u0010i:;~1\f_ݿ^0\tc7\u0016{3\\\\\u00046C:J;v~vT\u0005><ښ+X\u001b\u0017gS'}\naY\u00140qE>2\u0018ǼW.x >*pn,q,w\u0014,\t@n'\u001aq'9[wN}\u000bb\n\u001a\u001fpr?\bw{6sRb\"}bEb[$n\u0000޺49$kϘ'\u0005]uyQ\u0016S=U[t[(ʰؐ2\n\u001fYV%]\u0015NQ\\\"<e+NItU\u000b;딈Yrp\fgƜ\u001c8NH\u001c\u001f<\u001cFq(N f\u0011SF,!*'V:N(i4p\u001a.'ӞAn%\u0013Y-\u001bdˀW\"\u0015퇾F\u001cmύs߹FV Pk\u0013>um\u0010\u0010^\f\u001b5{?\u001c\u001dz\u0006+\u001eXtƢIx\u000eeԡ\u001c$Z7s&bՎc7Gh\\\nz8CwTeDqx1-6=]kL=\u001aÆb\"w.N1޸Ơ=.t%\u0016{t\u00069Fe\t1c4<:\u000f1?t$\u001c\u0012D5q\u0016br\u0001R\u0002Y4lO\u00167_3gqOs?\u0017^1/^ǽ)pK,/pO-+qI~V\u0016w5:+ʩ\"2\u001a\u000ehTߣb<̻ojq:o__P6,/c:{cѻa\u0019Ifqr\\T\u0017\u0010F,%&\r_BL_LL\u00195\u0000Jٕy\b\u0002n=[pK\u0014\u0007P\u0013]+b\u001f\u0002\u0007^\u0004hΌB9&\tʕ@\u0001L~\u0019\u0012Ǩ拑\u0011i}\u000ei_K[B̒\u0019\u001bJz\u0001t\u0002JpM\n\u0012&n&LI̞P9u+1}\u0006bq눩؍f\u0012K6\u0013یsr+\f:\u0016M7NV_\u000e\u0003lvWt\"}mE\u001e\u0019-\u0005^\u001dozz^P_[RXV\u0004k_\u00054IM~+\u000f\u0001NR\u0018HL\u0019~F\u0011*?rsQ.Y@\u00186j\r1mZbMĬy+\u0010p!6)ö\nv\u0005L\t{^;ǽR|B׸\"ĊR縷.qEEqw޺F\u0017|\f^RkTWW___y\u0013rXG~4#c~~?\u0019E\u001c4Nsm!B̞TؐO^bH(U'f,\"-g:a.\t*oϝ#\u0007GcR\u001b5\na3Ylg\u00141=n\u0015 ػwNuE.E\u001atq\u0007w\u001c\u000f[y'<9\u001ag\u001c84\u0007b42!7=v\u00051{zbҵ\u0012bSĢ-\u00168N]%\".YHb\u0002\u0003b:1g\u0001z^\f۹n{NS;dteEZPӀg\r=\u0012K\n\u0013Q{]\u00149v1>n19\u00110\u000fNxj'a6'z\u001cy0ޛޝB\u001c9;n)1{*Ba:W\u00123Eo\u00071{nBanb0!-\u0016\u0013֟$Vj\u0011[\b鞢ǭW)\u000e\u001f\u0007\u0018\u000bϸ\u0002\u00064N5ee\t0:۫S\u001b\u001cRޔ9#.\u0017VYZ\u001dCJz6Un61U\u001e1$497]~\u0001zm\u00011\u0011$tL\u001b1~\rMJ(>UQL\u0013s6\u0010,\u0001J6XI%\u0013\u001b͞\u000emr\u0019-x0%Գ(\"¿((\u001d^\u001es=B5I^\u0014]\u0014^\u0018_\u0012s&!R\rk95 C.@(\\i\u000e\tbO\u001czOn\u001e0f\u0005ʇhƭGys\u000b1w^b\"X8l\rDÍXJ,P%\u0011\u0013+x\u0006L\u001d~mT\u001es+\r#\"%)A\u001eO\u001f&U?J핑*\u0003\u0010R\u0017gݔ\u0010WxBC\u0003C>r[:{\u000fX\u000b0\"^Q-\u001brbBa\"\u0017cs\u001a.7\u0013]BbָĴq\u000bQnDU(/&\u0014ך\u0012,\u001bO\u0010K\u0010K#ځZrۼ-RkT\u0010\u000e>)xu&=$UPQd\rJ]\":F\rTgbR^㘔\\\u0011iZŭ0W.\u0019chCsm:\u001a.\u000b0i=\u001e+j(\u0006u9(\u000e$!~O]M(Q%\u0014\u0016j\u0010\n\u001bL\u0005;ќ3\n\"6\u001d-5q+lJnj%',\u0015\u0007D$\u0014\\\u0019\nai\u00141-N]ɽ)\u001d{\\R;+\u0014\u0019,Voǡ1\u0011]\u000bB\u001fW\u0012\u0012\u000b\u0015u\u0010\u0017\\L̜Ǭm(gyڼٻs\u0012\u0015Ty\fibѦ\nu7b X&\u001bZ|;ǜ}&n@޸눈\u0017Q\u0015^\u0019Ņ.1_e\u000f\u001a<㴍!~Q nɝ(\u0014OS6\u0006CȒc1ʂ\n=i5\\Tn Vi\u0010K\u0011KWE\u000b\u0010Q;u-:m&َ0\u0001p\rM, \"!\u0007\u00118bˑ:oQs\u00079\u000b^8pˍ1]\"O6ĥK~\u001bwJ釒h׺ȴrоJ۰\u0012\u0003}\u001cQz&<Pc\u001cW /0<4\u001f\u0015#P$O\\K^C,VF=a}3\\\u0016(?V\u0000T~-ߝ;zm\u000fힲõ|F񯘢z[S5ĝ1ĝ\u0016~)6{\u0018r)!\n\u001cpr\u0016ʞu,+uh~\u0018=P\\9n\u001a\bNlY!>\u0001\u0019+K̛XZXiEl\u0016\u001a\u0019ݘ͞oFxz\u0017#z\u001a2~_NoG+Y9a#n:nunJpL\\nf\u001d\tt9n3'\u000fr\u0017/F\u0002fA٥*<ր6$\u0011!,\b\f<oQ\u0016^\u0018x!.A^,\u0015b\u0002uBa!|\u0015&֐0bۂk'W~Ƨۺ\u0001oW`\u0014E\u0001\u0016i\u001d'Z6q_4د?6!|r@W΄c<C\u0013\u001e\b,\u001bݼ0x\u0005uOCai9ѳoG\u000b2H)䳩0W\"}TsT\\z\u0006;\u0017sF*@s݃~\b̴\u0017\"EG,\\mB,vXaKy\u0011k\u000eX\u0013\u001c%Vokԉ\u0015+45JBB\f\u001cܣQ;K\"jNM3L/ߝ-:>FN+\u001emvJ\u001ak\u00162Рyq4TȾq3}\u001acR&\u0011H\rq\u0012AՏclWGuhRe]gepZEJF\\\u0001kC\u00033t-!U\"n6\"6i$\u000eʑu\"iSU\u001a?8!7xV+[?\u0015QcF\u000fw@3ItŗnOn@P<c4-G\u0016rr\\?.Wg\u001fpFtgk;oŝkJO9q+IP`̏`o\u00146P̓^a\u001aI㖬܅y1\u0011/\nۈek\b\u0010N\u001aݿcTN\u0001\u00039J7\\\u0007wH;'T-6pzpGl\"r]\"*ݣ\\k#E/ݡbO%M\u0001@9a̙9+\u000eo5>z\u000f8\u0015}r\u0013\u001a\u0004<G\t\u0018&\u0015:F}<)B?t\u0007ϚǍ|l\u0005\u001dQk6\u0019\u0012s',/My\u0010ƚXUHl1N\u001d>\rx\u001c4Ν4\u001diD#9R\u001dg\t\u00068{.A9?\u000e\u0018F5= g\u000bCt\u0007WGΆ\u001dS/OX\u0000pǖn$Þ!^(wjDߊ%\u000e\r\u0005]l~&r\u001b\u0013T̘6\f\u0007\u0019q]{]cQ^$?<z>1uBģ\u0012\u000bW\u0010lm'n\fS1~VBKn\u0001\n\u0007Nu`+쏿 \u001d,\ba\u0006<\u0004}v#\rZ4p+X\u0016v7yMn\u0013\u0011\u0007m\u001b^^\u000f-eDA\u0011LDv.UIE\u0019[rBQ^odv\u001auT:9gs-\\\u0017jƚ\u0002b\u0007?LŤUGNj;\u0019|-6Du͝6衋rݕ)U4\t\u001d\u001b\t}s#\u001e\u00105ujNiK1/>\u000e\u0019TrBt^{ȩ\u0018:7\u0019F<Yf\u0001i\u0007C3\u0012]\u0010;o|F^H@\u0013X'\t]S\t.H\u000bk/S\u0007w\tN3{&zn3[pa?r\u00041Y\u001eյY\u0004vi0\u0015Y\u001c\u001a\u0006noT\u0003g\u0007{HXc[=麾\u000bԛoWS&\u000fIY\u000b{@L%Q!v \u0018>Cw^B\u00164Lxw\"<\u0007-Dkwؚ\u0002YW/bel\\nzZZTjkRV%}^wJ!\u0016d\\V~E:z\u0013p_?`,gN^IJXcI춼1j]n\u0007F\b\u00078V\u0013\u001ar&z7S\b-]\u0013\u001a0\u0010,i\"wx3e=l<b9%spChFq[DO:Y~LF\\$<O\u0017>46\u0019\tZNuaj\u0006\u0013b\u0013֭&2֢3dWkwjS\u0006]F%[:u\fGr>3Bx(\u000f&=v Zzp\u001dԄ'_\u001dqʆ\u001b\f3l7ǩ\u001b]BݻUsMs\u0012\u0003SVc-f;^\u0003ω\u0019Ni?*t?ǿ6o{\u0004\u0001Sɰeԭ&\u0003G\u00073[\u0003^.2f\t̜FΏ\u0010\u001c=3\u0002?m`8\u0002|m\u0005>Zj>ԷA}b\u0017\r*Rb\u0019sV+\u0013TM-\u0007Ç*hjj\u001ei\u001fixܘy.zFW\u0016\u001a\u00057 n\u000f;/ViXYy\t\u0007Դ\b{\t6W<CB,1\u0013HMhMĂ-T͂[ɬ^5^;K=\u0010}\t\u000b\u0019ԕ\u0001Mɓcenf\u0015\u0003KK\\$5\\\u0005\u001098m\u0019\u001a/f5_$fLP$F|\u0000\u0015\u001b\f\bU~\u000f\u001cC}N{1F8UCFGн<5A\u0010d\u0015:\u001f))NhlF+\u0013B8~V\bkǹ,6%4\u0013\u0007F(o\u001e\tȸd\u0015ϝ墌\u0016mj\t\u001bSu\b\u0001`Ё7STؓuj\u000eZ&P\\\u001e`t\u0002ԹAƸdM\u0014џƝGV'Gjq۵.NV18Hh\fKh\\4\t;/Џs1S+k\u0011<S\u0002?t\u0005\u0019x6_Bl_ػj3O0\u0011ɛwjqyA+RYTr.+|`B5y9{\u0005\u0001\u001b\u0006Vp\u0006/} 6uy1\u001b)d\u0005\u0018>r\u0006?q\u0017}m@\u001d%Wn兿^iޣdx0Cߕtr[4\nXsntur:/9\u001d\u00125x<Q;2RRiym-MbǪ\u0005ľm\bm\u0003}2092\u001e44G\u0004Ex\u0007\r|8%ѽ2\u0017b=\u0010e\u0012\u0000\u0005x&f n\u0017ҺHϦ]e\u0005(\u0017J^T8Xܛz%\u0016\\o\u001f:D\\RU\u000e oӷԖ\u001dEuTA\u0015\u001c\u001c\u0004H\t[\u0014u˜\u0017&i\u0019u]|*L5{\u0001\u001dcB]E\u000f]:Cطc\u0017!\u001f\\m\u00176\u001aR\u0019*\u0002+|)\u0001Ϥ(!!=8\u0001Ec.k\u0019_/\u0011p=\u0014A\u0003C٬\fs\f:;\rJ\u0007筂O$i\u0001d yZ~XtI\"ɫ?fk\t{\u0004\u001dAu)z[www\r^zN2*AoFzU\bSup\u0007;9S4nzZ7z!\rKtG(+\u001b\u0010\u0012B_rQw>zسM9 !4U\b5[\b=h44\t\b-u}o@\u0011\"\u0019&iKL=g$\u0019GJ#;+\u0004N13)˿\b2>\bJ6\u0017bO\u0007\u0017\\SErKg]\u0012\u0015yf\"=q\u000e:Ow{aj\u0016?Ԍ~U6/`9\u000e<e9\u0003ʿIc\u0006.ivP)͆\u000e\u0004v3\u0004\u0017¦\u0018\n\u000f\rSQAl[سAE:<\u001ae\u0003-=\u0005iNF<_Ovk֊\u0016ZxOi\u0011\u000fҮ\tsYۈ\u0019S\\!\u0001ۄ٤O\u0002jdA43w\u001a?2ʗ}\u000f4[f%o;}Dk\"9԰~A*itA\"Uf3ʩ9WاЦ/&O64AO鋭xf#\u0004&\u0017\u001bRTwPFx:?Yݥ\nF5\u001e\u0006\u0019[\u001c\u001c.=\u001f8]\u001ct0\u0000V\"Hd\u001e\u0000\r\bj\t?GH;b<3\u0016^|<뛹\u0018ẙ;j`Ք|$]է\u0004>[C>_I^\u001eP\u001fu\nim\u0005?k{)ǰK,c\fC[\u000b\f.7ɚ%(A\u001a#7\u001a\u000f\u0013M\rO,\u001a5x\u0010j\u0013j;w\u0013z:\u0006Xc-}ߊB\u0012\b\u0010 8\u0004ww'x\u0012TU\u0018q!n\u001d\u000e4hۯ\u0019q\u0019g1\u001a#\u001d:I%Uk=9Oc\u0019B-\u0013]<R\t\b{\u0005\u0018Qh\u000f-CL\u001c>\f3}+s\\K\\˵\u0003n\u000b\u0000S\r3瘭*W>e\u000bב`=O\u001e-\u0016\u0005@^\u001eWc;Nc\fm)B;\u00177<\u0015\rf;%Wpqe{\f̕\u000eX<à+\t\u0016Bvd\u00066fCψο~ݍ.F37r\u0007ySbbh>r\u00140F߶\u001f:6_=~0\n`#}M\u0010wWohO\\x~'\u0002[]\f7x8\f\u0006n;Q= ͢q4\u000bOc'kv\u00135\u0014k]H_%\u0017h3Yn۾K-k6\u0010-\u0017촾\u0015rd\u001a_@̨d\u001b/R\u000eOV|z*ދ+l'U8zl\u0010~\u0003]C!|^=Nyp@On\u0004?Xsn\u001e̠Igg\b\r\n\u0015E]N|eB,O=mڣ-J=Y~{.iԎ]^XQi\u000e󆽚Z3Yj\nmVYi;F3kh͢5Y;cR}a)f\f.\u001el.<1_eh\f$-B0b\u000bF*u#WW\n\u001fowrŸ\u0007t\"\f\u0010S:\u0002\u0005\u0012FF罴+\u0013{s\u0016ϼ\u0012.\n}+~:b\u0006.op.,ƃ\u000f5߳[}pP>z$3\u0011Q|`\u0010\u000f!\bsP(f\u000bS<Q\u0012̭\bs\u0013K2maBv\u0017X>xQHn0\u000b/7\n/\u000bs\u0013O\u000f.\\Q9\r}M['~݆9 Բ8-Q\u0017k\u0011O*\u0018L\u0011.\u000fu;t3ss\r.vԿo%49qլLx\fYK5\u001bܹS]s/m,?v4fn\u000f^WO_>\u0001ڃ/ц\"DϜ2\u0005\u0013?k\u0017;梲턲Y\u00173\u0015خX20Sj\bM,Wz\u0013|*Ƀ\u001b}\u00177=\t\u001f5sj&e}3u\u0012%_wVܙȳ^]l\u0015n)G<\u000f$ZrQڐ4jNٸzf}o4`DB\u001b^->9n-A\u000ezZQ!hU7\u0001}K{`ŁBF8!mF_ݸ\u0013kn.\u0016S\t\u0003zbB\u0003e4M/IW|ȭe|ݍ%B|Ypr\u0017c\u0007W|a&2\u0018\u000b\u000fᠹ'ْ\u000b-\u0002Af9*\u000ez:d+A?3T$\\\u001dj\r\u000b,*ĔK,[.,m(#33\fr;\u001d_l%ކ+\u000f\f#\u001co|bM7~\u0013te֍L\r6_#a]7\u0002\u0007XNKݕί\u0013|,orlZ^s^fZT?s}\u0000-rQڠ\u0018K0(I?O\u001f#]_\u0004M\u001f\u001a\u0013\u001cՠA6on\bJ1t\u0010n\u00131q|\f\u00166q+\\'w?wVN=\t^hu?;kO};\u0017AyrA\u000f\u001eg⁙bVx\u0002\u001fU\u001dW\u0012Fq\t\u000e\\ׯ[=l|J_za66AWti>qfUݛi\u0004KcY\u0019\u0003I󣠟4:!L%d~S;X\u0018f\u000f}w?RJ\u001b7ח\r\u001d}Rv$!fTpv\u0016X\u001b|j\u001818I1q\u0002iꤰz0y}\t%\\?L#Hoy9z\u0014\u00176\u0004Zx\u000eQ;j9iIW7Qyü83w\u0006EI퓰^t'~ߡ;\u001eo/7Kg@\u001d:\u0005B;\u0006!Ѥa\u001dn4zx^ J,T\u0010s\u001bƿ;7\u0017Vp\u0019]\u0013W'\u001d\u001d͗3r3r\bz̏C\u001fڑ:\u0003\u0016\\Jh\u0006_o\u001b>Y\u0005\ru#:hfbKGJ=3M)LcQJ\u001fk\u000bK\u001fEX\u0000V\u000f4\u000b+\u0003OҸ\u0006QfBJ]Ml=n\u0010^[.6}oQ}j8Nr`0^o减R>+3~q>}?$]y\n\u0019GǳJ8>Mq|®=fڭ\u001a}x0.\u0017㲻&K.\u001fs@.{;\u001aېnd\u001c1\u0006\u000fG\u0012!\u0011*Xgi|\u000e0 DO\u0019f\\㓵Т\u0003@\bcuet1Ieq\u0017\"\u0015BZ\\5FH;e(j\u0010_ Ռ#r\u0005y\u0016\u000578jT;\u0006\\ϯ\\۠!vL%VQ%s>]\u000b\u0018x\u0004!1>\u00044\\쓯>W\u000bO\rt\u0011\u0019\ti\b'\u0016u8Aoxo\u0005g\u0006Yğͅ;=W\u001bfa&?\u00135LmqXpf&^AM\u0006\u0006X?\u00036\n\r\r.\"]kO0>$Z\u001f991mR~][hy\u001a/Jk\n\u001dq\u0000\t\u0011v``AP*\u001a\u000b&ifZL\u00104]y\u0018KhɈ?T\u001cg\\~n!i\u001d\"QO}]08X\u000b\u0007H=\\Hk\u000bAi/}\u0006r*Q>\u00121\u000f\u001e\u0012=AuY_\\mH\u001dΞM\u000bi\\XM\u0000M'Gl4<\u0010kFK\u001f$<;hE[\u0002\r}1f\f\u001f\u0012?\u0004qpCkˠK\u0007M%齕ߴ<A(8?\u0013\u001aB9)n.\u0013kF{\u0001f3\u0011gQW\u000eDXB۟;T<\u001c\u001a\\\\H]D&vb8u\t\u000e2&\u0012g1P/iL5fOXAK!\u0013y28\u0006RB\b9d4t\u0019A\u0016\\rj.X\fs6id̀\u001dE\u0019\u0015_1\u0006:w?\u0002\u0000`S\u0012yt\u0015\u0007>&g'؂\t3q\u001bb:1\u0018\u000f%KdQ\b0\u0013\u0003 \u0019M\u0013\u0011Đu\u0000'Ĝt6r F Gq5h+X(gN\u0000\u0013\u000b\u001c\u001cV><\u0006}2O9Ԝ\bfzTk!b\u0010:D'N\u0004qRI,Von^6rҼ\u0018Nԓ\u0007}?.$\rYJQ}\u0010w_\u001e?y\u00159=q\u0015||/\u000b\u0010\u0012X|,T@OmtDOgm>4h\u0013t(\u000b\u0017VriC*A\u001b/?\u0017k\u00031Bٙm|p+p W\\\\Dڅ-߹^{7C:_K)O4;\u0018kS\u0001w\u0016s`iRh5)cyVbz-؜|@%t1W\u000bP\u001e:Y#\u001c\bc\u0014cZl\u0004\u001e\u0001I(+ҫT8\u0018\\`VЩ\u0013>^/W^\b}C\u00130s\u001aS<\u0012n56\u000fv 7f(qM\u000erb0D9D?]5\f6\u0001Ǯ%L\u0015\bvz8+2:blư.=\u0003f\\H5;CZ\u001f0\u0007_z\u0014\u0013jFC]=>x3yM}\"+?[\u000eV\bCG\bua>E-:3笿T[t<-6X\u0001\u0007\u0011υ\u000f։\u001d_8\u001eT\u0006^sϷJ:Ս\u0001SFl=7Ме\\\u0017\u001f.gLksٹ'Q#\u0016q!6^J9\u0017dͅZ$XxH١Y;gf5]<`\u001bf':\bO\u0012+FA'\u001eZ\u0011N(qPk\u001b\u0005\u0013٠O+Σ A[H|\u0003Zb҇ۿ@?~\u0015MZ\u0000\u0010Ufֆ\u001b{\u001a j\u0012={{=4]=H\u001c\u0003\u0014qd6C؋S5:9I#:2m\u0014hY<RG\fmmY\n\u0016\u0002c\u000f&\u001edV~I\u0019k5~|\u00138\fIj~tp\u0000\fe\u0017Aoh:H\u000f|G8Td?\u0010fI\u0019J\u000e\u0003?\nvX\nO\u0012\u000bmL[?-\u001fЕ*/[mkﮅV\u001c8jgAHv\u000f1O\u0011&(_|wj\u001eC}'{[BT*Hy]Ӡe\b\u001d=g3r+\u000b#ۿ)wj~@>t~\"[K橆J\u0015bg嶻;m6Bat\u0016擞^D=|no>)®i\u0014c.>9\u001b\u0019!T}D\u001d\u001f_E\u000f\u000e&[{fΛwj6mܪ;\u0017d\u0006;۠K׈յZQ\u0007[Q^K\fr\u0007bӲuk'\u001exut\"t|{w浲+^LeJz}~\u0010.kO}Z=\u0006\u001eJ\bm&Ρ\u0010W>\u0012:b\r`'B^\n82٘d::\u00055\u0018\u0000~m~^1\u001e#&\ra> ڊ'VQjl\u0013\u001c%\u0006<_Y>(t΄ҹ:S\u00161Ԃ6\u001cBTz\u001e2AyS:Xue!\u001f7\u001c\u001abl=X,Ff!7GAu3\ttƄ\u0013Ŕ\u0014k0X\u0018\t]>'ğPɩH\u000e}ǃ\ryB_p\u0005\u0003a󆶯vCMz]l\u0005\u0003`Pp\u0011:ܪj3tB\u0013!\\trr㩋N\u001d}0T\u000eYaݣV_^.twV\u0007\u001ezz\u000f<\u0012\u0007׃*^X\f;)L^\u0015]|&\u001fS.-R?.:>N0^\u0017^|W1bjFrQPz\u001a\u0010u\u000f\u0019t\u00102#\tf\f;\u0018doV~2cA\u001c)l\u0012U:RIk =ުv>+~JM\u001eGZȈл>c\u000fƙ\u0007;;_{WZNǔ7,Qzp\u000b)\n~\r\u0019S\r㠁j86\u0005z`\u0016K.\u001c%}Vm}ۻ填tw\u001b\u000b퍩G&\u001aJ//\u0001;\u0016D\u001b`eH2iqKgT޻\u001flY$]]5x\u0016w݆{^J\\'\u001bI\u001b5e狭^\u0001A#l{\u0000˭XKEVg,@ސ=\u000b\u001ez\u000bsa:\u0004+=('+'\u0013\\\n,<\u0002\\CؖN0\u0007\u000f>el{\\YW/\u0005yf\u0002\u0006W`5,^Gr%\u001amz>wSK/:\u001089\\RcF\u0006\u001b\r];Cs\u0017:\u001dq=̟\u001dl\u0015q\u0011'A;o{xPxiPyT牥\u0017s}϶\u0019\ru+pAkn-\u0011>Z*\u0005s\u000etbN\u0014G\u001d\u001dbrVby\u001bޜ!*^\bB\\$nVt(R'Ap\r֝\u001a=B`q\u0010\u001a&v\u0016_]\u000f(\u001fk'\u000e|dy\fY\u0007lu~`0\u000b\u0018j\u000e=nCd!8\u000e\u0013Ҕ=`-m0T><0K>7\u0018\u0010\t#\u0006g~0Vm\u001cUhO¼Yc}\"2TQ\u000ewzŭᎿcigeH^\u000b\u0019ם\u001a\u0013q<@]zf.\u0007z_O<{%\u0018M,\u001634\u0011,Y꿰'~߁\u0010[8ʕL\u0002b\u0005\u0010&6s8\u0014Ć']ڞag-Ow\u001d/w\u001d5\u0015̶sT\u001aR*\"Vr;5IA6R@\u0010\r͏wʝw{\u0007a:ߌ-`\f΁!\u001dĊ\u0013\u000b\u001b+u\u0003GV\u0016Hw_t';n~~\u001fRx\u0015gS\u0010i||\u0003\u0015+./\u0012\u001apm@%e#\u001bx\u0015rN\u0015\u000b&\u001ahS)#m\"\u0011\u0006<hXk%Mb\u0018h+/\u0013;]72X~\u0017=\\96\u0019T\u0016`ga\u0005vZ\u0007ߩ𒿹h`\u0017n\u0005el3\u0004Z@|<\u0016Ǩ'\u0012[8\u000b\u000e\u0004\tޤ{}j\u0006gi|xG\u0016\u0004;fz<u\u0012K\u0005J\u001c\u0019{YB\u001a˙\"`\u00167o Y0s]yn14kq\u001e)6>p21>YR#L쬺)\u00137\u0007\u0004\u001aO\u000fL\u0012Ӆ}7\u0010D?Y\"7쬀JͭU\u0013sT\u0016H?$ǖ]\u0013Z:\u0006\u001cKCv\u0014h\u001bҘ/dU\tγ#\u0006gp٦wMf5[dX4pgw]WևT7u?Sw;ם\u001dk8{ZAL\u0003CSModL\u0007%Z'\u000fI\u0019\"U: ƃ\u001d0}坜)~\u000ey9\u0011\u000fl??Z'iى%qX\u000f \u0016{B(5q!kÚ?|a|'D/X\u0003\f8\u001enz;]{T3';k:zD\u001eF.-/O䡆T\u001bCp\u0012\u00107D\u000eL\u001e\n\u001f\r\u001673'ٍS?d\u001b{]k+\u001d\u0016\u001fҧ+u@ު\\\u0005jJJٙ\u0005l+h&=܍7B[t\u0010\u0004Lj{茜\u0014=@%8V\r˴ù\u0011bcwOGؿS#8HKb9I1\r;v^Rް\u0010oѰg9|\fxe`gY&v>a/ʱ5.4C\u0015\u000eȁs\rSg0^=\u001d_\u0010bo{'T9[磎W\u000b:f@s}5\u001a_ohw\u0005JZ#t{&\u0016l9B/偟<#\u000bv,x|\u0016;\u0003\u0010nR\u000e1qc,J\u0004\u0000@yd\u001c`_h<@3ԎgT\r\u0012\u0019b\u0007ˑKʑEý<}5\t}Z`\f09\u001a[ئ;Egw@,آӳa3\u0005YS?HuwV7\u000fv;JJ`g\u0005I#l\u001cY.\u000f\rqeܑaIv>yhEH+%OOKzf\b\u001a5kEjl3Jb1\t\n]ρ\n'<6CB\"wdN\u0012{\u0004\u001e˷n7f4L6f$ONcu}<=cEC;Zbg\u0011\u001cCbgM_l vVF\u0013Y\u0016nXj7\u0005ZĦ><H,\u0003`gYegEag\u000f\u0011-8Ֆ*ۑ\u001d:\u0005o '\u0001\u000b̐Pg$\u0015}B,8\f\\*\f//\u000f05X^b9kg\u0011,8n\bJZ\u0004ȇ+\u0013?;o\u0004\tr}V:!<n(gEhyV\u0007\u000fϸ{r\u001a񀹜R1\u0006}D\u001foa;'\u0004\u0002*vۭ׸5ȷ\u0004k'򥼒m\u0019\\VI5y+r\u001f\u001ed\u0007;+HK\u001bآ:\u0019^;x+5֍W+O.\u001dK|kS'=O6\u0010!piH\u001e\u0002b׏SYub\u0016&.-|{k^\u0018P-%\\\u0001-y{TK.-\u0002T{.7\\P0Z\u000b4ڲzm&`\u0012eM|I\u0013;K v-rwn^8X\u0018Q!ڠD+.8w\u001bv\u0016K`\u000e\u0010_sZqfS={NT}jR*CE`W*Q\u0019pV\fk\u001c}\u0013Cvx\n\u0013Uč)lq\"v(qU\\^f8|nY=\u0001X\u000f\u0004[\u0005νtc6h\u001d,\u001a{\u001bƫ5c\u001cC{cN\\5\u0013\u0017\u0002jO9\\SI\fMщ\u0001zosN\\1m\u001e0\u0013R\rEo\r<O-TO:ث8>\u0014>_)G,\f\u0016\u0003f8b\u000fr)1CFT,\u0011g\u0017=OV|\u001a&~L\u001aע\u0012-\u0003|d<2 x\u00176P/-UX\n\u0006\u000e&pCb(~C\u001e@L\u00140xX.\u0001\\\u0013N\u0002}a\u0002`\\o0ꐇ\rG>Z\\\u0011*`ǃ\u0002ΏX{u)&2i\u0014-_n}J?~w,1\t.~\u0013\u0003͉\u00031M>T4\u0002{'Bd-w󍟭\u0001;p♠}\r,||H\u00053̮в\u0016|k>\nA?gQ7{OgbgGY-6\u000e1,\u001b2P>-ȇc7V5}\u0017uN\u000b\u0013k``Z}tuĵŞKl(c&\u000f+9>Oj,w>w̷Uyy!xv|^]bHn \u0004[ɕ\u0017z#/Fϋm\\ˇkj,5J/-?\"\u001fh\u0003$\u000f7[J9ࠪI1R\u0017;y\u0012K&\u0011\u0000!/OVm\u000b\u0006\r\u0018F\u001bG\u0006`9M5d4M\u0006\u000b5>\u0005\r\u0006fLϔ{|\b{E22V\u001a<\u00180̖\u000bA\"scn@OD)\u00017|\u001cBG/\u001e\ff5͹~xA@5$%\u000637CZ\u0016Y|86ȋ\n:Dv6\u0002\u000f7Of0݇KU\u0017\u0016\u001a7]\u000fK\u0011z\u00151j&\u0012\u000b7ayè/,Jr&5W#\u001f׷=\\]\u001flg9\bVR\u0007}l\u001dOްۧm$aM5\"ƺ7{\u001e\u0016\u0004|pTsatg-RmYgU~|>~\u0007\nݳ\\|\u001bSl\u0015zU9|Ƶ݀3vsWˮ.sIY#3tW?\t\tr=ǁ^BϽ\u001erk/R3ڦ{\u0003ݳqM\n\u001c\u0014C5sӝ\rJr\u0018b.\u00189=Nn~`z1\\fN\u001a5B`\u0010x_±F_ՓCtXo)3%b\u0012__\u001f|5#`ќ\u0003eы\u0012¬T*Y*V\\\\^>b\u0018a\u0019-Q\u001eRxv.Qh\u0017LiଡY2*Y\u0011\u0010=LE\u0005jP\u001b;pFjc-i\u001d\r1]\\\f{~\u0013x\\Sѻ\u001f2D\u001e.\u0007ڈ\u0007bڱ8#p=\u0010o$f\u000fz\bĝLl|\u0016xp.1e9\u001fg|!|}l\u0012\u0018X\u001b+\u0017;Wc\u00174\u0018oG1\u0002yRJR(SҏL49ў\u0010|ӝܑkKq}YG=S \n+\npe.qYH1{<nY|B+1P!(m\b^7Ξ/\u0001ȣozoJ\u0005/gl;z\nbWU;\"g%\u001f%^s\u0001\u0014лB3|*M\u0006XE\u0017\u0002\"p&\u0003ppDCV:zt<*xO\u001b\u0013\u0002C,Vȇ]`9jg\u0012|P\u0007Qɵ'&\u0016ȑ\f*֠?\u00142cO-0_J\u001b3\u0011bx\u0004%_-\u0013\u0011'\u0015#п]\r\u0011\u0002\u001b.xٴ/\u0018d՜[|`\u0017d5\n9w\u000e_N,6]PZ-r 0 \u0017[և\u001b2KX[u~1Y\u001d|\u0003'\u0006{/q'5\fPyR!k7?pu|Ý\u0015b\u0007l1\u0013߸y\u0012\u0003\u001fiG&r8G}L\\40K\u001b\u000eY\u0000\n9\u0007pbj53\rd8oU28[iD{e\rWm\u001a[}z/C\n1\u000eX5\u0016kҙ=dM\u001a\nzO7pM\u001f}\nbX\rbxR;p8C38C\u000ea14<NM::\u000eB\u0005,mJ̇Y\bd507D%ۉ아rn7Qmj&7ppjt\u0006y4j\u0013Իȓ*1\"mȶfLm<rDx^m5\u0015P\u000f̖Z3\u0013g7:_$\u001esD\f<q\u000et\b,Ī1,8\u000f+)Rr#\u0013yŌfbv}E6d4\u00078虰<\u0014k\\jG`2\u001fG+bggkLI`.\u0019O\u0017\u0006Y\rRw9#rB5r%\u001d}\u0012O\fPA<h\u0014핲\b|6~\t,YBv\u000e\u0003\u0016\u001dʰOZ:\u0006u\u0012uXt\u001d\u001f.-f+`\u0010 \u0017\b_\u0019ڦR\\*?=K;f䫮/˯\u0017\u0013 s/-oz\"VP\u00158l_]:~i\u001b_yz\u0010`\u0010\u0006Ł\u001e\u001e,Mzxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1{\bmŽmg;f_\u001e\r\u0019nξ9&vg_lpdoL\u0006\u001fiӼ}I\u00011˼Wzw4e2o\fN˖XT\u001b\u001b4<b#\u0017u~a\u0001Fgu֮YbN떭[dՊkV.Yɾ/_\u000f7\u001f\u001f?\u001c\u001cn+\f\u0018n5vӼN\"eN\u0001m:\u00026\u0001\u001dV짗;{.\u0019\u0010\u001f\u0017c$+8-sk`e^fi9\u0015`?Y|Z紊+M/\u00137yӪk֬cvٵceٯ7\u0014_>`{\b4&kvj\\\u0014VL\u0017i\tH}`>0Z\u001foFrlݴW[Ҹfhsw}nWQKw\u0006hڀCV^Q\u0016\\x># Mq@\u0003E(_> o'˛\u000efV\u0017Y1\u0011xIf|`5TN\fcfdj){LoX\u001diP(Lbr\u00181ik)\u0014LJ\u0007-\u0015LNC\r%,\u00164}Yya\u0019&61]&ے:\u0005$(QP/\u001d\u0007)R-c:`P91\"\u0010~\\\u0003Jt;RM\bHaژ7q9: G[a\u0010\u0013R@5T|,Q\u0018R:\u0014fIJ>f:IP#mմqjɉiRR\u00048+.{/m\u0004A{01\u0019sx\u0014\u001beMQrK\u0019\u0013B{1}fT3F\b\u001ae\u001494ҏM\u0013fS0\t\nMĔ\u0013NIv8{Z9\u0013=\rAP؆BWS@I\u0005)\u001eS4A:ث`T[5e\u000f];i0y\nW!\u000b.\u001fH\u0007M=|5zc\u0005T1]u\u001aLV*GyE[5xhc7Z\u0018!V\u0012Hs\u001b\u0016.\\v@\f*Fx\u001dP+y[\n(K!0Z\rɲ3g\u000eS\nGzg)58g\u0006s%z:ɐ\u0004\u0003CB\u0018(7UR\u0018؏\u0014`\u0007'X)\u0013@\"dz*CF\u0004lGH\u0001\u0004Iy\u001al;v1:m!&ΐX:\u0006j\u0006p(\u001ej\u0012!+(\u0013B!\u000e\u0010\"H124V\u0018IKcɘ\u0000cst\u001bR\u000f:2\tXjb\u00189,V8x\u001a]4l\u000f\u0014\u0003\u0006$2ۈ/\u001cizCJŅ%#rx\u0018n\u000b;Ǆ\u001f0%B\u0013|I4\u0001\u00117\ffuN#E#\u001fnaR\u0010s\f^0{XfϘ-\u0001\u0005\"E\u0014Jr!m\u0014W4R\nI\u0018JS&e&\u0002ìIRx\u001c`{+5Z7CVˡ^ZrC+w5nnc 5\u0004<9\u0006Jx}Pr\u00153`2G\b/\u001c\u0006u>\u001eOK\b2#e\u001e0,׍rlt\u0018\u000b\r(V`:Y\tͶb\u0004ݟ\u0010L񙦮D\t\u0012\u00184T\tɷӫQ\u0016:QHK%$NM\u001ek)sP$\u001bL\u001a+\u001c%?LA$[c\u0002VJ)2i`\u001f[f@=ec\u0012\u0007L%^|XOi\rkK1\u0005)mL*IB^L\u0018\nO3T]]a8|rJ*\u000fs\fi\u001aF>OD/gb\u0006vE\u0013^C1\u000e1$T+M&c$w\u0006~hr5p\u0014\u001bˆjl(%&k8\u001c~\u0017)fឧVT)M\u001fm?>\u001bkM-\u0005+L\u001cfL\n1&-(\u001eDg\u000e'c\n&\u000bg(HF\u00049f,)\u0003C;,Ö2B2\u0005Slrz8%.g\u00047\u0014_W\n\u001bٽ=b\f'+Ġp+LA1\u0002vCO^dge|x\u0018+!\u001c\u0014\t\u0012~!\u0016|@%<\u001a/\\\bH\u00163mx\ry\u0018h)`-LOSd.{e#DaJ|h(\u0011Aq\u0007j\u0018Jl\u0003\u0014\\vpjl['\u0012\u001db/)D0_\b\u001f&B=A\u001b\u0001\b\u0015R1$\u0006ӊjQLL4?Pf~DTf$(`V\nJ\u001dJb\t4g,CS쾩G'ija,\u001fLڐZ3[-;\bI->5\u000fȐP\u0000,10ʊ&:@n!\u0007\u001f\u001aU5trtT3\u0016\n!P\u0006\u0003ô\u0006LT!\u0012&f1q\u000f\u0002\u001b{-:G==a-abU)qĤ\u0016&0\u0001|Tt2[wCY\u001cӨb4\u0002)0\u0006[,\u0005fClCZ\u0014L⳿5\u000ek\tOrT=i\u001a\u001e\n)'5Z\u0011\"صL\u0014\u001fTkFw\u0014u~`\u001c\u0003:h\u0006\u0018BH-g\u0005XK@5\u00143ȩ_0\b\f(4A\u0016\b\\7p\u0018)\u00047\u0017\u0013JFa*c\u0000\u0017h%D\u0014\r*t\\<R󋵒/Q&A\u0011\u001bw\u0011Z(\u0001:\u0013m\u001b\u0002L .c\u0012)\u000fT3hw#,g0q23Tcq\u0007g\u0013\u001a\u001c\u000bAm|T\t4\u001d7r;CRWIgy\\R#5TKF2\u0012\r(1f01\b\u001f5~d\u0002MgC*1]mwd/M8u\t\u0005JLa@E!x \u0000jfP£F`m9Zrv\u001e\u0014N%^\u0007l`B\u00113i\u0012S]S0J֠*\u0001UqΘ/gׂh~Ê1yÉQx|&Y0)\u0002~O\u0019C\u0018f\u000e\u000eB҇\n~A\u00169l1LSP\u0013\u001b\u000eu<?!\u0010\\\u001b|k:\u0018\u0005\n\u0014B\u0013mLӡ5TXJk\u0000\u000beז\b\u0017o.%+\u000bh1^Ji\u001e/\u001d~gdT*)C\u000b?\u001dj$:*\u00175bj]~tLCaT\u0010A\fge\u001cq,~\u001eh\u0005_\u0005#\u001c:\u0012KEPRa>\u000eB5h(\"T&ȃh:o\b'h\u001a\u0013&l}\n˅,;LJ\u0002|\u0014WLH\\K\u0005>ȋ챎?b,~Lf\be&fo&Zh\u0012\u0002_\u0014\u0011\u0013K\u001cPgA%.-b6M2\u001bUWGBZ6\u001a\u000bQ\u0010\u0005\\P\u000eĜɤ\u0011oO/p\u00043<\u0003\u0000EXL9sTc)Ӥ+0,ư\u00171\u0014\u0000\u000f7Z\u0005\u0004jL)\u001e>\u0015\ny\u001b4k[7Nd5\u0000\u0016*Bp\u000eԉ\u0004+J\n^br\u000f}f\n%kYWMD\u0010RKx3Z|e\u0001T{i<\u0010\r\u0016GS\t,?WN\u0016+Y\b5k1q<_ ԈIuc։'\u0004sP\u0007t\u000e\u0003!\fjbtp<Hsw`\u0010\u0000PQbG\u001dXz%\"21ҙd\u001br6@e\b\nO\u0001N!ȫ\u0002܊\u0004SkX\u001a\u0001DH\u001f\n\u0016#o\u0003(β\"\u0002?L9\u0007e:Ҕ7[(\u000e\u001cT2X\u0010bK\b\u001f_'\u0015(\u000b\u001fi?5\u0005,\u0017tN'%+=zm3@9_qv.7ɰwv^\u0000\u0005\u001d\u001a9(iYa\u0002P;\u00025\u001d\u000f\nɇ6O@-yGSGl})I\u000eD0`1V\nf5\u0007IB([\u0007\u0001I< n>C#AuT*\u0019zI\u000b\u0004oaZ)!!P\u0003\u0001\u0004pBLfRra\u0001\u0017b3a\u0011\\|?C7Ԓ\u000bG[R<8T2\u000bN\u001a.\u0014\u000e.7)Y7!D>qו\b\u000b\u000f\u001c\u0018)\\7w\u0005\u001dIMRpP\u0011-\b\n1٬c\byZ٠%pm6\u001f˨\u001au<$\u000e??vھY\u000fLR\r&׏\u0007XzI\u0019nB\u000fVHq\u0015\u000e\u0015z8P\u001a3oR=Q\u001e\nM 1\u0004QiD[jJh3@\u001ckj\u0005Vk\u001c\u001aJ\u0007P6$\u0012*AIՎP\u0002,\u0013ƒe1\u000b\u0012\r`g\u0006fIWʤҜ?T\u0003j\u0012{+x\"PR}*\u001c\u0014f\u000f\u000e\u0007==5.NkP+P[\ba+\u0017.\u000f\f<\u00049A\\\u0003\u000f\u0017M!\u0015j@E|4~ՠ\u001eRkl\b!\"\u0016k\rI>\u0005\u0015>>MIB\fi[\u0010\u0000i\u0014h.foĶ\u00015@\u0019\u0000l-\rjp0}(j/Vx5^\u0019)N\u0007\u0006ZCU\u0012:T9%\u0002}P\u0003\u000e>,i1\u001f%|',)Q\u001f\u000e\u001e\u0000ȑQwX=\u00159\u001a*TYM\nHP@j\\3\b'_\u0017>U n`\u001d\u0019p\nR\u000b\u0014ᄪw\u0016E#\u0010x\u0015\u0004*-zOƬiEῡ\"!j4\u0007Ă\u001f\u001f\"\u000f\u000bq^/t-Q\u0006JNΣ7e:\ry,zjJ!֤^3|DEJ(\u001d~&)C\u00146MWJ\n\r\u001f{^{NǦOIwV@P\u000e-\u001cX\u000b\r\u00176\u0004\"±OJ5\u001f\u001a#?\u0014SB\\hb=|\u000b>ILo3\b.\u0010]/>&?!sI͐ŕɨKI\u0007jK8Q~>\u000b\u001bK#qukˀ]wӛufWXSD`u?ˇ$\fEd\u0013Thm2G\u0007\u0004)^fu\u000b\u0014ѷC\u001d`/\u001a5\u001dԞN$Qn-G_F0\u0014aPx+F\u0013̥\f\u001b9H?c(l\u0013ʏC\r\nW\u0007\u0015gvߙV;^-9kR@\u001d\u0018rH$6w\u0004)MZ>Y˝ݕ?Ww}/ۄ?O5\u001c}Yu#õ\"uws'(?Tvd飇t|'QD/\u0003\u0015f\u00198RXu(\u00147nc1\u0015c&%\"2?I5T1\u0014\u0001\u0005\u0007>ߡ^̴S7Hk\u0006\u001c\u000euc1zꗄã_\u0015\u0013\nFB!7\u0017tL\u0013.\u0001ON霈\\\u0010\u000bqB*Pvx:1w*⢜2Ag\u0019t+^Rat1ҁ\u000fa1/9\u0005NX\u0007J}g&fᣵ\u0012\u0001(\u0018dVk-\u0001\t\u0003C\u0006U7(죆\u0004[U\u0017\u001bIm,4V8\u0010iz]D8&(S.T;\u00017ȵC\u0003#\u0017\u0016KG()Mz=d$\u0018Eʴ\\tnP}s\\rypQ\fL\u001c\u0013q6cJI]]\u001b5#Tn\u0007@r-zdzVc(A)6\u00132\u0014Q١_CBˤ#D\u0016\u00147\u0004*ݰM\u0019}?h\u0011|Íe©o)\u0019@\r\r-B\n\u001c*\u001c%j:P\u0003!\u0018\u0014kơ>ޔԭ\f9\u001dꬤ҉^\u0001WN+)og$\u001fpeׇk#u)rlV;ϧ9?:h1惯);\u00005\\~y\u0011|\"Zb9rtH\u000f!=\u001d\u0014\u0014?;}\u0006/k@\u0011K.\u0015*\u0011лV\"Xsbu\tqjI\u0016ӡp\u0006\u0012PJ\u0016W-@\u0002aJm~]i{\u0003\u0014\u0011\u0018# \t@5kb\u001d]\u0011|@*ߦ4=\u0003!\u0004J}۵lzS#1kz\u0013l͇ؒ&reJ^13\u001c\u0014Jԯ\u0001J\"\u0010\u0013A|JP1\u0004%Hh{뫥Ȫ\u0011W\"ץK@?B\ry:*r Si\u0007z_c\u0011v3C:6u_V\u0018-\u000b\u0007fQŦ˥\u0011LD\u0018-wߥ\f~)}߻>^O`vY.\u001e\u001c%ʂWc,Lg>\fk\u0013\u0001בS~D\f $(Y~\u0012\u0007Jj\nTC\r\u0016u\u0010QO΃\u000fe~\u0018DU >%j,/Z\u001dj{54O\u0016ACbo\u00019Vh\u0011,':mX\u001dg\f Z/\bҥ^\u001c=8\u001b\u0007-p\u0012pj8\"\u0014;\u001d\"duOENh\u0011Jcg\u000e?#Ǖ9@\fX ͬƮD=WR;|b\u000ep\u00137N\u0010|AV\u0013埚cms2D6ېzя׊͟n$JO(\\ֿR\"Rd\u0013|v|S\u001dxk#\u001c}o\u0015gأ\u000eK*l\u0015\u0016KكN|d0/rjN\u0013#b\u0012\u001aBHPrV[0\u0011<j\u001ciey8]*h\u001bA\t\u0014\b_P%ZDqӟR\"*L/-T\u0016!Z\u0014r \u0019G\u0006՞PN\u0018MtCRh=Q\u000f=iTxjTvi\u000f=䌩\u0015P=\u0001Ь6BN@IBY\u0011X]nd\r>Ė)PS*o-~Dx\u001dy\".D\u001745p06EO\u0011\u0007\bZAjȦ\u0013\nUT\u001b) 1A\u0000Z\u0004ޛ\r-\"0mIUSs\u0015H葲\b=ϼ\u0019Dj)?\u00002b핥g,^]5>\\\u000bI\t}\nUǀ32\u0014|&zR\u0007Bo\u0012\u000e\">sỾu\u0016YmKʲ,\u001f'|\nh\u00198+>\u0011j~1p?߬\u001e\u0007$Zy\u0002\\w\ty\u0007\u000e\u00011\u0002\u0000tl\nl̓~\u0012, \u0002\u0011\u0002D1[C\u00175\u0010qr*&\u0012\"\u0013k&|}̵|^b34.=Yǅh\u0011zV?i\u0011N\rػr0h)d[D}B_20z3;mR]\r̃CRP3>\nTP@pxp.\u0014Ui<2\u0014!%&\u0005\u000f5\u0006z\u0010J$_fB{!V^$J\ncLg+$)NXGߙ\u000e%Ά\u0010MP\":\u001fP\u001f\b\"X\u000b\u0019!S+\"\u0007-\u0002@WZD\u0016b\u001c\u001e\u0018X\r\u00142T\fBv4ԎD$`\bwO\",\u001f\u0001EaPr\u0015߉u*e\u000f\u0013֯J~n\u001ckXl\u0015C\f\u000fjjP@r8h\u001bC\u0014\u0010CS~39\u001f@=ڏ._\u0004Yt\u001eAsf\u001aUk\u0005\b/fA\u000eL_YD\u0010D;s\u0017\u001cDO\u001aXDN\u0017J.j/.lM\u0006-\u001b\b\u000f\u0017({C'H\u001a\u0019QCh\u0011f\u001b\u000e\r55'\u000f&\u000e}\r\b+\u001c\u0018ek\u0003md\u001d\u001f\u0014O~rk6_DΉ^']u7VGA\t\u0005ES\u0006\u0015&%Ҫ񴏚}TRn\\\n~m\u0018//tkS\u0010z͵<XG\bNSs\u000f\u0016!4}h\u0011~y\u000b7wo\u0012i\u000eb\u0012\bC\u00111e:(,D1\"EDEY\u000b>\u0016\u0012bN.Y\u0017n}^by'\fJO̓\u001f38\\Rߏ|oK+'g魓vF5/TQ/|\u0018 fLH:\u0017\\;\u0016u9GQ\u000f=450q!x\u0004hVPj)o2\u0017^h\u0007w>z$S\u0006qޱGK!~(NV(B\u001c=,\u001d\u000f2Q5\u0013WW\u0017lT8\u0018g-Z\u001a]Gpb\u001bޓ+\u001frdAѵۉxYƅh\u0011՗\u0017f?i\u0011I\"b\u001a\u0016qf\tQzq嚆I\u0006B\u00188\u00046-gЈ\u0007,Մ걤R3\u0017`䇠zzN'OAOQ\u000bg@Xx}xꥇ\r\u0017)w\u001a\u0006i;7O\\Ό%\u0007i\u0003Pc\r-B$ZW[\u001f\\\u001e{ۤY\u000ff\f\u001fLBl\"TVO\u0019@v<Đ[3;erErUjم\u0007#\u001f`0{%~InC꼻Cr\u001b/zB݇+w|]pf\u000et#_2\u001c\"Qe\u0017F)rsC \u0007I!xw`\u001bj\u001e!#\u0006ף\\\u001eMGoS:\u001e\u0015\u0007v3\\xk8R\u0016*n,\u0014[\tq5\u000e\\L= t~Q^\u0017S \"\u0003z\u0001&^\u0014<\\y\r~+,/4\\Zb,M̡Q8\u0001\u000et\u0001{v \u000b&H?\\㇫kAPQ\u000f\u0002=\u0000927N7\u0014u6_^3\u001dc\n\u0007/\u001eE=\u0013QS\u000f\u0003깱\u0005#h'\u0001}pV\f\u000fw)m6,~|ǹ\u0005\u0013y\u001c\u0003\u0000Q<1_<x|롿P\u001dӀ\u000eLgٺi}.=r?XGtGд\u001b>Y\u0003|X~\u0004S,G@D`5[J#EFV<\\=v\u0006-\u0002r1{ig\nj$(bɻ\u000b\u0016\\1yyy-ӈ\u0016oE(GY\u0003\"\u0004\u0010ꁜN'\":Ԇ\u0007R]Ttpƞ\t> u\u000bnĻw܏V09i\n5C56\u001e\u000e\u001d\u0013\u0002u\u0007{KC<d5r1{H;\u000f'~rZ\u0010n/\u0011A\u0015\u001f&%\u0007>T1|qV\u0014\u000b]v]Y>s\u001fG\n,Ϋ\u0011vF\u0011EC\u001bb\\W7we8\f+\u000b\rٽӱ'\bmأ\n8+\u0006\u0000d=5:o\u0004\u000ff(q>9K\u0012(\f&ˤ\fەK^IIЋy\u001fq>#2GR{\riEχI\u0016/cj^D\u001az;;V\\\\\u0000b.\u00108g[\u000f(W\n\u0006f\u0012m\u0017{)uУ\u0013#\u001e\"xVҾP~4QO蛿X\u000b\u001c\u001fg˅\u00151\u001b,\u0016\rR4QZYrl\u00168xg\u0017\u000bnF6\u0014\fFJ5mI\u001cjۃJBW\u00127Ļ\u0013/w\u0013g\u0010p\u000e\u0018G\u0016I9|Bs\u0013\u0011AL\u0011\u0000YPJk\u0018G_qs1\tv\u0001L}G*;9f$'\u001d\u0019ç׍E\u0005ga#cu\u0001qV3Y,G\u001e<wY\u0013'\u0007<,>98\u0007\u0019gJ,@?\u001e6\u0019g:F=pPA.>\u0005\u0017\u0019u3\u001fS:,cŠ\u0011 7`\u001f@\u0015!(pVAps ;`\u000f\u000e\u0014\u0012G%V\u0016c\u0019\u0019\u0016\u000fQא9|\bjF|7O\u0002\u0015\u000eZCN\u0014\u0002\u0015AwD\f[y\n2tF!\"o\u0018\u0018\n\u001d[o@\u0004Q\u0013c}\u0015KgQVjj\u000f]jLk\u0015ɚ+K@PVrL)gX{a\tp\u000bZB8\u0013a\"\u0015'UD\u0015J\u0019\u0007U} ?Sz~>xg5wrꛀ.\u0015y\u001e}d\"P]Z\u0004R\u0002:Ӈs8S|v6Nrt\u0006d-eŃYͰ\u001c\u0017R҇\u000ffu\u0005[>*jJݩײ\u0006.8=?1(>\u00108ζftL\u001e-j\u001f>\u0016T䣎BtpPQ'>ʅ\\:{Il\u0015\u000e9{2\u001fo\b<,\"NeD\u001e{nE/\\7*./$I\u000e΁\u0018gXE}\u0003\u000e\u000frb[Yc\u0012cb\u0012BE?\u0006g|/壇<CJ,\u001aE~\u0014$5F.#\u0000I2뫔KQǙ@\u0017\u0007u_l\u0005Qt\u0010#3Y\u001e\u0019DX\u00191-f\fW\u001fV\u001bv_?:\u001flE_S\u0016{m W1\bٕ\u0016G͆a \bvr\u0003v\u0017*Mzp\n\u001erŝԗfk\u0003PoS[~z\u001ez\u00066=p^Eri:/\u0005󢧁8V\t?\u001ec+F~tV\u0012=E]c)imڒR?\u001e\"\u0006f>Pz-͍b\u0018<3\u001cOꏖ<;)>zp-΢\u000e1DoI\u001di1\u0017a\u0005%[0\u000e9E`p˵X\u000b \\|,b%:\u001dҪ\u001cA}¹\u0014r582\u00011^3 X\"4[\u000b,̷®qN;c&եA\u0004a5rB)\u0001}@RK,?ZC9+qA.-<\b}a\u0016//dOH5WEKf\u00039\u0014\u001dJ@\u001f\u0013꯯=\u0014\\\u0013Ğ\u0010\u001d3.F\u0013g|[[i*\u001e\u00144+U\u0017&^\t*>ZCdf)ֱ\u0018xxS)\u0005\u0002$s)W|X?\u001d?&I\t\u001f-Gµ<\\/r\u0017˷=Dv_u\u001545|۽,f\u001f>*W\u0014\u001c\u0005\\\\(^]J=P\u0010O>[m\u0010\u000e \n\u0004zU!\u0011V\u0014@w~;6ո8*~RH<2FLm\u001b/\u0015)t}]}\u001ft7b\u000b5\b<\u000f_}@`-ͪdfL\u00192\u0002ށ3Y\u001eqs\u0019\u001c3\"gMnrjGㅜ\u0013Ӹ++]wӝ߼\u000f~? \\U\u0012͍\u001bN]\u001ft\u0017AD?\u0010N\u0015{#5~ѻ}1<\u000e}\t:ʮ\u0019hlΕ+o.:0\u001e\u000eS\u000et|jO\u00128j11J&g[+q.o\tT 9Yn/\r|O\u001cMev\u0003$#s/\nv5ޥTum)'.\u00166\u0010 AЁ%g\u0016P/΋\u000f?RB퍥pn_l\u0017_U\u0006_x\u0000u<݌׈\r^;`\u0003\u0004vw}\rgG?g^jA\u0016/|ޢoy\u001b\u001fO=$p kQ>>\u001a?ν+^}Kߋ|\u0017Oqi\u0007Ud8p\u001fr\u0019Éǜ~3j%Pp@<zNkY:^lzD \u001d#vڮox\u0019\u001f}x8nV\u000f?\n\u0010z[2\u0010rw\u0010V:|m\u00111;\u0003Q\u000fJA\f<\u0017딒qS\u0005=(\u001cV?\u0017\u0007\bǧq\u0005Wfx6?Yyvoo\u0006/W\u0002\u0007tOx4oW\u0010\u0014-}K\u0018\\\fρ\u0014毪ziW\u0017\u001e\u0019{\u001fk\r-\u000fw\u0019ڟ\u0015;_dg#+_}cz˧\t[)\u0004On\fCz\u0004C\u000ey:\u001d&\u0013\bاC|\u0014O}!K$]~%K79x\u0012$:P9\r\u000fo{Q67Zע!w7\u000f?ӿ{#\b\u0017~IR/UÕ>?;\\}#|[&\u0007g\r6'V\fv\t\u001b\u0013-v~<\rlx1o<}_\u0016{\u001f^lk\u0015{\u0016\\[Nup\u0017\u0017\u000fs?xWtg\u0007~[\u001b~:\\r_F\u0003Wp{-z̺KY{\u000bu{j@qww\u001a6I,\u000b\u0005J\u001dk*\u000bPA\u000b\u0014PwW?³^y9;&\"iҔ532Y\u0019\u000b\tQa/\n\u0004U]EUunfo\u001c͞\u0012\u0017Iȼ\u000ec2gP\u001f\u001b\u0015S\u0013\u0002&\bQ,(\u001c\u0010S#:\u0014\u0005\u00167ͨn-yEDD߅\u0016sq\u0010\u001b0\u0015\u0014\u000eID{.\\B\b:\f9\u0003,\u0001\u0015d\u0003]QW!\u0019hL.\b/y\u001eUKc Od\u000ehrhGq\u001dP㼣1n;}?\u0005HS`\n\u001eL\u000e##\u0006KwJ\u00146\u000b\u0007>Hz[\"Ǻ_\u0002`?_-\u0004E\u0003E-\u0017%[\b\u000b:Œf\u000f,^\u00179?.?- rhS\u000bn$\u000f\u001bQ0\\ְ\u000f5cAN'\u000b!Z\u0003N\u0006\t7\u001em\n^]n'WTn&|t\\Վ_\u0011\u000bx6\"\u0011>-(?N>\u001f\u0010)\u001eK8Yɚx7r\u001c8MV\f9?%[o_\u0011%~\u0007qw\u0015qOEڍ|(\u0018\u0013cXz!#h>{\tQHݜJ]^-AN\u0017[(oɳ\u0013$q߄k,M\u001e\u000bw㷾\u001a`\u0005\u001f\u0018^\u001ea\tQ՚*\u001bp{ϒ\u0015dsd]\u0019娈|O؄\u001c\u0012?|\u000e\u0001QnEt\u0017\u0007TĈZ\u001d\u0003[?;-\u0017ɷCx'}\"\u001aPׄ.Ci2\u001c(>*nt&k\t\n{w5N6O^9tȈ\u001bybw\u0019_&\u0004/W\r~n^1}IN'f~]iUE;?JWƓ;Ban\t\\\u001bEu\u001a\u0001\u001c=\u000fs\"kI{\u000f`,^O\u0015a0\u000f/AO谿h*xWԾ#+>&,)Roޢ\u001f\u001e\u0006*0qO{\b\u0004Ӂ|;fC\u001e|ĲFů\u001cJ=%O:\u000b\f\u001e%\u001e~٬<\\T&xa',:+.s\u0011W{\u0017_\u0012Vt\u0017nr\u0010or\u0010\u0015^\u0010o,DZ=ډ+OJNCgjr?/*q;?h\u0013t%P_\u001d)\u0019\u0014]\u0011\fw\\\u0011\r\u0012]\u001f\\y3UaUbïbK|&\u0018k\r\u0012(\u001eN~8C\u001e7XD-x\\nGCE\u001aGɫj\u0007IaTҴޜ|-~`)u^iI%V\u0018{4%a^wوjk݄M\rޒ+?\u0014uH= zup!HY\u001b(jt&\fQ\u0015]\u0006oVC\u0012NtNqJ:ߒؔ\u0014-]v+7t(\u001c\u001b7rwc#:\u001b\"\u0004F\u001aPF\foCb\t'ndYH\"ySIu\u00047\tvW~ws\u0003Z\u0017b9u) \b\u001byefK7vwηegv>J5m)\u000fBqӁ\u000bLV85\u0017\u0005KԞnsw:P=m's\u0013%T\u0004\u0007W$ \u001b\u001e\u0017g:V\u001c-.rԭYdnwܽJ\nx\u00041[8ۉ⑺\bHGUxuԅ6sS\u000fOW\u0013׾=k<'~k]\b\u0016Q\u001b[\u001b)\u000f}tiP}Wrb,NW\u001fJK>?\u001fɲdmy~cd7\u001a\u0013*7_uW\u001bvprFPc\u0015цߏu^e&%6^IkH=בj Q6Z+\\;T+jQٶ]Obx\r?qE\u0016\u0015v8?+\bz,݁rW2w;ł0щ^oӻ\rxBn<uimStМ&?|\u000b\u0016n\u0013WZ\u0005{6}xrE*L1t*ֱ-55),Ϳ),5G\u0016\u0014),L4w3\u001f)Fe\\n\u0010pK\u0011s3\u00167rMp|hEp\\h\u000b-\t\u0016bArĞ|1j.~zRAIՖAP7;L\u001fۂyc\u000b]G~k\u000e\u001dyiv\u001dŽ\rD\u0013ʿ?l\u001fg9Ưh\u001dvV.εe]\u0016V\u0003A7\u0014Ys\u001a϶\u001c2ADPVsƬmm$qǻ\u001fovm\u0002\u001bB[\"b\u0002cxK6\u001659GU9E_.ultkp?ԹDWV<^\u0013\u0017^\u0015$shJ4\u001dy\u0013)\u001cm\f*Ś8{Js\u0007wGCB^\u000bAG\u000eU[G\u0011^GP{3/\u001ei\u0012}\"F\u0007}\u0005{%#fCuRϝ7\u001e\u0003&,n<)i,\u001e4\u001by/mH\u000fmy#UߋxPic\u0005IGo't&F6߫w6D:Gisz\u0007\u001f]\\׻\u0016yY\u0013]\u0013^\u001b\u001fX\u0017(T\u001c\u0005u<ZCpT(z8b!o)zqƬϬ4̼<V4?wT\u000b:%m\u001ew[ߵ9J`L~R\u0014\u0010Z\u001b 4*\nN`73ॶ}!\u000e\t\u0005m3NvN3\u001b*(l<V%j0b{|jJ,/ա3']<R\u0011I6\u0016$ȒcQP\u001e\u0004j7r/rJO?xO~cg=PPIPm'lr\u0016V:j\u001aܐ_v\u001d\u0012\u001f\\\u0013W\u0013%󮏒'ք\u0012}&oi\u001e>~\fdYi`Bv{s\u001c+ic^ic[ژ4vmw3#\u001a\u001dn_+LZk.\nj5E]Gㄎu\u001a<bkc5Ŗ:Ggz$\u001c\u001d(H\u0019\fҶ&~FFxB$&W]/sK8ݒ\u001ew%#xGT2.rT<\u0016)\u0016&\n\u0016<\nwC_-۫δdw\u001cPh12jyc\u0015lW\u0017rhW>hxR\u001eIQC2<K7!+.V%,4eG,Vz6߅Pǉ<YT,7ަWq\u001fmj4H\fGh0-0\u0018I1+}\u0007}V\u001f@}\u000f|4EFqk8\u000fh]\u000f+QyER=\u001a2j.^]le\u0007B\u0005-mTsG<\u001aqjW}l:Yʭ\u0012b[~!X\u000e$\u0017&:ve4\u0007gz7ƤI$Dz\b\u0006ڠ﬉\u0019xhם!%\u0002CR\u0004:nx7Wn\u0013m*Y\u0019E\u001aF//5}O\t\u000b\\\u001bU+qOzW\u001aX\u0015\u001ak~5֦f,92O\f^$|q(iS\u0010zu{l;}g}{I\u0013`\u001d.A56DSZ\\\u001e\u000b}VeKXSGxB_\u001c~'5N?w;ZgbiV׸t0P\u0014\u000fIy#:\u001aY\u0011u9(\u001c1;''\u0002{5\r}`n\ru!i:غ\r0\u000f9m3sNxyVEf\u001c\\LIp((>_\u001aU\u001cp\t\u000em92`im̱\u0002\u0019̋R2\u0007ʲ+|aސP\u0013 Cy\u001e'L?\u0016Egzǿys.稻=1ԏ+v3\f`¥`\u001c\u0004\u0001\u000b\n\u000f\t\u0010u%\n\u000f\u0012`̅`\u0001\u0007k\u001e0\u0007̐\u000f*.\u0005\u000b'\u0006KU6\u000bwu.\u0003мR;[%}\u00168\u0004?;Is'y_\u0011S\\\u001a#67!*Pv.4շ.2%}`\u001dfL}Ie\u0012c*.'X\f=b\\ |ڢ\u0013\u001b/Dt:E9\u00185hzllru9aeK\rl/.G~\\[r\u0016|\ntJ؆`*\f`\u0012<ßT,Ta6X\u0014lc\u0002\u000eE+_x1E#ylN;BB\u0014\u000e\b\u0003P\u000f\u0013/Շ%%\u000f*x'~1zI@rO\nkq\u001fK_-)ɬ\rLp\f\u001dt2|6doF\f7đw.-*D.rk5\u0002m\u0001ys\fҶjR0\u0003L\u0003\u0013x\u0004\u0014\u0012l\u0002\u0001?VL\u0004k\u001cIym\n/\u000el.\u0004\u0007\u0010#w\rR?PEH8HP\u001c\u0014Pv)NVr9>$ Zܽ\"߸҇ޱO\u0016y[+}[̕dkosK\u0010'\u001f΄7\u001d0\u0006w9E%{%ӬCyk\u001d*G6\u001e<\n46T\u000e\r_oLko\u001e\n̈́8i`̍`.+p$~\u000ew\u0014ƍ1\u0013(kpG\u001b\"br|㠏yU\u0011_\u001b.3\u001f|\u001a\u0015P\u001dl;؂2/< DwNP귶`϶\u000f#b:bٿvG.q\b,2\u001ba\u0002s\u0019SafASs֚zcZ햃w4vߛ\r'zpl[z(}\u001d\fԅ[v̏(97'y\u0003sYhh\fe.ǣq,|\u001fċ\u00197K\u0014{ǵ{&VǊ>gcKSa$;_Agـp_P\u001b\u0011ҟ}6g*|9\u000blֹ\u0000\u000eOOծ+\"R^\u0007};ioR\u0007e^\t}\u0012޽MxS\u0013\u0017Y\u0016$J\nJ\b\u001c\u0016]5\u001e[U^iUܯy7n;4l.oټ\u001b̕D,Og_S_\u00123s<c&dU`J@\bX{\u0004m%B`<\u0007\u001eĆ\u0007ǟ\u001eax\u0012^qAbc\\mw\u0014_\u001d[\u0003sF蟹sTjrP\n\u000bƅ{Exs[z\rW~{\u001c3`\u000fMQ ?:sfl\u0007\u0000QҹEo\u000f֝e'H_aо537;\u0019aKwJ;\nj7\u0013}?-O)\r7\u001c`T\u0015fnO~߽41\u001d\u0007\u0013Ow\u0018\u0013wek`\u0013!J;t^dn}9ePW\u0001\t\u0017T\u0017fT{(=,(\tzơ÷6<\u000ewiBԪNA\u0015ma\u001d?\u0002s\n4r7\t;\u0019g\u0005\u0015\u0016rs8@\u0000%@Ei\u0015\u0012LSX\u0001fN\b\u0003ռco4-P'[0\u001e\u0010]\u0013 X\u0015j:*dU)1qϠ̀a\u0004\u001a_]~!\u00169;b㍿:Y\u001fV\u001f0\u0010\n/c\u0003D?\u0015/<\n\u0012jU`\u001d``^:{\u000f\u000b̚\u0015\u001a\u0005(O\fI)hۭ\u001e\\#Zv/mkv'̮Z\u0014\fK_vGq՞2̡2k>WG꼳\u001a=3:S<SQݥYC?\u0007QPKUi)\n\u000eG\u0011E~\u0018?\u0017@_\u0004V\\\u000bTo\u0004*\u00137YS\u000beka\u0005Sr\u0004\u0007B\u0007f\u001a-\u0005\u0003o=e?TV#.ռIx޽++ug<z=\"@Mkߢo/|$Ƴ\u0004ƏL\f8J|8N\u000bTvsvy\u000b\u000f\u0005\u0015\u001c0o\u0005\u000f[\u0001\u000be`\u001a\u0012l2\u0002\u0007<:>y\u0019\u001e-=),>_\n\u0004T{-\u000b**<yŽ+m\u001a}-_c?3v!?9\f>\u001cd#l`ޤ`-``&1X\u0014X\u0006\u001e'B`9\u000e%l0[U\u001b̟Ǽ\u0000\u000ez6M@벆ik˶{\u001cj2RUOjyR^\u0002cmCgh{Hl=3\u0005\u0006?h]&֘h\u001e<4~7\u0015;\u0013\u00197\u000f,\n̛\u001e*oy\u001d3s\u0013<@U riµf`\n\u0011X\u000e3\b\u0002;)蟩^H,w>G6\u0005\u001c+YCOb\u000b\u001c**d4z<=3[WyZ\"(Z>jm?\nCLY~\u001ePV\u0015\u0012W*pRX\u0002_[\u00021\u000e\u000f+)\u001ba۶9vCԀ6\u0002󷛁E\u001d2M\u000f\u0015\u0002Q`\u001d\u0006Y>?\u0018l*z\u001b1T~$=]LL\n{ö=\u0002c\\UG|wGb]V+\\Cr{qk!\",\u0005U:n\u0019l|hSaĞ=@uZ\u000fM\u0002N`ad9\u0006V8\u0001V\u001fv\u0006+u|*-oD\u0005,Ҿ\b\u0016kXOu\u00110珮ֿ\bHo~\u001b]T\u001dj dY\t\u0013ZݘuHחҫ/rE&B9\"^0M^\n}\n\u001c%\"g3\u0002-\u0003s'\u0000*A\b\u0019Y0\u0000K7mm'C^`%+\u0016,3\b\u0005l\tl|\u000e\\Vye}CVDԛ;/o|[`*bU~w<^V\u0017kcq:f?s/_3\u0017\bGk2k\u0018cY\n-X.҂6h\bC;\\]\f\u0016o%Oa\u0005+\r|\rL\u0007n5\u0003K9g\u0012\u0006(P\u0015:u\u001e=OޮQK|M[ޕҐKw&4фzFfni\u0003u^\u0019\u001eh-IIW,/?ǟc\u001al\u000b>\u0003K\u0017keKa;%ZW9s\u0007L8\\[8 X00X\u000e\u0016.gEk\b|-X\u000363c\u000fVO\u00161i\u0013z\u001f5K4մQ`ۘWҚ\u0012o}yU-/h\u0003\u0007(nAtv:a˥*S\u0019&2!򒓘,\u000bE`&\u001c97\u00050\u001ef\u00038U{,u\\|!\b\u0005ʛb\u000ep^S\u0004XU\bVk\u0001Ya`3!\u0003;=W\u001e;ecz\bd6!\u000458\u001cpv]sNU߃X\\Y˲WdR\u0007㼛b3/F\u000e׺D%\r6k1\u0019@\u001f2r\u0010/g)-9B8\u001fU\u0012:Y6y\f\n5\u001f~x(jx\u001b\u0012ZO=\u001cLۼ!3yWOwɄC535\u001e4\u001a&3OKi3mRTϡ\u001cOPZ\u001d#-=n+3\tU|\u0004mN3#D\u0005``\u0006CI4X56`CMAm\u000f-\u0017*nx+zҮ)Z(۹h~کOMMA[\n9Z\u001a&Zװ\u001buBvZ\u001b/85$Ƣ\u0005+\u0017^uщl\u00035\u0001\u0010l\u0017_l;\u0004Nr+\u001c_R\u00193g|x:D\u001b5f,\u0010l.-(\r=\u000eы^wi;\u0010<sm\u0016a\b)gwCwմA*\u001a_\u0017\u001eyBo/\u0019ǘ#p\u0016V.2k_ˉ,]#\u001c8'|\u0018~\u000f\u0016?o\u001aT?LS>\u000b\nĒ'\r3z'V)m.\nU=\u001efe0\u000e\u0016/e\u001b='j\u001d\u0017\u001b\u00006\u0007\u000fق\r;qf6XV\u0007l-\u0000P瞌wtfߗZ\u0006ʹ\u0010m}is+Z\u00127g\u001f4F7U4]I\u0013Zڜ:jO5S\u001f\u001a|'X\u0017~\t%F\u0015_8W\u001fZ[u1ҿ6<A+ml\u0005GU\u001b=<T\u0012,X\u001ba\u0002ځ=?؇\u0003'S\u0015ŔT{GAs9Ygد&z{\u000bvgq4[35NV~~L/x]D]qF%\u0001buc.\u0011mBx辙t\\[V,1 N(/[pِi+\u001d`6\rb=`&\u001es/=vo\u0006L۟AB۫ƍ~~\u0006if;_ޡ=@k\u001bN\u001fsiW{j}\r±׾h\r\u0000ڞkz#z^5n͹i\u001fno\rԗ\u000f\u001f,\u0013\u001a;\u0002\u0003\u001dmQ\u00186u\"6ՅS3\u0005^\u000fW\u0010\u001b\n\u001e9u\tx96a7n\u0005SWM\u0005g\u001ckZr\u00004M?\u0018ޭߑ||8\u000eOa+\u0005M4ƪ1\nژB[GiW>$X/i={\u0013ǿ`\u0011;s`'wkbxЛvv'\t*\\Miڅ}#\u001eQmXˍXĽF\u00132ͼ8TϜJ\u001b;B!m!\u001fC\u0003a*v\u0000\u001f5\t\n\u000b\te\u00057\u0004[]\u0015\\r\u0017k\u0007|b뽦\u000f\u0005Tճ˜d@\rC׸p3Y2V\u001cA.Jh6;8NmL}8W4+Ji\u0003A[\u0000ιTX+\u0004,\u000bgE΍\u001dn;O[*1{\u00057vԫnK㤨$w07m,W\u000bQ[\u0005^%~lek\u000e3u?ߔaظ\u000fQr\u001a\u001e\u001f\r?\u0012\u0019\u0011\u0014k\u0011\u0007]7_ۘ\u0011\r\u0017fU\u0005m\u0003,sJ&\u000fme^;s2eVC\u000f>ZZ`pfà\u001f74ٻ\u0013l5\u000f=y\u000f\u001f6M\u001fsJTᙞQ04\u0003LrRIB\u0019\u0003o,6'II\u0013/c\u0000d\u0013$e3qS\u000e\u001a\u0001db\u0002.]*\u0019\n0\u0001ჽP9\u001a/Z-a_i\t\u00077n?귖`W?jӟh\u001av&\"KNU\u001d^Q\u0011v1m!߿\u000f<\u0012߹U;9OI.½\u0010<\r'\u0016mrGt{<~b.g\\* }(8k5%:hLHUU\u0006H^6\u0012\u0014\u0004]\\,\b&\u000b\\\u0014},ũ?XΙ\u000e,^\u00056\u001a:\u000e\u001fOo\u001f\tX_\u001eCkt\u00064eO\u000b87P72\u0003zZ<`5\u0003\u0014f&oquOjAB!*&\u0011\u0017Y6\u001f_\u0000\u001cDǺ@Gs\u000fdE;o\u0013z)^B6\\ta#\u0013\u001e\u0013\tKqHKVޫ-!_m'2D)\fv#XM{_\r1keȑG[\u001ajW*\u001dV{,W\\%\u0013u.<TE/&bl\u0017]\u0010\r}u3~@q\u0012re?M~\u001c6qJy:زt>ؾ`\u0001\u0002S'\\m~i>'fr6VT[{\u000bw\u0017\u0003ޭ_\u000fVCml\u001a͗&w慼^_̞˷\u0018ǳtT۞Qb֜͞6-jv^'YcY[\r\u001f\u0014yoU06ߠ\u0006k\u0016r\u001a\u0011:\u0005&ݷa\"x<~?spm\u0015sqX>D-3\t\\ĉմ7\u0017j\u001d9\u0017wLT\\\u0012\u001e7\u0016\u00117\u0017\u0012Bi\u0003탇\u0001\u0000+.\u0007|<ᛴX'+K)މ'>Oy\u000b>E>\u0017=\u0002+HExިYqӪZ\u001f˚^⢆\u001bch_\u0005\u0016;xy_l+\u001d\fTx\u0000\u0003.\u0005*\u0013`=\u0000е[@ëdv;}`&/\u001f}_oi&Ler\fcT~\"\u0007\u0014S\u0001S6ٵ\u0007Դ<\u0015b|sW9\u0015y@\u000fo\u0002\u0006ᗼ\u0010U\u001f%\u000b֐\u0011fw\u0018Xԋ[l\u0007\b\u0006$\u001b\u000fQ6\u0012\u0010PI{uɭk}3\u0016v`H R{k0\u0007v~/\u0017{/Pg[\u0000]19֍dEAu\u0013\u001b?0>p\u0001G#Z,Z\u0003\u0018]\u0001\u001c^\u000345RS朧i\u0019\u0012xڻ\u0003:_\u00163a\u000f\u0017?̿\b\u000b_Aej7p\u0013w>o݈P\rrHe\u001e n\u001aa:ܴ]Y\u00039\u000fi\u001d=\b+>mtީSL\u001dY\u0006\"1ؠ62*\rYiCrb\r\"-5\u001aǲtP0W0\u0005/\u0001{\u0000\u00036\u000bVN3^S& \b\"\u0017{\u0002\f-\u001etu\u0019\u0007\u0012Z\u0011JN!\u0013f3\u000e`靇kK\tyw<>W5'-*_\u0006/DKw\\#\u0007+EO;u5:HIY+qwG\u0004\\NQ懾X)\u0017\u000f\u0017?\u000f?;Iשpι)\u000f]܏\u0005t-\u001fdy34\u0005ưM@k\u001aw\u0000\u001d\\'7YV\u000eݮ?5Ó\u0000'\u000b}*ڋF^k7U.be.E\u001a\u0018jha7VL\\\"h8\u001ePmlmbqa\u0005u}ĀH>O9Hfik>eMw~fu\"<+fdR\u0007f\\\u0007s\u001eڂKq3ֿC0hYid髤\u0006\u001c1`/(p\u001dfh\u001b\n=ZPO\ftƝ@Б,\u001a.\u000bh\u001c\u0004,c@(T0?:7s:7H\u001b\u0010q\u000b\t}\u0010>k=\u0012\u0016?0\u0004\u0015}\u0014?E\u001dȂ!r1E\u0015gƮ\\}2\u0016\nVp2wr\n~hfT}ut7+>V!eKiI&#\u001e~\u001dpm\u001e+^s>\bn\"qKT_Lw\u0011X˩\u0007Z\u000b\u000em\rm='lHKO\u0014ر[~}FA* \u0004xD>\u0016h\u0013᝼rMyd, ܒM]^!ƈ\u0016Vk&|h=I<\u001a$Үӂ\u001b5炧\u0011\u0003aW\u0017rS[\u0010/\u0007%K}Rf\u001f+zNk7\u001a{>Td\u0002\u0003<B\fBZ\u0017l5KtZk7k׀o\u000bP\b\u0018<ӧ\r2C\u0019HpP8\u0012?!Ȫ3YɫzH\u0003Br^\u001f/.%<\u0013K^/?ru\u0005|Tk^i\u0016E,2FuصQ\rIu.V0`\u0015ݣfa^\\ٜKekU%\u0017uSr\"W\u00056(oı;+sFMPcUlX7mQ^\f\u000e\u001c\u0001Z\u000f\u0002cC6Ca\u0013\n\f\u0017\u0019BJ8l+HN\u0005NC[3>\u0004ݧ=TNan\u0004~6\u0007\u0019Q\u0003,G.<\u0006mUBT)Ư}F\u0014m!|\u0016.*H;\u0010{4b~IWm{ߏ9\u000bk\u0011-y6>p2\u001a\u0017C\u001f\b\u0001ڛ\u000fm}\u000e\u001ep5v>d\u001a{,rw8C\u0019ŀ/tR \u0016I-\u000eu\u0018=vsD\u0007\"k\u000f`4\u000e-_\u001c>N[H^T//Jg`\u001dU5510K\u0017b\u0019Us\u0014{8?\u001b\u0011ro\u0005L68f\u0015-<YqӚ>*\u000fՐS\u000f\u001dc\u000e{Rw\u0014lT]\t6L]\u0002\u001f\u0017\u0002\u001d#\u0012pm/\u001d8\"f}a\u001cOr^Q]S\u001b\u001c\f\r;\u00172p5GB`4IxIaFٺL,\u0015\u0005vN\u0013V #*\"\nLs2/y?q_\u0017\u001a\u0012\u0017Bg\n#Uf-2\u001bg>c^V#=h儴q\u000f\u0011`\u001dy)s)\u001ez+\u0011~w\u001d\u0013qs˷)s}焾Z;'\r녝\u0007Z@c\u001e0Zɡ}ܓ\u0013w\u0004VL\u0005VNU\u0001\u001bg,\u0004`+Se{[О<G(Y!u\u00023{E._\u0000H\tEF\u00100\u0005\u0010,\u001e 2\u001fg\u001e&4Aw\u0010(\u0010g#\u0002\u001el3|\u0000Kk>@^\u001dczݵ˰].\u0013~\u0017\u001f-ל,Ɵ\u00130&r\u0017NMd'uu\b\u0006lso=\u0001?\u00139\u0003wϞtp\u001bl\u0016S٘\u0016\u0016\u0013~\b/ތ\u0010ydP\u001aD\u0014;\u00130\u001fCH\rXZ\u0001\"CkHs\u0007\u0019;,\u0000\u000fg\u001fǾ\u001fQGP-&^HxW\u000eqcof}=\u001fw\u000eηwH[\u0019i\"L,j,*l+7k`?w5LYe\u000ev\n6Z\u000e\u0002\u000el\u000e\u001c9\u0002X\u001em0?60\u0001\u0000z:lg\u0001\u001cK{\u0005s2\u001eD\u0005FZH-1.=<ÏKxl?guh n{2\u0011\u0012߮\u0015\"%rVP^H\u0013Kp/|,\u0016\u0014vۃl,6E\u0017\tÓ\u001a>\u0014DC॔$\f\bu[n\r{\u001fV9$sx?/\u0012\u0012GpZހo%Ǳ9DN\u001ew\u001bo\u001eejp`&U3~\u0007\u0010#\u0012iË.X+N+\u0011&V\u001fF5C\n|\t0a\u0013azC{ j\u0014ƁńTK]Ok?\u001a3?Q7\u0017T\tx x)Tٓ!71!밸[gexНkA\u0016Q0~.[23\nl<E\u0011;\u00114\u0004q\u001b\u0004?;MFz<3\u0017%\u001fc>\u0013H\u0005dPZ,i7/\u000bęi$\u0004\u001dI^OiAz^\u000fTJP*\u0017m>\u0017\f\u0013+v0#\u001eC{\u00135m%7\u0006#Mw.f\u00067{!/:/oD\u0013;65y_4\u0016\u0018\u0019%\u0016Y3:-\u001d܌=g|\u00133gE̓}\u0001=h\\'[g\n:{\"bP2\u001a/VNJs,*Ft]%N1sDG'\u001eu(G'J|IU\u0007\u0013=\u0012UXVa\"Q4@\\\u001bk զ!#syC\u001a[5'Äe1f?۪N^YAzŢ\u001eg.?\u0019\u0010\u000buGvSL)V\u0019\u001c9\u001eVv=S.=Xο\u0002{6\u0004:\u0000x\"\u0017\u0007\u001faI\u0019͏F'qi<Le\u0012M2`\u0013ӣeU\u001d\u00128Ϡ\u001c\\'\u000b\u0013\u0017϶O7R}]Se\u000bQ;+\u0011k\u0003wEƫ8Iz%c4u.z\u0002-!=\u00131Z.q{׉dFo'Z1r&vm<ҚGAF\u00158O\u001aQ\u000f\tBo\u001d`Vr,)@Ly-@Qw{D\u0017>j3:\u000eQFHB\u001akH{\bOaR9]dA'|%&\u001ewR#\u001aD\rHw\u000e\r~\u001dac'}~\\v#s\u001eZW;ǫgfv\u001cB9\u0004ܰ\u000f\u001fGzH;'sN\u0001\u0018\u0006Y݇pi\u000e\u0004\u0003]\u0001t\u0000PgP#mJ/{\t9ԅYy''L+r-O) f\u0007\\\u001fz&04o=\u0015|;AzƵw\u0012=hiXK*j;\b~\"6RV\u0017O: ` kQպ:m\"wP\u000fǢ\n\u001b\\%!hy+ga\u0010\\#~.;CFh/.~!#o.\u000e\u000eQ\u0003|)DF&ӧ0|\u0004eh\"f)@6nd`jh>^p:t\u0006z(4\u0011W\tP<,;*C0Qz\f\u00186]\u001f@fXb\u001e4H\u000e1\u000b<}i\u001a᝾q\u0016\u0017$\u0015t\u000e\u00121py1b&\u0018L)8;\u0005?\u001d0\u00151\u0018qq\u00117ညNɓѳV,{D\u0003VG:\u001eobU\u0014\u000e\u001cY\u001e\u0017C|<El&1D:OG\u001a.ĭ\u001e#6^C5\u0002ҌFk'P͵H\tَg\u0010\u001b\u0004u\u0012?2;\u000f94(ğ95M^\u0016\u00112\n5\f\u0010\u0003\f\u001c(NyLdq'#wqq\u0013\u0013ppnSaq,a]`d\"\u0000/e1\u0011G:@)Ɉ\t\tKSy6J\u00140&m`_,BCH\u00157?dHF?\nFK\u0005=^[-\b^%\bJ\t\u0006{a\\\u0015l,\u0017<zy^5ݪQ\u001e\u0013\u0016\u0007qwe(W\u000ei4h_>17a\rO\u001a<\u000f}{<`\u0006\u0007\u001cܰ\u0017Ú\u0000i:1q\u0014##\u0016s,)\u001a-ߴ\u00048=e%{k`TtN;7\u0019iE!n\t'f\u001dǣ-_#xPq~\u0015!M%Lf\u0007Q0%}q}O\u0004\u0014@\u001aD()co%\u001dTLDr(#\u0003o@q\u0016<SH\u001f;{y*\b·>w2i\u0007}S\u0000M:)\u0019\u001b\u0018ȧ\u0000If\u0018kО\u0010\n=bHK\bơӤc@9N\u0017\\\fRA]\u0005A7 :\u00184~jd][\u0010ьr\ft\f\u0007?0\u000b0,XS}\u0003]ԽNf\u001c3>Sf\nɟF\fc%?v/0-7!o$H\u001b(\u001eyct\u001dÐY1g&f\u0019\rE(F\u001c\u0011\u0000\u0012\u0017:e+z\u001ebbx8DN\u00119\u001cu\u001cq>l&qu<:\u0014QH+#F\n\u0012jH7ڤGdԨS11w\u00117!f'bn4-^=oZ\t\r\u0019f\u0007|۝(\u000b^tX\bJ;>=T#\u001dW\u001c\nS\f\u000b3aZ\u00158\u0007\bF|K9F`ߚ@[\u0018p.(\u000e\nv\\\u001aB[!Mn?K?nyN\u001f-*\tg\u0011! \u001ft][M\u0002\u000eB\u0010v#]蟼\u0004k(xe?2K\u001fb\u000e⓹b)\u0019q\u0000qgѾzĀ\u001eu\u001d\u0005/22\u0007nQ0{NBlN\"dxо&\u0014'\u0000\tE\u0019hc33p.y&-@<\u0002]$(2\u001cpPb\u000blB\\YEڏC:u>Aح\rH's\u0019׍\u001axj~2N\u000bfH3f{%,@:»B;$T\u0017a&`_\"n*L%\\bf\u0011vV\u0010+ra\u0018мP\u0016rqq\fK?c)q6p\u001a\f'!_\u0002zL,wRAZ\"߼\u0015\foO\u0010q\u0018+j?[V:bu`@-ą\u0018\u0015aHtZFO\ns>\"Ȫ\u0011]o\b\u001btH.\u0005@ߙxN$\u0016%+5P=(baYmj{\u0012짘Y)Om݇~A\u0013}e\u0002\u0005D\u0002DdD\u0013)yy\u001cv\u0012>5\u0016سz\u0017طi7@\u0016r\u001c\nS2qJ1l&҉GZ\fG)HY\u001e}3\u0011Ϝ\u0012\u0002ِ>\u0015z\u0014\u0014\u0010Q\u0019t}\n?z?rȜxI%wG1!d\u001a\u001b26\u0001A<S\u001fz3򓺺|\u0006wŌS,ĝb8N,1Gz&\b\u0004\u0016H˛шwB9\\Wb4?K\u000eSh\n\"\u001foAvM؜SB`dB>2\\\r~Q\u001es\\+d/Qq\u0010q\u0018\u000bD\u0010\u0007@\u001cR\u0011i\u001dI%D\r\\<O8{i\u001a\"9\u000fLY.ۀdΐ\u00017dv\rF)J6p\u0012ys\u0012\u0006\u001f\u0017\u0007ҕn[\u000f\n 8QCcҐ6\u0011y.<tOOzf,`\u0017NuAF8HlD\u001cF,Ds,/s\t2D:zz\u0006oLxg/brɸ݂\u000fG\u0004Y\u0006\u0006Yv\u001dWx\u0010'¹Y蛴X\u00155_\u0018](\u0014ViAd0!\u0002-n\u001dw*h\u001abbiȜ\u0011C*o\u0018[uR\u0007M\u0004f.a\u0019/Xg\bS'1ʘCT86i.q\b8x@\rXQ9rGZ`Dz:e\bֵ\u001c.\tpk;%Ĩ\u0010E0·*3lZ8Q_k{\u0005^<u\u001a\u0002.iB{IbF0x0so|\"\\#g!MF8m?9\u0019H'\\\u0006\u0006ND)%S\u0012\u0012E\u0006-\u001f7342\u0006|L\u000e1\u00167\u001bƭO+1V\t\u0013\u001ed\u0007\u0011\u0015i2\fx\nA*(c\u0005䥾EmD9\u001c\u0001▜P`6p\\*Iav\u0001#&\u000e\u0019p\u00037\u0015i!1z$='\u001c=P~W\"g\u0014O\u0018៿5osq\u001cb1\u0003ᙃ\u001ad|>hCKQ'pM[he7k\u00171к\u0018\u000e\u0017\fټ8I\u0007i\u001ddra>\u0010\u001cs~5CW\u000e!P&_ϗn R;\u000e[\u000fG結b*eyV\t{$,Fdjr99\r0N\u001bO؇TMH򿹂^]Ng(!~2\u000fSwW1ǗV0v]lIa~)\u001eY\u001eL\f\u0014T\u001a\u0010q19H\bgt$\u00113\u0006\u001d<*oc\u0011[\u0005\u0017C\u000bJ\u0002·\u0014:\u0004\u0010摩jz=2Nk*+һ>3\r1Ψ?YX\u0002tsD\u0018M5EP\u001eBh@9 M$U^GbhU*HX`Qe\u001b0\"]|\u00128S\u0010~(Q4@(RgXާ\u0003I\\拃\u000b7#Ɨ9ظ0`\u0012;&#Q87WH[_\u0000ZYU:5&kXf\u0001F\u001bՔ\u0019jގ4\u0007Q=\":=\r\u0015\u0019\"3p\u0018o6?k%H/ro5n\u0017<g餄\u001e/\u0011/\u0013zX0./Xr\u0005Y\u0011\u0011֣>DţN#.\u001fQJ$M_\u0014p#\tn.GW\u00002\u0011]=s\u0011H\u001285\u0014Ji3\u0014\u0005=݌twH(a\u0002[ytF3.qZiF-\u000bi\"g;²?+p\u0011\u0016 `<\u0010\u001e~\u001b\u0011`5\u0011\u001aT\u0005k{kU6/_:U\u001d\u001c£^n&\"J\u0017S\u0019\u001fs{:'m\u0011ZC|\u0004\u001ddV\u0011=6\u0000Яr)ś\u0013;N#lP\\dYCg\"V\nZg\u0018\u0006n\u0013Ѽ\u0013.\bq\u0010i\"]n\u0005Wf04Ȝ\u000f\u0006\f v1I<KGEĖS'\u0015\ty-&\u0018'8Ѵh*_Y)@܈\u0001\u00148\u0003q\u0011gFd\u0018+\f!p\u001a-1t)i\"/-naX^IQ7\u001eԃ.\u0002ٌ\u0011\u000eiJ@\u0016w5\f\u000f\u001b\u001d6\u0016\u001eA1agpd\u0011;/bYbg?j\u0010}2\\';+a\u00050lsS\u0011a3ً3Y##\u001d9%ж\u0010k\u001e}FX\r\u0017g|Z蛱\u0004\u0013us\"e6\u001eIG\u0004\u0019]:{\u001fE?)#\u0018~\u000bb\u0007F>A\f@>)LFTV.x$R`ctCw~g\u000b;,-K^{7ɰuCy\u0004wVf\u0015\n7\u0012ovpyEu,y9f6\u001ast\u00159\u0019^1\"&F'br=Fqj\u0010\u000f8\u001d\u000b᳐z1\n}\u0017;+\u0004`~=U䓰\u0010iƊ]aE\f̅y\u0011>)+yR\f/S\u000b\u0005N\ti-\u0012hǑ*3|<\u0018ǘ5s1㊈τ4\u0019W\u0018-nقq\u001a\u001df ^[|ѕآ\u0014\u000e[W\rl#\b73,j3:ty݄4kh\fğ.\fCrk\nbG&dg,\"s\r Y\u0012a#xB߻!^\u0018C\"\u000bdgE,F/v\u0004{ba˝\u0012\"\u0018\u0018\u001d>\u0018nk|\u001a<\u000bq,EHK_\u0006}!\u001cWdƾ^Fp{{\"Y웴zLզiU\u0006),nʪ\u000fy/\u001b;ߢt%Oе\u0017]B\u0014\u0010CS䞲P蝽8&?~q<u>\\\u0019xba\u0016rlL8j~7V\b<W1\u001f?í.\u0011fr\\\u0010@;Qd8g3,v\"Eb64[Od\u001dA\\\"ȃy\u000fb 9ې\u000f\u0018v\u0016\u0012`g-CkD(&Y\u0012b#eDD\u0002\u001b\tG#\u00167ç/N\\'i2\u0011{w\u0001Jx\u00071~\u0018}(o\u0015\\\u001f\"=;!3̶%ĵz\u001dt\rZ+EZܔc2\u0001&Q\u001a('EkB[Iu#\f\u001b?k\u0019ZoaؿYWc\f\tL&FJ\u0014d5衵Y(\nG {\u0016B2BdT';';K\u0002}(H\u001cg\u000b\u001cǡ4EgÔQ\u000e|7q13('q\u0007}\\\u0014;\u0004.\u0019\u0016S\u001cyϟGu( }9f}(א'N{ezz[\u001cx\f\u000bĵa\u001dA \u001b\"v,b1\u0013\u0001\u0010;W]?X?\u0003w^Ƙ\u0000\u0005<!P6rvD,\b &6\u0005}\u0006\u0019U\r\u0002KSM8؈\u0000F,. $G\u0015Į!s$)\u0010\u0007\u001d\f\u0014ŝKע\u0003\u0005{*a)@5+vsPy\u0003\u0011;L\u0011;OP@,h?1,}\u0003CTD3LO:O6\u0018\u0002+q\u0014\u0005} ({%b \"\u001avfɵC*\u0010;G╹\u00141*\u0004\u0019(Gs\nis3|+ˉZ\r\u0014[\u0018F%wx,.6\".GV\r̷4%\u001e҅\u0013^͜c発>8g8/(\u0014^H;9n\u000fb7VcI\f;UgY\u001e2R0DsQd/Oy][\u00196\\%Fd\u00123;/vxVc=ڶm\u0005\u0001sB\u0016s9lsDUb\u0015 I\u0002s\u001c\u0011\u0001s9+\u0004Q09g{.owνe+Zk1c9zs$\bn\u0007v|`H{C\u0003\u0004Z`=d~\r\u0002{w\bv-\u001c\nk\rR\u00013P\u001f}ܙ\u0001M\rK:yI^΁=>{7h~Y\u0014r\u0007l\u00156-N\u000b\u0015\\\t\u0015VZ[66~\u001aCc9cڪ)x\u000fB\u001d\u0011\u0007\u001b\u00175\fN˭\t\u001cǟ\u0002\nhso^/c6o1ۜ\u001eSI1\u0015Kq%\u0002I\u0014$\u0011<\u001f[KW\t[P,p;y0vW,\u001e*ud|i+R\u0003\u000em*}RJ\t\u00153\u0015Bi>>_B\nH\u001c.\r岇^\u0001&O\u001b*x'\u0011up\u001c `PX\\}c\u00014i-\fsh.SS/\u0001<=JѧAT_o(/7\u0013>rr!\b>r\u00190\u0018OrN}N,jg/\u0017J_m\u0016\u000f`\u000f2\u0003\u0012KaC[n\u001fv\u0016K\u001cJQEӥ4\u0007IW)OLv\u000b{0Q7Q\u0006\u0015qts\\Guc\"rZ\u000e\u0011z\\gf)\u001e\"\u0005$\r/\u0016[@\u000b:|\\ӕ5wh\t\u0006%\u0013߫\u001e*J\u001eD5ֽ*8_O.\u001e\u000b\u0016˱\u00069)\u0017Q90l4e֚\u0014+~\u001ccbUtV4\u0014'|RS\u0003ʃm~y>r\u000e-c\u001aCb\u000f\u0014?G\u001a#I\\:y\rP//)\u001f&]\u0000B\\lڅY!Pz\u000f`\u00019#\u0011w#rN\u0014I\n\r\u001c7;5\u0007tP\u0018\nrq\u001e߀\u0003&\n4x\b\u0000ľ\u0013h\u0001þc\u0001`oh\u0001p3;\u0015\u0002x@K97&e|i, >^\tKlzTRٲV.\u0001\u0013m5\u000etX(agd_cL\u001d~:XbSVdU.v`#++}\u0012Y\\+\u0001#eҚT;\u000bZ!g\u0012,!D\u0017YYB\\E\u0011Jb2 {$ŚC\u0005xͼ4OH&\u001dY4Z\b/\u001eMKi\u00177\u0016Q][\n \u00014\u000fL\u000bV\tE\u0014EU?){%\n=;|@I97C5u\u0016\u0012LEMC:D\u0001\\Dk\u001bWso/N$ǢFiB΃BƝ%IFB\u000bo\u00155\u001f5\u000ftP%GO\u001d垘A|5TK;Y\u0017X@A!\u0013cˈmJ\u0006\u001aF\u001bC\u0006u\rΩ?{\u0004\t\u0005#!A\t3\u001c\u0018^Q#\u0006\u0002\u000e\u001a0ĖĸcSA5޷\u0007=(\u0007\u0006\u0013#NL2\u001f,AMD\f/\u0019\u0003oo8h\u000b\"\u001f~1$s\u00044iKʝT/+j*=c\u0007S\rf26B\n$G\u0003ާ:6EEz\u001c47\u001e\u0017Nb_5{'!h'jT\\qj|{\u0017`j\u0004@5\u0006\u001c\u001cڋ\u0013I;K6m#seul\b<rt&F~$y\u001fǣoYa\u0005mcNe]\u001aR[#С'e__Hll1vb\u0016Z;0\u0019A\"ݓ\u0003\u0016\rSdr$/[!\u001eS(,/Z=vXsb͠&=\u0003\nGY`{ձ{\u001a\u0013v_j\u000f9\u0017I#Xk >d<v\u0001ň\u0013hΜ}}蕪krd\t\u001a\u00118{M̜`C3TŰ^݀q]lK|\\A<gQ%coKT(\fE\u001c\u001cs ,jQ6p?ń3SSQG{ȕ]5t1DBzI;\n:kmLH6\u000fkVT\u00105LE)RءСV\u0006\u0015a\rމ-<*=5\u001dvO\u001a&qڵPRO\f-`Ӄ-I\u0019}=6C\u0006Q`e,=!P3?\u000fKQ\u0015\u001394o\t棘5d/\u000f\u00102C\u0003K4Wy<|b::1)\u0014y`)3?)~?(C\u0010\u0017f@g\u001d\t\nB\ny\u00112\u0006\t~1{.$s\u00050\"83e#4\u0000\u0015[U/7b. ~q1rS:r)7Q_훤\u000b̊>%^B\t\u0002hC\nyUtmF\u000by/b,ޟ١=\u0019Cةmfjީ1\u0014*&\u000e]\f7\u0011L+2Nb\u0017XcH\u001cةg~~\u0018{x2jX\u0004f\u0014BPM,\u0012pnʈ\u0003\u0013Ŵ\u000bP\u0011#\"ON=S\u0007cO\u0004#zBǒ?_\u000f\"wDRH2\u001fGT?\bZ[І\u001c<#\u0006\u0019O\u0007\u001el\u000f/\u001dKr\u0014ρsrœ_\u0004E\u001b!W%v\u000b\f\u0004\r\bEArE^R<1`\t*!&(nZ%UԙA'\u0006kTkw\u0000\u0004F\u0001>2 \u0016\u0019\tu?\u001f.Rϡk:\u001e$vv\u001c7\u0019N\u0001Qaa\u00189G#ߣI,\u001f'Ԗ)wj!n\u00150\u000748$\u0012gC\u0004?\u0005췊\u0018/\u0005ӵ2\\Ar^}c!Y+F|\u001beaz{\u000btƏC`p1>|\"$y%;\u000b䙷\u0017s\u0001}Lٳ\u0018U:a\u000fIp\u0018Pg\u0010h\u0015&x+%>T$ɹza\r\u0005zSWOngd\u001fqO@!\u0011Gr&o=fSL\u0000G#7A\u000eV,ݫ\u0007mhL{&\u0014<v_\u001d\t<|\u0015i!\u001fĞ-)|Xy`XE\f\r\u001cIuc\u0006=GЂH\u001cD \u001aJ|\n\u000bMg'9T[\u0002-j\u0003V\u0013gSWL\b\u000e\u001cu#h\u0012\u001fGu\u0015:;c\u001erB\u0004\b6Hrlڕ\u0018G`B6\u0002!\u0007N'\u0006P\u000f΃:GdVJ0\u0011g\u0006c=\b^\br\u001e\u0000-:Wu:Aȓ]M\u0003Ct?pq\nDh\u0010b \u0017\b_)\u0003q)t\tN[8itXEũs9Asڰ%\u0012'e\rp\u0003/N4\u000f4[7+\u0012LdtE\b\u001f\u0019!q`2\u001e\u0011ه7ggv|?\u001fߏ~|?\u001fߏ~|?\u001fߏ~|?\u001fߏ~|?\u001fߏ~|\u001fnZ]uuƯ4ߜ<cjs[o\u001dCUn[߱So\t}3\"ߴVoޤ-6nO[7iզٳ_N֛Κ1gLS\u001bK'IoG~gfog<ifedK_ofϚ;c\u000b\u0016͞=9\u00169\u0016-1ozNxOx}+mu:{Y7i\u001eG~\u001e-=Zs.r=ۿ>چ\\ѿ>?I}\u001e}Z<`rYzzU6ulY\u001f牟w\u000e=zg\u0019Yz\u000f9Sz/)\u0016Ο`Q\u0013[_O\u0013_d\bqj\rl|^7 wd\u001e̵6l\u00188b1\"9t;'?=g\u001fԛMNb\u001c\\\u001f|_\u0016#'0{\u0011mgy'\t^7o\u0005eoٸe֭1`6\u00191kUHnahba`dq_ko\u0016\u0019S6\r3uv5ޭm,j[eĬXٴg\f\u0015\u001a*WMCz}Yʄٸޘ\u0001\u0017rNm\u0013K\u0017-s!\\K{9c`\u0001ծ.2n\u0016\u001e]67Q0c֭D2&&?W\u0016\u000b\u001a\u0013^Ca\u0015.JnR\u0005\bN\u0001Rb=>;c\u0016}؃Teh(ܠ/Tյ>qp8#&T\t~:|\u0015\u001dz.jI\u0019\u0002^-тף\u0017kGwvgW>J71\u0003º\u001c\u00116^][PiE+M2cvFo%y\u001b\f7IwK쏾\"{W\u001b\u0001\u0017\u0019\u0003}5Yh\t[58\u00128#&\f\u000fNV\u0006\u0016BOdZkc^{dx%A,?\u0018R6uJ '\u000f=\u0007vM۵_˻\u0004!~~x\u0013ޟ\u0013P\u0004f.\u0011} 0wR\u00164ViO\u001c|F&\u001aƦ\u001a%\u0006Sf(\u00161F\u0019>Z3YKFGaE)\u0019nag\u000b~[>\\Gn\u001f#\r\u000es#\u001aY22\u00168@\r\u0018s;\u0013Xj\u001b\b\rF\u0001|-=\n\u0012sad\u000eMhUvim\"۴\u0006\u001c\u0016\u001aly|w\u0017V҅*9\u0004T:\u0007\u0012#'F>ɺw/#KASH\u001a$\rW\u0006\u0015A'n\u0010x*)g \u000fﴧ~OW;\u0007r\u001c!/\u0016/S\u000fkxb;v\u001e譠\u001c-!/!g\u0014l+eշͣ#f\u0010\u001b(7>`-wj\u0011|8\ns{-j6t\f{T1\u0002®>_\u000fʕ\u0014>\u001cgG Oݶ+hO\u0012}.6/D\u000fb\u001b#;@\u0019}d\u0018rrOߓ\u0003;G?#x\u0013C\u0015=tiSh/ئ\u0014X4^$dW-C?'ə2S @{w\u0011{F\u001frx\u0018pJP]:+l2(\u0014\u001eُwӝԠ\u001bKu}\u000b!=\u0005\u001b+\\Ϙd)ww1\u0015\\d#\u0019]]a*8h\u001a\u0018\nfSG]r!sJXb;\u0003o-g\r}HsD/p\u0011}\u001a&\u0006&׀m~w@.M\u000b\u0001~\u000ebA=A\u0001==݄\u0013]t\b)\\$Gwt\u0011\u001d{J\u001eIn\u0003$gߞg\u000f䪼uy+|xuE/H{\u001d\u0002\u00002>:T#\u0003)\u001d$\u001e\u001eL);m0\u001d'_P!L|'\u001d=' \u0017}3ʈC(\u001e,QN\tJ_p\u0003\u0004>eⓉD\u0010璱\u001c\u001e6\u0013\u001f=\u000f\u001b=6!cDt#S{#~Y;v+\u0016\u001b~\u000eE0>񴇖?^\u0019v`<\u0014^:\u000e\\_}ci\\X() w\u00048Tecg5\u00103\u0002=w;dF\r\u0013\u0007S\u001ed;P\u001cʹ;\u0012={_\u0010=/7mWsUX\u001eѷD|\u0006\u0013<\u001d6z\u0001_oo1ee%-nT0\u0006[TL O|M[Մ\u000bv\u001e`?2K\u0007-s\u0017o61&&kݕ\u000f\u0001~_|6xac\n\u000b\u000fm<cnWw\b!\u001cۗ\b%\u001b\b%\u000bC\u0015?\u0000n`䒓! \u001dk\u0017P>X\u0012{)\u001f\u0006\u0011\u000e\"Dо\\\u001c|{7S,\u001cm\u0007ؖH쓌'\n\u001a\u000e~\"\u0015v>)ڞ$\n/@{ɸI>\u0019:qA()b8\u000fF[I7^=1\rI:<\tH'j\u000088[\u0017mڿF\u0001`\u001bzt%Θg`P>6p: \u001e7\u0001=\u0010bK\u000fF%?\u0003͑s=x\nׄ\\14{z}.G~/\u0019\u0019\u00147\u0012\r\u001eur\f%\u0006\u0010C\u001el1t\u001c8\u0011\u0015㕾\u0005#;@>k\b\u0012z\u0004>ѧ \u0019އtO\u0010\u0015v;;uгH}*ௐ[Fyc<ߠ_\u001e\u0003<fJ\u0003Z\u0013=\u000b\u000e:ewuzu\u0005\u0014\u0001\u0015/%{M\u0017p\u001f\u0004|T\u0005\u000f\u0004\u001e\u0014먈D|\b~ܞ\u0001\u0013, fG\u0002\u0007\u0017D1$gK'Ȓ9i\u000e\\\u0007.Jد{.M\u0007hR\u0005'9\u000bWmҦ\\\u000b2)\u0007Łs@O/K;Ub@H\u000f\u0012\t&\f\u001aA\u0019\u001c9\u0018{A=j]`!pP\u001f9B\rl1\\2~\u0004y&Rn*~联\u0007\u0006|\u0014nf\u001f\t\u001f9>3r2p\u0014R>fI+%6ѿy\u0003\u001e\u001aZ|\t&v\b?\u0019E5a\u001bՍ>6\tbNN\u0002?88PЏ𙴷\u0014=A#oKHC\u0003\u001cv#\u000bb_\u0003˹ \u0011\u0007Ƃ\u0006}\u0016{KpoYR\u001bp#6;n\u0000sBz\u001dV\u0017\u0002d\u0011L9\u0007#7\u0000\u0015;\u0001_Biv\u0012/H|\u0015\u0007ѣ\u0017Ctn\u001c\u00007;\u0002`\u001b!\f6b.Lʱ\u001cwv\n\u0011Շ\u0019=?y\u0013`\u001e\u001c\u0014~QKJ\u0015\u0013NL\u0017D<waC\u0000>=\b\u001dNg/ɸE*d8*\u001db\u0016(^\u0004ŵ\"qM\t\u001e{\u0007q\u0004\u000eda#ڠ}\u001f=!\u0010,$l\u000f>\\\t\u0001\u001fr{)Q>G\u0018\u000b܏>Y\f8\"CE\u001b?\u0001΅p\u0013\fɓϒ1\u001f#z\u0000,p4P\u001e\u000fN{wJIWǞ\u0001O@h{j\u001e\u001c\bM\u0007.`\u0004)q\u000bC5/a\u0007ƀg\u0007\u0000ۺ\u001cK\f)\u0018'>l΍w\u0001\u000f>х\n8RKt\u001fT\u00013h} m\u0010\u001e~\u0000[p=̠aG\u001b\u0012B gľ&)F\u0012Jr\u0015|o;kK&uPnoQgF\u0004\u0006pў=\u0004\u001f\u0013\u0007\ns秂\u001a\n}3p\u001fP\u0015\f&\u0014ݡ`F0衁s\r\u0012S\u000eM`RPLEw7`\u0000p\u000e\u0006R; \u0002Q\"\u00062\u001eSN\u0018D9-\nZVޫ\u0007d|yO@S@tq\u001aa\u0007\u0015\u0000W\u000e؊\u0004?א\u0017\tH\u001f\u001c$f\u0001\u00037F\"\u0000.=\u001agI|\u0011H|\u001f2jKѥ=\u00048D0\u0004\u0004u\"y\u000e\"$v_2\"\u00176\t?D{\r\u000b\u0014\u0010^4vs(\u001d\u0003=\u000e+MD\u0006\u0017\u001b;>\u0007s\u0007\\\r\u000b∭8\u0007pkwm3)A>\u0013\u00042k3;i!gHS@_\u0006\u001c\u0003ԇ\fC.+7w\u001e'\u0013O\u001a@\u001aHIAb\u0012H恍gW\u0005\u0017};AC\u0003\u0019=2(,4PK\u0002.Ĺ۝4My;8h\u000fzGN\u0000|q&>\u000b1`\u001eb)_bRV\u000fYK.r[.2k.4\u001e+\n_9н\u000bj\u0013О\n\u000b.ZF&1So2s\u0017-pYR\\-H\u0013DrP2Fi\u0011\u0007C\u001bB߸/1ġºe\\{}3\u0018T\u000066Xfń4eǪon\u0007ȭݴQ\u0001?\u0007\u000b~)\\:s\u0004\u0014U{\b&p%\u0001\u0006\"v\fx1h@rm\u0001=\u0004[\u00133I\u0017|Zg\u001e%1\u000bZ-\u0014\u001b%,\u001f')PN갾#\u0001(<Fs\u0013VʏJ9n\\\"\u0002_S>ݝ!UA==5p\u0017|'54:[N\u000bFQlFq\b0{\u0000\\P\\?rn\u0013\u0003\u0018:@yiwe\u0007`6%sAB$.lZ,<?C_sֆ\u001e\u0002e&\u0018\u0003\u0013\u0007\u000f)f$C\u0000\u00054<3t\\\u0006Bv_w9ɫMHNclfΘ\bV\u001a_<\u000fm#k\u0015\u001cy/\u0017ݴQ\b.CWWC.t\u0011\u001f%|'G|Xoh\u0007\u000e\u0000\u001fѨ\u0002'G\t\\'\u0019I\u000b.\ns\u0003\u00073?(R\u001fσ\b18#3\u0015s.\rӸ]}\u0011\u0014\u0015\u0003\n{\f*҃\u0006D-jOQL&z7ɕ\u0001\u0000kCrCq\u0003.`G\f\u0000g/T>4\u0001#Q\u0019J\tJN~Ia\u0014/GU\u0014TD5G=`Dd\u0016&{\u0015Q\\Mu.\u001f,⓮\u0001\u0018\u000b\u0016Z?r{ng\u0002^e3\u001f,o}\u0002\u001f>f=Z(jZNe5_0\b{M2\u0016yV\n\u0005kUmn$q%(g\u0004Ra\u0004N%hӣ<Ę3SK3\u000b\re\fj\u0019\u000bͲ|\u0015\u0014#!y?w\u001dxCDI'pѹI\u001eu\u001e\u0013x>\u0002[ώ\u001dp|+V]Ӂ\n\\L{*ւK\\?e\u001dԄ_\u000f\u0004\u001a\u000f\u001af&oCpO\u000e\u0004%prg8Ձ\u001a]ZM\u0019*E\u001f5A\u001eL0~zeWH_g\u001c<Bc\feeWɃaƒ&&\u0007ý\\OP|\u000e \bZG\riɴD??\u001b\u0015u\u0019pN\u000bB\u0006ǄڸҝTGK\u0004\u0012?Is(\u001f\u001e\b!}|}G@O\u0011\\R6T<\u0006\u000734$˞Q_\u0003\u001f:99\u00194\u0002v\u0019\u001e\u0014~\u0000\u0016x!Ng/Wr鵋\u001f\u0011\u0017\u0005a\\Y\u00151#v'\fP8NpNx\u001e恘Sͫ_(WYHyg>{\u0001IC3\u0001~%#\u0007\u000e;\t <\u0003[hy)VsaF!_G$\t5o<\u0014Ky\f\r\u0016|\b000\u001aWwG5Fs\u0011/-D\u001e&]!D\"l=T_;K\u001biw.8}e[ճ]\u000b<I\u0002񷨑H\u000e\"y2j|ݷ'5VH|\u0019\u001fQ>\bٹw\u0003'9lS@\u001d6B}i\u0016{\u0016tJQv\u0003ic\u0001YKAvvAN'L\u001c\u0004?\u0010X\u001dR./K\u0014\u0006\u0017-$E\u0000+8~ #z\u000f[ՙFs\\A9#$wLf2~\\\\\u0003i\u00019\u001f|M)酸3\u0013\u0015\u0017rI7frq~\n?pۼQ\r\nendstream\rendobj\r150 0 obj\r<</Length 65536>>stream\r\n'n!\u0005c\u0014w\u0017@_>9uڵ\u0007G\u000b\u0007\u0010i.Ib:ܠ&lp$W-heAOKʩ]-?[\u0003\u0014`\f\u0011&k\u0012׸T\u0012n.oQCo`̠\u0002MNϫMK_,\u0003=EN56\u001cɜw֡|\nf\u0005zRp(\u0007\u0005$0(xi\u0006Lir\u0017A\u001f\u00124o#\u00128\u001b?[Nľ/G'\u0001'߀1W:u̗kd\u001ca'AH#hnIucuq4_s\b1\u0007&Q'ԙ6FxfXX8,^o[L1=&Xܖ\u001cEK!iurܟ0M\u0003\u000e\u0003S!D\f\\QB=\u0003$b\u000fBbRp\b\t4_\u0007-Α!\"@\u0007\u001fJ0 ٌ:4W#\u0016D!8g\u0004\u0007'\u000b\u0015K(lYA0I6\u0006df\u0014S\u0018?ic@\u001b\u000fFrt\u0011[t'~'i\b1D\u0017;Tw%G`b\u0005Z6[J(h^\u0003W:b(gK>=v\u0000\u0005\u0006\n\u0015E\u000eɱOӚ+{p<nZ\u0015C\u001f[\u0002&=\u000b;<A\u0015t\t\u0003\u0004\\\u0019\u0016r\u0005+\u0007K)\u001f'\u0013|iT\u0017@r\u0016>]+7ް\u00197Q>2\u0011k4c\u0013)\\|PbGx/\u00135_\u0012=#b\u0012\u001aowp-ЩWK׻Ϧ.Éo_\u001ct#F#6\u0005=3pRm\u0002hc@\u001b#S\u0000\u001f'I.\nlnb\u0018\bq\u0006\u0011#'xbakO\u001fH;xDk#S:\u0017|p\n\u00023\r\u00074&\u00110\u0001Jy\u0018OLŜ\u0014\u0013\u001f\u0018*mF\u0001\u001dsz;\u0012ܱ|ՙ\u001e\u001c\u0013xKFS99m6ۨ6FHa\u000b\u001f\u001eP2\u0012Cm\n9@\u0001\u0002ݩ\u0018àkS}ưye2D`\u0017\u000b5R\u0013\u0019Z>\u001d\u0002M66R.LhcMg-~V'wHԫ\u001a\u0003p7X3RM|&j\u000fzЖt\rZ(Bi&EU\u001cm).C/O6\bJN۱7?{\u000fl<l5ױyjB\u001b\\a\r\u0018\u0007`F.K<4,QO\u0005(hYB\u00019\u0011j\f8F\u000eD8P$˩Y&^Au\u0018=cs\u001f->^lV\u0013p\u001aj\u0004o\u001bnD1d$W7SC\u001bC\u000f\u0001kWFJdH\u0013E5PMk3X;mҼ\u001avwC\rKD~O\r(\fD\u001e\u0002\u001e^ފkΝ.ed\u00044oyww\u0007\u001cV\u0012\u000eb.;\"\u0019bk)\tCn{+x)躐X3\u001b v邽!T;cg([#<d\r!SҢ6:O`{hc`\f\b 1j[\u0010Qy\u001cλ;g֕\u0017\nG!w\u000bd\u001eNoؑqvD\u001ffJ*6lZwz-)\u001e\u001bO\u0012CCN\u000fÃ\u001at\u0002OJ\u0005\u000fnWBmFF\u0016c\u001as>|\u00185\u000f\"tT7n`K63@K\u0016V3{heB\u0018u3a}).W\u00123Q/~\u001f\"A-\u0010y9KMAb&09\u0006r^vP~5795\u001f0\u0004^ts\r<X\u0016%pqSm\f}ٲY|AB5On\u001aV۵W[\u0017m+щ\u001fM\u0010\u0016\u00177Q\b̉Z'R/2/\u0000\u0004_$\u0014͸0w5q(]G\r:*L=;/kЇ\u001e\u00016PTėG\u0015\u0013Kj6*\u001aͤ/W幵6\u0006'|\t[T\u001b~jc\u0019-6\u001b3\u000eMCA/\u0011u(\u000f\u001e;\u001a3T\u001b#S\u001bCgm\fo\u0018]Y\u000b{-I.քIg\u0017\u0004wҚAI#4N\u001f\"\u001f\u0015XoW\u0014\\\u0018rh7-\u001es4\u0005\u00078%\u000f#\u000f\u0019\u0016֏J\u0019\u001c#e\n\u001ad]#/\t]6|\bsDO+v%}J\u001b\u00191l`6m0ax\u0007\u001e\n\u0016>Y\u0001]𸣆e\u000ekWO$=_Qv{WҸvj\u0003z{Db\u001b{\u000f\u0011\b\u0012=yaO\u00176Fҙi\u0019?1<jcꮤ\u0018Gg@[@\u0015\u001f532\u0014{B/k\u0012{\u001b<f*W2V.Ҟ\u001f{.JW^\u001f\u0002\u000flBꭅ\"='ЀO\"\nƀYuq\u0016wH߼\u0019\u000b-ksV(+M|Ƶ\u0005\r\\3}pQvI5d\u0001ȿfM\u001b\u0018O\u000boF\u000f\u001bVƣMͳ!7m\f6iD2)%t,\u0012P$2!4!<)T\u0007H{{Xy\t5k5l\u0018_Ԟsv#B;\u0004y^REʝY\\\tliGŞ\fM.\u0004`:ͱ\u000e\u0001\u000f݈вq|V2>v%r\u001e;C\u0017y\u0003\u0001,}{&\\Ef'#-\u0002\u001bi*7uO\u001e w5\b3+.&\tS \u001c\u0001d_\u0013F-\nEF\n\u00062\u0004\u0017*OP\u001fOΘد\u0001=\r1\u001a!\\\u0001kv[\u000bQb|Ysi\u0017fC\u001bCʤ5\b\u0000H\u00155Z\u0019Y2^\u0019wf&ttb:\u0003qZ\u0000Wt3j\u0000ਭ(s։Y?u$~{c)ʈ}Q:t\u001d:v\u0000j\u0000в\u0013\u000eN\u000e\u001b\bWU\u0017\u001cey\u0016\u0006Zt/[zCa\u0013}yET\u0012\u000b\u0011\u0000n\u001e\u0001-\u0011P 9w.EY$7%8\\:ܨo[\u0005m\fsa%:'TL\u0007x.\u0014\u0015?QqePBsGQmNm\f1\u0002_P\u0000$\u001f\b.ң:t$O|a*~\u001dOWa\u0004ES߈^}?l':g?Jľ\u0006|>8ⳫWM\u001b;q\u001f`;tM\b\u001aCXKEZ\u001a!ɑģ\nˋ7v(Y\u001e|\nsM6,\u0018\u0002\r\u0000ȗ:~\u0017\u0007\u0004<[ܺ\u0006O-TgT$yi_O\u0015\bT\u001dݻ+b14u\u0004\u0011a\u000f\u00028cNU\u0006ƚ\u0010/գ\u001a%WXb\u0018|\u000e\u0001t\u0004%оֿͿFCĤs\u0004F׸3\u001a{к:&\u001c\u0019\u000f?o8r\u0012Ԣ#ikP_'Vj\u0001|ղ˛ת=}׋;*:Al\u001aj;в?5\u0005lI:荲+\u000bĽ'&c0SF\bM`I\u001bCAW.\u0014?\n:'d9\u0016B_O\u001c#wIld\u0004\u0017~|<t[\nQ8xIǦW#f++\u0003}Ҝ6l\u0002p_^,]{\u000f}?fl\u0015\u000f1ԏ-RC\u0006\u0016w\b-&\u0017\u0015~x,\b@GU\u000f\u001fyW8\u001cv\u0001܌+m\u001eH,\u000en3}/u0j-\u000bz\u000f6qƚ@b9pi@\"jOrN\u0013av%su3꙼#\u001e&;\u001a84P\u0013Mu\n/\r+v@\u0002N\fG\u0017{\u0019L\u0002\u001f\u0006lݣu*am\b5\nUB\u000brX`\r\u000ei\u0004Gy$\fdwu{dH<D^CC33\u001c\u001ax*#CS%03lu_>t`e/V=\nC{a!кcn\u0012LO};rb̯\u0013?} \u0007\u0004fs\u0015gg@/Z\f)}3%u幏\u0016{g\u0007cOD.\u0013V]G5@C7tP91Yu}<lZ7֎}PGzA\u0017]\u0019}x\nӇ}ػ\u0013ulb_Z콁\u0010~z\"_\u0003\u001d1ನ$g\r=\u001b\u001b\u0000\u001fL\n2\u0017\u0003йuTȻ}2A\u0010|\u0003\u000b-XĚ\u001fgM>ƘuN\u0017\u001a-r\u001f.h@g貮a<\tZr\u0007y\u001d_\b\u001awJ'-öH<tD(AފZjщ4߈?3j\u0004c\u001f8\u0019kE,\u001bh\n\u0011\u0012\u0016cLb\u001akTC\u0003uL_^=󇖍u!\u0012KQ\u0011{D~\u0014ZQXk&Eu\u0013PO:WXX\u0006|qrz6zb(EIj⥾y\u0005,\t\u0003\u001d=q\u0004\u0004[\u00011mw z\u001e\u001bv_PV\u0010*/]\n@rn&~RΣz\t&#g0kkP\u000bCa\u0015j=ǋi]\rCMqnܑIX+:y\u000f\u00167\"=\tQG~Y/`\u00175\rac+7\u0017\u000b+^I\u0014v.D\u001d$\u000f\u001a5iCQ+\"s`<]\u0007K}#t#e\u0010մ&M>0~䎠w\f;\u0007ݣn\u001f(\u001d:[ڒ\u000e-Ԍuv^]\u000e\u0016>h$|k\u000ex!\u0002tH^iF|,p1R->&B\nRk;A0Tz؃\u0014wi\u0006^\b\r]\u0013\n>Q±4/\u0005\tɉŽgbM\u001e\u001c;\u000b(f\u0005\u000eJ\u001dB\u001ft\u0014\u0007.L%\u000bA\u0005?^ksIF}\u0004T\u000bA\u0005Zkl9t\r\u0005;nxZ\u0013Ě\u0010\u001dQ3\u000e/\u001aE\u0013g٬Վ>|:xr&i\\ʵЖEWdY@u\f̂_V\u0010?Mc\u001d{I><bZm@7)d\u001a^m6\"F㵨\u001f\nZaMM3\u001b<nPjȖoT7.vx\u000ew\u000b\u0014KIZ\u0000?uT\u001fC[\f?0\u000e\u00071G>5O97@}XW[6j^V];hٔ^(n_ɥ<\b=\\ʽG '(\u001fqh,[ܶZ,m6N<7\u000b9\b<Q/\bٯu@n[\u000eU\t:<F\n7\n{Ȩ\u0006\u0012J'\u0019>8\f\u0011gQ\u0011rX\u000f=2;3YA>\u0017+[W_W0\r>8J+?e#{佡١_i\u000f<{fyco̤Kv\u001b\\M۹$}\u0003`ydxOO%UrϠ}ID!,i3eEZnY\\e*f_Au\u0013\u0007=F^\f\u00191\\P\u0014<Y\u0006\r$s\u0012lϗU̕_\u0015ƺ\t\u001em~e\u0005\u000bm*Z\u0013/̄TX\u0007\u0015%`gR)J\f?|lʥl\u0005җ\u0015%ͫٲbEPָ\u0005zpyK`'kE;\u001ex\u001dm1f6wܬrY%s/ww_9K[9(y*OԛǛefw&\u000bkNh\",yV\"ӊWg_ʳOe\u0007lM竐+A\u0013\n{\r\u0002]e.[-\u0015R퍼-lYa~\u0013\u001blY\u0003\u0016c̠ZtyV5\u0017!\u001ezWW|\u0005\u0014d<Z$F_/gbI&ԠS\u0013H4\r*\u001fɆ\u001c\u0018%\u000f?;8lS\u001dd)%{7[jVa>Wh\u0019ŵ~gk޺w;ީBz;[GA68.=u6?JUZo̭[,x+j^K|R\"4Jig\nm\u0018{i\u0006rE1Ja\u0016;#\u0006\u0017Rv|VA\u0014t\u0017Fܑ\u000f&6?*_l\u0015/=\u0013ي^(\u0014\u001f+\u001bJ_\u000f0Oq\u001c\u0019CɏF\u0013\u001arG>(N|4O`ٓoxERVS<Wk{^Vt|ߛU\u00126%ݜ\u0005_\u0017JcVx\u00014T\u001dW\b\\izEqJ>\u0015X\\!/{৵#o\f?nQ\u001cl8وA_~G@;YxM<zx\\6pA%kʟkؓMQc6;̯?v_U\u0010KU\u00167\u001e춸`D;b݄sSoC,q#ŵJL/'`J\u000bmVg-\u0013+.Z+.vs;t􅨬xP\u001eh`\u0016}ݐ/kc.L\u0017DV]ꩦޚ\u000f\"Fy\\9_B_,y-n_cV*YŦ~ɴ\u0015w;\u001d!}x\u001a/|xW^\u000eE/ϡ߂*\u0013ߞR;\u001dɒ>>K\u0010_ƪ^5$Z~v-O6GVVT୺&hU[X}-Oҩ'*y/dϗ\b^o㏾+,F\u000f5cՐ!c'2c6Go%/W\u001b㭦ҙf\u000bS\u0007FgىmE^\u0012\n8pߩy\u000b+v\u0003w\r{\u001dݕ{΅l\u001473]EPb=~lګ|0Z}]yiɞx+c+>m\u0017$/\u0016;Ͻ͖FxY^jPHu\u000eQ8ʱޘ^\u0019\bXtpRqW}\u00066\u000b37\nŵ*֯6v\u00177;Wn\u001f%\u001b\u000eIq8R&?^&j\u0011\\C9TScŴVn7wMl\n>CaMrK\u0011\u001fP2My2\bg^)w^Gt=x~7ȏYvgN~#kVUw\u000b[\"\u0016~ڤ*o[sPݽe^u?xû\u0016\u001eHW띔ǚE\t*m@ƒ8`\u0005\u0018+b\u001c(}y\u0018/}z\u0014/|y\u0019&Z\u0018>>LXB$#:>'qdֶWG3\u0014\u001f\u001a$oN{y:ۢZz\u001a|\u001c>}O\u0017'['\u001bY%\u001fW*5Xy\u001c xkǞ.M\u0016\tRUpY|SyKߢv]yx碑tɍʖztc#WN+y&oŞ\u001eo]?3aNlkPyz_$i+o+7ű_=wKGf!􇭬\u0017{g_ScK]sYҗ\u0004\u001b{]\u001d~g$O7M1StxNhk~zc\u0017ՙ\u001a\u001bFs:+\u0013u6R%篷ڊ\u001bwHמm.>\u0017/@~)G/TS+>}\u0012jk~\u0013\u000fo{}:,h&Bdo\u001f>w[\u0004YK~w-ӱhKKI{C~9\u0019nMَ+2?J>\rdzo\u0006H;\u0007e\u0014E/W\u0007>?÷!vɂ2.iŋ{IVmԖOڼiFP#UfWƘZt57gXVS\f82Z:Ս\fc\u0005Mٷ7oF\\㏵(\u0003M&\u0019rn>mVFNPX\b?ÿh\nqj\"60<#Ql&lЦd)/wޞS>SSx\u0014~Q`\u0019.-EJb6oΤ۷\u001dR~M>Y5~2=۱EQ\u0006Y\\\t_6Z\\ߥ^^ok\u000fg͐]S=}u%gۋR\u0010uޭ\u000fҕWβ;_.Xv]=x<w{,\bcbb_6\u0018>k\\q?W\u0018l7\u0007ֲꐬМyZmߜRR\"<A\u0016'<κ\\Φ\\\u00073,_H5{6[\u001dH:\u001bsSs]4jU\n\t;*7/{&S\u0016y5\u0015\u000f\u0016(\u000e| ]l^S\u0015\t\u0010.e,r<tSÙKʧU^^γ{s%W*^|Y\u001fa*mwS~~u\u0011O㋕Q쳶]\u001f\u001e\u001b\u001af6d\u0005+S\u0004MɈ{\u0018\u001eW7ã!+ssi۷a\u000f;+\u001f-\u001b\u001b]w.7'[Xp)S\u0017(疃n-\u000b]Z\u000e\u00148\u001c-Tz\u0012Vhߕ?w0alpcQɛ?/\u0011\u001f<߽meu\f/Wz;+Ri1w\u0016tJxPfx3ƾx\u000emݛK4#Ħ5$%FU\u0007?K3iO:;5>)=jx&UkR\u001e=M=[VV\u0015P\u0015XeF>Eٿ]0U\u000f3ofܹwxVgcuҁ,w7Vz[9Ax\u001a~\u00194YR~|\u001b\"\"FQŻZ5__NQ\u000fuI\u0016\u001fC\u0013\u000b\u001a\u0016j)oJh+Yޜȱ{s4ӫ5-+IX:?^)w\u001a=o4y&%_o=J+ro\u00192k3=\u000e(\u000eɈR}hT!\u0018<lvcp(UyꍕtQeEx\u0017i&WY5kftFyitX)럆\u0016\u0007>Q\u0017[>\u0016n=w\u001fY~Bف_s\u0017߉BsS{Sa\u0005\u0016\u0013_x+}ekCu\fAYOC]Z\u000b\u001f\u001e&\u0005ۿ:\u001b\u001c\u0017\u00104H}/\u0015\u0013~i\u00178]쫾V\u0019}2 ģ\u0000uvUXË8EsI]pYzS|)U?PWF\u0012͈\fN\u000eK.\fˊg_\r2afᰍѹ#2\u000f{N쫠 fo\u000397O\u0006:\fnv\u0018Z~w{;7\u001d/N?\u0018$󣥶dB]O0Nx\\I;?m_uPzߴ)ōv'\u0014\u0007\u001b7y\u001fΦw%DڽYB֦g6\u00145\u0014e:TUo&Z_V+6%)_6+[\bV\u001cf\u001f6VUn;Z*^j˙\u0017{oŽk\u000f\u0011K{u,yɋ\u000eGOv'>vNe\u00077\u001d0v+Ff\u001b^\u001ceU0ȿ`aal꿉w\u001d_\u001fNn\ny\u0012a/\u001d\f^woy!mСC\u0019|2\u000ewpp/\u0004\u0018vH[қ'\u001aؠTm.ڡd!M8)G|V\u001b|טXZ\u0010X]wNh{i\r9g_V}NjiLg1ANmY_D^\u000bMwVڶrnݒ\u0010\u001d,6O\u0012xo>O;\fw\u0018n>i졛\u0013\u000fTٱ?j\u0013jbJ*C$\u000fQGTť97پ:}\u00187n|!q܎oz\u0015`Dnؓw\u001f\u001bq^0`{}\u000f2m^\u0018~*kLMl\u0007\u0001ە~)\u0015g=JԼ'3y'.Ylo\u00037vnhƀ\u001e\u0017\u001b}g\u001a}\u0013#\n\u001fǋ!\u001eZ~6ݛt4KaZ]?I̢̼%˙\u0005W3s\u0016bf`%3k\u0011Bbu>y_^\u0004\u0006T\u001eqfXzꝘ[\u0019%wɷ2#\tvT-{\u001bm&u[ۉlrEd{\u0018ql<;&(:o<S?L>3q/<l\u0016#1]tQ.3\u0019@\u001ez)`f0YZd6I\u001bT!ZK̄#0aLo-]\u000f.z̈\u0013\u001831#1'`\u001b0\fxcA] {o{\u001d½],^=PW\u000b˺s?^*K\u000f\nC23\"jCj\nEd\u001dc\u001ay\u00100*sKj?<}R=\u001aZ$9+}~cƃxWi?\u001f\u001fe֦3c~ֳ\t+Mqz31C2z5\ffz3=^L\u000fF<0\u0018≠z̅&r\u0014\u001eWz4r}s\u0006_:ejM)Tln_ٿ<\u0015Y\u0017{/\"vP5ew3.T\u0006o>K_\u0019N@;w\u001e\u0016?\u000eHii\u001d%6?szUj\u000eǵw;\t9'Kc5\tz̴铘u\u000fꇖ\rZg5~\u001eӏtg1L\u0017O\\\u0016h~\u000by\u0017j\u001d'-\\/ޓYsDf\"Vskq+\u000f\"ӳDe\u0013vX[!Wo\u0007\u000eJp#8\u0004+ԧ\u0007߫M[\u001b*Z!ZǗ=Y7ZH\f~'990s\u000eß\u001dI&\u0011;\u001c@\u001f֍&\nMOj0I\u0006\u001dtOaj!?\rf̘oͬ5HƧ\u0000l-q+n߹\u001dZv/4AH:1$d[\u001c81\u0007yn@ډ\u0007tǶt8M1\u0001M9u/\u0013S[\u0002ӌ6戹?maz\r&НWr7A\u0006|hЫ 0v:\u00068u\u00132uG:\u0018~ƿz\u001bzQ`z%;`G}vӌ\u001b7\b%61̾\u001bq<s#,@:n\u0017n\u00077V\u0006dz&}%gU\u0007o\u000eM\u000f;/1e\u0011}\u001a5\u0011v\u001bό\u0019cX,\u000fMFŗ>\n\u0012d\u001c\u0019yvP[!Y\u0017\u0007~\u0010yvp!7n\u0005'=V\u0007$g%VEg&TGeՐ_}*0*,\u000e7:\u001686h\u0019\u000b}\rg6I\u0016S|i]ѹ9\u000f5x;דxP8f̤\u0002\u0012\r\u001d?l?\u001f~pZBeLSkY:a\f2\u0004{Gm\u0007xàj\u001b=S:grlg\u0004_H<\u001c6zﻐ?_pZ_y]!wHKgoGAZ_\u00070S\u0016;2K\u001ci?1]iz*٭v_^j;\u001ao=\u0013a!\u000f\u0003\u001fg޸\u0017I3\u0011\u0019?u(gP2{\u000fs\u0017Ƿ?\u001d\u001e_Ǵ+ם^_\u0001\u0013e{ROe\u001d#\r~i<\u001aUp5:صk7C\u000e{|;2ʝwҋ\bIH']Y\u001b~s,Icԉs\r9kӘj|\u000emOPfH.\u0019'\r'1~\u00143P{<ӷ8XiPݍ̔\u0015A̒m7Wɿ\u001d@p\u0003ĄLsUk\tNͥjc/\u0011_YD\b|\r0~[T[=Ҏӳ%-\u000e%/',W2C\r_|%~\u0016/0O{\u0013k\u001a}<3\\AKa\u0003\u00171C\u0006/dt\u0007g\u0006\f6\u0019s\u00063\u0000ft{bͱf\u0016Wh=1Umӱxf'n辖/\u001e\u0004\u0017{\u0010\u000fA\u0007\u0014UU\u0005#Z]ݱ\u001b\u000fS0^C]QD'Ss8%]&1\u0003Mc\u0006\f5\u0019:b-3z\u0012~\u00039||Xsi\\{_:\u0001cO]yp+8yՏ\u0002\u001f\t̾{7(䃠ğ^\u00103\u001e״u2sZM\b\u001dٻ};#=~ߏ\u00101\u000fd\u000fǌН\f\u001b\u0019>~\u001d3r13l\u00193l13d:fM̈\u001c3}s2Կ{\u001d3W\u0003R&Srwo;Aj2*\u0004gf\"8~\u0017\u001e>Oz70tr-ul]온9v\u0012\u0012[\u000b~;\f]>s\u000eP4җ\u00199\u00193\u0019&3|rft%3qvf<[pdO\u0011c\u0014\trf(#fu\u000f?li,\u000bx{ˎ\r;lNFT\u0017]Mt%,fh^<\u0012oW|\u0014/COǧ~\u0002IPo?\u001a3_~E1\u000fswo3]1{g\f\u00190Ɍnd-f\rX\f\u0019\u00194p9\u0011,\u0011c%fLgf~437W阴c\u000e;g\u0007A\\\u000b~r;8ӓ*\\̹\u0017OK\u0002\u001a|\u000bU\u0005\\\":eӎO?ke!\r\u001c\f\"\u0019\u0012W\u0003ɜ\u001b5<7Cư/y\f6\u0019k\u001a9\u0005>W\u00114d~c\\^ό7e&dE\u00013沤\f^Q1}WNaRԘi\u000f\t#va@\u0005\u0012*3ڪTgeߺ\u001bInں{\u001dK=n\u001b=\" !̐5@q\u0010y7}:9\u0019c\u0012dz$~s\u001e3\\w93j\u0019;בܓ\u0019>\u0019&\u0019\u0019Λq\u000f34e^qU]*ET.]\u0010e-֚}\u0015:tw.\u0002J\u0001\u0014\u0015k,Q\u0013kQ\u0013kQv;~d}sϛΙ\n91U|0EưF~u7v\u0014_iֻ\u001fzxʕm\u00196ߪlJyt\tnuH\u000f\u0017˝\u001a&\f\u001b6\u001dMi\u001cD/S\u0012ˬ\u001c\u001f\f1\u001dKhbmڑ\u0007\u001b\f\u001aY!<\u0006Le\u0006\u0013?Λq\u00118Ό`̉a//`72c\u0019\u0011G\u001eX8b\u0018LXݗKunT-/W\n\u001a}̺??ny,{׭{m\u00177\u0006m\fM?|Io.lAFˊ5{2d\u00143,:VC\u001c\\\r0É\u001dcF\u0016OgFf\fwaqg\u000ebF/!s.\u001b}dA~Kz\fV6umpR'=\u001b*U5|R\u001dH.Mlty;a\u001f\u001f}{yXKܠ\u00185n&\u001f{\r9\u0017}XOa\u001cG0c\u001cy83F\u0012_\u0019<NgyFa˘\u0011W0\u000eCc\u0015$\u0019;7춞ɶ3֜2[tgK\u0018F-m\u001e\f\ngف/O^nh|aӖ/v]Zm꛿(>6x\u0007 _C/_\u0014\u0005|muܰ¹ݐ~cm\u00164;Y\u0016\"pf \u00193#H<0'Lp\ne&LQ1cG/g\u001c\u001ca;<\u00101#/\"9\u00193]`0\u0013]5L#u_[/0aWU\f\u0011׆hK#\u001d}ؽ=\u0013O5u\\hj)inl-|qVV3ZnlM\u001f͜O?\u001a\u00070C9\u0015\u001c\u0004́ #|\u001cؚ`aƭ$qyu\u000fZ~0zG'W1LZÖlymŅ\u0017|\u0017\u0003]N\u0019~`p\t!IgCӵ?ܜe\u000b95ϠvZy7?ixYַ\u000b4׵3;\bmZ\u001eaȌ\u0019\u001c8\u0019;͇L3I\u0011S3*?53y%~tV\u0005\u0005e,\u0017T=^PzA\u000b3YRrߪ3\u0019\u001e\u0018<d\u0018`I\u001e\u000f\f\u001e>\fKAV3ш\u0005絏\u0005ww(\u0004%巊\u0001OCw̟U\u001c\u0019RN3\u001a7i`t\u0007\r!Pgfh7fd%3iU\"3+cs,M\u001d3/Ӧ6z\f\u000e+/cXa1\u0003\u0017FuT1[\u0016\u001e0[^xfEs;\u001d?\\}0'>1\u0004~{*t[Y֧&?6Y/k#g\"\u0000_s?\u0006'_gEi?yN\f\u0001j\u0013{9a=\u00043Ͷ\u0018eF91ӂqN1DLf\\\u001eL31'3\u0017BhQ>Yw\r\u000f\r\u0001~\rOG|y^r/d? yvuW}\u000e\u001a4(\u0015\u001b\u0004mC0mAսa?\u001e6\u000f_V\u000b\u000ff>3;yQR|ͬڒۛ\u001b3q.Q܃3rvV\u0011#\u00162\u0013\u00050s=b\u0019'Y2KcZM\u00177\\\u001fO\u0019TJûu?+z;;?^^\u001fO3nXAAA!L\u0012W ϚOF6ZxDl2jV2\"eӆ\u00007/\u000f6G~})I/+\u00181,L??G\u0011/{Uvy{J)Ki:lȸ\u001aL&yn\u0005\u0014{l/m\u001b\u0010[!7C\u0006%.\fܾ5ݰ&A\n\u001an\u0017m)Qb\u0011P_48y6epW<5\u0004^\u0019\u0012ٷroW\u0015~\r.\u00161n\f(|,4\\=R\u001bW?P.85Nw\u001f@G\u000f\u0018uv\u0010>*\u0011M\u0013g\u001cdf\u0002\u001fflK;?\u0012\u0010!φp\u0017<0p\fg\u0006?#C(֐\u001d!Fq 7x*,9vÅ+T`P4DBeIG\u0007\u000b\u001f=\u000fI\u001dOZ/,\u0014\u000fМݺ\u0013j7Rۻbm'OSO\u0017uުQ4s$~Hf@_\u0007f\f\u00170c02\u0019æN\u0015_X/;\u001f\\\u0018hXYz~glo!\f/:آfbYW\r\nƭC\u0014kL\u0015R\u0015\u00056Nf_=)<U\u001f\u001b0!\u0019\u0003\\\u001d͋MdÆd\r\u000f\u0017ǿh/=.\f=~v3-`\u0015_ܸ]=?g\n\u0014sz>1V:\u000f[\u00123bF#\u000bW18`\u0007hH}c\b$Z$q\"wž7xe\f\\,\\<OH6\u000b8SzAM^vAL\u000e~\u001f\u001a\u0015\f\u001d_U67O/E\u0003أvة\u0003L|\u0002XǘPN\u0012\u000eB_OS[WX\u0005d4&m^Č\u00196h\u0013n]1\u0003LH\\\u001b:2F۾\u001dr0a_\rzr,hc\u000b'y^\"<>pߴwq\u0007Ou7\u0015Hj>.>גŌ\u0016\u0019Wܜ<\u001eʖT\u001bm\u00072]8qo\u0001<T*5JstsY`CA3n^+՟\u0010'R+⺿Y5}@]uhOVko7G\u000eX\u000e\u001e0\u00195Օ,K8g\u0007i^\u0019\u0004R_\u001a[ +\u001bsoxo\u0010f\u0002TA\u0005\u0019Dg[o(o|T}zq\u001a3Y2~\u0004\f)\u0019UN\fteõ¹%OU=y\u0016Bh9XWbB+WxU$nVsf_}\u0017.<z\u0010~r綋#L\u0016gl>3}Ow[s3wo\u0017^N9~'\f+;^VvHq\u0016ۊ˖93\u001c3sG`XO\u000f&$.2\"+oPXnp\u0005\u001cMe\\Q[}nlln-Ww\"<]h.N䳺yT36*Ɍ{\b:EbijgUg&(:-o~w\u0005ƳD\u0012O[Ɍu\tf\u001bl?ae\n+q&\u0017\u001fHj~ڞ1\u0001\u001d\u000e#\u0015\u000f+z[ta\n1Oa'e\r\u0015\u000e8\b\u0007G\nqU<]\u0018e+\u00187W*%\u0005\u001b`cyz9Ow~2<v\u0005׮≗\u00122We~\u0003Cwׇ~q:\u001b\u0005+R\u0007޹iWVXy\u0017w\u000frpa؊2K9fP?GƮ/\u0007H\u001d:yq):aw\u0006\"_\u000bT\rbA2>`\rsSv\u0007\u0007LRk0\u0005\u0018\u0005NJ7F\u0016i\u0010e\u0015\u001b\u00170TV\u0019O\u0001o\b-#\u000bM&\u000b\u001bM\u0012+Ot=\u000e\\\"l\u001e\u001e\f$UBe|ݹ\u001f\\u\u0014ݫ?U\u0015p?\\آ\u0011ꖛs7*~EFoL_\r$y}mN\u001a\u0016y\u001f\ba<kZ\u001eO\u0017|%:M8&o\u001fz\u0017T\u00053G\\j\u001dh4fy*\u0017&H\u001bj\u0012o\u001bo\u0017X0@i(+y\u0014ĝRC\nӁ?N8\u0002jكv6\u001f\u000f_s!\\\\8Hxp/\u0002U)o\u0017*O\u0019ܕ\r,=`a\u001b_\fZw\u0006?G\u0006_\u0006\u001f\u0006\u001b\u0006Iq_|hI@H\u0007xhf\u0013g4s1\u001a\fM@_D\u0015l\n!vȵ+w<Ή!b|}\u0010`)rlP<L(6%PwዘϗѲGǪkm\u0013g|Q}׳ogc\u0006[ʫ\u0006\u0015<E^\fs\u000etKgv{>k\u0013\u0005\u001f\f˧c\b/\u001e\u0013ȸ9src\\\u0017dV-^ʰ\t\u0016⁗J3X`T\u0019xC/W\u001bZڇ[\b\u0006\u0006J9\u0004>y\rVtr*Ot\u001d{ }t+RsNwar92\u001b|j?HV\u001d\u0012Ti꓿\u0006\\\u0007wT_\u001aB6\u0004q:bx\"+\u0015RMT[\u0007hNpbg<բ=\u0019e\u0018/7F\u0019>$8)&c|pI\u0014\u0006GQy\u001b|\u001a\u001f]ټ=خ\u001f-7pi8<K\u0016\u0016hK!g6\u001c\u001c\u0015\u001cίo\u001fV\u001e\u001bl8_y7׀\u0003?\fh9[B\u0017$5\"?u\u0001)REamvݿ,O\u0003^Scv\u000eb\u0006*p#煋\u0019\t\u00172dQ}\u0006.\u000e,v,~+/\u00075\u0007t \u001f~\u0016}5!\u00142\u001b\u0006Iy#\u0016o[q\u0015]1\u000fU\u0007޸r|\u001dx*Ձ_\\?TJ8 ]{(_y\u0011>*6yRj\u0015\u001ej}$N{v<;o\u001eW^0(?2o~_!\u0018o!?m@IDm*4ی\rJ7Uk]7YI\u0011>u\u0000\u001b\u0017\u001b)\b\fpŐ\u0004S}jvG۞|Mg\nqsO0 Gu9\nۇ%]xiq|n㞖'{Bn\\)_x\u0014n[\u0017ײ2Џ\u001eܱoc:{i*mhEIv^tcw.GmS}aFl6[պ:\u001b>v R7Ͳ\u001dŸ.]͸.Y((X\u0006\u0019qh\u0013X1@\u0013\u001ecƓs>\u0006-]z\u001b91\u001a=R=_ݩۡڣ\\lv`n˧sTo#cե\u0018sV5^h={5\\%\u0014u:vb`\u0007r\u0004(N-n\u0001]\u001d\u0015#cU%\u001c9-2+\u000fǔ\u001a\u0006\u0007&r)U6{Xd<[cXMP9o~Dly\fn6xF't)\u001e|.Rn\u0013\u0017+yS¶bz\u001di ŞJ{\u0002\u000eqfOQr^酏_+_FrިUG~sϽѨ\u000eu\u0015\u0017[j'\u0005\u001b)\u0012MпKw/>]fpNy?\u001f\u001a\u00155PG2Ӈg\u001bM~d}EF\u0015e^e\u001e\u0010hʅ)Ϋܘ\u0015XqU6BB*8\u0018BOԦRͨL\u000b)4TM\u0000+Ay\u001e}\u0015}\u001353jl]\u000f\b{^yk(W\u000fsk\b]\u000f]ugG^;>\u0007\rAo&\u000b{x\u0007M*:2VrI91E,p/\u00166\u001dB)Un\njZw8ur@W7R/_,[ʸ,dTaFTŔY̟8\u0019giόgL\u001f0YN\u000fWhjBOn\u0019RӝeA*VfD})e\u0011B\u000b#ta<\u0015l$W7ߙ>t;^r(\bI\u001bCw?7p)p'뛎N\u0016*v\\ \u001e~\u0011 |\n\u000e\u0016?y\u0011Οy%+砎)P\u001e\u0002`\u0014G\u0015j\u0007]#((;u\r\u0003-\u0012c'3ѷ\"\u0011+Mb-\u0012k$\u001f6X#7ƵZ*?[%\u001cG<\u001bm\u001fy/|\u001a}\u001alel\u0019o\u0007Z\u0016{ջ-W5~:CR|>?\u001bk!T\u001dvu[\u0005n&W}t\"W\u0004v٪o(\u000fRd\u001f̛4a?q\u001a?Y:{.zjןYIb\u001bɏ\u0003$_`<\u0015Qƛ\u0019\r`\u000f¿G\u001bED>ԘS\u0011Å\u001bS\u0017J\u001dOW\\\u0012\n}\u0003Ouok`be8i8X\u0007C|V8\u0007z{q\ru=;\u0017\u000eϽ\fS\u001fdtek\u000eV)Dco6H\u0019n%ڨ/\u001a5Y`\u0015җM5\u0003H\u0015\u0007&ڮkvZ\u00015p+Tz&@!0T\u000fa\u0018z}7>R\u0012\u0007F\ty[\bŭ\u000elӥw>\u001ffYC\u0004\u0000/^L=yyMi~9+Xur\nlLl\u0018xWpǾ\u0017}vU\u001c\u001f\u0007^Jd\u0010\u00182MJ\u00006?'\u0014[\u000e4\u0003g\u000fG~bޮ\u0011b\u0007\u000ba_`bTݟOc\u000b,`G%Ǳ;\u001f/=u\u001f`w}\u0018$\u0005N\tO>/܎/?\\\u001f.<~vSЛ5򗡪?چ\u001b\u0006E]#ݿ8{ެBClszO\u0002c#̰І\u0019SNKy\u0007N|~\fU|e\u00173z\u0012T1jQkCpR[&\u0013-UIР43>^:;\u001dL\u001fp]i\r\u0019}\u0003#3-4R.2Bs|s)XO`cy;rW\b}Ͻ*U\u001f\f EsZ8TEuU\u0005'qO׈\u0007_)\u001e;\u0015Ăơ\\w^w̷Z?Hq:a huYv}z}>\u0004>uX6}?4s>ܗ'j\u001e>ܘ2?JRF\u0010\u0007Tjo\rf\b_zp7i%\u0003l+d\u0003xnX{v&|^\u000fn߬\nF\bYuRmC\u0010'ł\u001d(S'ԃ$\u0017/3Z1$3\u001b\u0007\u0016||\u0015lp2Z;\u0003<^>|0k'\rޞ\u0014|Bu\u0000\u0017f\u000ed`\\\\6\u0002E\u0007W7\u001eoWqog˥#\u0013v\u0007@z\n\u001aC^5O<\u0015ϼ\t\u001f>{߸\b?\u0006\u001c\u0006Oqn1\u0018u56c\u001d_M|fǳ!{?\u000e?ؑj-k!&\\V\u001d\u0006Η-q}=dR\u00073>2#%o\u001c Ut\u0005R*\u001aM`)\u001eX\u001dW\u001db\n3f\u0007r{\tz\u0004TL>\u000b\u000exq]9\u001aQ&B|u22\u001f\b\u0011>Yķ\\*yny\b\t|/2P{/[F%\u000fr!C:X\u0003+m\u001bJ|k_~Q\fs\u0015N+\u00196Zhf\u0017b\\apx6u-rQUl\rdȲ}\u0013\u001ecxn\u001f9z\u0000z2\u0018Ly*A\u000f\u000fNz|\u001a\\\u0018!$l\u0000{_mx\u0005\u000e\u0005B\f+\u0013m]#\"\u0012gI}!\u0012_!l\u0019,en\u0017r\u000e\nI}yZk+\r㊬~<Ņn\b\u0001\u0019\u0019o޸p]/vZEHt\tbǃ./\u0018\u0012SK\"\u001cW>D=H'\u001dzF\u0000f4N(Cd|#XOKs6\bO$~[/n;\u000fu3`IПI*Z\u001cp{]-\u001e\u001e\u0007\u0000Rˠ&\u0006Xw,l\u0014\f\r.._O0\u0006]fF\u001fE涳Tq|2q[\u0006\f\u0017j&\u0017\u001c\u000588@B\\\u00154'\u0014\u0012#R<|$O2\"\u0001!0]$SdD;Tg\\5A>:R6\u001em0jC{\u0001\u0017'Q\u0011'\u0007\u001f,\\zEy\u0014d\u0013O\u0005G\tW\u0004R^9JGˇ\u001e\u0003壙,A؝9;[V<IY6m\u0011Ej\u00020hL,\u001e.X\u0019l\b%~3\u0011C3\nk\u001d|e5eE\u0017[\u0015\u0005\u00120Ō:{~mj\u001fm\u0007_CN|\u0016-՟\r.\u001dJ\\ӥy±*Oj垟\bƁa/Tbj]6\bXvh\u001c,juH)ܺ~`\u0004r)\u0006,\u0012cKh+74L3#1\u0018p\u001a'Xa\u0003Kġ^1ҊYv2⼠\n\u0016\\yp\u0012xu$2\u0005\u000eE\u0019Zc\u000f!X\u001fl\u0015\u0017ZSm8\u000fyt9\u001d\u0007>i5\u001b\u0014e\u00056Lb%\"1mB\u0013k\u001c \u0012(\u001b\u0011}\u0010Cļa|jee`,ՐV\u0000ͳƔQ\u0018\u001c_)3|H\u0019H2X.\u001f\u0006M,s9\u0016X'S$G0bòͅBdv\u001f\u0014M9E\u0012Xy\rC=Iݾ\u0012Dq\u0003O\u000bg\u001cʼ\fhvBO{>\u001b\u001fe\u0004\u001elK0G٦\u0011叟מǣO\u000f5<8BP0ekM\u0006\u0012\u001fw\u0014jc1\u00185/\u001bj̗Y<i\u0011ҏQu\t&^vuT\\䐚(d\u0006\u001aRd35\u001fi̇336\u000bU'\u0007o@w聬;Lk>Nم%-\u0003_g^\u0004\"\u0005\u001c5\u0015'&и\u0003}즡ܚd3_,\u00016R1T\u0001bN\u001dcLŤzľReF\b6\f\u0010\\o\u001e\u0001=\u00024͠\\fC!\tfW,m͑\u0019rAJ7\u0007Nlt\\sh\u001aڤ\u0001놾\u0006zcy\u0015\u0019T7`\bp05G\u001fkg\u001cy(\u0017a\u000eC#\u0012`\n\rBl\u0015\u001bb\u0006\f)jl0/R\u00116Üj\t;\nlTA$?!\u000e_z4ف-\u0019GfFBjI\u0002V:$F@oKX`G5\f\n\u001c'S\u00149\u001bO͒;okWjvs\u0017\u000b\u0003\u0011υ\u001dW\u0016>wA=~u>Y)6`\u000fM\u0019bnߏ`N۞-+z-#ݼV$2Bt\u0015\"@\u0013gEds1\u0016if^\n<\u0005\u0019\u000b\u00197\u0017p9C1&|Zx!f 8`R\u001dJ[mn\u001d\u0006B\\a}lS\u0011(y`\u000bIw]b))ךmο\u000e\u0016Yõ\\\u00021!ʆ\rc\u001fR{\u0005\flz6^\t?2\n\u0006zWt\f6Cw8AY\u001fl\fq\u0000er1Xޔ\u0011\u001dc-%[p)f)Oru*Yk!\"\f|0qbۍ~Iy\u0006\\kE|gˠà+\u001f-5\u0006:\u0000c:䛯.⻿\u0010֕۰!1TlXi\u001d\u0014_{\u000b=}hzBYLe\u0007ƋQebt%G柊\u0007R\u0019|erM'⠣1Z\u001aDޯ<)7bnp1}\u00047}<SYnkk+b\u0005\u00105\u00195Rqh\f~\u0006.\u0007sl<5Uzcj󥷮\"J\u000fd.\u00145\u0015\rԟ+X%t%Ds2\be{ƐX7*mɷ=^.vz^a\u0002A\u000be\u001diO\"~\u0004\bGq\u0015V|j-Pݏ[i\u0010\\f-]?\u0017i\u0004-w]O׈ԵJfШ_p\u001ah)նTs\\\u000bmm_qۧmKlzgNw\u0015h3-ɟGQ^\u0015׼Bv=\nZ\u0012zu\u000e\u0001ऋ\u0015&7@;\u0011\\z)\",0oH}A`\u0003j0>\u0004~<׏a #\u0018\u00117\u0002\u001ba><ь'+z&h_^*5X\u0006]V0G\u0006<د$\u001f*ǁn@:vW`qM\r\u0019EM\u001doW\b]\u000fWK\u0007\u001f(ͧ\u0017mub|\u0015rs=HŻ\u001d|F<\u0001gL(?F\u001cFdCcČ\u0001\u001d߹/&6On\u001bAu]\u000f]]wf\u0016:\\i\u0018ؼ;XobǳUb\u0017+} \u000b]?h\bnd\u001e,\u0007'\u0014k\":\u001f\u0018'>[Kj5y+\u000f!R:3{9ikO\u0011:nh*\u0003\t;n|g*\u001f\u0001֝Trp\u001cս*`\u001b\u001f+n\\\u0015R\ttg\u001cП\"\\@Lz\u001f#n\u0000PaZ7Ԁ]WHkAR)G\u00121Tb򎡭\u0002~l}鞉RJ@M\u0001abbٵC(\u000b\u0019\u0015umq&m'yّJa~\u001fYȣx:\u000fcM\u00040E|uymtC@mw\u0000\u000f\u0016jnx\u000b.>,\u001b(7|y=宷3N,go\u001dxr&4\u0002nAueڞ)\u0007JͥQ\u000b7rf}^\u0016wMw/\u00024{q\u001dזR\u00167j+I\r=\u0017A#u6\\\bɭHK\u0017Ix\u00036s<b=x\u0013؍43=/\u0014\u001f)<0j\\\u001f\\\u0001\"Gl>>\u0015\u0010⌡\u0007o}⥭<5\u001d/+\u001b\u0005F\u0002\u00064@P=rf[0.6\\O|gg{Hc\u001ce,\u0006'iS\u0006s\u000btm\u0002o\u000b3.϶ޘOu\u0011rF\u001d̷X:G(;1QtT&\u001bO<v֝\u0019\u0011z|5\\3WgYBs\u000em\u000eX׃>\u0002w\u0010;_7FJ\"yh\u001fzs\"\u001b!\"\fqf%V\u000fV\nߩAT\u00056\\C \u0018rS,:zhz\u0013fI\u001e\u00035ŖTSh˲R\t+F\u001bǭ/E\u0015ZA2eC%ʴ-L\re\u0001V6\u0000:Йz\u0007\u0015mPfCu\u000b\u000fL\u001e\u0014\u0014o\u0003M\u0015͆5{'r=/<gG\u0006ݸ'x!fW+^\u001dC\u000bDY\u001b\u000fOz\u0003y(\u0003<RK\u001d_$FS,\u0012PNphg07,v\u000f\u000fqߗRvV)\n6MA)k\u0014ϰ?-V˻vLJ5fmAk\u001eB!k ӚNRd\u0014\u0007\u0017=#\u0018c\u0018fD[\u0019^o\"|\f &5i\u0006\u0003GJ\u0012(wqG;Ы\u0017\u000b{\u001f*ĚS!t\u001eJSmb¶K\u000b\u0016\nO1\u0005X&y9⺮\u0002cV9^1tp0VkhGk\u0012͡Dj\u0007\u001dl%v\u001esg~T;\\?E~G\u0019&qw,1JE`,KaƢ|V`\u0014\u001ak\u0006ֲ'\u0016ZmKH\u001ck\"eg\u0002ӛr]X@Y\"q\u001a\u0001Ы\u000b̩\u001b3YnH\u0002{c$_iS Gƽ,!Lq%VrT/\u000f5^B9|\u0006\u001a{\u0019`b?\u001aͲ]\u0007Τ\u001a\u001f\u0002khGisz\u001a\u001c}\u000f}>(A;K(\u00153I\u0003.w^\u001866w΢?sswԝ/?QK\u0019]oIuS\rб\u0015nq\u0000K_C|!\u0019WMT\u0015\u000b\u000bz\u0012\u000f\u001d\u000e`Vþxb\u0003u\u001b&\u0006\u000eyןMwŝ\u001fxGןދ\u0017\u001a4hhjsw\u0014vf#ͱ&#lEn?\u0017bX\u0015\u001f\u0018'Z<Wn\u001f\u0007m?>,\\-\u0004\u0019T\u001a؉)a]Wҟj\u000e\u0016pХao8>U|\u001aDX_T\u000729W'RKZ#Vv\u0018\u0011!&*ė\bc']xf_]d.*B\u0013G\u000b\u001f\r-nO8\\[\u0001Sϴ@z\u0017J/:AS6\"oՒ\\-g4T\u001dJ5JG\u000b{c\rJR7\n=o&uAN5@MT6&\nF6VI\u0018PN\u0007!eC.4ޔj9Ic\u001fY;yb-\u000f,[MJ\u001dYή^\u0019쿴z\u000f1E|ѧn\u001a$c]Wc\u001c\b>WWc\u001432L[;\u001drhf\u001fE^\u001fy0^\u000f\u001eutX0f\u001fr-\u0017.\u0006\u001fɩ\u0019\f3\u0016lő\u0014B;\u0016x$vb\r@hhfÞIJ\u0000\u0003qˏ\u0019\u001cn0J)\b#ֳZ\u0006\u0012\u0019bݕ9%~\u0001`W`|U4eW\r֗\u001c\u0003\u001dtT\u0014qd\u001dP-C\u0013Ǟ\u0002ԬＤ7\u000f,암\u0002\n\u0012#@;8\u0013\"G\u001e~ץTiS\u0006\u0004dX\u0005E\u0015F\u001c`.śiHv\u0017rexh BCC׬\nrj\u001b\u0007\u000b:\u001cQ!rC\u001cȩ\u001bZ\n]\u0010[FB9;\nw9B\u000bo\\2R\u0017]`\u00158,0\u001b'뺿`\u0007k4{+y8Q,~`\"\t\u0012>_B򚠝e⃹7\n8M7Y:'C;W;KYhg\u0011\u0002L8ԖZ#v|N\u0007𽡿\u0004Z`r2?\u001bG@[\u001dr$y}Z\u0013\u000f3.\u0015r\u0006WF\u001f yI/xx-\u0002+O\u0016\u0007ߚ\u001d\u0013aw=Y\nC.(\u0004y@Fؔ|pQ&\u000f+9F\u000f1j챎\r5\fNsa$>L`**2>^,|[J#~vy%2I\u0005񹤖3\u001f[q{R,0c2,J];+BO\u000eԝM.\u001ffݡ{송M\u0007\u0007\u000fL.ִ\u001e:؛-z\u0005$\u000eAW@\u001bY$?\u001eqPlLuMho\u0010\u001at-\fsh-\u0011%5|4\u0017,y{V\u000e]R\u0016\u0004ډ1ٖ^\u001b)\f9Dj^}^,jg_!G,\u0000{Q\u001fP-Bk>\"*2݌*v\u0016֗9@*'hk\u000eЮ\u001dAfG4MuǦCRgbX7\u00159[Ox>Ս)kqs\u0011;499[Tm~0b\r^\u001f\u0012e\n-KMĶ\u0007X_ܡ%XXG|:{\u001cj׷:ʕ\u001dpB@r\u0011k*u8\u0016j1ܘ\r\f3F/5>\"\u0013\n1\u0012Cu6ouٵCy\u0002,m>:MrqbMn_|)\u0006ś(!FJ!\u0007\u0014.u\u0014$Q]y\rӰ^ګ_=N=\u0003\u0013j.l\u00102\u000e`\u000e;e?hOҐZ\u0015\u001a8X\u0014ա\"1\u0014yj~C\u001e@5QCr\t\u0007w\u0002-`\u0017z,\u0019\r:!▓W\u0017#W}\u0015hC\u0017\u0005:?bY6-CcD3S|u>wdO)\u0018aLuKvו=}\u0010kRBs\u001d7\u0016B;K~\f,q)J;Fe-5Sv\u0016BUE쳼\u00139_hg\u0015jg[?\\ 6]^\u0018A[I79\\}h \u001f\u0016/ב.o\u001f#vZ\u0013g\u0017H/-\\6PO\u0003hULnw6\u0006=;|@IL]aBD4ih\u000f\u0017ѵ\\'\u000b\u0013ht\ny%ȓ\u0014`קJX&\u000e6:R^k`\u0017J%U7\u0018\u0000O\u0000%Ybۂ\u0011֍Gu\rQ\u001cK]^Hhw\u000b\u001c!\u001d\u001e\u0013T3Nb2>RN,F\u001eF5`-iL\f\u001e\u0018N}`cח`MDS9\u0016߈\"q\u0016uE=JbЬ}.W\u0017Pj˨\u001aD5 \u000fI&5\u001a}cQ$מF$IwM~ӱ=H;v[/vY%\u0005ƙ*+QS0j|A\ryXl5]O7,<Zo\u001a)ם|m\u0018;\u001biΒ\u001c_Lo\u001e\f4MZ#xvVI\u0018h\u001bIS;Sumq1\n@kAPW$\u001d!6]t\"6Xj@s\u0016fU3\u0005AʈݓC.@}\u001bt\u001c\u0015kH-qw]?\u000fvs\tុLo2|:\u0011&\u001e4Bv*R\u000f;\u0017iZ\u001dXs ׾s\u0002I}5e'Қ\u0012Mf`~@rja\u0011[\"\u001f8+F\u0019l \rՌZg>ȏq^?-\u0004'9\u0011$\u001c\u0007}+_Dgg>[\u0000\u0011h>\u0007Rb-J1\u0016fӇĚ\u000fa-\u001f1ZʳtQ=tMّIT\u001f&Uham\u001bdr݅gE5\u000f\t(?=U[r`\u0002tu\u001cFr7{\u0019{:Xo\u001eWQ(]˝)%\u0015-Đ$3MZ \u0011\u000f\u001dyy\u0010n/=XC'g-Z>[7jC|4g>2\u0005\u000b\u00034G@\u0003Kzn\u001e+\u0002f\u0018SbEcRաȥ4\u0019%\u0003iuՑ\u0013\"ozf\u0016\u000ftQϫ5Я*$PW֊=,n\u0010Λ4Fy/\u001c,-O$H\u001e*D3q3Oh\u0000X2q˥y\u000b_ƮqǫS{ _O}uN`x_cXb%/=]o\u0002JM\u0007E\u000bfؓp\u0014AԪ^MmCs½1!b\u0017i5\u00051o3p\u0014\u001e$rFMR\r\"1\u001a9\u0012gBhʈ-?>Eh\u0018=\u0011bl&\u0003:r[#Nje\u001fkK\u0005<Aڂ6\\}<2 ^^\u0019Gn54Kw#5\nsrzc\t\u001aZV%v\u001c\b\u001a\u0010|\u0015λK4U$\u0012bc3'.}wЉzZiK`\u0011{*\u000fMH^\u000b}c\u001d\t\u001dw-\\K餓\u0001!sW߸y\u0004\u000f\b\u001d:7Gn\u001e}\u0004\\4w˻s\u0019fn\tj\tV!&]K̖!2?e췪7A~\bzl˩9bۍ\u0015ҖKNO/+F\u001a\u0012Jv;r͟:\\b\u000f\u0005#0Ǥ.Gd\u0012BnE\u0015cr,)fXh*vOpC~Xy-뭴\u0019ۆ@P\u0003-mJջ\u000f=<\r6Ij.k{ޔ&!J\\WnI:j\u001dIHD\r:\\#K+|TLcG6A<\t[%bR\\\u0005mhLk)j\u001b<r\\\u0016\u0002+B==[ҮqػyŚQ;#)\u001bm#ho'q̞y\u0012\"e6\u000e3\u0013~żf٭E\u0003[fUQ&?Cu^fBPqt?)qT\nZXg'sLF]\u00113R /\r\u001ah\u001c#rB&\u001e<\u0018C?u\u001e\u000fJIN\u0004}6~\u0013Iem?\u0011ZtT\f7ڣNv\u001d6\u000e\u000fOL7\u001e\u001cM\u0006!\u000bb~\u001c\\[+]A(\u001a͠䜥\rR;;|v\u001a_}zh|\u001b|\u0004jlE&A'\\\n>C4s #c7\u0001:=$\u000eL\u0011ڃ6{y}jx?\u001fx?\u001fx?\u001fx?\u001fx?\u001fc\u0004,E~\u0013\\\u0016\u0004ߨ%''\n咔:*49*>.8)q\tyv\\878#<)pvS\u0014ǥ]\u000e$ :q:;{T1{ؑ\")*2*R\u001d\u001a\u001c\u0013s,g,hyNs\u00178.3g\u000b\u0017q~s\u0017̝\u00187ߟ~y5,~q,\u0003Y.v<Q$\u00122\u001e\u0015\u0013?\n'gǵ\"Ϟ(z:<5*4Oq\u0014\u00158+07|9\u000bE9\u001c,\\p.y|\",\"MH_N\u0004\u00151K\u001cYp\u0011\u0019g/KO/qsc\u0004O\u001df\u0014\"C\u0015\\@\"GfW\u0018o\u001f\rb\u0018F䚳\u00119檰T36E\\xK?\u001fmO4gݽEfK\u0000d@FS\u0018י\u0005\u0004'p-ٵL3\u001fU \ba@R&}TA>\u0001\u0003t=ԌJ/S\u0004Hu_ \u0000)ʈ0\u0007DY=\b$#}A(tأ\u0003{c\n\tM;^U\rD)#\u0019]@A$\u001fhA4H(1ٖ Mg[\u0013erl%%S\u0016\u0004Kꇀ2E%x>:֤#֙JltIS6ڂT\"$ZQbBx\u001aƼވӄ\u001aR\u0004\u0010hNCt\u0013KI h8cL\u0003eGI,\u00032\u0014c.JUlZ\u000e1\u0012ѥ\u001fM?>Rir\u0014]Aht(\u0007h\u00143\u0010\u0017蹗C\u001a>\u0016L0Z\u001d4E{HyÅ2\u001b1y\u0013}Qg/D\u0016\rř*%[SFatw8%ٔ\u000e\u0004\u001d\u0005\u0005ۇ\t.v\u0010\u001c&\u0014d\fjR\u0017i\f6̊\b#*Ge@bRcAG?_\r\u0007\u0003OAWZ\u0013kC5%\u0007!m/S^RK.ܒ\rI7\u0003[\u0001\"akM@W3\u0016m\u001a\u0018\u0010h'3<\u0014\u001f^3帚Rbl5+\u001bC!@lE\nbo\u0011\bF\u001e \u0015\u0003SM\u0005]\u0010n][`ͷ֤\r\b̫͍d\r.t/\u000eƚZ{m\u0011vG\u0010\u000eti6RUF=GI̵Y\u001d\u0001\"oH햋5ugj9\u0012\u001d).\u0002\u0006XRJ{I\u0005ͣa9tIV \u0019PRú6 I\b@%\u0004\u001d\u000f2\u0011B(-2:RLʳF>wHtE6\\\u000bJ\u000e*:\u0002X\u001a{9&RX\u001c.ڡCl3\u0015\u0013@Ф\u0013H-\u001bNz]i3ui[\u0007˱yVb|%\u001c}\u0014Cve4\u000e\u000f1ְMmAhJ\"2t7Jy\u0004\t!Z#cAv$'\u0013{FWniX\u0010\u0016[\\%@,\u0015R\u0007Hk\u000e\u0013tÒq]z\u00111fRή\u0011RlR\u000e7vw&>ҝQ\tdRMUr\t+GL6C%5\u0019\u001fWF\u001fgBI2id·\u001a)9=\u0003\n+\u001f(bX^\u001ft\be }\\Q\u0010iD\u001c,6I-Ժ$\u0013|\u0006h\u0015LD\u0017Z\u0016Ag-:z;A\n\u0018WĊ&ď\u0006ƛj֮Ҧ\u000e%Ujcs\u0019\u0016Pg\fB\u0001iW)g3 \u0003I\u0003\u001dd|,b\u0006\u0019\u0007JI&Wڢ#\u0012R\u001b\u0007q2T93\u000b\u001dF&\\W)E\u0017dsu\u001b\u000eLR\u001ct\u0017XS\u001fHgo7/g\u0006vEUXљ}э\u000eѥ\u0015\u000fDG+JFI])e\u0003\u0011K&\u000f$\u0015{QZ\u0016<v\r{&Jz&`iKw\u0007{\u001c\u001a+\u0018o\u0019\t\u0002~q@;H̷\u000bG\u0003vAuՠ\u000f\"y䬺A\n\fwL%U\u0004\u0016\u0007tɹuC4)c~\n\n\"\u0018+'c\t{D\u0017\u000f\u0019OP+X3t\u0016\u0001vW0޾*\u0006d'V$3~zOCX]1\u000f\u0011D7kMXStD(X&@\f3\u0016³̅|\u000bn٠t3t\u0000cnsv;\u0017\\_ŗXkR@!\u0002m\u0007$\fMr-h^=\u0018N\u001bcA7Md%\u0017h\nj\u0007K\u0010\u0017Gh3-AN$\u0015o\u0004T\\cNEmqfm>xn\u001d#@A\u0014ݗRji矾tDAMMmXo^6Z[5\u0007\u000e \ri+&hMoV\u001c\f_K\u0005!KH0\\d\u001e AǪ6k ͺ\u0003区AP:\u0019\b\u00079[Ѝ6\u0011\u001d\"bKE!?\bGk\u001e2\u001b\u0006s\\Btډpq\u001eU'3\u0001\r8:QDt\u0004\u0016Xkݡ\rX{<ͺ}\u0013t9m\u000e'5\u0004s\tOrB\r\u0013\u001eDu64gl\u0019\"đk\u001fe\u000e>S\u0005́\u000bN 㷆҂xנ{\u001c\u0003Tt7\u0018E<KPgdS)$\u001c%x\u00179m1\u0017t4\u0001:\u0013H\"As\u001d=߄2kJ\u00072TL\u001ch\u0002\\x\u0010Wn\r\"$Mɔ\u0006\u0017l&\u0011_J;Fɜ\fD^\u00072#7e`t@G\u0013Í)qI1(ьׅҺɹ .vǤ<P\u001boEGy7\f9 |d:y$',1311i[\u0006#\u0017\u0002ihg 0K򸌺ԔR2@ZiGH6hM\"6nAX̡ܭhg6T\u0019嶺]cEmݍdb^>n>\u001bPY42\nߓ\u0003@&v\b\n\u001eh,A\u0017a\u001b\\<2\u00194eč'\r\"\b\u0013\u0013>vZC\u0001ݧ\u001a\u0012 K:#\\\u000bb_v ÊIRFY8Y%\u0002~ONX\u000f]\u0006ͦVR\"~\\ԏ[W\b%\u000f$[tگ'scځ\u000fX|q?xu}pm/!t>\u000b\u0012_5E[vPsn\u0016[\u0006o\u001b|\u0001r\u001bLagڏfQp1Fj\u001e*mppTw}\u0014[cPOGh2\u0007k6\u001d!םqzJvAW>r\bUX_qM!Gm=wĠ5& #|\u001c\u000b46o\u0003\rvdqD\u001eD;SxF@]5!TH.$\u0015X+\u0012\u00120^I\u0003p-5yB^ny$\u001eck\u00146\u0003b\"LNw\u001d$H\u0017xј؟^i:\u000b\u0002J|b:hٴب6JHt\u0001?\n\u0012\nU\u0000xt\u0012\u0014\u000em#)#Ć_bY\u001aKzƂ:\u0003\u0000\u001a,:DZciFKNMGWD/2/\u0000\u000f\u001btB\u0004PmɾqRB\r|*x\fډ^k0D$5\u0000\u0016\u0004n!B\rŉ43J\nje]\u0002\b#\u0015\n-Ij\u00159@5VPR\u001fݩ\u0015K^+M\u0001Hq9ϛ\u0013Ě\u000fd-\u0018\n/ӈ\u0019\rbxmà\u00049\u0014\u0007Ԥ\u000e:\u0018Hbby?(yI'5>\u0001@$Q; \u0002QK\r/A˷6SC3\u0017ZGeZИHƗyo\t\b|頿>\u000f(iw\u000fA^\r\u0002\u001cr+R\u0013!q?\u0013y\"\u001dT\u001fy\u0003.Z2\u000e 8KL\u000b09-SÛ-4\u000e\u001c\u00122cH\u0010eIs\u0011\u0012;Oi+ (\u000b\u001fĿ\u0006\u0005s\nY.m\u001fC)Vw+=\u0016\u00145G&!~L\u0001\u0000\u001c\u001ashaQ\u0002L0R3\u0007Ƙf\u0014I㡶{C\u0002\u0013iG;dTR\u0002\u0012c(Rs$Dy\u0010aΓx\f-اz\u0000\u0014%pѮdI\u0007\u0019a-\ty!\u0010=X%E:d1wP\u00040g!&\\BSy|*\u0017b3ȰRZJ|?C!8ڔH0e\u0012Mi<XWٟ0\u0007\t\u0017tC\u0015{i)X\u0010⊭\u0014S%uMB\b3F=z\n׍\rL0\u0001ّdI.E\u0005i*\u0005\u000eSHjb2FOR\u0002x\u0019_cyr.\u0013fMb\u00102)\u001f68\rO2\rFPv\u0013\\/^+raIfX\u0001\u0002s@N̳ߤp^=PH-}$4\u0013$Xk-j*P@I\u0005s)Z+ZH\u001cFK#%\bA\u0019AZ\tX7\f,(\u0000vO|v/{T{jL\t%)1\u0000|q7\u0017\u0001\u0016J/\te_S캢~Pnמ\u001e\u001ay\u0017|'5\u0014+P[\b1X\u0017Jdy\brz[>м Ձ\u0012I\u0003\nx\u001eɫx@)ɥBK5&d.hQ'\u000b^>\fƝ\r0C\fj\u0006u\u0000Y)X.ߖO\u0007H4g$C\u0006\u0001tm\\\u0003b&/G\u0000R(ՁL\u001cjDi}\u001ab J^\u0007\u0001$\u0007\u001f\u001fiy\u00063sX[wzϔ?\u001aKAI\u000f\u0000ȑQwX=\n9\u001aU T4^\\@G f$5.\f\u0017~7j_|[󡶁y:NSuS\u0006'lp\\\u001f\u000f#\rr\nVca#\u0014$bI_2\u001a(7\b¤^M$\u0000(,A&\u0010P\u0010_@ƥz-\bTadZ8hvF\u001e5Cm֦^bn0/Wt۾XN\u00156\u000ez&B5T$lt\u0001*t}T{q.Hrt5b-o>P+B*l$}2_1\u0014\u0010\u00174ra'+(i\u0015[ym#\u001ca⶛\u000f/\\@1%\u0019R<\u0012u)%d\u0004e.G\u001ffiҦs3ŭ\u0016z\f2`\u0017~>loN\nssצEAI'\u0010$vu\u001e'H\t\u001562[@+Ǻ\u001d^.,st =L$4ZN\u001e\u0000|\u0007k &Aw\u0013k\u0006@\u0011]-\u001aKQy\u0016r҆\u0001MP\u001f֕ҵ:\u0010K;sj+R>P\u0007ƒ\u001c.x\u0000r=J4I.O%kN\u001f#ٽ;\u000b9u`Jm1eAF\u001ekEO\u001c-#>֐6\u001cBד b]\u0006\u0004f\u0019k})XK!\u0006A'ڸ.TYۆRHJ$*@\u0003<<\t*<)\u000ez|\u0006=(:Ƃ\b:bVAꗴ\r\u0003*\u000e\u0000\u001dl<>\u0005*Ǵ~\u0002zP⓳ڇ#\u0017x!NHU\tr\u0016Y$\u0016\u001e(g\f\u0013\u001b?͵_\u0005\\۶6>\u0005\u001b\u0003݊-%\u001d\u000bZo\u0002Ds[ ҥ &*آ\u0012\"\u001daps\u001c/{{{~~\u001f\rws1g1Ӡ\u0002^{\"t\u0018y\u00170qKR} Tbjq{\\\u0017S>&\u0002\u0007\u0015\f6uUn]\u001f8ϋa[\tͻNcS\u0007N\u0002N\u0003_\u0007?q\u0013za)Y>s\u0003X\u000bl\b``Y)+|T.ƈm.\u000b0-v\u0005b#{Rl\u0018xS&\u00129Y\u0017?\u001bVx\u0000kNC \u0011\u0010#\u0013b\u000e\u000fE|8\tI'ׯNx\r\u0017+ĶqO_\b\u001d0\u0006:t\u0014A\u001cO\b2FvQLՆN)E0c)sA,~\u001e\tNt[ҫЭF\u00019$x\u001dr2OEЙ\t\u0002x^N1\\?;M\u0016[c^\u0007[0_\u0004\u001c\u000b\u0018@t=c\u0019Ϋ8lo3\f.\u0000\u000flםEk&Ei7\u001bho]?Gp\u001c]\u0016\u0001>a\u000e_\u001cc\u001c\f/T\u0006\u0019\ndi\u0010\u0016)s!S\t4%OfFa^}6tT\u0013Jʃr\u0014KIű\u001a \u0002\u0018\u0003\b\b@sn_cF\u0007a\u0015V\u000e:\u0000rJ\u0002\u0019B0:?c_|\u001d0\f?SqO^\u0019uV\u0014x%NI\u0014\u0010%q\u00110(ti5V\u0014z\u000bt-%30W\u000e\u0010D|}\u001bso\n\u0017\u0017'_g\u001f\u0007#\u0001N\n\u0018h~\u0000]\u001aGX'ɋ%\u000e\u001c_7|\u001d\"rqg\u001c_N\u0016y\\u=8\u0013\u0014LP)Ψ3\u0016k&.]a컝RQ\u000fb,nq<)9'?\u0011\u0015sl`o=@뀩?\u000f:'A\u0017+g@<\t\u0007ϓub۫$Nabr|\u001d:=r|\u001db'\rv\u0018\u0011[A\fb\u0010\u001aƥ\u001cWN{\u0010kpRA\t\tB2b\u0017(Α-*\u0018\f+E`L\u0006ٞp@\u000eqJ\u0011Q\u0000t!'\u0013\u0002se\u001e(*EO\u0012_v_\u0001\"gLé8$\u00044\u00036\u0014!U\u00135ks8P\u0012\u0017C72\u0005v\u0015TG(̱}\u001eq1W܍Dl\u001e\"?Z\u00040\u0011<3eαJ3.am\u0002:\u0017NUQws)a2\u0016SS:|헤7l֧ǝ\u0015an[u`yqP\"OM4(qT\u000e)I\t\u0011|\u00125cWBYz\u0014\u0016;\u0002fsn'{yñ`\u000evȆ\u001f\bq#肇\u0014{AZN)z?\"<A)gk?/6\u001c\u0003\b\u0006sQ&F2\u000e\u0003\b\u0013ZE\u0019\\\u000e+~b\u000eף\u000ba\u000f0lx\u0006\u0003Ccn\u0004u%Z\u0003{`;\u0003F\\\rױ\u001f\u0007}.\u0018\u0000:26p\u0013\u0000sj\u000bgO{ȩQ\u001co\"\u0017\u0019\r\u0006\fJ\u0011Rdl,Aܚ|q\bn3\u000ep\n0\u00141\u0017\"`l\",\u001dvr\n1.5H1'KbN;s5(Q1\rd\u0002\u000b]\u0019ǫ&5\u0005;n\u0001ī\u001c\u0003n!g\u00066J7\u0010:ԁ:\u0015s\u0003e\u0010QJ.Aܖ*\u0010t\u0004\u0002J\u0019P+\u0001q\"\u001b\u0003|Q<\b=M\nbrM\u001e\u0019\u0003j\u0011P\u0007 {{\u001e\u0014\u001d!\u00045\u000b@\u0011T\u000b\u0013A\u0001>\u001a:\u0002\u0007r\u001c\u0010Ę#zS%ό.M\u0011;\u0005I{\u0001A\u0018m#m]N)BR\u0012\u0006]\u0019@̭O8'KZ^b3;jy\u0018ac{\u0003q\u0014\u0007<\u0004Jodn\\pKz-e9\u0017rx\u00001P\u000e4^x]JOOg[}\u001fr\n)\\pm\u0005\u0003v\nTN3~{:qH\r$~v\u000fj\rqR.e\u0013RPv^[3\u0010\u0005\u001e\"`\u000e$\u000e\u00142\u0014}\u001c׍\nsW҇΍\u000b\u000b;rj\u0004x\u001fAÿwrd#J$tR\tjTM\\\u00142k?S$?pv(HS>~q,\u0000\u00066PdR*\u0019\u001d:\u0002\u0017\"y\u0018a?\u0002x\u000e\u0007\u000f\u0003#zM\u0006\b:\u0014ڿK\u001fA\nVQP\rj\u00107\u001c\u0016\u001d\\YgB\u00108e\u000e\u0005\u0002/\u00075OPj>\u001309\r\u0012\u000b3UCx_\u0017m\rJ\u0011<]\u0012n:\u0002.\u0001 Pf\u0004\u000f9\b=\n\u0019蓈9ru\f\u00149G.\u001a\u0016Fq_-όg%>\u000f۞:<|C\u001c\bzM\u001cf\u000fg\u0017\u0001sB\u0013o^+\u0003΄0`\u001b.JG6\u0006lb\u001a;?mȡȬ-TT#Mk\u0014HR;xTJ\u0016\u0011]S񸽜\"ҝR\u0004Poodħ@-\t\u0003!\u000eũeE/\u0002\u0005\u0016N)iX)BJ\u0011gR02;*Oqx\u0017rSe\fƝ\\J#\u001c\u0012 qNϤ葉j\u0010\u0016;Z\"Owj\n\u001by#6%\u000f\u0017yu*W\u0017a\u001d8\u000bx9ď\u0003\u0005eO\u0010CX^\u001e+=}}\n(YA\u0013R%\u0018TE\u0004N\n/9*Cj\u001aHW\u0004c\\>\u0014p'\u0015_\u0002]h9İ\u0004$\u0012\u001d\tǛ\u000b(uh\u0006si\u0018$L\u000e&[P\u0000\\Lr.\u0014៽\u0016\fO\b?\"ΏrJ\u0011wC} &\u00135\u0011P\u000b\u00051\u0010k\u0013RD\u001f81Rr\u0016ס\u001ej.\\S!\u001aS\u0014]映\u0004\twP\u0000\"q[\f\u00116ҷ[xf}_PlmT4/τ*m333.z\u0010rꙹ\nx\u0000o\u0014AsJ\u0011uD)z6\u001e1M62җB<b7Fxj4qe_J\u0011Tt\u001e\te`{w9@ؗ\u0015\u0005*񼷆\u0007j{bb+52\r*\\\u0015\u0017bTPf݈Ar\"a7\u0019X}Q^\u000fW\u0012%yk9`:\u000eC\u001e\u0002>(-e\"01Uy+a7@\u001ex\u000f?\u0000C\u001e^\u0013W;:tFANyQ.\u0004L'yM\u001cH\u0013l\t^Ah\u0003~Y\fvM7Ģ _#\u0011\u001eqz[2\u000e9\r5@]B\u001c[!3@\u000eG&\u0010\u0011৛@)Bb\u001d  \u0006\u00005G2׈EkIˤ\u001bc\u0018/b\u0010\u0007x}\u001a\u0017c\r\u0007|a@nS\u001c\u0010\u0007؊4ZS\u001cQwc}\u0005;'/=:塽C\f\u0000\u001d\u0019UZCѫꃲgeAQ_\u000020W˖X_Rk$J#vpʎ\u001dR\f\u001d5\u0000)\u0011 ?n9ەِ\u0017%\"078\\r$R@)\u0002iפ\u0005~SAAxS(ﴕ\u0010D/\"\\\"aOA\r뤏\u0002\u0003N\tJ*\u001b\\a>\u0013_$jr$Y\rr&\u0003jwdvO.M1S\u001dŹ:؅bk\u001f:GV\u0013M\u001c`p9!P܁\\*pt?\u001cI|4IA~f\u001a\u0005/w=m\u0015\u0000\u001dk\u0002_?LlC\u0002N%jzxPo\u0001:\u0017c\u0004\u0019\u0011P\u0016=~a\fw9oX\u0012uI\u0011ԖA\u000f\"왳F꘲\brB9u6QB~\u0005%Ԋ\u0001|\u0000z.SX\u0011q\u000bGZ*\u0005\u001f\u0000J嶠$w6\u0019.c!n\"i\u0001z]|$\u0010z\u001f\nfg\u001dHlfsTv%қ\u001e\u001e2/\u001f\n!Oe'D8\u0006\u001dPvy\u001ajvMPߤ\u001bU|eUb%.\u0004)@>:R\u0004+\u0017r]\b'QAm<28qm\u0002^#e\u0012)λ`\u0012/\b\u0013Po\u001d\u0015j\u001bl[2~W9N둶)QViSuTRl6jwjv\u0007u\u001e\u0011^\\x[8E(\u00108$KF\u0000T\u0005!\ny^d\u001b?\u001f\u0005\u0003ftJ6uk\u0005z{1HV3I۠Y\u0010kZ\u0018J,\u000b g&¾\u001cp8I_\"Ğ\ba9\u0005)9b?\u0007*gx\fL8\u001e\u00105yaV\"u\\\u0002\u000bPJ\u0015\u0005\r|\u0000O\u0001̎y\u0006W\u000b@\u000f|\u0003Q\u000e\\\u001a\u0005y*An\bb\u0014P qWA\u0001rp qe\u0019c\u001a\u0019\u000fp\u0000g6j>(AV\u0014@yk5Ҡ\b\u0019jr\u001e\nS:T\u001aS.\u0013\u0010jTct.@gzζ\u0003'u\n\u000f>Y\u001fP\u0003jW\u001c\"\u0014\nj\u00019A=Y8<&EtDR>\"t;u2:t\u0016D\f\u00149\u0015ܭm\u0002t6@|3k\u0015\u0019z\u001b\u0011\u001b!̩Oz=Z\u000b*R۫>\u0003E;-#{\rEnVp5\u0005z2\u00196\u000bE\u001fl0\u0015x/n\u0003\rȣ\u0002\u0004m\u0013\u0000\u0017W\u001f\r`]PƱ\u000fyOчp~\u001f:qy,Wj\u0017\b9Z>yPD\u000eM6\t\u0014'(q\fcit%_V\u001d\"$E7v'9\u001cvf\u0004CK<W/{\u0007x+R]\r5\u0013ԁ\u0001V\u0002\u0001\u001d>$9^`n!g\rzNQ\u0002☐x!B%m1\u0017\u0017)\\.\u001fbXa\\6\u0004fX7r*\u0002\u0010O<k\u0012N\fuG\r\u0013\u0016:<AHjV\u0001eGEi\tp\u0018\u00055X\u0011\u00013x07\u000b\u0005b$DB\nU19{\u0003Ux?~^mԱ}\u001fů\u0002\u0006aZC'[5 \u0016J.d\\\nb=DLNM\\\\\u001a\r\u0003\\;+!W̩Ǽ\t\u00016z\u00117֊e!\u0000y^i@=\u000e\u0015Z\u0015\u0014FZ\u001cj%!\bkW\u0014[\u0004ρX\u0011\u0003˸<m wn_\u000e)<c&񸹊\u001cV?29]\\QP\u0002q4z#!$0=-\u000f1cxhP\u0017\u0007\u00121a\u0001\u001d\n/\u000e{\u0001T0\u0013`\u001b\u000b\u0018js9e:ȗ]\rOPn\u001a~\u0006sr\f5HS!\u0015AQضº:QS%\u001c/\u0005\u000fj \u0013o䬁p< u)(eI<s1\u0005\u001cf\u0005\u001cf\u001d]\\ܣ5\u001c\u000e0]p\t\u000b\u0013\u0005\u0014%^\u0004PP\u0001\u0012P\u001emr(𼽓q1A\tA\u0011bn\t\u000b9\u0019Px[v\f\nh\u0017=\u00004:0w\u000b(rJ\u0005ʜ_pFd\u0014Ӝ>F:ٷWq\u0016'@E*u\bSTkiw!~(k\u00039)ʿ`\u0013\u0017\"z(ՈJ!c\u001bp1()\u0015R\u0006;\fyT̏B[vs)\u001f9\u0012k\u001b\u0018(Oj4&c*vQ7\u0016s\n\u0010\u0010:vj\u0014@%KLQ\u0003Ks\u0004\b5t-ЙM\u001c\u0012*]]l\b\\\u0011u\u0001\u0007'a\u00178*A\u001e>2;x{>y!Ԑq@\u00015`}1x\u001cη\u0018;iUD\u0018w\u0001ZG&.\u0004N#mPN\u000b-ĭO:ԝ~#\u001fFod\u0003T\u0000COO\rj2\u0005͇oJ6tJ\u001em&nkqd'm&@\\]\f >]!}IhҐݬ'3*\u0007*\b28HS-7Sf\u0017=cdl\u001eψ^m\f2f\u000f(\u0002q\u0013c{&\u0001ѫO'k7\u000bT8;ԢBRhb>\"K3~O7$:4q-\b9$\u001ewWsT^4k\u00151ʸ^F\u0005>@(\u0013)\u001fɤfu*YG\u00135\u001a#\u0011߰\u0017\u00117pDL.X'\u000eU\u001dnw[ M?@\b\tv\u0011\u0019ߵ\u0017=\u000f?3'%/Z\u000eӏh]|ߕf՚2k#Mf̣.\f(D\u0006HD4g|Vr\u0018Ҝ\u001a\u000b2ZJ\u0015\u0001W\u0002$5ÊvJb*\u001e=B:jװhr:U]\u0018n#y$T|êY5ZFP\u0015{\\)ԫp9\u001bOׂ?❇G\u0003\u001fd\u0002r8$t:%\u001bzt!\u0006E_{\u001c9c\u0002B-gqT&㇬\u000f!(͜f),\u0001A\u0005kA}*pndGUe\nOU9K*kD,gbŀDyI\u00075\u0016Z4ZS\u001aWC'4Ƕg7+|-\u001dצ*Im11K'qZb+9,5}K2Q\u0010s9\u0015'P<\u001dGv\u00073`d3Lvyq@(R|$\u0007؆.Uv\u0007yNx\u000e\u0007<\"\u0011}\t5hduPԃn\u0001U,~\"\u001e4-YʌN\u0012&!\nk\u0011%1*KKҦ\u0007ZQF\u0007M#ZRvRDjͪ`$lU gA$}P!z\u0005CԝnC\u0001y!y#~: c^a;Ð>J7G9]\u0007\u0018IQNL\u0000UB=CY諡0\u00113}<,,\u0019HTvARVufߟfU-tz.\u001b\u0013\u0015|\u0001W0>\"s?JE=R&q@b3&]़ŅL\tPB+ˊ3\u0007=>nXFJo6P\u0016=qz\u0011֣x>]\u0003JW̍\u0007+beN]4(o\u001b\u0017u\u0003;I\u001ft\u001e\rA\u00175aN~\u001f*ƅ,of\u000b{,\u0019\u0011\rt j&[X\u001f]oNҡb\u000fC߉\f{>x:\u001b̺CHsPo\u001e\u0010\u001c\u00147\\n<'jך生<:IY\u001a\u0019ES\u0018۶KtK ˩=#Ț\u0010(\b!cYj^!;52TR&\u0003k!Sʗd7sIs\u001bO\n~7 |\u0011R\u0007dc>\u0019\u0011`ۏy\u000eQ\u0003ҞtI\u0019dȷLȂOty\u0019i{\riG*9+2tDʧ\u001f臝\u0014C\"i6g\u001e62tF>֩!JoɞT\u001e-{^~\\tuP:\rE)ɣ&sыvsW=\"!s ;\u0004ēnQy_\u000f1{0?%ݧ\u000fsA\tMo\"_ɇ\u001fē~ao>H7^\u0010u5\u000e\u0004I\u001a}-\u0019~-kI6~H7t^\u001d\"3?R؇ڄ\u0001^\u00069MΖc\\\n\u0001Uu[\u0010ewJ\u0015,^Fi~O\n~&}\u0017L\u0013\u0006)AƯj>eA]!]Yz+aڴ@IY^U\tf8Ä*}(\u0001]\t%WS\u0017\bj\u000bs~1&YP}\u001d$J|$C>O\u001f<_=D\u001a=~W`߱-Ia\u0015>QA\"t\r#\u0007s7\u001d(Ҭ$D#h:/y~;dɼ\u001e:$LN$\rJsΘ\u0015˞\u001e\u0013=L=\u001a\"\u0012IIYkmIqqҢ*kiiYu5qI\u00053wug$yMםۮ\u0003\u0006\u001e+OJKJ\nbgjҽKh\u0019?v3?4Y\u0013]]/\u0017w7\u0010ܐ4ySm\u001fl\u00043\u0017aFb)rhC:qS/U\u001cGF\u00116Ro6u䭏e늋3CҬFS٣j\u000bӬjsIyAFf׭ӒSgmGO;,A>/RRYyU\\W(ka]\u0014|CVɶ[G\u001eE\u001d\u001d!\u001eVj7fLIYѬ]wcδ$E]hX\u0017\u0015v)>x[F`?=*\u0004\u0010\u001c0C쐶LB\u001ccR\u0007\u0012:\\hQ.\u0018:bߢ=/ļPoE6¢FX56\rL\u0011EYʉ,d[Xt\t;~/BSrǱ\r\u001eט{-f8\u001b?%\u0017<eo*fn5\u001bK﵊0\u001dM'3\"𚋈)q\u000b,\n5xAP~SE㐫!ܚ(u\f}P\u0010\\\u0012v%!\\Уw#\u0003U~\u0016]Ak~\u000ek@f|\u0016v]-R==/}yHc?W\u001f\\^\u001b-k|\u0019uYi_uYp@PiW7]yRXTwc\u001e~vl vw99,L\\Sv$Wm^J\u0016F\u000f\u0018ߏlMLpt\u0011R\u0017{%!ֲQKesS[ǡ?7%D\u001fk\f3\u001a$q\u001a/<Iv\u001b\"k\u0018-]\u001e}>lncw0M\u0017J}d{eGm붓eҲJ{ѳ^sa\r_:~H\u0006\u0010!+s9EѲ2\u001fZwӡMnu>qu>Nu>T}y!N\u0001\t\u001bn\u00075:U;d\u0005ݩ\u000f\r^\u0019]\u0019]y#rCDLo+U:p~9h.}xB񌴰EQA\u000bn1\u0011l\u0014\f׮'[2ϵƟi\u0019wnƓ*|_7QxXc\\VԽ8.\u0007z\u000eѭWStiYJR\u000f\u0006G2sfo=ߏ:,X\u000bI6M!5^\r~Ui\u0015!l\u0002ʚ.\u0015U_\t,\t,򯪱/?WTY\u0007^\r)\u000bN+s\n-<Ә\u0014a:_<Xe,\u0019'\u001fC@&\u001fO:\u000fn~4\u0013jJnvQo󢴯Wt}p\u000e\u0005H>U\u0004P΢\u001d@\u0010V7\u0001\u0003!ί=!k..\u001d7\u001bx\u0017\\\u0017p#|KzaҾ\"C=/#tgE\u001d\u001bn\u001a\u001c_\u001a6:*MU@!Wo\u001dWg\u001djp6wUNaNa\u0015aU\u0011O~2Vd\u001cXJpU\u0013=\u001c\u0014Kr\u0006\u000eH\u001fv[H\n[Ι\u00165\u0016w\u0014\u00075\u0015f\fj\u0010)\u001afI!iaEI\u0001ɯXHkܼ+\u0012\u001djB\u0012ۊBDymǉۿ\tb\u001b\u000bo~ѢEM\u0017\u0013Nݍ3+¶0/ܬ8X`Ovؘؕ:Ȉ:3ҁ\u0012hgVKOkWdTcȝj lyz]~5$!E}XV}Hdk豎PVoQG(J\\h%\n{#\u001a^^a\u0015.\u0015\u0001\u0001qŮ\u0011\u0015^TW[Vob\u001dɷ#:=<5̶>\u0014\u001bq𽑃C\u000eXC[P,M\u0013}2}j|3ϴM\u000eg\u001a+*ϻ\u0005<&N]prcګEVv{\"_z{٣&8^\"r0\u001bxgW\u001d\u001c]u#\"%45jUhنs\r\tZ2Bd~\u0016=/BM\u000fM>Җ6Oѓ_\u000ew/z!s鉧[2b\u000eȊ8*`pǎ\u001bDt_[{a\u0016OBL:&-C\u000f56;\u001fF:5\u00044ϻ{\u001bflut]LM&\u0015ɾ.]7#\u0003\\\"j,ʞ7bM\rzY\u0000+gEz\u0003,m8Z|eϙ`/0ߪݘnė/ y#V|㠤YMǱ\u0007v5\t\u0015cʝ#4E&J{E\rML}Iw1%Ρ:8JUd̝\u0002'\u001c\u001a~\u0019)\u001b\b)\bΎ\u0012UX\u001b\u0014{==\u001ai'i¶\"Ȳ''d{FŖȈ\u0006Hz\u0018ѧ\u0016OU\r0*b\u001f\u000e4\b[̪񻾟\u0012R{+\"9\u0004;E!e'S-;o\u0007\u0003LC\u0015ͧC؏\u001ff:vdE>(t\fy]b\u001b]\u0014v\u0013Bs\bI~\u001a~\u000b 𯞕^ۇ\u0017\u0006f`UZe?|#s\u0010A|g/\u001c\u001bh\u001fQ|9YMHvM_{{{7C\u0010\u0017_F~Sov^n@v롭!h\u001aڸu/Z6*\na7Bi[Uj_:\u001c\u0002__\u000f543,2#,5$ ;\u001a\u000e#E}\u001eݕAGڳ\"1.\u000e(I|\u001e\\\u001cqCx[$<Aߏ~\u000bLt\f{ۋ&mV\u0001;\u001f7\f3?mYL\u00175Jhh!\u0014\f4\u000f_Jc\r!uu1ҕ\\Ӗ9C\u0014|4\u0017\\4I~6*7\u000f\u0019\u0014.GJ3֣Ŋ[ѪU*h\u0019~r+va5+\u0012vq|\u001e\u0014|Ƭ}H;׈wvAl\u0002\u000bp\u000e\u000f/s^\u001d\\\u001f\u0013=\u001e7!QE\u0004\\\u000f?<2t)0C%?\u001fz,O':vYL50[罒^旍ߦݥ\u0017Q\\\u0014-Uڀ\u0016Yf/c&\th\"\u001ak\nI\u0001DJ\u0019Jhv\u0013,P^ˉjC\u000bYm/)/+q_iE.>nĵjwI!\n]B]\fM+p\u000b{Zl\u001f6(9\u0014㐗\u000e!o\u000b\u001c\nJ\u0012˝B+ݣZZ.g\u0002[΄ \u000bm\u001aogXشK\u0003X֮[4ݜ6S\u0015e\u000bT4\u0019Ec(4\u001c%?G ?\u001e_G=\u001eh<DӤUhf1MzϮ\u0011\u0017zD\n\r\b\t\b\r-4zXr[hjk<W!9O8\u0005gy1QC軲A7\u001e\r\u001e/.Gi>R@xCN7k\u0018Z9w%^ýw%Ǎ\u0002f\u0002NG\u001c7\u001aMx\u0002И\u0011hd,4gZ~A߽z6\u0010!\u001eۨC\u0016㭷\"3\\C\u000b\u001d޹fw\u000e6&(.е7ҼY[_\u0014'Y\u001dB\"B~if~kop/!\u001b{r[-{\rYx\fc\u001f\u00104\u0013;~\u0019\u0018_=\u0002܍o\u0016ދk@m4ﰫ\u0006#Lgעḛ˵Vua\u0011o`,$ad07a\u000b\u001cy\u0003[41>6X\u000b=KN1gO\bֺ%.#K4\r\u000f\u0018ܟO\u0004;g6{2x\u0011Zu\u0019sꐟm.ż\f5ycس<gE\u000eQ;;\u0017v\u000e\u0014#ĩ2 ¯#ܷzXZ%]\u0015v!w\u001c\\_\u000bZoXeM{3,mXM8.5'=yn<8\u001a?{p\u0004=6\u0016NVu\u0012Z+G+w\u001fGIrZ\r\u0016μOfSog؉ִPg\u001a\u0013\u0000\u0001+\u0003R\u001b\u001a~=3\u0004^,q\f*p\u0018Z\u00059EZg`|!Q\u001c0f9~$u\u0006qx)\u001d6Hϱ쩛ѮcFia\t{XC\u000f\u0003U%Ӎy1%\u0005x\u000e\u001b\u001cc\u000bK\u001cbj߼s\f3YSXL{\u0010+ݤ\"E&g\u0017\u001f1sNGϱO\u0013oEV\b*Kh$v4vgPq<庅u|\u0014SPV\u0010)214-Į\"8\u0014.JPC«\\B\u000ev+c׬\u001eǰ5Y_tğNFA\u0017)#fym|\u0017\u0019)#Kдqkќ:h#u(|v\u0003ӗoqK\b\u0007\u0013B\u001d+\u0002%\u001f˼M\u0007s}O4`\u001b\u0013\u001c\u0004F\u0000&OŶ6r\u001d9Z\f>,߭'Es'_\u0006\u0017[\t?/`NV\tƤ0v\u00193y\u000b7s\u0017;c\u0007R\u001d͞\r͜\u0011\u001c\u0001M\u001eMoB'ߛn>fdW:٣M|NV\u0006\u00006{-4\u0006B|N}]S{˝R\u0006\u001cj\u0013ZlccwWSǿ \u000fp\n̗(%4m\u0002i\nEǶd!5r%1f-1n\u001d9q3\u001f-Z\u0003ď&J3\u000bk!yk\u001f3kQ\"\u000b\u001c#+\nb*J#\u00178D\u0016\u0016:F>x\u0018azX[F;zz,M\u00119>rvdܟO0j1iHqV4Wq\u001fL\u0013-Xb.\u0011K|M4k.R\\Au\u0001h]$w\u0006ɇWA|C9Rx#ic\bfa\u0011Ů!\u0018g\u0003\u000bb%%vu\u000eEx!\u0006\u0003;-ٲ\u000b֩N,Ha\u001b8\u0007shd\n%7\u0007\u001d\u0012͝\u0001͟\u000f-['E+vBZ8Z/&ќ\u0004f)hyt6\u001eI\u001fXm~EӃkg*\u0012}b^xtjx\u0012S\u001c}|\"\u000f\u0011\u0011\u00036u1I~%LWs\u0006?hSD>\u000f{s\t܉6Bo';}\u000fR\u0007͜\u001bJ3D\u0016o8Vy\u0007\u001f랦ͮT/f>\u000f\u0000\f25&)\u0001SMmh{}4칎:j1\bԨc.[^cE?.7\u0017M\f\t\u0019x͔__[&9\u0019cY\u0013mF*פ\u0011\f-P>\u0016ۡeF^h\u0015\u0013Vqhs=R)c7Q}ŗ/\u0015\u0016\u0006\u0005y\u0016\u0004`U>)qevaev\u0011\u0015v핶y\u000ek5߱No_\r=x\nHa\"<yx=įO\u001e{{rHaJl\u000fM؀V4>p1l9BK2\rGP\u001a-м~ҴA+hiN)U\u0001x\u001f\u0017oVt떜\u0018\u0006#BStd\u0001\t\rW8kesn}H\u000ek\u0001Fk$e\u0013_\u0014F.v~!^9\u0003ΔǷ\b͙\u0004͘\bF|M]f\u001eRZg[EN{\u001dR`H\u001b'ݽn¾{bFV\u0015ҎWnk\u0002{\u001aR)\u00014!ymjOu6\u0003-65q.&?z.\u0013[_l\u0018\u0003ْa,<\u000e\u0004f9]3B\nS6ps@\u0003A}4\u000fß6KO\u001bilSzHa\u001aRX\u001463Agoo&;WݬVn7\t˦7<a\u0019\u0006ciF[bjmm?_rH謴XRn+[ߚ7c2\u001e\u000bF\u001f\u0013W!\"%]<\u000eU4w\u0006\u0015*h\u001cl?l6\u00133\u0014AC\u000b\u0014Tb\u001eZB7\u001fE+5za\u0002p$GnsM\u0001-w=eړcz\u0001Y\t?ؘ?vw{\u001b\u0014\u001bR\\T\u0010s\u0001KV\u0011\u0017\u0005\u000f0\u001dm&IRv\u0019\n\u0016\u001am8t\bVr<CC<͞\u0016x&KZ\n-n\u000b\u0005^Ο\u000e_ y;0Ek)h\u0018-W;\u001bT$zΉ;\u0006X\u0015\u000f\u0010kc3n[\u0006O\u000f?(dSFdqooDj\u0019c[\u001cX\u0017X^~ſ: 5T%7\u0019\u001f6\u001b$7OE\na\tW `/gZ1\"ޏ\nh(Eh\ng_\u001b?k-v\u000bv%I=+o\u000ei;\u001d't^ϊij9u''Ky\u0013sM!瀓\u0003|\nܵ1{ҫA%\u000eq%Qėf[\r\u0019`#;ksܟ\u001c' c1h\u001a}N,ZIZ\u0015hmu\u001eFo,\u0019\r`;j{m^-\u0013y4Lf~Uޘ]ԟ=*w%-52\u0015u~\u0003+4hg\u0006ͬH0^T\u0013\u0011\f\u0005ƕCU`\u00042F\biHo7/By*K#?K9nRxx*P\u0013)4F+Ϣ;ZK\\C\u001b\u0001h[}k'.PSnSbw]?Mh\u0006\u0017*\u000b\u001dQ{\u001d&h\u0016UqSv3':f\u001fC\u0017/E.=HǻtAhJc?E=/\u001d!a$L\u001a\u000f\u0013>iQI~9w2*bMT%3g\u0007\u0010i.X3I\u00161CK@˵:\u001bZs\u0001{\u0014J\u0015k5ʕZh\b)\u0013#v:f畢I_Ujճ&}9廽eǝ@\u0004߾Y\t?oe\u0019_wտn5,cy,ůdͅ:[C\u0017\u0016ݯ\u001f;A+~\t+\u0015V8tTV]w\r׈\u001bZXIXr0\fsƄh|el\tڬ}\u0012m'\\N\u0016>\u0011;rgi*j\u001f,ߘ\u001dY#k?,ƚG1,O3J\r\u0007OݮݬOqږ\r\nX=A9{(\u001d\u000e\b\u001e&TQ;GoJ?q?\u0010\u0007\u0003_md6>qҧmZ\u0017b',]id<o?)lG\t0ν|3jg]\t\u0002^{;t>A\u001f!DݥVna5\rgX\u0005d;\u0004GV:8\u0006^;C\fE\u000f=vVrV̚ٳ?J2_>\\7|̪\u001a\u001eS۲\u0003ii\"8G\tuDR*\u0015f&EQr*p!g\t(gДLM]$IWз\u0019v1?i\u0005ڔ8\u000bc)+m\"4Nno\f?sw/\u0019O!Fl\u000bX¨%\fJXC\u0006B8ژt'x,c1\u000ei_g욵سUP!Qⷳ\r2P6Vm#o~֡\f1MDDl2D^\"-/jސ-ze\r*>\u001bfڼ܇Wқvc8E^\u0011M\u001d\u0000M\bmhj}\u001am?qw\u0015\u0013O\u001aUnx:ٽ:n\u0014tN&7p|`բ+l\u001d-\u001b\u0007\\}W\nX\u001e3TwH\u0017F\u001c&\u001b,1(bDMnLS񵬟tbdtj#n\u0015,<`3\u000e!z%i>[0E-'$%eL2\u0006\to}$;5ԏg\u001f\u000ey_\u000ebU1aъ}\u001c׏g D;\u0019\u0011jvSW\u001fYg\u0000k\u0018]7gې\u0001\rWnNۡwnBFgΏ2yԧ#nzp5=Ѫ92`_N\u0018qЉWɊ>x\t{\u001a\u0019%vn6\u000ez\u000f\u001dE\u0007M<7\u0011M\u00141C`zN^D\b\tyO\u0012wLX@E7o}3m$+$H\u0018-<}}Uts\u0013\u0018Cn|<\u0017O\u001f\u001cc6g\u000bZ]vȼGS{Ůh`ʄ?>\\%hwa~k4\u001f\r\u001f3J_\"};DMB\u0017\r5HZ\u001cA\tq%n>ݵ\u0013\u0002\u001aA;?lh\u001bG9\u0019A\u000b#6\u0013\u0019\u0003Zԃ~0f>j\u000e\u00163i9\u0013Y4\u0015Z\u0015^՝\u0012ewHDm|\"k?\u0011YMugЉo9r\u0012\u0017;\u000fSWVkgО3wȮe)/@Noe\fYq-kfxo\f\u000eٍ50C:\u001a\u0002d7C\fa&wD\u000bҽuF\u0006|}<k|\u0007UvDDm\u0015?F=d\u0004^S~\u0003&8j4\u0015wj\u0012TbN3CWw_\u0010\u00175#~O\u0004Y'xU,\u0018:D5]u\u0007*Y5\u001bw\u001eNq$c#\u0019ԎgѺxӳ\u0019:\u0019_QCPP\u0013\u0018C}jU1he\u0007\u0011ir>KQQE\u001b#6:px+v\u000e^\u0007L\u001e|Ѥ޵\u001fTV\n\u0017<EOpWMB[D@r~\u0013|kar\u000fM9B\u000b\u0002Gύνdt̞U5ͫD\u001aa%\u001bO񒆔b79V8mT7[\u0016\u0007\u0002G*he߲\bZ.wgh\u000f\u001do:\"\u0013\u0005n\u0012\"l\u0012\u0017#f0qs([\u000b(ۊ)I:\u001aHs>o$Rs9\\r/($,JF<\"yHӠ\u001f3\u000e\u0011WWy#z\u0011\u00149-}^s̴ɢ⭷ii4֐& \u0006]>A%}֍ܹ,&ЬIJhX\u00070\u000f]\u001c\nj6zYљ\u001cՁMnjQ3Mgym0j5a\u0001\u0003#Sn\u0013&ڶ\u001d\u0019h\"\u0011};+sXbf\u00154G\u0013 \u001d\t\u001bK\"\u0011YYIyf?X!NnѳH2e~\f\u0006}w\u0005ԩNE!\u0003\u0017}ԐfvP\u001aoYsɝ\t\u0013\u000b˶\u0010χhb\u000fw!FO\u000f֚+{\u0011S,н9Uw\u0000iK0n\\K7\\\u0011w^}cçWE|sĝxzRO E;AVoAFjLb!t3\u000eu*C\u0015:_\u00063\"Od~gt\u0013^KZ@xe.vVx\u0016?}0v\rᕛ+q\nĩ(YA\u0003\"sP\u001fW\u001fv\u0015/G82~7ߕ\rn[]\u0003/D{5k`\r\f޳FY}b\u0006~ϕ\fO;68#or഼6ڹz!R߾\u001d\u0010yhD\t:\"/?p~$\u000b6q>-鑲\u0007⑴\\j@vH[\u0012&&[RJC\\1l\u0010Binŉ\u0003W]\u0012\u00056IGK%Z\u000fJ*\u000eR\ru@ HhI^L]\b.~Ҹ\u0013C_\u0000\u0017>gh>y&c)Z3&>b?_Z\u001897ExLHc\nR߹\u001b\t،o\u001b2\u001bfUY\u0002\u00193|Rdm'Y4:^N;뒨\u0004=0)*\b[7&\u0013~)pDh\u0004g\u000f&EaqNT]I\u001bУ\n:ICP)~_w7-~R.jaГ5o\u0006&\u0005\u0010U\u0018Su\u0007:Ys<o-~\rK\r,G𐶱\u0014\u0019I//N\u00175\u0014i\"յ[Z4rZFHm:4B\u0002\u001e2\u000bys6͜\u0013\\\u0005g΁pƑn`UuDDp.|600x\u0013q)|Da\u001fҼtV\u001fŝu\u0012\u0000癉\u001b\u0017\u00131H\u0004EG\u0012Y?4Ln}U1*K\u0019T6uQ6ƲE,ϤoR\u0006~sKs\bam'3@Dm1\u001a1Cx%fR4cѡ\u0011;e+ލ\u0000;X8\u0006<f@/v\"\u00062[WV,zT'bZ(&\u0001ѯK\u0004=^G9Fgf1v\tF%'/}ȿ5Aw\u000bkO\u0013?i\b?\bn~Q\u001eRLQYQ^\t󞓩\u000bn\t\u0014E~lvULR}h\u00188\u0019`5\u001a(\u001b\u001dEzY9qSMYmFr|\u000bQB#crjۀT0\u001e!/zN\u0015w1bLG@\f[L\u001f83Rv{\u0016QR\u000eX*LG@\u000f\bٽj GDهϡ]\u0017Y/8\u001fHY\u0002y,\n_ٞj\u0019})-@q8߈~j\u0015:F=\u0014\t\u0012\b|&z\fI\u0015mL!r\u000e6n+xVi3te崈S#%6<򢜁\u0011a?\u0007LVS1B@0o0'{?ص\u0007\u0019><\bBz\\9{}ЉQ$\u001e+NO[sNEgm'a&@Si!*#\u0002߮\u0017&Bm\u000fn\u0016V\u001cת8$UJ~҄H\u0004m\u00163Kw xIWM\u0007d~'𺷘zgj,i\t0/?f,Fp6\u001f٤GrdXpTph}xR$\u0014_\u001c\u0014ɨ]tt*͆~F\\?fRx{@\u000bvQѕ&5\"E\u0003΋ئPqe\u0019ei䕐P3\u0006U\u0005q5;Ln\r\n\u001f\r\u0018\u0013oen)ό8L\f\b~h\u0007ۿ\u0013'&\u00182#-2㳮y1ӊwN2;*Oj\u000f-\u0013ֈn0Z\u0014\u0010UDZ\u00064\u001f2Zph\u0013#CG\u000bd\u0017Fk}~S\u0011&Sg\u001c&-WN_\u001a/xm:\u0019uz\u001ccqzq+AtXrQBeu\u0010QtAr.*[\u001b\u001aRl\u0015z\r\u0016EϝV?\f2{UvJ\u001dІ3hTHv*Z\u0012\u0019z#{\u0015\t7Ê7؄N;3]\"8\u001f9MC\u0013󅭻\u001ee\rK\u0007\u0019\u000fs\u0013._NNUD{1\u0000|e\u0018H`\u0003ɓxkꞹJdvz$_(BH\u0017!haw*v\u000eτ>B%'L܍:ATVAg]~/)Hm\u000b:\n9)@\u0006>_O&w)}:^\b/Fm3\u001e\tan7t~!i7}.%c8\u001ey\\N[BZ<ă>G\u001dǒo\u0014ii?G\u001dŶ\u001cs4\u0016~\\囿\u001eέP7\u0007i\u0015\tq9׉c\"1\u001e\fMY\fH5D\\n*EݩO#3z4~=\u00028!Lh#\f~9\n瀀B7r@&H\u0019\u000f~u7?i6Exv\u001c`0}PH\u001dRe\u001bI=oW\u0011\\md؈\\/݀vo܌ߏt\r~\u001d0>3a\u0011txHG\u0018\u0019[\u0017Z\u0005Mރ`_6Z^4i!G!\u000eqqodR\u001a&8N2ҷw+Űvi%C<%]'\u0014KE٭\u0012n/HId|ц3adTNx\"W\u0012AԽ>\u0013i}^\u00145NnؿK~{AQƢrz#\u000f\\\u001eI?vuMцԑ\u0001\u0002\u0004\u001a\u001b^rJi{-qD>]>tЯ/!\u0013\u001e8=Lp\u001f<S9R\u0007~B\u0014(\u0005¸!}\"\u0016\u0019b\u001d}%J\u0017/yOEMp&W*\"F2z=s\u0011qo s\u001fkDe\u0018\u0013)_4\u000f@\f<:\"7\u001eI\u001c`\u0002\r\"lϸLz\u00023Qg\u000f?GviDx2/qO9)YIĉcw$zw0q'w\u00069:a|N8[4(Q*˭<-z[5\u0011Fl\u0017=Y\u0005g\u0013\u001aÂUM`\u0017 8\u001f4U蜬(H*9\u000ex\u0007MuA\u0017u\u0005&<|n\u00144xr\\Ȳ-}<\u001337\ro\u0016@\u0018\u0002aL)3b\b$3\u000f\t\f8YQl9Q\"KF8$d d\u0004H\bS\u0002\u0010fh)-Rz{{m?yZgБ%:,%Y:{{uUtZ5s.\u001b\u0016x|UHئ\u0018ؖ]Z9qQdAI9^{vM\f>ލ\u0007>vAdQiV\u001e\u000em^wz}\nh:z\u0018O۷ūpg\u0005^\u001dkp˓1З5W>cſ4g?8ʿ{^m\u0007\\\u001dXBoz?һk\u000f8Ocz{w=4\u001d'~%4m}koދ<{UϯYP%7Ua\u001dO_=X\u0005O9Si]\u0002\f<f?\u001ePs]+\bmx2߮\u001fL\r<8<[v_gׯZ\u001b;'\u0006V>mO_D9u\u0001{p9?E`\u0017Q.\u0015K<ݗ\fʷG.Zu*6\u001e>,^y\n'[7%n_gm\u001fZٛ\\Fp;Kpx^Zk>¿\u001eYM\u00079bnwS?Ẕ|Ok9GyN\u0003o))yk|\u0006;r{|k=\u000f9\u0017_}ۀg\u001ef!|\u001fsGz\"\u0016v7t7\u001e%]tiw\t\u001d4n^*zNWan\u0000Z^\u0010\\k\"ؓ4Okɍmɓfa\u001e\t\u0014v\u001fr[\u0007}RuܣK\u001bdg\u0007З7~]6\u001f\u0014ޏ棟{3f_}uAj\r}ʖ?}P؀G\u0010F_䅰w\u0005+wq}<^4k\u0016֪·\u001fbu\u0007/n5M˞:\u000fu3fkk\u0015淡^1=5ts=_9屮\u0012CY_-\n\u0007\u0017.\u0002s0'yo5e_E5\u000b\t+|KA΂}\u0011\u0000^_\u0005\u0015Lz\u0002:=r٣{v\u001bJ?w\t>X\u0017\u0017P\u001dHrloD|{k|\u001b\b9*z\u0018ݿ\u0018úX\ts\f\u0005m8\u001bs_;_F\"o}\u001c|s\u000f\b3\u001a}'CW&\u00076wa's{\u0006kN\u001fs/\u001c?M=9̂X&g.C\fl|j{'2ha\r\u0017594է/hlF0\u0016s7-=i|t9ۂ\u000fu݂Y̩3Tm[6.tc\u001eq\u0003O;\u0003k`a~B\te\u000bV\u000f\u0000-.C\u0017Md\u0002?)\n}赡-'q\u0003Ju'~RMyNϽmx;?Du,x\u000fs)\u001f\u0005uG>@?߁a\u0006|\u000fM`4=ksnn\u001al<\u001b`\u0013`N'wo8\u000e\u001176,̜<\rf[U\u0014=վgwLʝ30W\u0014-\u001c\u001d\u0013}Kr;mY_/\r|tSɻ}4?47\u001cmS>C&lwFbcP\u000blzjhW{\u0016&O\u0007&`@oxkg?#\twy!7bMz͟\u000f2)Xy\u001a'cG/\u0012\u000298s)1\b?;tϖ1/#uP1\u0017wh+a:a5Z\\wXrF->\u0011\u0018bC_܂\u0005\u0016,SS\u001e[y;I޻\u0012ZF̱\fُ@S\u0013Ýc\f\u0000o\u0004:V2$zEe[nh\u001aҞN\u0003<%c)@\u001deACʷqX\b\u000bBkw^5Pc\u001dV_O\u0010Z:\u0016t1M+Ol?׿h婞RS\u0014\\\u001fvp׀~+M\f<\u0003-;,{;X\u0013kE^i~\u0013\u000fZ_rCz=ڴg\u0002ЏZ\u0018R\u001eW\u0014xْ|?lUV>}\u0001\buMmcnJNu<]'\u0005۵\u0006ХA\fǩvCSt\fӘ\u0014s2<Ec}\u000bǅ\u001e\u0007b&\u0013\u001fͯ~\u001ej~+hwn܅\u001b?\u000bu\u0007O7gN\"Vл83\n{X\u0003qSmBHu@\u000f\b\u00012}x%NƼT\u0012\u0017愪\u000b\u001cJ\u001a[@\u001aҚ=`=\u0002]\u0014~j\f:t`a8WS#_Ƽ\\X*\u0010Oy\u0002z\u00037\u001b93~\u001c׍5|{?\u00168Z0g(^%\u00073\u001f-}$\u0003=Rp\u000fcm\u0002/\u0012bT&;73\u000eke\u0004=F56ql\b.\u001c]w\n\u0012ptV]\u0000ܿ~H8\u001fsG\u001fܿRD5]\u0011[0W:z[\u0007/|aneͯM|RC\u001fώYCx\u0003u\u00190fϕA{0|\u0005C_\u001aw\u000f鱉XSi\u001fT{6J=pКg.͝9\u001bSʿt\u0019%N3\u001c;ś@Z[\u001f\u0004JVRY5sᘆh$_\u000fzs1O<R:½[΋ܻ\u0003k\u00170\u0013gT_<\n<-\u0014<I-b&ޔ̦}F~\u000e{49z,\u001bc5N_\u0015A?6\u001b9MU^_h\u000ez\u001fu\u0013dn|wz#U±˛rDV\u0019Z~73r\u0003?\f>M{ߟ\u0011zSq];20?X_}\u001fފy\u001ft?P|\u0007~}\u0013ah^ȆWb\u001d޼\u0011s\u001d|F^wsݛjZ8oz#Go#oH\u001fc\rb5k{a5|`^}Ώd\u0015upЗ\u0002/e\u000e<\u0005~\u0013wŁ5\u0007.!}\u001fЁ?i>Ǻ\u0003-X\u000b1ܷ}bW`.C̣\u00190H\u0003O|(efПh>i]\u0018~y?\u0011;~kw\\\u001c6\u00178ޏjamʤn P>䖳&o\u001fn\u000e\u001cy~\u000bb>hWO\u0003~Iy\u0003g=vk\u0004\u0015\u0007cjnYu[0&h\fr\\`_ކy|F`64\u0006|qX\"'2@v\u001eզ}\u001c./'/<̆yw;+Z1\u001e_N{5k+\u001f9\u0019K@iu\u000e=<\u0007޼\u000ey\u0003NļO\\ڲve퓗\r[|u̼UM`>Fo\u000bsqca_q򁣓Olzp7a]V9J51+-\u0007\\7F|\u0010\\-KO60/w\u001d@\u0000:3|\u0010x{7?\u0001s\u00072o \f\u00109\u0017|Fyy\u001b^2pϡ:9\u0005k8\u0007\u000e[MTXC.B+]B\u000ei說͋5/F~G5߼٘-p\u0019g~{\u000b>\b-^u\u001aZ37cP\u0010E:o~jޯni\\̄\u000eu}>ȣo\u001fD|zSxfZŚoUcWW3%|BGgy\u000f7&xѫ)K_׷X;_\u001e\u0018\u001dx\u001e8\u0013m;\u0006ĺc0\u000fbC?Ě1\u001a\u0003|X[\u0005\u00176o{i\rwm='jE\u001a9큝\u0010\"+\u001f6BF;\u000bk\u0005Yާ@/{\rw~N9Q;\u000b(_\u001baI.)ۈo}7/ḿڲ0\u001f,Z\u0001\u0016S-\u0015\r=\u000b9g[nZwo:e\u0013\u00177o}ۍ5Z3XccT\u0007\u001bܧ\u000e<ztJ\u001b\u001coɇ)=措\u0005u>-\u0017f7;6{)\u00177ڔ\u0007x+\u001c\u001cD{$ҽ,BЭ@ڋ`g@`n\rAY\u0002\u000fus뙞qh`\f{JqPWEG<HC\\[`r,\u001fyY-{\u001b\u001bQm\n鋎WX\u0001d29.ާ`]^׳_΋lyύy1r\u001b\rD\u001e\u00176|\u0007b\u001ex\u0001<X{\u0018\u0013\u001f\nT\u0017}``ޯo\u0005k\u000f\u0014l7'\u00075\u001fnk~\u001fxY\u000f>Zv䃩{\u0012Śs\u0018\u000bܷ2a}\u0004;\u0002uOκj,્AC\u001acԛkZ#5\u000e\"ͺ{۹X+\u0005T tw̺CA\u000ebUM\u001ddNg/p/w4\u001d\u0000=\u0006kg-mX[)8)t,nNm89\fqB9e\u0017\u0012Τ\u000f\u001e&\u0006Ds\u000e7֙i|B6Eu\u000be۾uWrYXS%k\\-/\\=w\u000f_\u001d~\\3wl4=}!\u0005\\[_a#\u001fx9lh}\u000bO_f\u0005@FS,TghvVSs;ΊXjg5_h\u001fb|kAt%vF\u0015@m2k&`m\n\rOyi\u000f_q\u0019\"|13a7\u0006:6Z&\u001ay[O\u001f\u0002\u0014\\`lթX_yg3C\u0007u\u000f|}b'>`-/^< n\u001f\b}¼C_\u001c_\n2{w䝿;탟צ\u0010<lx\n߲_q7|_D_xcdu\u001c\u0002\u001czy+9^1ŚH;z{ݧ`]$W3;a,x\">\u000f|\u0011hkz\bkg~׵nB侧.Ŝ+A鵳\u0002g4\u001e<fS/>6\fj]xRs\u001cZ\u000e\\uyT\u001f\u000f\u0018D2Ɨ07~'\":[ s^]\u001d\u0017G\u001e<:9J\u0010sqo=z\u001dֿi=\u0018\u0002)P\\M|<bgs~jYѨ~o=k~\u0015Te3vT$\fvc\u0005^<\u000f\u0006{vVKUC=3=\u0015ta\r녡\u001ct.\u001fκ\u0010kgQRvVli-<B<<K\u001bOuVj(:\u0011X6{2̥߼\nx!k8~\u0019wD \u000fگ{2Y;|\u000f\u001euGwDd\u0001M>1/1?\u001730|˻x04\u0019K\u000e_Ѵh)hZrϩC\u0019u\u0016x\u00175\tաQP\r<p1?k\u00141*X''S\u001d\rgS-ލF>}Ys\u000e^\u001b\u0007ߺ˙X\b\u001e{\f9TU7v\tF4YW\beb\u0005\u001aAtE\u001c[qZ󢕧7N\u000fzN\ru8\ry4kv]\u001cYe?\u0003\u0015z\u0017@S?\u000fz\u001e\u0011\u000f\\\u001fy=9^jmsOf\u001bb.ಇCX,\u001aI\u0007\u0018\u001d\u001fI9\u0003ύPm\rD\u000b]s2σg{R'S-'$#Y?\u0011:K1jg\r<z>m\u0013^\u0019zhekgjgWd/-\u001eV})w1{y\u0003!m^T/jы\u0007^#ԶT\u0005[{\u001f\u0000cuk{#\u001b_9f\u001f\u001aLm/_\u001f^\u0002\u0016\u0003_CG\u001ebXGAv\u000fBꮧOZX\u0000\u0018\rUՇbc{U\r1h;?{'R53\u0002;~΢.\u0019JmpgCj~nAceI+\u001feóWb\u001dt˩)ʝͯMF\u0001Ղ$ag\nfoszX;k\u0001\fYM`\u001fkg\u001aGD?eiMqW\tX1uJ=5.\u0004'\u001c\u0006k b\r5c]g>%̇7c}]\u0017=\u001a\u0015\u0003z>9PTW\u000f|\\j$l\u0006cݳ\u0006\u0003XoAhF/m^v]Ժ\nG&7\u001fmS˟/NYTk{jg\u0005v4z7:i\u001eHjlpanMT;\u0019'cZfkQ;k٩I\u0000ؖ\u0011Qk\f{c\rI\u0016Xsf؟.\n\u001e\"hג1X\nu\u0006}\u000355@/\u001cpM\u0004h\u0019\\{\u0006'5ë?e^/cC]N>\u000fm5\u0013:{NEN\u001bjM\u001eTgAӲpl\u0013я\u00077\u0017}\u0018Xw\u000eϽO]\u0014^\u00057jܦ*Է\u0003^;/l}q2%\u0012v\b\u0003s\tx\u001fkBUG0GztY;k^;\u0016;\u0007B$\u001cOSt\f\u001dmcyc\u0017F\u001e~\r\u0007iͬd|BǾӨ^\u0001!KC^\u0001&uaGAz\u001a=)Yŷ}\tk/\f-߅x\u0005\u001f!cdwoĺ?[\u0010zbk\u0003m[\u001c\u000fڥ?\tu زZ}Ivjg}vK\u0017>՝x\u0006\u0019\u0003ѵL_S\u001b\u0017-\u001f獯?ͨ%9@\u001e80)}^B=࣯\u0010~GB7oڕgY17i^\u0015x\u001dN#lzƅ\bc=o3\u000fq}dͣ\u0017!/\u000ec\u0016ֹ\u000f\u001cm_;\u0012\\\u0003x\u0017F2;&R\r}T徽ЖWc_xM\u0007]+O\u0004bcZǢ$\u0017s>q@՝\u000b\u00049sYh6|By<9\u001b7D\u000e}> cb!\u000f7ۜ:pL\u0003\u0001ك\u0014ʱ{/'\u0019\tr\u00136<R~ɑee\u000eA'.`k\\ru\u001e\u000fmߝ\u001a\u0006[\u0015kS)<\u000e\u0015PSw'`7\u0003&\n\u0001]\u0002\u0003x\u0004k\u0001w,f0\u001bkԡ\u001e\u0012xm&\u0007*\u0018WX\u0017\u0005\u0004v3&֖YE3\rgп܎ȡE.\u0014\u0004ucĎT\u0007z+BݛƘ>Ή?uxK\u001f\u0011{C\tkg5\u0007s_߆\u0002:\u0005\bn|b.k?<jga\u0010g=\u0004s!\tYkBO|_\f2 쾌tMX\u0005aS?\u0010B;\u0000\u0007\fm<x%՚xdRd{b\u0015k1̦s[ր}5\u001c\u001cQMf\u000e|tYozvX\u0003=En^Eq_\u0001}\u001aW>^D?HT\tl,5~О_\u0012zi'7F|-N\u000eF>uP#K7n\u0018\u0007@dq\u0001\u0002>l\u0000{\tֶ\nk\u0018\u0018Ѡ_t0sj|ݗb.Bk]57B\u001b_\n1!?W\u0007p2z|g\u001eF5``-~\u00033{\t\u000e\u0016u~5\r}\"ፇ(\u0003㰶\u0010\u0015Q럺\u0014kV{.;?\u0010^ЊmT\u0003oQ\rf\u001bCC;An>ձAh\u0001W\u0000hO\u0011]\u0001x:kO\b>֍ӈE͏[\u0002\u00077#ؚ<1T+Q\u0017yC=3ɟ`\u0015\u0013v_\u001a\u000exOTߛ:V\u0004:~`\u000bVZx^\u0013>W\u0004Y\u001b]1XZ\u0007/@ ֡u\u001doU\u0007vT5\u0006wt\u0016Ym;:\u0005p`P\u0017 ކu`\u0006-[ï}y}\u001fM3v\u0018s<M=;ڧ;\\^EG\u000b\u001f?\u0019`\u000f\u0017EV\f\u0012p\u0000?ph\u0012u\u000b.ZsZxkגͼ+\u001eӲd\u001ftja}a\u0017\n5\u0014mjj\u0005Silw8\u0015c\u0012/\u0001\u001eo\u0018\t\n?pjo痨&Ѷܾ'-b\u0011)G9-8\f?߹\u0001}(\u0003է{>\u0019(c\f=>\nz&3W`5md\u001d?\u00110fE5\u000fчb;G6<\tP77閴\\wq\\\tqs9C>\u0003;^7!\u0014_yz`az\\w\\O?/h~p/\u0003?N5{Ї@uf\u0002{}s_\u0012y먦9ּ\u0005tmO\u0003랺\u0004k`\u0005\u0001{ݿ\u00101fz1\fI\u000fz=yԥ}\u001b%='.nbB}*zxw*\u0007묣=\tw\u0015TS\u0005\nM{\fuT7\b\u0006d\u0004W'\u0007@?\u0007G}1\b\tPUYn\u001a>[?ۛ\u0002^@\u0015z?W\u0007vL ^\u000bPg~\\K\u0002H\nAJh${QbXj\u001c@_8)\n=تD\\XS\u0005qؘc\u000b:m*\r\u0002c\u001f9_g}wW\u000f\u0015c3ϢX QG±5o:z]x׏%τ7E65%طLDsp\u001fֱ('X>u\u0019\f=#\u0011k\u001eQ V>u!\u0014G^\r5Ȱ^ގ7Q\u001fX}sWB90vjp\u001a.6d\n\u0016u \u0001[|~2\u001dy^!%\u0012Gެ\u001d&'\u001e\u0013zlyt\u0004}x\u0006h˫@x\t.\u001f榽V|r\u001dv`i\\Bq@GUO\\{.s\u0004޽ )5޶qM'-uPpy!?Cxjˋ\"=~\t\u001e\u001e\u001b-ߗ1No1 6<S^X\u000fk^{,諓~5ͻ\u0003\u0005|\u00175Xu:\ft\u001e~IT\u001f\u000eϐU% C;;#䷱Va\u0018ki>\u001a\u001cn5\t6י\u0018{C]+\bto>+ܻC^J~>ހvH#/]?N\nhME `r鴶4,~x'\\5>|׻\"+XO\u000bA<\u0015xj<\nǁ.@\u00197T7gyt\bk/d\"ȱ$+]\u0017`Mg'\u0015W\u0011}-hr>j\"\u001e}꼢\u0004PG\u0011>\u0005\u001eGuV,a{va}z\u0011Ax\u001f8\u0013H\n=\f}\u0000TO\fba|s)V\n:\u0011g\u000b?\u001e9xv\u0013ZtT\ft+ND;\tk&: x7y୯\\]n\" 󂸿HG\u0000\"j^rKެsW:վG޻)&>Gṗg~=\r\u0013Z5\u000e7\u001e[\u0005\u001f<y_ο\u0014|?\u0004?IX\u0007\u0014ڏX{0,\u001a7M\u001f|q>8\u001f|q>8\u001f|q>8\u001f|q>8\u001f|q>8c4iV}f4\u00130>pj抭\u0000ivgb\t\u0017\u0000ujM:33ޖtk\u001a\u0002sg&EbVm\\3eZ\u0005:u#˸951\u0016M&k\u001dwW}:(\u0004-N&V\u0018Yr(\u0014ݜȱN+9\u0002O \\\u0002~\u000e3\u0010\t\u0013''sx5y+\u0000@#\u0005i4#ӽ!\u0001|Yʵ.H%\u001bd&\\T]g\u0000S/@.\rhE?z|sf\u0013Dw$5\u0012zA=Fsga`\u001ew&c5\f0\u001d_ؓu\u0013a2-'ӱ$Mf??.m&\u0016.efzǌ)d\rnr\u001b.&z\u001d\u0013ܛ\u001eM2ک5\u00114L8mIt-E#\u001bo[B\u000eo*\u0017N,L*\u001aűřg͸\\@mkjyE W<B}\u0015zţ~cq\u001fi\f6ӓ^X4eұi_i,Yߖ.\u0010\u00166e۩nF,\u001aɅtXƾ׬\\&SL<6δM7\u0013v&5QPMٓ\u0000rǊFVk\\,棾\t\u000e`8\u0014VGYH,-\u0003\u001f|BF>\u0003'`I9\u001a\\%\u0018O\u0016T+fR1˶(\u0017zTO-6'\u001dZ\u001co1}vf\u001b6ٕglc4\u00182\u001eԙ\u000et8\u001dƩ\u0018q:\u0011rS8\u001di\fr=mZ!iG:\n* \u0015vӔc:֩c\u001c[j3bb\th{wT\u0005\u0013QlUsbRlv\tei|DRrp;>3,\u001eaQʅD\u0010pxr*\u001fs=hrƐl\u0015nȆk/*\u0015::cO峊z´D'D{\u001dѶ~DhӪ\\+2z;\u001emK%Ri4-su-\u001d2Huw{h\u0015/\u0000GJ$T;\u0013M1eٰel;kyW*\u0019+\u0005l\n5BO\u0014[Q<V\u0017T!\fDvfSiHœ:[޲\u001bh<ޮz%+`D`̈\bK\u001c}kDo%F\u001a\u0003)^w\\\u0017?Cx׆K\u0006\n\u000e|\u000eFlE`4.\u0007#rx^\bh:Y\u00198/P(\u000b+\u0010\u000fe\u0001;2\u0019\u0019i\"\u0004\u0007z\u001d\u001fK/!]+Y%OI:\u0019\u0001\u0003\u0019NЗjSČt,Xsq\u0010骐osm\u0000ʸO:{lTrz{<\u0011\u0011S\\rt^,\u001eJ\u000bۘv\u001bs^~<ZJ\u0016\u0015/\u0016F\rĊ扣\u0013ޗmpr\u0002K+;\u0014\u001f8`-\u000fJTNUN*L}f(~\u001dż3pe\u0018,$HH24&\u0012Ry>*PhTI_@\u0004W\u0016\u001a\u000f\u0005.&'r,\u00175G\tK6exwW\"\u0016%3],\u0018?WW6k\u0013M_m(*Eb\u0014ﳫ4\u0019?\bTQvĕc\u0007󋘹,LPp\n\u001boxWrz]_\u000fmvHۥ\u001dNv\u0013\t[gD\u0013lf\bĚy6ܚ#\ruS6.\u0017VųL\u000b\u0018\u0016\u0010\u001ebگYP\u0016_6Ҙi7\u000bd*Y<?t\f}&g,mʅd4\u001b+~@ei{RkP.\u000412ڋx&4-ʶ7R6̢T0JēhE\u0013mS6^\r(\u0014M;\u001b@FOj94\rж{r\u0006j\u0015ϩKvRv=d#3_\u001e]r\u000ezt.\r5faT\u001b\u001dgW+쒝uW1gFR2z.@9]r.\u001dK\twv\u000e\u000f\u0014]D;94\t\u0010Nqb]j\u001bglVaL\u0018*(\tt9\"Q\u001c9Il*nv`F@Fc\u0002ך3)TM_(>l!\u0015\u001biyŎ[.V9l\u0004(9lQǯxJ8la\u000e[\u001clqV\u001a x\u0002(1i):La1EGU\u001c\u0014\u001d0Ţ5j(Sbb\u0018euvZ;Mvv_pvӆ^O\"\u0012?YUKri'hAǆX!\u0011kF(fd{#\u001crX43N\u0018Kr:֙\u001a*\u001f^eNGU$w\u001d5YX\u001b3mΞxџ\u000b\u001c\u00157LrT\u001e\u0016bs\u0015_\u0005Mw::\u001eg|*!HFsnȗ{\u0005Hb\u000b9UTJ]\u0007m\namήTw<\u0013\u0019\r\u000fs,'\u001f5pd&Rl\u0010G3M/.\u001e#\u001bpi\u0019\u0019aNC \u0011[\u0011\u0018\r\u0011H(\u001fF\"xfqg,cCϨD\\D|\\RĎ&\\\u0001&N9o:HD+,o3\u0013wN4#Dh~1Dhpx|K\u0016Ox>L:\u0011JUȉ;\u0011a0\bp\u001d\u001d=ݱT\u0012ԍeװl:͝W=#Qp%\u0012ޢ\u0011M\u0017-\rm\u0011x\\+RIwjsNs[U\u0006#\u0010\u0001Q+wTrwWqz\u0015Zt;EǵXF3]U2}Q:\u0016KN\u0007m66\u001dԀeT\"OOɡ.8>ǲoR_8\"ٓ\u0019&lf4\u001akJ#\u0017K=IW3䋩C}g\u0004\u0016T_A0\u0017T+\u0006k8&SS\u0013ůO\u001c-+a;ꃞ\u000b\fRͶt<Q'D9(\u0013x\u001cO\u001aɞ(yt\u00149\u001cOT\u0019ڎ'j<Qp\u001d\u001d?Qk\u001eh\u001b\r\u000e(O9SGz\n\nI<c\u0003\nI<c#xL\u0018>X1\u0004I:s\n84DC8\u001c<\"d\fnd'\u0019ȗɥY\\\u001eQrٶ4$)+v\u0012}\u0004p'hr4h{שsvB(>wcd\u001e%EEۋMkh\b\u0011\nO\nS\u001d\u001dݱ\fnt\u001ePQO\u00187\u0013h\u0019iu\u0002\u0017\u00157Sy阗e^\u001e\t̤Y\u001cuHм\\UbP_˨BɆQF\u0013\u0015l,xf0<\u001d(FF\u0019u\u001b\u001b\u00189\u001by8o*aO\u0004H.y8o\u001cM;o2Q;Fɀczȩ<(\u0015\u001b顒=m2;/[۔\u000bE]|NtX͆1֯Y0M<xm\b?V\u000b\u0004oo'iNrڑºJ,Hmu5/\u0016Oa#8i\u0007N|lt\u0006^twGˍQTd*\u001bPu2\u001d{VZ|}Lʆړ*\u001fN7Zb%\u001e;V\u000e\u0004QHu\u0012\"U;vLr}qv<΃{<u\f\u0010\u0015ud\u0019G\u0006mV\u0019\u0007\u0006m T!\u0005,\u0013`\u0006ͨ\r\u0014r\u001f\u0013\u0000\u0019\u0000\rd۾y\nc:iS[ϱO\u001dԱO-ic:c:c W|ʵO1O+<=\u001c\u00031P\u001d\u00031P\u001d\u00031P3PTt\u0006c\u0018֩8jv٧P\u0010\u000b\u0012<,]]xI2B\f_TV!ђGI\u0002\\$FN\u001e\u0011T`\u00042\t5=Ny܊\tܪRTzDmt\u0006JuE♾ivݙ\r~{&!=j7=*l%Z\u001br#Mls9Hcݔ$v43\u0013~^56DqcoX5iz-jGiT.\u001c{\u0017I9@O9P]\u0004ڿ]-^wO#\u00169\u001c;}\u0018[\u0004]NH,_w؉\r5R\tb\t\u0017Z4)\u0017˞Xit3㤡ي7x,C<Ng:zT^\u0015kID={+M7)\u00102aoY6l\u0017Ơg-J%cm(hV&\u0005ώ~7hPМS\u0015\u001c.)Eiq\u0014\u0011W\u0011hTD\u0014K\u0007f!\\+\u0006F62\rCܚ\u0011[\u0011s4ę\u001cadہ\\18g\u0016wԡD<'♆h|(\u0013ّ#B&\u0015\"m`T!2ن\u0004sdr\u0005\"\\\u001earٶrD\u0016ɕwjV\u0002v<xNM1\u001dL%|!AT_= N\u001aAtҠ\r\u001fq1\n}3!EO$}d+HT\u0003>\u0011X\"3\n\u0015\u0002\f6\b4G6\u0019ͪ艑\nxnZM7ZT\u0017]WJї?xyʂ\\}YU/'3`*'J5ʏr+`\u0006fq0BT3a\u001aY*XNb/\r\nendstream\rendobj\r151 0 obj\r<</Length 41607>>stream\r\nV\u001b-\u0016\u0002Xzv<}\\[\u0018\\\u00072хϦ6QV\u0002\rb4{\u0000g$\u001a+\u000be\u0017rVXs*z%\u000eK\u001c-\u000bqH8\"D\u0019ߔ&;l\u0019\u0017M\u001cψ\u0012Wϑ;nAO$\u0012#eF\u001a}J\\Ήo8\u00110ҪM2fu=\bj]J6@/Zψ-'L\u0018KG~u.L%`H5e42\tfx\u0015kb\u0013|ܒ*\n\u00187+ȊĨ*17\\ʊ̉\n\u0000IfDExS\u0005ņ\"q 2*ǹ\u0002Q|q\b-ЇWw%\u0000uk+̸a\t\u0019 H8֭\u0004 +Y\u0011v7+\u0013ܢ+.c\u0015Y\u0004-yWX\\\u0004[R\u0018U@-*4\u00187\u0000\u001e\u0013E»\u0019E\u00078 6m\u0018\u0003nEI\u0006\u0012\u0015\u00041\u000b[U8r\u0004-@87Ǻ\u001fF\u0011e\u0005FoҢe`\t/aV\u0000R<u\u0005ς9b\u0005@p\u0018\u0011T\u001ek$\\*\\\u00165UT.\u0000\n_\u0006\"r8/\"e\rh0cb4d\u0012+rԐ\u0017%\u00020\u0010IRa<H;'Qqn\u0011%'\r\u000bWʁ\fy\u001d'ZU\u0017ϺyY\u0005\u0012@\u001bIR\u0010`8i`\u000bzO5\u0011\f\u0011@f\u0004\u0016\n+D­<\u000f3tʪ\u0012\u0004\u001e&\u000b\u0017(\u001a gN\f\u00001\u0012/fa<Y2N,\bke\"\u0004Ÿ\rT\u0019|َ8\\Dim0\u0004E\u001a\"ۇg91KjĉY*U\\v\u0011\u0004i\u0002\rf\u0012\u0010ush]H0iH!VE\n8\u001bą\u0000w\u0014h,\u0004$(8\tv\u0011]-\"\u000bv?\u000b\u001c0A\bӣaаOx+\b)AZ\u0000SX\u0011\u0002=\u0002⭃1\u0013t1a\u0017\u001a0vxk\u0014W\u000f /\u0003p\f\u0016g\b.i)aӒ.V6\u0000gjMj-AۤB\u001cNq.\u0001\u0000Z\u001av\u0005x\u001dV\u0002\u0003&`\t^\n6YI|\u000f\u0016|\b.R&\u00160o\u001cpRkI<pRk\u0012\u00155Tҥr\u0002Г\nR\u0018\u0018ؠ,酚nz\"=\u0001\tIRTb\u0006\b&\\\u0015xS\u0000Ӏ\u0016\u0019M4\u0016\u0013_\u0010\u001cAxѴ\u0000H*kz>\u0002 KCh|e\u0014\u001bD\u0014I\u0016h\u0000Lg\u0001d$\u0002\f?AA\u001ca\u0015\u00044/@,0gL\u0005he]l\u001a\b\u00047kOj\u0015u\u000e$\u0001X:\bRw&MG0\f3x\u0018L%\n\"lr\u001a 'p2-ѩhB;-rzU=|\u0019L9xX3?\u0006\bX\u000eH\u00127%?'ޮ\u001bZpl0^5iE_!spFO&J:5x}\u000f\u0012uY\u00072ل~\u0016\u001b\u0002S\u0014X\u0011ð(i*lWavK&8FA\u0017 tsإ\fu\r\u0015\u0000L\tK* }3\u001f] BtQs/*.\u0001ʂ1H\r֝\u0017V\bJ\u0004ID\u001d17}D\rq(0zCAH(kGFw]fcP\\\u001a!Tkݛ#ftKƅF?\u001cZ\u001d\u0015qB>$%]x\fV(?&Zg-/\u0019w29\u001fԯ`p\u0012魹?\u0001rq.\u0005<\u0002mQ\u0012j\u000b*ӌҟ;(\n1\u0003v\u0017\u001cHCѲ%,̝\u0013[\u0000_3DU\u001b3\\֒j\u000b\u0017c&KD[!z6\nǺ,(\r8\b\u0006v\u0019q64ڂ>**湅VQQeU4~!<h;bm\u0019kb`)N\u0017iK\u0002\tp\u0017{\fWm:\u001eϸjv\u001bk\u0004y49\u00151:\u0017T9M\u0002\u0006.$C\u001ekv\tW<ܦ_k&}3;Կ`@\f\u0000&$_-t\u0019iyD\u0000\u0019ߌ,\bZ'hTФS\"\u0003/\u0001e*6k57\"MjKj+W\u0019e6\u000eV\rNRgL?o\u000b=T\u001a٪QYo;G\u000eM\f\n*\u000b6dtf4\u0013\u001d%\u0007Ki+Ī \f\b\u001cڣ\u0002ρ}|s\"\u00170(,`FDm\u001fU]*\nu\u0001vY\u0016%]\u0002&e}=@Ȣ\n\u0005t6xN\u0018\u0001+*</\u001boYdp(\u001c\u001fL[^p\u000b0%E\u000eDe]K_cF?\u0001\"}@\u000bY[b4(\u000e!a;S&_d\u000e\u000e<Z7KnMO+\u0019Jn@$Ei\"XiTf]\f\u0006\u001dڈvhڡ\rK\u001bs\"MF\u001aQ\tM\u001c\\\u0017v0:IjPBaB)\f/\ngG\u001dH3Dz'\u001a\u0014b\u0000%\u0017l\u0001?r:ʜ1iB\u0017$8\\\u0018w}!1\u0016uE\u001dccfn\u0004\u001f.|~7V5kjX̼0jт3\u001f8\u0000\u0005ż\u0016\u00050t8\u001d\u001fF;kV,z\u0003R]:\u0000)\u0002}Ͳ.cތùfϽ\u001e\u001d\u0002_~p|\u0019}rud\u000err\u0003hkq9˵_|d8\r\u0017z(c\u0019ޕ\rv\u001e7+\u0016V\u001b'C3K+zq\u0003m9-W\bUb#\u0016\u0013\u000e\u0012$мjb>vFy~C6Q[{gX`?T~\u0014MP\u0011BEP5z}2?ø\u0004x-f\u0003q\u001c+2\u0018G\")\u0016aFds\\ZؑN\tY\u00056wkfYְA$A;\u0012ӔK\u001bZih@\u001aGdb˵\f\u0013n2\n\u0010\fy\u0017V\u0015m\rv0hk^5\f\u0012=6YHkN\u0017\u001e2?[\u001eV%jO\u000e\u001d\u0011q2|\u0005\bl\u0016\"FE:Hә\u000f˂%@_0Δ\b\u0014\u0010e:F#\u001dw\u0018\u0000\u0011\u0012:\tf2\u001a&\u00100}b,Df\u0000-c\u001d\u0014ff<Qo2e\u0000i 5ۑ\u00012`۟vǵ2\u0012HfdU=<cFM[[Ogc*E`'\u0019#USTbDU2a@H&-\u000f&22\u0013f,\u0010\u0012>7\u0014*ٙ\n[r\u001c\n:T\u0007Z鿪jM3@\u0006*F\u00069\u0007YӨX\u001f\u0010GrxuK\u001eJ^e$gk'GV\u000br|\u0010ƥ0de\u0004\u001d\u0000y|\bj*\u0005\u0002X\u0003(x\u0002\u000b\tYzv,:㛎\u0015F\u001d)\u0014k\\?tWk*\u000bRX[*\u000eG\u0006\u0003<\u0019T[3w:RN#ݤ6h\u0010(֚j+ٓKZO\u0006X:++ū62Eo,(6s͞\u0011rM\u0014\u0006泝){\rҬ\u0012a04j2\u0000ϒ,\u0000s<QT$hn5ӶWMs\\@X,q\u0001.\u0017`cı\u0014kı}3Xg밲\ne3C\u001d(e39!\u001d.YSdg$\u000bJ<\u000b*#\n2\u001a\u0012\u0007;\u0006󢢈\u0012f\u0014\u0019Yd9\f\u001e\"\nE5\b>y0x\u0013\u0012\f\u000ftgPA59c\u0014+pĭ2`0,(\f\n>2;,V\u001az\u001ad\u000b#x\u001fv\u0002g7\t]\u001dVg\u0017:_m[\bfiۡtx^!9b\u0006\fEj]n\u0005_\")\u00002Z\u000e\u0002\u000bN\u0016\ndNqˊ\u0012ɲDy\b`p`\n'f`\n\f')]NE\u0011/ S\u00123\u0012+)\u0004QX\u0001\u0019\u000fEF$ɲXzYAt\u0000S\u0004hzҹv\u0016\u0015V\u0006\u0002r.@.(FeF\u0018$\u0005N\u0016%AVTUqcT\u0002p-\u001eO9+n@\u00040h\u0007d,TQb9\u0014*A\u0017e\u0001\u001a\u0001\u00028U(^z\u0004^C/\u0002=l\bɨ a\"'\u001c̒ū؏\u0004\u0004֜\rQ-0:?ڽ\u001fכ\\\u0016Kgb-xW\u00170n#_q{Oj%]\u0012i\u0015qhro+\u0013V\u001cM\u0012ǖ)=G+\u0000!as'TSPiƃY<\u0006=\u0002\u0007\tAڍ\u0015\u0012\\m1M\u0001͌fӀpʄ㫾π\u000f};;W9CoA\u0000\u000fr\u0005l\u000bY` jQT\u0015+\\osuIĝ*Wk\u0006]KgkouRN[\u001b,uhe[U|],ｫ\u001cn\\\\ߣ\u0014]\b,\"h\u001bk\u0016U;P\u0018CMfZt4}~[\u0016hQ&8V@I?\n\u001c\u001aU×(\u0012\u001eG5n\u0018Y\"7u{4߆H\u001dX3ۀ\"U3UӓI4\u0014_\u0011˚ݱX{+\u0018],{j{\u0003\u0018˫\u0006\f\u0017ŷ\rȡp~, (\u0016\u0000`:{v'Ӹ\bT*,z;Er\u0002\u0013\u001f\u0000\u0019<\u000e\u0015Fc\"Ы>\u0001mA\u0017:\rȱ`mʹau(-\u0000\u001aޙ\u000e,,\u00143\u0013\u00143/ ki0 \u001bk>`z\u001cNC*\u0002Q\u0016a$j\r!\tvZpeE\u0010dB[\u0007\u000f\u001cS\u0014%w\u001f\u0014+\u001b[Bg\u0000yջ7\u001cuʍZgDlE\\\n0g<f\u001aY\u0005E\\ZZ\u001a\u0002>A-\u0004\u0011\tr.1EV\u0011Pa`\u000bYڊn\u0015v{\u000b$\tP\u0002#TͮMj#\u0012\u001c&Jf,zVI<M+V \u0004+5g\b\u0014ENas)a\u0012ٲ\u0001\"8ۿ\u0015b2\u000b\u0010\n$tMDxs8V\u0013\u001b\u0002rTӨYd\u0010\n#\\\u0017Mrf,%\u000f\u0000Ǟ\u0018dC^|Ń\u0015\u0006ρ\u0018\u0000\u0001\"\rjdGa9\\\u000b!M\fX\u0016koA<jiD\u0004A\u0011\n#4EEL\bR.\u0004ݏg89<\u0016\u0012nIP\u0005\u000bװ\u0002\f\u0002faYYaٳA\u0003\u0016ô\u0010ŀez^\u001bˣF<\u0005x\u0006'\n\u0019+0T,\\h@\u0010Ovs\u000ek|(\u000b\n(bg+]\u0016\u0015\u0018=\u001b$0n!9H\u000bLL\fX\u0016WcA<\u001a鲚XIg\u0011,\u0015eACVr\u0005\n[Kȥ\u001d>K\u001c %1\u0000\feaYYaٳA\u0003Mk\fB<\u0013\u0017޳ ^\u001e\f9+@JstF\u0015TRE$HRݠY(YѸj\u0006̪0fJ_g\u001d`<ު.a+9\"\u001965\u0015d]H\rEU4@VM1 s\u0016@-@%xc%\u00013Q4t(\be%Ygmf;C3{6\u0000V0\u000b,0\rEk\bӇi%$ѳ\u0005`\u0012?V\u00190\u0013ECm2`(WV\u0019Zzf6ԕ9gJ;\u0003d!]\u0016gtkRxr\u00183\u00101\u001b\u001b][\u0000&ӨiuXvkb:tMJ:C岒P̆fvm\u00003a\u0016Y`\u001aF&\u0015Z}9VG&m\r\u00126\u000bn~t,LZi\u0018\u001azA\u0002CwԱ,351\u0003fjF&B,,K:+36(`>B:c\u0016\u0019\u0018 .KHrm?}r;\u000b\f\u0010\u0019\u001bJjne!\u0019 C?3z5-\u00143AYY@ѫ`\u000bYe``L^-\u0006%WP\u0000\u0019x)6$\u000btmB,C2@Bftj\\[eĲ\b-W\u0003m\u0016Z\u0019Jɲz\u0002(Z\rZJ\u0002g\u000122T\u001es?jVd!at\rU\u0010\u0004ee\u0001iyW\u0003o}\u000fB-\u0003\u0003kڠV\rWľ\u0019= 21pt\u001b?͘bg\u00067!HQ\u0018\"\u000b8\u0004OXq>\u001a\u001a7~m\u000e\u0016&k=\u0003W}:\u000e{\u001d\u001el(HkAѝ~;zظG\u0003\u0012ZEyyi~GøXO!\u001aRIFPP1&\u0017\u0000\u0003ۈ\u0001ABQ \u0000\u001a\u0007~`\u001b B./\u001aDВAh8(\u000b\u0006턊i`\u0011K\t\u0017QüQ.FȈ0\u000f\u001a\u0011Q!\n\u000eNB~`;\u0011%̟] DҢJ4?\u000fl#Dǖ\b\\Rt\u0010\u0015\u0007%zS.\u0013fs.\u0010z$ϥ\u0005iS?\u0000\u0014& \u000fA!%\u0004\nPoPZ\u0017NBO[\u000f\u0011*|m\u0018\u0015ˏRBS!J*\u0010*@Ai\\(\u000b->\u0002YTBP\u0016\u001e\u000ffB\rg!B\u0001-\u0010*@U\u0002\\h.hW E\u0012\"^./\u000b-:E(Ž\bj?UjC\u0005j'(fQ-n)m+0fQ-\\h~mRYkN\u0000\u0006qș\u0005j'vfQsi\\R̢3Ҹ\u0018ZVΥqIq\u0002T+NΥqI!6K\u0012lY-9¥,s.K\n\u0015YqJs?NQJ$΢0RhE+%rI\u00119܏W\u0012+@\u001c\"\u0010h9\u0014.-hgQs(\\Z.\u001a\u0010]>Rs[B\\/\u0012ж^V͡k\t.C\u0012b|t*J\u000f!j\t?S\u0007Ρi\t!CSaC\u0012BT*J!i\tQ¬қC\u0012\"Y6%D\u000bn\u000eQK\u0018iP\u000e~\f&oIoߞ\u001c\nn:FN\b^ph\u0003aU\u0001\u0007,ǪTPu\u00180,\t(T\t\u0007a6F2\u0017RZ\tUy팍drx\u001c\t#<\u0003\u0014]t^\u0002Ӎs\u001eà\u0003\u001e3J\u0001\b5d\u0017\u0000k\t\u001faXkLUGe!e^=\u0010,۲WB \t\u0019Aaҍ\u0005\u000bTVR\u0011,\u001bl\u0011{\u001b\u0005!'M=\u0012d,bV\u001e\u0011i!%Zk\u0013VĬ،ߠ%iSa\u0016ELh8AbZ(^{R=i\u0019m\u001e-K=L?ݎԩa<`ːkJ\u0015-\u0002wd\u001c_\u0001s\r\u000f\n\r\u0015j8\u0019TgoVgkZ/#ԚhV+\u001aRՊ\u0013H\u0019<d^QpvPJ0.\u000eXJ\u001d \rӴ\u000eTJj2rde1\u0013\"\u00153YMS.:-~\u000b$Olc}\u001a+2\u00022|0?\u0016*LM\tgB\u00180:T[\u001fp\u0005\u0014܁\u000e\\F\u00198X8\n\u000e\u0002\u000e|㤶\u0013D&|WYVH\n?\u001b\"\u0005\u0016a MUmtk<3B\u0003+嶼\u0006\u001f-\u0013v62p,@G\u0018ɊA\u0014TvR].\u001bZKl.S\u0006Hiښ[s֛yō\t\u001di͒ڥ\u0002~NlWjN`W.;>\nbpӍ=$\u001fZg|5n1HH[#\"H5%-^FMV҉9\u001aAݠ^SÉ1hF-\u0018pmPّ7aNU4dƘSg\u001cgu\u0019Y6D\u0015d\u0010\u001cаj(\u0005M\b@f!\u000ez\u0002E<{\u0012C\u001eUgDg$Y'2,\u0001,\u001ah,\u0019sUYVtYοe@êv3Ȃ[\u001c+dCk\u000e\u0014\u0001滸/e\u000e_mn}\u000bKnN C_\u00069ʀiydT\u000e5xÐEyy,\u0003cQ?G\u0014Zc\u0007F[6$G՛\u0015\u0013n$+DfJڱ]\u0003p\u0015Uò1ki殺\u0005Q䳼[H\u0007A.Tr\u0006\u001525fDQ\"\u0010/1\u00197c\\7ϰ\u0010\u0019\u0018\u0003\r6\u001a$9\u000b˂0ցS+\b\r2sa\u0000,NP͊n\u0005\u001dzUA\u001d%r*nFSX|\u000fA?`\u000fވǫڊ^ϥMrVMJB!*\u00068n^\u0016\\A'@UӧFJZ\u0003ADBi{,ȎV[\u000eƸ8-@pYC\u00122\bt\u0018S\u0007eA\u0005\n_X5$L: \\=lζ\u0015` FuY6fy|u\u000eŌls;\u00121S267\u0005\u0001\u0006޴+(\u0001\f\u0015\u0014n!\fو $DsH.}t\u0017\u0016f\"=[+:*\u0014\u0016\fF0$\u0001\u0015M~_L\u000b5\u00180\u0007\u0001E68P(®P\u0011*KGC4@\u001b\u0005$\u000f\u0017\u0003`<]h0x hoP/8\u0004eO2\u0000mA\u001by1`X\r\u0007\u001a_;55-nKZ).z\f\u001b\u001a_&ù\u0004\b0\u001eCdת1n^a\u0015^2u\u0004\u00148ⲲcD\"\u0002ƅV@D\u000b,\u0000<V\u001b͂B7jy.ұ\\Iğ\u0018ܙIE4 mY/U\u0003&\u0017etJ$%cS`X,aA\u001b\u0018\u0003Lh\u0011X2\"Uc\u0019E\u000fMx:)\t\u0018!F1|\rK\u0012%֔l\u001cnD98As\b\u0006\u0011K\u0000+EJSUE'\u0016M-.Hcj \u00003)5tG\u0015ytM:\u0002=\u0010P\u001a\u0004V;{5\n\u0002(T\u0015D\u001dpK\u000b%\u0000͕\u0013(\u00194\u00039w\u0016\u0000\u0016Ds\u0011t\u0000#A~(pޔy\u0006tSGi0\\YEגi!ab\u001edՒ\u00142 \t\u0000I\u0017b-G\u0000 S?*%\u001dR\rX5m22\u0017Z\"c>j#syS\u001d\u0006=Ь\u0012\u0016\nA%筶\b\nPz#iOI9}&\u0015p\u00076B\u0003X\u0017\u001ap}[\u0011\u0018v\u0018Π3*:\u000b\u00064ہ\u001d7Dk=\u0014'\u0017I|HdCP8߰xMp\"Y`TWeTSIbqW\u0019(\t\u001aւfOx&\u0014J![Q\u0013&\bЄ(p$P;6^S,1(|\rֿV4ڋ\u0001`8\u0012m\t2N=X#'\u0018\u001e\u0014)ө*j\u001ex;\u0006\b\u001d陻-#JZ\u0005ϒ&~T\u001c<x\r\u0012̊\u0003{\u0013\u000b\u001a \u0018\u0002r\u0011\u000etd\u0005I\"w$HF\n1xz\u0015\u0013p\u0000ٗz+0$\u00015\"(k)y\u0016,\u000b,;ȉJ8`D8]\u0013T\u0016σU'\u0018\u0005Т/K<\rg\u0016\u001ab\\R(#\u0000N$\u001cL\"\u000fUL\rҪ8\u0002jt\u0018JDX+<%h\u0010HnA\u001c5Na+\nk/na^\u0011>7`\u0012X*Y\u001dz`|8[$\u0007#c37{\u0005fnh\u0017?V=P P}|aUT0P\u0005ÚWaU\bx8h\u001duq\u0012!j\"|#ʺ\u001851<M\f\rf8İVo\u0010'k\u0007~Y]0Z\u001dqP\u0011كxvEW\u0010\b}\u0010\u0014eP Y\u0000$\u0019)x\u001e\u0013NկQ\u0010\u0004\t\u0002\u0014\b\rP\u0015w5`\u0018E7'\u0018qP\u0015\\\u001d<U'RT\u001b\u0001\u0015\n\u0011L\u0010E`\u0003+5X\u0002\u0007%O]\u001a\u0000*!&\fF*\u000fS~\u0019׺?XE\u000e@ϸ^l\u0015\b\u0007IIh\u0013+bFTՉ/5R^\u001f\u000e\n\u0014LVɼ鹀\u0001\u0011fkm-,Z#}$-\u0018M)cn\u0001e\u001bPQ\u0011s\u001aKᴓ_z\u0002 7-Jg¸u\u0016\u00049\f\u0015\u0003\u0015\u001c`-RZ\n\u0001\u0002\u0019\u0014E\u0012,kMeF\u0002 :3.\tC\u000b*&\f\u001etm]\u001c\u001d;ٳ\"ՊI;7kiϑ\u0004\u001au%\u0012}@;L8\u001d\u0018{\u001dB\u0010Zs+XNƸE\u0000כ]\u0018\u0000S\f1\u0010\u000fcPќm^\u0016AkgVhv\u0019}\u001aS\r>.>n,^\u0018E?\u000eYzڸ4{7\u0000Ӎr6l#\u0003O\u0004]NF%&\"C~o\u0019J\u0016Mх3Ltl<xRSNaH>\u0003E\u0010~ѢZ\u000bz$2h0F&@{ӯa\u0017\u001b2\u0013\u0007\u0004Q+뵢Iaθ!\u0018sHte\u001d3\u0001Hp\u000bh\u00144\u000b}՚\u0010J*1%\u0011cuLD\u00037i\u0015;Ɣ\u0006<Ove\u001b<q7{\u0000׉=YΊ\\K2gZWsn\u0004=\u000en#9G,ܵ\\`\u000b{8+\u0019\u0013\u000fJR՜ qÛ\u0013Tdo2)ix\u0003\u001f+~\tdA9V\u0000\u000b[\u0015t\u0001+E\u0005#\u0000lpQ\u0012\u0004E\u0016\rL^\u0011S\u0019|\nbD\u0016\f`\r\u00184\u0016BgAfK\u001b\r\n,:G\u0005\u001ee\u001b/~\u000b,t\t&\u0012*2%<\u0012M噚t,ڑj\u001e\u0010w#ۊ[1\u0018DZ\u0016\u0005{\fm<r'YiV\"\u000b۰A=YWf \u0001V!\u0007\u0019c\b@dꌫjqѭXh+$z'xO0TUqUm\\\u00162.˱PY<\u0001'p\u0012`(W\u001c\u0017øN)?mThu8-_/\u0013/\u0014D\u000f[p\tP\u0013\u00168\u0014^\u001fMF\u0017Үt;C~&\u0012q]mMT\u0017ʸ]d{`ēs[̠Mro\u0016]]Z\u001fbv\"\u0019ASmqZ\u001f݋\u001809s.Rф\u0010K\u0013xG\u0016u='fܬybZ\u001f\u0000\u0007\u0012{bΩS\\n}`s'\u0018,vm41\f[qkZ\u001fg\u0007\\5s[ga%bG]|!lZ\u000f)j\u00186\fqŭД\u0012z'\u0015]'Ou\u0019\u00030t.Xs-7F\u0011u@\neT;\u001bp\\b!фw\u00160\u0003xSc\u0000\u0006[\u0019\f]#ˡkewf1|い9\u000fgEz8nE٢Ksc{>\u0005\u001c.\u0015JY6\u001b0\u0004O/\u0011\u0003\rdd7IWyLIuwG[x.ŏ\"yj\r('bMSkS]8\tL>M%KE\u0003kfT\u001bцwAS\u0005:dmKmu2#\u001do!Z\u001a\u0005G?%zSժ\u0001\u0019RX[\n~;ݨSe#cDΌu&wMEt\u0017=\u0005:kjC4)em*\u0013\u0014]!(>8m,e\u00055%)20>X\u0007&1\u001a+\u001c٠mBV\roGcsLDaSvf-%mPX\u000b\nF`\u0015E\u0014TU\u0005%FR\u0014Y8\u0017UU!\bV`˪L$ĳ\u001d%JzrgfXXt$0()؍_\u000e/m\u0007'D,>Jس\u0016\\]\f\u0014<փ~.\n$\u001e\u000b\u0004.;,#?ÚԹn}GGw,3e.&M$zȦMݱLX \u001e]u@R׬\u000e4xD?'\rFxwW\"ڧ]N9\\\u000f\u001a~sڠf`<<&KK\t~\"1,/1<Z\rrQF+DK$G\\9\u0011WkԌ3s]N>Ү!6N\"c+\rf`^\u0011{t\u000f\u0017\u001cިw}\u00138ȏп=<0)d\f/3/\n\feb8A\u0014\u0006T2\u001ek\u0003 \f*ZQ\u0011b֤h0Zx!Fl\u0016J\u001eBȞOuF\u00023R\u0018:h@F4#\u0013s-UJn$p\":\u0012\t%UA@-y\u0002Ɋ$+\u00168\u000e,g\u0002\u001fP\b;0\u000b\u0003Xp0;\\,l\u0014Ac2j\u001c%09$\u001c\u0010U\fr\u001c#s,7FC:^\\m\u001a\u0018\u0007\bp&\n\u001d6ˎVJ\fTTQP\u0004ċTYX*Ғ#}\u000b\u0019u4RVDATX\u00011t\\\u0002fRX\t2'\u0019\u001b=Ĵ}eb\u0005Rw\u0010jb:QINE17H&d\u0004iYQtb\u0000\u000e\u0003}r\u0010\tIc&-\u001fo\"Ͱ~%<[`\u0019I\u0004\u0013a\u001av1Bw\u001aG\u0014z>j\u001c)rv݉\u0012\u0012ִ\u0003л\u0007ZTLl`+C(\tK\bS+X\u0014\u001d\n2ZF\u001adI\u00158Ygי\u0000\u001a\u000f\u0007z zC:\f+mҮ1֙HU`KEz\u0002\u0007\u00138re/\u001c\u00130㪨]Nu\\\u0017-NX23ڌZa#w4UWmor 1M.Jfƺ`u'`Xww.x6h63\u000e%JFc,\u0011u֔Κͩ_\u0011\u00164E,P4j}\ts뤀.\u0011\u0012,d-\u001eq\u0002qؓ,\f\u0002;\u0003J˟\u00192)_\u0003\bun#Dʱc#\u001e\u0000U,)\u0002WTE%c9^\u001eb\u0005\u00061\u0007TP<АV1F+m\r\u001fGeCXr+6΂B\u0006R\u001dݙ)*=$\"`ҙwx\u00147\u0017\u0012cO^\u0014ɑ2H\u0019bq2y\u001e\"\u0015\"0C\u0011<XxlYDn\u0011EPG\u001a\u0012J\u0005?\u001c?=L3ө.gq=[%`\u0010.4Qi9+}\u0018ܝS8.01\ref@q\u0011M\u0015=^:e\u0000{\f~mt.>=ݱ\u0006O݌DO:\u0017ũ\\wB\u001eJfX]Ѷ)V\u001auud؂4{Y˻g:R\u0017Kw dd0;;9\u001c?<\u001a -\u001903\u0014\u0016Q\u0019\u0017/,\u001dctm.1\t a%UX|\u0001\u00138SԞWy\u0005, z\u000bGO\u0003g9\u001esld¬\u001d\rt&Z߃Iz1kh\u001df:\b֢}xB/ա:(PU}\u001dM4&\u001d\u0006x'iL\\aY@v\u0016\u001d#\u001b\u0005\u0017_\u0011a4vXr!U\u0010ϋN:jq`yVݒyl\rD,i3װp䰵\u001cE\u0014\"M`\u0005\u001f&oh+|&\u001731a\u0017@t٧\u000f]qr\u0019?wٝ,g?X`rR 1\u001808aL\u0006\u0013M3{V@\tI\b9wwz<Z]Օ>\u001ar!\u000ex<\u001e/\r;C0.\u0018\b駽\u0001\u001fU\u001c[\u0002/>4\u000248x^.\u0004䶣ъ{C<0T\u000fMpe\u0002W-\u001fg8<r]=G%\u0004U>ʃr\u0018T\u001c?m~\u001eP\u001d,\u0003\u001cfO)\u0018\u000f\u0017P^tE\u000f%{<\u001c\u0004\u001dTzj\u0000;}\u0006\u0000\u0014\u0013 I2w\r>PvnTd\u001f\r~D\u0007%{=2\u001bQJRw\u000e)B\u0005\\\u0004IF\u001e~UI:\u0000+AEGy\u0011|\u001eώ&},\u0018>\f$~xA뎖\u0011.*D\u0010Vg)IFq\\4q~\u0018\u0017\u0015\u000f}C\u00020\f\u0000\u0003A E#\u0007|rH΀,\f6!Ha n\n\u0006\u0012 E\u0003A hTeP\u0013\u001b\u0003f\u0003C\u0014@⺦\u0000U\u0001&tԑ5.CQ\u00070\u0002+FB\nP¸@\u0007\u0001v\u0001\u0010!\nCK\u0005}\u001fB2ې\u0010W\u0007A\u000bA \u0014bd\u0013q}\u001fLah\u0010GG\u001a\u0000#\u000fR84\u0002\u0006\u0001s\u0000*U\u00185\f\u0012|>v4\u0005eD\u0000Sh\u00180,2\u001c\u0004 l124\u0012;\u0000E\u00034+kb|gN\u000bSH(7\u001f@(2\u0002=Q̤Ht\u000f2+A@\b '\u0001qS\u0000\u0015'EҒ\"(tm#\u0011#\u00128\u000eăO8|n^zh^\u001a\u0002a\u0005\r){A\b\u001b@\u0018W\u0000\n0( =LL~#\u000f݈<\u0005BFc\u000b\u0012I\u0014\u0005d\u0002\f!\u0019<0'7%\u001f+C\u0006xDhEtR%\u000bA\"\u0012\u0006\u0000\u0019\u000bNIEaG?\u0013uFx\u001eNQ\u0002Hú%Aq01 \u0018\u0014͐l,\u0018\u0014h\u000bAn!\u0001,S\u000f\u001f T\u0005?{%u\u0007a\u0000\nOz>7\u0000¸Et\u0005\u001e?Ü2|ϊ\u00053\u00184C53~\u0010au{\u0018\u001f08\n3c!\u0019yK\u0001\u000f\u0002\b\r\nF4\u0016\u0015\u0012\u0010њ\fWP1'\f`ʉ$=\r\u001d\u0002Ln\u001b\f=\u0000\u00053YE\u00193q \u0016H$5^DI.׃\u000fRZ\u000b\r\u0004\u0001\u000fzE`\u0000C\u00022X'92V\tT\u001f 4\u0001 \ra\u0002<0\u0019rlA\u0005fF7jm\u0003PJR\u001c0g\rWap '\u0018ad} 9\u0013Ͼ\u00040qN\u00062\u0005>\n\u0003\u0012>dH\"Gw܃\u0002R\u0013N%\"\u0001\u0006VE\u0004\u0004\u0011\b\nH\u0013&\f2\u0005a2y\n\tKNo\u0000\u0005a\u000f\u0010+~9\u0012 SF\u0002B$\u0003\u001f\u00070Y\u0006CA\t0O0ur\u0006\u0002K`)(\t\u001f4\u0012LX\u0010T0\f\u0000`\b\u0002\u0010Wd_x9%\u001fB\u0007@yѭ^7kH@\u001d\u0001a5A*b\u0019AJ\u0010\r2؋\u00036\n\"\u0019S\u0019\f\b\u0013\u001a\rX\u000b\u0013\u0002A`\u0005\u0013* \b|!X勺d@U\u0018\u0003;=\nA`8\u0002OZ\n\u0003\r\u000b\"`g\u0006L(\u000f\u0011s\u0005\u0003`L\b\r\fj0`\u001b4\u001f\u0010/\u0003\u0017\b5\u0002\u0006;*\u0018\nK\n`!̜a>R\\v\\~1O\u001e\u0001xaP\u0019\t:\u0000<Xﰐ`V\u000b\u0003\b\u0003>\u0001Pp\u0001\fV\b*\u0014\u0006\u001bPֲ;Ew\u000b5\u0015i3\u0003\n-\bI\u0000٘)7\u001c\u001eՋ\u000e@fLƇ\nڒ^l ߓ[|`\u001e@\u0004ƅa?\u000f\u000bl+\u0006\n<\u0000\u0001Q7\u001e@~ڏѱ:\u0017\u0006#\u0015\u0015hQ@v{ecY\u001a\"\u0018\u001b\u0002\u0004Դ\u0017F\u0001\r\u0016\u001f^8t\u000b\u000f)g\t\u0002\bf\u0011p\u0007i7\\b#q6\n\u0005\u0005\u000e\u0004v\u0004n#9p$\r\u0007|cC\u00049\u0010`7xhՆQ0c}̹ \u001c ef\u0000-%Ka<[\\G2\u0000Rʏ\r$f@\u001b|\t{N`\u0014~v\u0010Cj\r\u0010\u0013@3|I+5J\naa\ncu\u0012\\W\u001c߱q*AxL>U\\QcQ+k`:\u001bjxؐ\u0014@JNY\u0014eU\u001f\u0002Pz1\u001cxcbolY'Npv\t}fmO9OM#QLtGƀN\u0005G\t#^?xcP\u001f]1\u0006\u0001샀,O\u0001\u001fxl\u0007A'!΃<IlXK/'\u001b\u0005\u00115xMx\u0003n\u0006\u001d[\u00049i\u00157\u001483\u0019hah\u0001LF\u0002h>y(\u0018'ͺܿ$\u000fj\u001e\u001e\u0002;\u000e>|\u0007\u0014\u000f~wy\u0010n'с$>cŋN[B\u0006[\u0000>b W/a DQ+\u0006@'P_@ͣQ\"\u0005\u0018I\u0006V\u0018Ńy\u0003\u0001\u0012cO{#Aa\u0002l\u0013\t/R\u0002m\rN\u001c83n\u0011.E4\u00018\b\f{<tڗ9\r\u001d4//|A!UB/#\u0001\u0002mdГ,\f\u00067\n\u0005e=~1l8\u0006e}rĆZ\u0015\u001e\u00140\u0005\u0005g\u001awK`\u00075t\u00019g\u0013i(>`n;\u0014\u0003\u00015})A\u0007@\b$\u0002\u0003\u000bqb\u0003l<;q\u001an\bP/\u001fl1\u0014\u0006\u0005c\"589ڏ\u001cO?ifv\u00171!q\u0012\t#\u000f\u001e<3s#N,nwbmׇ\r/\u001c\u0005<(dzY\u0002\u0014<H7 xYR.$=\u0001\u0019.D\u000bx\u000fu\u0006tI&\u00128X@}\u0001\n-\u0015\u001bǑ3O=M6OzH\u0018(\r\u0003s0r\u0014\u0007\u0001C\"`\u0015azG>L\u000f\u0005C`\u0010Ö\u001f\u0016\u001aQ&!\"K\u0018C(Ql\n\u000b\u0011$\u001a!\u0011N\t[\u0010\u00060)\u0001Ơ8\"G@n\u0011\bQp)Xx\f߃\u0006cXsχ6\u00102Ox\u0000\u0014\"1>*=D\t\u0003[rMג.{\u0015n/Js\u0014()\u0011G\u0019A\u001f{,\u001f^fLz\u000ez]mGsO}4>\u001dC֛E\u0004@\u0000C\u001a-z7bVO-{Qv6Z\f\u00025^o`\f4F=01lm׍zAy.\u0003F[\u001e\u0010q6\u001ce{즷\u0019r5J4g\u0015\u001dW;\r3]V{\u0018*Г: WAR\u0003R~X\u000fG\nCw/\u0017+hY\u001f(-ǇƉ-X\b\u001dx0v::\r\u001e?7cqB%aۿzh\u0018=)4Dv_Gj\u001aib=tjj`\u001a)-\u0004i\u000fx6\u001a&*l~K=R(uhCŬ_4q\u0010\u0017\n\u0005<A\u0002\u001f%ஷ,FH\u0002\u001fj\riʻ\u000b\u0000I[\u0006qfRtt<a򚟚WnKh3wy4KGy.ؿfC|\u0016Y\u001d[wЯ8\u001a<ey4W3ph5M\u001ac\u0002K\u001dÚ\u0000%_1h\u001bu\u0004~=\u0018\u0018+Ds,2ܧ»\u0002Eqa\u0017\u000ero59&zs\u001c\u0018]o{\u0000G-Rx\u00112\u0016~\u001a|\u0005>o,۟F\u000e\u001dc'\t\rO{9w^[o1I[{NXL\u0014\u0012G?#vEo?ҙSunیw\u00184tΧ_\u00194ɑŶ\\\\k\u000f\u001d\u000b\u001bӂmo3\u0006C\u0010pϙ\u0000xmG\u001de}?['EJ\u0018\u0013MzzhpvAVjRΪR\u001e7.q_c\u0018\rBʗ8F\u0005\u0011?Ey\u001fLlLo\u001f\u0016H)'Y\u001c\u0010\u0000'\u0000wa\u0002hԉ5j:))\u0000]\u001f-:\u000b\u001dFmǔ@;8]ML\u0018,5hbK \u0018?\u0014zo@>\u000fs]}\u0004|v\u00100\"A/UFWopvX\nt\u0004UNJcR\u0015p/&\u0000I5\u001b\u000f\u0016>檤su6Ŏ\u001f$%s$8O\u0014j-{鮖΢B^e%jYGv=-FߪNar]Kލ9|V\u001dHNF\u000e+\u0016nWO͔I:IXⴀǊrxz(\u0000Հw`+로\u001b\u001e$n 1=\f\u0005 N\fJmAoKZآ\u001b\bi\u00194k0\b\u001cH.b@\u001e{\u0001?6S\u0017*-$YP]u\u001bT4X#k+M\u0016\u0014ج{Nr\u0014\u0003Zy5H*/ti7y\r}(4.D>PyZ[-\rw+b\u00147\u0006#hh]Z\u0015Қ\u0005\tm[\rx\u0018n7u\u001b7=Npl5`$% m\u0003tϱ:.3FJc\u001cQ[\\ğ4FPN.B',D`\u001dU\u001f\u001e'w_\u0005\u0017:\u0016iơ\u000f]:Z<^\u00130<reYoH%vǎǛ\"Ѽ\n\u0017\n\fPP\u0002*S'l\u0003\u0016+\n\u001b\t\nڜRɾAܧ7P\u000e\u001dK4\u001a=n\n\u0018\u0015\u0012vn@]`# 8\u00046i\u0004\f\u0016a\u000fJ|µ\u0007\u0011`\u0002q%\u0004qa5\u001c;;I\u001a\u0003?#cS˲-'\u0002n\u0006\u0015f\u0006<\u001a!s:\u00034Z\u0015\u0018\rh\u0016\u0005ewxH2\bd1\u0011B}_H\u0018?\t\b\rƻD*e~皩5MņV՚\"w\u0015Dȡ\u0013[\u0018l\nɫQ^\u0015\u0015;\u0000Ƥ`]+\rQZM\u0004,8}A}.\fG!j}PC.OAA $Gu\u0016G~/{\\|\fص\u001dnwa5(\u0019,'UOG[_\u0013ϯFfu'!q24I\u0014F7M\u0005N^0O)t<dC#*ǫs\u0007V^?CT98T\u0015\u001b8\u001dHj4\tF|(G\u001bg_8r֛Z\u0005\u0005\u0002FN\\f=aa\u001cDd{\u00162Qu1S\u000e\u001e\u0001)g\n|p\u0012)Phӑk5\f-AD;덶\u000bPW\u000e}ݻ\u0017Wysv\r648sh9G\u001dn\u0007/uB\u0006aY\"ņ\u000bj\u0003H\u001cAlhK\u0006/ p\u00191N{і;/l;\u0012vG\t77\u0016`EK\u0012\u001e/oڣ5\u001b֮\u001aQGz΀`\u0019-4CvЗm-aw\u0019J#V\u001d\u0019a%Q\b\nSA~.CZovj-^\u001dWyZZaǿPZUaNsg\u001ff/\rmxԍxhJ|8&+K*\u0004[VVFxF\u001b\u000b`LV^M&vTҹ䣳'gyV΀?1{77ڻ/\u0002+!\tG]fl\u001c7@.4f;^\u0016\u001cqfZ\u0013N,\u001b1x<q\u0002\u001d|[)x❾~o>\u0002\u001a׻Pk\u0002\\й\u001c\u000e4#\u0002}cz\u0011Ж\u0006h\u00119S@SUm\u0016zC5\t!\"(\"\u0000\u0014.VJMNf(\u0010]P'c;\u00043pWh0Ԧ\u0017ѾZsX_\"So'>Zi\u0012-wS`E`e\u0019Zd\bn`\u001alYh\";^\u0003z\u000fQz=;\\c\u0016\u0003$No\tq\u0006\u0014\u000b4$\u0005gt\u001b}ObyN\u001e`\u0012LԸ\bg\u001b`եEv.\u001f\u001exp/4V)\u0005Pu\u0011\u0010ZDehsJx(ϝ\u001c2\u0012A;t9mQh8;]/^cs\u001c[\u001a`h2+ \u0015Qd\u001d\rf;09@ʡTW\"gfZ\rU\u0002OL>Y\u0018\u0012Xn\u0004$%\u0018\u0018y`W!ڱ\u0012nOphS1*|\tmۋ\u00127d|ˉFP{#j;V5){\u0017\u0019cՑosip\"Yn6f=xS.ZqǂwS%=\f|\f]\u001b([OWzb'\u000f5\u001eov]v\u0001xLlO$XݣFj\u0016\u000eNir\u0006<|\u0001t\u0010N'.Qh짶WȦ\u000601Yv\u000b}ǷD3l)C\u0015\u000bvy\u0013\u000fK[n8d͹\u0018`|e?Czi98NN\u0012aӘ\u001ePx8fj\u001dw\u001a>\u0019ӅaH:_Cb\u0007\u001b\u001e\u0000Ll\u001bd\u0006Gsj\t\u0003c%\u001f쟶xM\u000eh\u0006\u001c}2\u0005Mo;\f>\u001039C0~\tX\u00010P\u0013O\u0006-R\t|sLb;(Py\u001c\u0016`g\u001a\f9\fR\u001e,2U\u001dQr-9\rT!og\u0001\u000f:;]xꣾ\u0016n\r߂t_FW\u0006Rkգey󶽏+hrn:\u0004\u001aI]1K^\b\u0017=&\u0000\nn\u0016͆Lmg>\u0017\u0000\u0014LڢьN&cGH84zɍ\u0018&='0*Y@#ujƿydѝ\u001ebnkhl鱫LIo1OwtO\u0007Df\u0010\t$|\u0017=4|<\u000e\u001cX\u0015QǜͿpnE{YǍ\u0010\u0014YlQ}ͮ\u0012\u0019dt?\u0017v\u000eV1J~l\u0015muCMԅ?]\\\u0015\t\"\u0007s6d\u0013?9rv\u0014PsK496%)@i\u0004dڷsP\u000ffƒz믙>\u0019Gۭ\u001c\"!n$,F8tsn4\u0017v|f\u0011˖w\u0002\u001bRdS㢟Ja65\\`I*\u000e\u001bi{k2G$\u000000Q5\u001bF\u00001\rCx\u0006ɾmt@\u0016r?Hp\u0012*\u0002uŢV-BWh\u00144.\u0016Dd\u0015[Z<ALc੡leYLf\u0011s`l{\u0013z\u0012o5\u000bl\f`62ad\u001f\u001b|?\u00042\u0004\u00013ʢǊi㛩\f2bJ\u0017\u001bc/\u000fէVg@\u0002~jЍ7}jݤD*jL\u0013\u000fJg]\u000b1\u0013\u0001\u0001\u001a\u0001ky'\u0012@\r\"#x\nj5؛\b \r,|oF\f~hl8D#PfT;ǂL+}\u00127$\u0017E҉gT?6㭾WWT)\u0018\fmHQT9>Eҩ\b9\u0007cݜqE\u0001%)\r}M\"\toF~DO#u\u000eB\ndJ\u001dYǑM\u00065\t#\tڣ_\u001c$jwĂA\u0000}ĹG7B\t\u001aN\r\t\u000f\u0002\u0006:JA3e猆\u0010Dpo<\u0018܇\u0014KhrP\u0013P\r1BK!\u0014O$cmF\"r5\t=rHh`r`+\u0018U]_͋!Y\t\u0000#Y\f%/s<\u0011*1F\"x^W\u0015\u0007:\u000f\u0002\u00174*Gx\u000e\u001aB\u001e)M<4\u0006j\\ӋrQW+\u0013F\"Q\u001c^%,\u000b`84F$3\u0012\u0014\u0011\u0013\u000f'ſJֆg@\u0001݈6\u0013/na\u00107\u001a'FXR=&qՊn T\u0006c\u001d\u0000%yTN\u001aq<z\u001d159\"-A{?Km9 ο\"\f$VxR\u0002DUZe\u00145\u000709C\u000bh\u0002h\bg5\u001e\"k-zΟt^`c\b,\u0005\u001b%l\b\u001a\rQ\u0003Z&pި\u000084\u00046M^\u00043/b/A<%\u001bv\u001f\u0000]$}\u0019}Nbn!dw\u001aOƾ.\"\u001b\u000f\u00186'n3\u0016B5l\u001c\b7\"L<W\u0005\u000b\r\t{.nr\u001d$<N!Qj?\"\u001b8'<GM*wrSݵP+qr-Po>SgTJ\u001fw\r׬\u0006&u;\u001a\f{S\u0014]%\u0000#xBEc\u001dD5jwS/+4^\u001a&`Z)@K\u000fht\u000el:ZE\n\u0011\u001c\u000f\u000b\u001cD\u0013%Bxd`UM%E#zQ%rU@,-#&\\Z\u001e/\u0001@e(PfiH(\u001c(K<\u001f\u000bx7\u0010\f50\u001fR0-ٍ\u0006ҹ\u0017\u0018\fM9wE#ay0GJ˜\u0000>O\u001cHl\f3,+bw\u0016\u0000+>ƹ\u0012\u001f\u001d>Y\u001d>iC`?@~z\u0006b\u0016ټ,\u001fË!heӖ\u0001Ok#\u001f5\\oxOZ\u001a_hmRw\"h\u0013}uRr^_\u001b\u001bDQ䜎\u0010\u0003.`@\u0006\u0005t\u0003B+\u001f\u0017AN\f[>\u001aP\u000fB&8\u001fmV\u0004鋇J/:p1j\u001b~Dt\bu\u00101\u001f\u0011\"1~dZl;\u000e<\u00050\u001f=裹t7T?\u001ez29\u0005A5ڳЅƇW{\u0001\b\u0005}30P\u0007-\u0012P\\才idcF\u0014Td&{ԸƂ 6 ZjP6ymїK\r\u0000Ae\u0001\u001b')F)ZxH;CG<5tVӫˮRh\"c󽞥]ϡ\tk:D(\u001dGKG\u001d O'(Rk\"s\u001eW@w}Yc\n\u000f\u0011^\u0007߳8ߟăYaWf]@\u001fš\u0016\u000f_yܹ@\u001ffp\u0003XPz՗z\u001b.5+:\u001e(7A3]rIi\u0014 וC\u0013Oe\u0006EbE\u001d\u0013\u001ck@۹\u001eZf918\u001f~\u001c:\u0002D\u0004g\u001f1zۊF`)\u0002)[lyvCS\u0014*\u001d^JOwl0\u001f:$I[oNk;u\"yF\u0005Sh\u000fbIhh\u0012\u000fm\u0002@SqmUl\u0004yWG\fwh{TrI=\u0007\u000bhBasFKxw#2x~\u0003IW\u0012f@,RŃYC\u001b>R\u000fV3\u001b'}\u000b\u0006o ^Kl?\u0004(\u00131k.ʁ{v4\u000b\u0004r+yC8=wܾƙ\u0002#ifbAxF\u0016\u001bÙu#6ٱF76`~Ö(3\f`\u0015\u001bh6db\u00051u2+O_\u0015$Ϧ\u0012\u001d\u001d\u0005\u0014\u001d̦M\u000f\u0017fd\u001b'2̈́/P\u0004ܟ%L3I*6Az|)ceorf\u001biVl\u001e\u000fG7h(XF>Fɹi_L_tOȻۤiGOԋ\u000b\u000fdB\u0006H?\u0016Q\u0014&aA\u0006>xZ^jD\u001a\nFJ\u000fp\u0019v<`lf\u0010ƬH^N=\u0002>Xk{Xǁ\"ݷ\f6M,V:\u001cC\u0010\r\"\u0001!\u0018|HӥRpcÑPcs6N6\"hl\"\u001a6t0E\u0002ԑ`uK\u0005\u001d\ntI8)l?^qr߅_N^\nA'c/藱-\u0003k>N_qd\u000bP\\X&\u0002\u0007}6]4\u001bL{43W7ϔG\b>v\u0017\bL\u001aT\u0002a\"\u000f\u00062P\u001dZesf\u0013ns)c;HPR|;+^\u0004`ǋ2F9I[M>(Sq\u001cRb=Z\u001abBU\u0006ox\u0007\u0001\u00175r9C\u0007\u001f\u0004l\u0007H ~\u0013ՉmhovVa\u0001Fuj{:r\u001bӈ/eh\u0014\u0018xpXEΆ:?4*\fYs)\u0017\u00104&w=zH41P^$\u0004\u0006T<ؓ7\u0018L\t|j-8<\nƳM\u0017\u001d\u0012f?+UP\rQ+U\u0019k~24k\u000bv',KQ9J\u0013$gX \u000f@қ\u0001\u0014̸\u000b\u000b~9^x4\u0016_[sx،C\u0012\\!p\u0005;n4A:3W-.\f\u001fٜE\u0005v)-Ŕ\u001b\u000b\tt\u0011mصe9hnCD}ģ\u000b:s¹xؓ\\X\u0016ـ2h\u0006\u001f>\u0007Dp{B\u0002m8ńx6ƍ޻/#\u0012}'\";/ak\u001d%tm\u0018ˊ\u0001#KMuj\\\tnGy\b`\u0015zY.\u0015;QC/\u001a\u0011|Am7 I]`j:z7\u0000W>;l4jw_7@[\u001dS?\u0000r{L\u0013q&d\u0010;/Nq\",\u0019\u001c(\u0001meol\u0016\u0004+Z\u001cMz@==Hi5(:.d&n\u0000od%\u000e\u000eEMrXHyW6}HG0CLtvFmZPq4[$]N@5\u000e!\fJcǒEy6a0=\u0011c#\u0012u\u001b̅5Bs\u0014.g$\u0001K>\u0005}\u0016\u0016Q\u001d.Ͻt7X`rl}n\bsGV>c`\u0010@`xL\\H~4\u0011UO\u000bXɞ5Pf\u001ft\u001897=N`\r5}AI\\cDiYd\u001e;6\u001ch\r|\u001f%ҏH^-~\u0004PJ)38><\f0b(۵p\u001d53k*\u0017wL&\u0017\r`%;\u0017J\u0019;\u0017h\u0017\u0005bUQ r\u001f6dM9C6&tѦ\bA/A>i\tm:vy3\"C.,w|Їh|]L\u001c:1c{ảP<yJV&L:4\u000b4\u0016qש7\u0010\u001d!0,\fs\u0016Y1WNN\u0018hyt\u0019tMW}``x$\u0011o&76;M;VX{\u0002a\u0003g੟CV\u0003Q>Fw\rJݥ}l2/@fSả?ǒaFfI]\u0016\u0016\u0007E\u001bti/ygbw\u000e\u0004ݜX\u000b\u001dA'Mzt\u0018.s+q\u001aL[\\\\VXεEGhkO;96ڍ&\bMZo+T;۔ϡG'\u0000en\u0005uX\b-wzn!\u0006}\u001aBsl.\u0003'W%*\u001c\u0001\\fIۧn\u001e\t?'njNz~:;\u0016%\u0001[KAvwVw\u001e\"N᮷C?,y:by]_qg\u000fw\u0005^ݡMP\b4ݤ7[\u0013\u0016\u0004w\u0000{u\u0005ۯQ\u0017\f\u001fл[FSZ,flf0\u0015Vi\\wB[\u0001\u001c`t1\u000f~;VNuR=-?t=6J\u001cDkU\u0017\u0012-\u0004VԺ>3\bUkDH\n\u000b'.7o֤zQATش-#VCI\u0001UdXI6Y3\nY3\u0014ٝ=\u0010\u001e\u0003\u001fOC\u0006;U\u0017`RY\u0003|\u0001R\u001aȌ!<\u0002Y(\u0016(\u001e!Ƀ*͸q(qGB\u0013N\u0004\f_\u0015T\u00133=\t\u0012\u0002Wv4us]dR-\b@+ۏò\u0016'B4\u0015\u0011\u0002)\fPDUa\u000b\u0011++\rk\u0014.\u0004'[1ũ\u0015\\c\u0005\u0003v.Ї\u0017JNl\u000f\u0005\u0012\u0018wz\u0017!F,\u0002_jGXj\u000bOp˞!di\nLDׅ)F<wz\u0014dMUGMؼ\u0016,\u001a\u001cRcO;O5Op?#\u0010l<J*\n^}'QK+1\u0019ќ[\u0006RX.\r81خ}h\u0011x{B}\u0012\u000e9U+|5Hcj\u0000T\u0014iNp\u00158\u0011\u0017J[bZ\u0005(\\b8&JI\u0010\u0019`pա\u0019+R7z^\u000454N\u0012UժA 2@\u0012/(vUPgFqE_fB\u000f\u0004mѝǃ>0VW_\u000eS\u001c\b&\bIG\u0010\u000e%\u001axʙ?\u0000\u0002\u0005\u001fk3L\u0016\bt\\2>ʱ#2NQ\u0003O\u0007\t|\u000e\nE5&\u0019(VA\u0010}\u001d\t#\u000ff\u001d<׾\u0012A_Q8gr&ŊZ9O\u0007z&55]+\u001e';vAh>gی>O-&\u0000cz|lj܉}n~eCɔcV&r\u0012!IZi\u0007\u0016st`>00>\u0019\u001c\u0015%ĔN\u0017\n\u000b-?6~\u00168[Fm5FK4>.u(xz\u0005u\b׶.\u0011\u000e\u0017a\u0007>\u001ah]xR\u0003aI>6b~I/D}\u00183&3.\u001b|y$c\\?[swgr\u001e\u001c/nP\u0002\u0014\fsX29dB-\rPh>hT\u0014J2샗?\f5/\b[t౞g2DKQ'\u0006e^$gr6oF=IS\t\u0015vjO\u000fҋ~\feK:\u0002oDԄ\t\u000b&\u0018@\u00071\bD@Lm\f=%\u0003UO\u0011L:YD\u000b{\\01C-л\u0006KB7\u0011D\u0006ݦ\b\"Vܣ\u000bfvt\u0006\u0003VLB#;>k^m\u0016Y&~ȁ0\u0012:c'H\u0007➶\t\u000f\u00180\u0014$s9x#,ƚBNK\u0012Gpg\bga!\\Y GF\u0004\u0013Kx\"?\b\u001f\u0012x!\u0002Yw\b>\u0011\u001fDh0@DDm\u001f\u0011\u0016D\u0015\u0010\u0015e#AkHDƸ'87lމBu'JC(\f]!f\u00105@<\u00133Q'h\u001dtڞ!^\u0011sJ??;؉~ ϛ{b<麷'F2O,/ĺ\u0011߃7y\u001dQ\u001dtM3&Fybα3|J/c\u0012<_`2Bջ.ju˷.57tُ[W\u0014\u0016{\u000e+n]}=[M\u000b\t\u001d'\u0016:]Atu%\u001e\nn\u0004\u001d,nST\u0000\u001a{\u001d-~[hxzy=FƦ/{;}34_C7ȬܞGG\u0015q_\u0016\u0013Zo\u001fM\u001aK\u0017]\u00020U=5ɽ\u001a\u001bߛɽ#7'C{\u000f\u000fw\rqJS<pWlm}ݾܷU\u0005oJiz?\u001d7@\u000e`|~(\u001bl\u0007ӻz\f}f\b?\u0018$9n\u0018rǩRX\f\r3nx\r\u001fa5\u001a5f<X\u001aam4͇Fq1}1XތY\u0002%6\u0018sVXyM=b|}=r6NF7*v\u001a\u000f\u000eKdܵ\u001d&lr:NS1nJnS\u0018jј=3oL\u001fi4Lrk1$\rM\bav\u0003fo\u001b4G{s&\u001bz6W@F\u001bMټH^>YYLJj\u0016_\u001c>vNK;Ԝ幘j[>D26\u0011\u0018\u001a6z;ok,[h\\/ч[Λu,IF][(ҟ`O/l\fi>\u0000c7wI;-<Î=No\u0018ؗyۡ[5\u000e!js#v\u0016㵣yg\u001ccO\u001d+%*NpƧ\u001b\u0004YjV9|앞EqpL.Pq\u000e\u000fW5g\\O\u000f\u0017]fs\"L2O9\u0019dq_ӓIM\u001f\u0019\u000f\u0002`F\u0014`qQeJ\u0015zdzZhO*_kцY#&\u001b\u001d]g\u0016t)B?[9\u001a\u0002\u001f]֛\u0018Kbn'|>15_t\u0002q<u*Jv);\u0012\u0019\u0017l߻G/;yls\u0013ht\\*e<\u00161!=vk&c^?fYoty\u000e\u0018}w\u0017\fq\u001d_kEo][}!R6j\u001f7R*FC\u000fY)\u0015Wt\u001ej\t<f\u001e8\u001f\u0007`0#@|rt\u00135#i\u0000\u0013/-!w*\rӦ]Cv\u0014v4=xk\u0016M\u0007pn\t_?#K*\u0012\u000e-t\u0010KMD6\u001aI;ч\u0010V\u0010\tD71pö\u0013nʵX/kOǶ^ \\1\u001bf\u0003\u0011\u001f.\u0004љ',\u0019L\u0012I{2ISx\f<\u001e҆&?9}r\u001d\u0006ʤ\u0012t9jԸk\u000fôK\u0017NgӞ&қJ#2Fgj<\u0013̺|ɚ_l5\rd\u001fFl删%8\u001f\u0001u\fJf@)O׶4\u0013/I,E\u000b\t6H\u0015\u0002mr\u001fёVl45շ])*+\u0014\u00009ۗK9ҥQcaJXWB\u0011JtLUO3\f\u0011\u000f6df\u001e\u001e2:+P5A7^M5z\nC?\u0012џ]\u001e\u0001\u0001<m^K쪑\u0018嫷X}TlFƧFU7>Mнۚf,ܬ\u0005d??Y\u0007-S\u0014|zm\u001fмP4Zi%p\u0003vb2~j\rv\u001c<{\u001cz+\u0017%yth+ћ_ri\u000f_\u0019K\u001ao%f6G-\u00012^h8Q]'\u0010w\u001e\u001bκ}{^Gx\u001d|֧)-)_w<}Z܅gjE??}ދ[k\u001d\n~^[V\u0003\u001eU\f\u001a;m.\u0015zC}5|\u001cf\u0019gT&GT>f߃q|\u0018qfLaRm\u0018nMLUhZs-[|-Smz(#[\u001b\u0014\u001afR\u0003pJ'|צ\bg\u001e\u00035Zꞗe<X.?lqe2\u0007Lz_\r\\ddm9bihxCU~n6\b`Qwm\t9Ɲֶkv\u00168 ޛÏa\u000f\u0006=C\u0005˴m_\u0010\u0011{\u0016x@Z]\u001d:?Ttlp\u001e\u0010۱\n\u000efv7\u001d?\u001eK\u0014\u000eD!ͬ\u001d\u0019>+Eul\u000eS:=?82!I>l`z>}X\"]\u0016\u0019v\u001f\f\u001fXsL\u0003y^_c%=mwJX|pL(\u0015\u0012y\u0018<\u0000a\u0018CA+iAVh\u0015y1c\u001e\"eyt]\u0005Fc(3~𴗯\u000f\\?%\u0011Tނ\n'웇b\u0014Epۙ][+~;4Dd@Y\u0013\u0015骎P\u000eM\u0016k\u0014O\"_iK8\u0012>%\u0004<\u001aI#:4mҒ&NΟc\u0007|-}IPZm]kH\"\u000f>\bԯ?gxff3I`<5d-#<0TX)A@Ht\r\u001e\bjmݐP?5%yz\"\t\u0000R\u00181E\u001cT[h\u000e+@ z\u001fsW~y&\"\u000bU\u001dz}u˃\u001cT2lyhmzCH(A$s'y9GT;堢yyk&di~1P2\u0019Ҿl;t\u0001A\u001dl\u0000Ս\n>\b#UYTu{%В\n`2y\u0019\fX\nu0JPZ\u001ejXgޙ|-)M\u0004x{\f\u0016s#\u0007\u0016\u000eՕ\u000f>9Xظ_l)\\E.\f\u0018\u000fG9dv=+*B5V\u001c\u0013t/#2_ڇ6iZ\rHL\t/\u000e3\u000f\u00159[\b{ިͼϳ\"Q\\\b0\blϝ堒xb)\u0002+\u0012\u000f6䡖L%s@E`0FM\u0017C-%\u000277,4,\nP\u000fF9\u0013L\u0011js*A-\u000fST\u0002\u0015a\u0001\u0003xBm;ZFE9W:#_\u0011\bP\u0018}\u0011\u0003Y\u0016j(B\u0007\u0017\u0004*\u0006\u0002~\u001f\u001f\t<ԪM<\u0015^>.VIL7L\u0010m6GPmgS6?<\u0000ox:P\u0011<`PO\u0000\u0006-\u0018*X\u0000\bɖ-g\u0010T96]R\u0007t\r\u001e\u001c\u0001c6\\4]y>X\u0014\u000bG2y\"sh L#\u0005f\u000f\u0018*Rk\\\u001cm\u0016j*9$Pub\u0015\u0014L\\\u0016B+N\u0007\b*y6\u0016a+\u0000.\u0012R$o\u0019I֖\u0004\u001d(2zlz:\bbV)\t\u000f)o\u00063y_7*O\u0003\u0015b1I@ީz)?m\u0002\u000194T~Y_W\u0015nvr/r\u0012>5xr\u001cٚ\u000eO{w\u0000i2\rӴWϛMignOeav?+1\u0018)>\u0005}\u001f==!r\u001c=#dV~\u0010ejHӠq*>%=G\u001aq_O\rRAHdz)~hH9Gxr\u001bKx\u0003:\n^=yYqC>LϩTUlb#\u001d5~\u0007a<\\-ڛR\u0003I\u0004n5-\f\bX]$\b:\u00149X\fAF\t:/.E~ЋNsU+\u0013\u0007V\u0010rPA\u0007)E\u000fRE%+\u0015EP_\u0015ջa\"?HLb\u0015\u0016Ba\"n\u000b1\\\u0002CQCE\u0007r\u000f8\bg|<T\fU9v\u00180\r\u0014\b\u0002ԗ\"T4\u001b]ޫ8]\u001b(@\u0005s\u0001\f\u0012:\u000fh\u000ePj)CES;q\u0011\u0019\t(4eR.Ok0$:\u0011Ƌ\u000e\u0014rr/\u0007L\u0018A|\b'\u001a=hS, 0XԞai쟔ÚG~\\\u0005xXl\u001d\u0004|J\u0000C\u0006(TF\u0003\u0011\u001c'\b| \u0018Q͸95ią*\u0010dc0\u001byq/\b\u0014ƿVH \u001et5\u001d\r菞CU.\u0007sxKS{S!-\b\rAG3\u001f{e-7,ј;1)\u0013eGN\u001e1>s\u001c[U9SRGO9ޒ\u0019\"}&܇Je~3D.I'\u0004Dˈ\u0018-ydfګ\u0014L[Fr5j]/e@\u0019Ki5rr$p\u001d}\u001a8Hz!noA8\b\u0007H{*B\u0019^\nqRC+bߊpȍXCL\u000255їANwAt8݃\tD}ΡOv/eϏ\f9$Kr\\=\u0000\u001c:ɝł\u0015ɱd1b^G\"\u0011/\rljʕG\u0012{!H\u0011h\u0012܍OoΉ#C) W(Xw'GT\\ٳ\u0011 ޒ\u0019p\n(&a.g\u00133`Vj\u0006(q\u001f\"\u000b\fا\u000f\fv(\u000fƊ6N\u0004\rC.]UA@g_\u001b NO\u0019,t\u0015Zq\u0016M3\u0001T!E˒dц\u0015D~ɯYX{uMaqc\u0018ANM!02vQJs|Y&;NI{ƹh\u001a\u00132gΉ\u000b\u0004w#\u0010\u0007\f?\\Cɦ\u0017f\u0014b }o.(\u00157E\u001au;7E\u001aK\u001d5$O\u000eM\u0012%˙N>\u000fe(1B-Ϟa\u0015{cWxgWҒ{o\u0010c\fGNSG\u00109u4:\u0012ut/𴦑\\@lr\\\u001cH.pd$V'\fFbuh$\u0002=\u0014^\u001f{}NFgq[\u0003`H6\u0014c1sz\u000b\u0012RѲ\u0000\n>\u0003~b\u0014\t\u000el:oE/5+IQ\u0014q\u0001\u0000\f\u000bZN\u0014(Y6x\u00192Vr\\_!\u001e>ī`\u0017\u000fg(J$Ǧ+\"\u001f\n;Dr@\u0011XIk&f\btZ*$\u00076n܅X\u0014\u001bLY\u0016\u0003s\u001f4+\u000e\u0007!\n(\r\u0007\f\u0002`Y\u0014?ON̞J\u0010H5j AvhJoFjTDEO!Ht$\u0001\u0015܌W\r\u0012\u000el\u0000A*\u001d9 \nIl׹)a\t-\u0010\u0014l&d_ˤ)lk]ԋ d,h\u0010'\u0017\u0001lJX+j%w\u0005%\r1PZF%^\u0011Hє:PI\u0014a;(,\u0015!ދ(\u0000x\u00054\u0015\\6sKgOZ\\%N\nydS>9x\u0001H,NT|V\u0017Z\u001f*7\u001a\u0012-\u000em+ԠbGFq/舘#(\u000b5v}\u000e˹\"+VЅR7j\u0005T\u0002h,DoNu\u000el\u0014d76\u0007SzI5Jw\n\u0015XaSnmtkϥ\u001b&#xJ¼@<\"\u000bTn[ߩDK7|I}7؃BՈ\u001bPOn\u0002)\u0000w\u0003z9nv\u001bo@I:tC\u001b\u001f\u0014n<\u001bAxlv.\u001b!|ZlsKV֌76\u0000zALjݙ@]I]\u0005.\u000b]\u001bUpryW4rudrܢ#q\u0004켗ѕY\u00151\u001bܑ&psj^6I~T?Gj[)D2[0\u0005\u0002p)Ԯ\u001f/'h\b%F\u0002}ܾ\u000f+'\u001cPGjֿf\u0006\u001d\u0017rRv\u001a:\u0012[JQqHȏm\rQ]9Jv\n?-\u000e\u00195IQ9\n\fVE?\n4\u0007(\u0017oH\n&D(ϙJ\u0014@+ۚ<\u0003\u0018\r|\u000eM5p2\u000f\\9\u0000\u0010p\u0014iW9ݭ&sO\rQ!pļHc}O\u00185{\bNX0m픍]AIveTLv@)-S{m\u000e,F7\nwЧ`\u0014r\u001dт4e\u0014\u000e@EnEd!!\u0019\"Yy6\u0017#{(\u001d\u000fQݞo6_\u0006rf\u0011OO~^Χ^w,}9z-\u001f\\yr>Z?ş\u0001۔9+]a9z-\u001f\u00127)Ss^r>Z>qZ/k$\u001bO?(综r>I\u0002\n2שּs,4^\u001c9ɘ$jNcJ4E޷QJK֌$\u0005/J\u0001NK-\u0000qa;MjIQÎJ<k\t\u001e\u0014.ey3PVħu\bT,u\u0005%cK lhF@:\\SdR\u0012yj/t^V\\\u001b'H䬄I\u0012Z78)\u0014nɽhf09\u0000sUR݅DSŲKf-\u0001bTv֋}\u0011hǍn\"KiL\u001e\r>8z2nEE/{u$(\u0012X.9cZ*Ju}[v\u0014h\u0013\u001c/L\u0003-6F[\u0010%ܿ\u0001zoa<z4\u0019sLq\\)\u0014C9f\u001eP(جFNO)ͼ\u0011I8&~$ky/z\u001fqa\rQjEfF\u001dkrV\u0015\u001fԠЕl>4Mk\u0006T퐦Zs5TvR~4tnx>f\u0010w\u001fי\nO\u0012Z\u0015T'@nom\u001f=DG.d{`^\u001f\"\u0002y^rH@\u0003\u0004V,OPWSD-;\u001av#iN\u0014\u0011MN6`ﲾSИ\u0011{^xF\u000bSfKqj\\kt\u0010\u0010\u0012\u000bzb\u0001tfYrvZ̜QiA%B;*/h}\"6oPW\u0012o@\u0007jћcʈa]\u0017$\u000e\u0010\u001fuUFeLg'\u0002U7Jn8z\u0007.qxU\u000fwl\u0001eQx@H\u000eTɨ1ʡ@>H~89,:zd#\u0014\\¥zDoHdQ=o7PP\u001c\u000bi \u0000DST/\u0010:\b&XKKccO\u000bi:Z\fi7,i͍\u0010ft)y5ү=tz8@6\bPds*\u0015%*ל{Vw+or\\,6a^ƍBTr1\u0003aǧ5ʛe6d\u001b\u001a\u001dԶߦ2υs\u0007oTw܍\u0016ݺ2\u0007<dXTSwʼ_%j;*\u001dݢ2\u000f;RW̓N~[w4׉2O)ƕy2\u000eŴ\u001fT\\i_(uv\u001a~z):Q\u0015ܭR/xgWRjܫf\u0010HƐ\u001e;R\u0003W/w#\u00008\u0006uqCOČ$G]b9GM̌i\t,Ӟ\fٷn\n`nŏ-TMu\u001f:\"S\u001div\u0011\"a\u001flGe*5ohh3ޔ6p\u0015\u000fP\thd;Ff\u000bf\u001fɉʊE߷)t\u0017|^$K餮_\u0014R:VGZlO7PnBoU$۾UlVE\u0014ɶ\u000e\u0016:\u001a*ċ&9Z\u0002!t^J\"GQEؓFӜ{ۢl\njVEy~p\u000fp{v<6yeQy<Sl4^.f1'$&p};\u001e\u0017N\u0017Z]Vpk\u0003\rTF\u000ederFi(}AFg \u000bvP5\u001aNW1\tBdqM+\u001e=Y>.jdz7!\u001c.ao}d\bG \u001c@\u0006\u0003B^\b\tY$z\nAw\u0006%5JF|XsT_\f[!::\u0018/\u000bjW9\u001d\fbQ\u0001-LO\u001e\u0015zMUo~\u0015\u001f\u001aPT;P:#.\u0016%\u001b\u0002;tKHi\u001dZ~myQ\nH(\u0017\u0000\u0000?\nTvne9g7UЩ\u0006lRf\u0014%\u0014K;hiG\u0013|\u0018p؎\u0002\u001fb^Gzgz>\fbTX= كmQrN\u0013\u001b2LoK\u001cpaFTS3e\u001dhD&KHl\u001d_zrp7FEeq.=\u0013B\r)Ϊ\u000e^\u000bf7)fkdg(\u000f.S]A\\=\u001f#^CƦf\t]EF&ے;7,\u000e\u0011ū\u001f9+\u00128v}r1Q<6}rj.\u0001v}rY%g/쓫\u0013m\n\bwO+Jpy>\u000b?)9oY']K-\n\u0004d.\n\u0014+V~^ޢn]'\nη\"~]'W\n\u0016ɭ!77-d@ݨO+\u001f\u0017u\r\u0016\u000ei\u0017ū>%ݸOJ/ͅ}r2\u0018ea\\UTIߠOb喅}r%hB\u0017F}ӽQa*\n,Sȿaa\u001c\u000b>*yZ%Ά\u0016gnҝ])\u0011\u000bW9FA+\n٣X}\u0016^29~p\u0019jr\u0016?%-~ZQeR\u001cp7J\u000b.[\u001bt ``9qaLPI\n\u0014I\u000bW\u000b\u000bcԆu*0&N431ZP~]^2Үf4e/ Ms\u0014\u001c~X/򡯹O-\u001f\u0017R\u000fBjhn|%~Ar4\u0007K\u0000\u000f(\"\u001c3ƃ=4\u0014Jqb5e?\\Q'6\r\u000b?\u0001\u001f^ۧ*υbrUIjG\u001eoRISk,\u0013צP\u0002]\u0012_[2\nzUUm5JƤrs%JK5T:)buG$ؑ\u0011\u001fR\u0005\u001bT+&Dj_˹\"|nxCMc˟P(؄LM\f\u0004Φj\t\u0005wԴ\b\f\u001cT$\u0016,̵$\u00070\u0006݅Y_L\u0011\u000e^;)/o\u001eB+l\fѧ[\u0013^nq\u0001\u0012\nٔ\u0011ܑUc?(&Bg7_\\\u001a(0hKV{H4qT?eSxo٨uEGJh@w%M\u000b\u0004\u000b\u001b~kOΣڷk8Lk߮ڷ\u001f1ڷ{z;o:E\u0007\u0006վЋ\\ڌ.QuWB/g]W}n\u0011T>\u001c\u0013`4Ru\b]\u000e\u001dЗjL7;\u0014RIZЬx\rT<e\u0005.9ݭrS4m|OX͖\u001aSA=_UHu\u0002:\u001b tLt!#\u0002ݾ\u0015\n\u001ckns\u0004]imn ?:U\u0018UG5Xl\u001a,\u0017[(m\u0017\bj\fS\ttOM.doQw[(L9ZZB\u0014.\u0018D%\r\u001d6\tk3Ej:RC羣\"ѝbQ|\u001fT\u0018&\u0017k.RRFDWәa\u0017Ƚ]PJfު\u001cT\u0000bB]\u000f\u00159£\f5۾\b\u0003]Ғ@T#R\u0005P\u001a94\\t\u0019Z<)\u0004zxۺQ\u0007TB\u0004\fOHZ\u0016\"vJ^aj\u0018dPnǲIQ\bx{0lPy}#n(YZģ\u000e\f\u001f:\u001e\u001a\u0001\u001fiRW\u0010\u001am\u000fݹA\u0010j9\u0012Ezbbxn(S5ZQK\u001c$l͸(\u0005\\sl$#pby]ܩfxciM\\_uU▢\u0011Egx!Uk\tPUMpOTE\u0015KRC],Bv\u0019j\u001aBv\n\u001af(r<а#^~L4?CC<y3K\u0003ؓ|\u001eDn\t\u0012х7Mo~\u0010\\\u0015\u000b~\u000bG6ؒ_\u0006T\u000f\u001aO{o~\u0013\u0006;P}\u0017\rGS[INוhOͭΟD]q9`r1\u001b\u0017s\u0017twho}k\u00126=Vt6'F{\u0004O91ﺀAV\u001e0xv0ɝ\f!#ZgWXI\u0016dgi\u0005mOE\tQoHTTj%b%\u0012\u0017\u0012U\u00125/tu\u0014UT[P*\"Hs6Mп*䢮B\t^o=\u0012iCڅ\u001dkyn7BHQZE7loʖBIV\u001f$jGTgϋ%Z\u0011$^\u0019iI\"\u0007B=\"\u0012D\u0017%Z\u0011ϯJ\u0012U?.IZxI_WbE*oᩗ$\u001es>/\r\u0015^{🹬PB\u0017~|Y]V(\u001feL^VfN/+T\u000eB_V(̼\u000f^VGrڰTjv8O\u001d>xzA\u001fmZ]S~s!?[jxz\b̆酇\u001d\u0005S~tzxMa\u000b\u000fo;DК\u0012#Uo;\u0014\u0014$\u000e]x낲[D9\u0016ݨ\u0018JC.E\u0017\u001e^\u0013Ņz%\u0017\u001e \u0019'\u0017\u001e\u0015GjȶË\u0004}\u000b\u000f5\u001foC-q7TF&\u001eO/<\u0001CțT/<T{\n{/wO-.<T/7~yz\u001e\u001fcsPݗم}P\u0011Cul\n6$wz8f^rzUq*vlu^yᯤ\u000b\u000fU6m'0H\u0011~\u0017\u001e^qOK.Fg\u001dJw\nymG)\u000b\u000fc\nh&\u0017\u001e*<{ۡ8eR߻i?𪴄_x(L>P\u0002\u0017\u001eŽC^\u00103jPk.<T\t\t+\u000f\u0001酇n7/l~y!WF&[\"rqƲ.<T7~ؼ\u001b\\x~\u000b\u000foPCMԋ|iu\u0019]2\u0017\u001ej+՗CR}6}\u000b\u000f\u0015CEv텇\u001d\n7u᡺w6_x~obbiL兇rW*\u0015?PvL.\u001b~Ʌ\u0016Cxڵ\u0017\u001e,@(x-.<T/ҕi?P(:\u0007!PC-.<Tߙ\u0010&\\CQeo;TC5\u0010TU/=?`9\u0005M\u000bY\u000eHS\u0012\u0011&e\"oj\u0011a|cS\\G$%!OB$\u0000)ǥ,b\u0004\u000b\u0018[yJ\u001cVT;\b!N\t96RmNF:/f°\tS\u0012u㑠-\b&m\u0016\u0011<&2al \u0013'N\u000fuK\u0001Yd#dn,I>}d˴2M6{\u001dNu^\";{3-8V䧵n ?\u001f\no}pDǻݭ!7ɱ)\u000fRɺ\u0016S@=Өo6+k\u0007g#5\u0003\u0015%\u0002\u0018S~q/X\u0016[\u0016\u001592Tg:v\u0006d\u00042[\u0004\b( +aG\u001059|agv][~\u001dLvVH0`\f!\u0007m\u0000\u0003d}+\u0003\f3s6k;KJRZy[sW\u0016esEV;,ѧ7Z\u001a$kerfA}sD!|};}k]ym-\u0019\u0015g\u0013XA\bBUs~O\u0018ٳ;}<H_4qx4.G5on\r\u0017̉s\\>FzJ_\u001aODKyOl~xx[ʏӕULS\u001fO\u0017uXwͦa\u00189\u001b/G\u000bzjUO\f]')\u0007\u001dѧ*Y:2z<ӒaЩ\u0011=i\u000f*Ω;x^,M̢./\rx=\u0013󩆃~>?]\u001d~{D\u001bUtq6\u001bqgyn\u0016\n7y,\u0018=\u001a`l6̳%>\u001d_)\u00137cƪAjf!\u001c+\u0003w\u001d7v8#+s;\u0012l\\6nr$m-*~5N\u0005XK\u001e0˩Ws$m\u001e<{3Tu^?\rgkc\"Sh\u0001^B6\"37?ML˹q]غQ]Z_\u001dލ^is;ޓZ\u0014Jy!\u0019ۮFh\u001ak\u001d{7\u000bcw[H\u0018\u0007\u001a\u0010K{VKsnÂX.ўƇ^\t`\b3񐇸=T}\u0013\u001d4\u001f9\u001e\u0007$/ʤnYt;  .]ѱLX\u001f[y\u000e[sh;g1弟9f\u0007cieq(ַnR\u0013\fѢ\u001f\u0019qr\"Ir=Oһg<:\u0012r\u001b7\u0016]Qg\u0007G˃Zi)e\u0003OG5\u001bS\u000e\u0001Րc33䀎S\u0013^\u0015r=d_<NNM<\t\u000b=.|ۚڼ<\u001b\u001bkKMܘ+c;ץQߪI\u0017G4Ze\u001e\u0004ʴeŅE\u000e^\b\u00069péLT]g\u0016=fU] k)4z\to\u0017k1<\nǝ#\u001fS'\u0006*y>\r\u0001f%?b\u000bڻ*5f\u0018gP\u0010\u0004տX|\u0018iyal6D\u0002vg+\u0011C,\u0015Nrp99^qRQ8p+7\u0016y>͓y\u0006\u0015l2e|e_5\u0012d!bbP\u0015\u0019J$\nǖmN\tݱ\u0004][!1К\u0013cRum~ilа+UYxd%0aBLAG\u0003T\u0007\u001fz/1ՀD\u000fE3AVx4&\u0018\u0018\u001d\b\u001b-󮸿]~\u0006ᵃ\u00175՗kf+\u0017Y:VA0_\u001d~!\u001a\u001bGzջ3\u001cI3\u001ddH\u00147XU72鹓yz}x񸏪`fs[4yv4d.\u001d^\u0017k'JT(@IΒ\u0012B0<OAlGr8N\u0001$6s(y\u0010e(\u0004TB\u0018R{$7kQr[5}*}+\u0014BvS\bH\b֡`P-_2X\bć`\\p)|/f#9TΌ\u001c`k&\u0014\u0014t\u00003\u001a?&_0F:\u0013S\u0004t4JFa\u0010R9F\u000f~\u000em\b\\_\u001a_ڳ%v\u001f6>=!O\u001e\\bd\u001ba/\u001fG6RYEdO^KK&(WrN\b\f4h@U-c\u0010&\r\u001b\fi遑Z:\u0004|OӐs+\u0014i4\u001bD#4v0>\u0017\f\u001e\u001aF~ `YqZy=|n\u001a4\u001d!B@\u0002}!\u0018gB-i_\u0018k\u00116g\u0012\u0004\u001a}\u0004ꤿ*M.L7`к\u001as\u000b\u0003N\n\b\u0019KT͕S\u001aدV璧\u0000\u0012jƚ:\f_YKs#Wc\u0004FSqv'مӅ\\bfrֳtbº|>5\u0013L\n7`\u0012}t_\u0010\u0017<3/\u0005\u001d\u001a;{-@bʹ\u0011C\r\u0017BRb`\u0004ЦO2|kEOޚ*|:\u0019~\"8\u0012ɮ0\u00129I'PgbrZ\fo\u0004o}|X^\ni\u0011W\u0013 ߻phO޸\u001bxSb:\u0001B&\u0007\u0013zW,)V)G3<~\\rk\u0010N@߳*>U\u001dF\u0019*\u0014#MWaFcFF@j>M.\u0019m\u001a\u001aIoyQuʛ\u000fި\bIIS^\u0013.\u0001\u001d3Ik$YLٟ*-OL4t?/-\u000eU@,du>su\u0014\u0005\u000bd\u001cL\u001b\u0018/`\u0012Q>I*fvK\u001c(ܒwhXV(\bW\u0013g3H5nl\u0019\b&\u0006\u0001М7nBZ\u001fEq\u00058j\u001b+kQk\u001a02-\u000f\r縰dg&nZegTѶ\u0000\\?\u0013\u001d\u000bEu&\u0006%3'2{pG˧k9}o\u0016\u001c/=\u0011\u001c9Ǐ\u001fo{3sG\u0011\u001bE3\u001bV@\u0013w\u0013\u0001b}\u0010YԺW#J7\u001e\\jd\u0011\f\u0012\\jd6@p-\u000e}8wRyhnܵRo*kcNM̅g/5)}&+K\u0004~%D#y\u0013$K?l}\u0007\u0015S{/ZU0\u001c\rO;鴦\u00030J 2_)]/\u001f\u0017ô+3k\u001f\u0004|LFVf\u000b\u000e4gǛ|xۥrxD=wDj՘茗ޗͣΑt=\u0012<>+\u000f\u0007G\u000b\u0015gl,N<wN*;hE]plC\u0005dӄv`1\u0019\u001e\n0Qcldz8\t\u0019w\b,笰=M^D}Wd_gP5(>Pv\u001a&Q;-\u001agPR\u00125Π\u0006N\u00125Π(%Q\f\u0012Jv@%Q\fj\u001c\u000bIԘ\u001d\u0002-\u001agP)_I\u0013pW8uIx\t9\u001asPo'Q7h\u0006ӕrA/Bѳӕ:9,N'\u0011q!\u0001\u0014u.H.'T`y$\u0006\u000f\u0013`\u001a\u0014\u0018k̟(yƚ#ّ+\u0014\u000eS޴niѨhEq\"\u001ceWdhG\u0019c֕e3Rz\u0005A2Q$\u0016\u0003]|%GGFt͌A7\u0017\u001a.P'qqB\u0019M)wsgj5\u0014~#Z0\u001al\u0017!hirل\u0010N^e#\u0014\u0014\u0010\b)\u001d_r0:4qiDrܫFm\"18\u00027Qk𽌳砍`98\u0007\u001b7̏C\u0005D2^\u0004{QA5JP馡^6\u0018!]Ph_C3^ܺ<*ͭ[>=\rɎ%h̕^:h<\rҌV\u0017^GB\u001aǘ\u0006lԮuN#\u0018\u0012<;6\fHk\u0007YC\u0003\u0002\u000fÃ#58jO8b\u0010h#@\u0010g\rSi&v>Fj\u0017\u001fۭ\u001ar|Fe\u0010&TVk\u00155Rk15O6~@|Z?mk3\u000b|`L\u001c~\u0016o1Ƀ$F]BIwhJ\u0018`6.Ua4\u0006v֯W}/5^-\u00183x6އW#\u001d\u0013z\"AX&~l\u0014铬EAۣsu8qGx(\u0011ɮ\u0019HfkV2A5!rz\u0002H/.\u0012­0\\\tMQOuH~Dtn\b\u0014Sϸtp^\n\u0004oLФSjT\u0005j0kߟjU\u0016O9o$P7T\"%N\u0014KD4*9\u0007o|z\b\u0006yCD%\u001cq5\u001f\u0013PPZY\u0005z}@A`\u0006M(\u001eMS'Qins5ɻ\u0013inS<m/\bs`\u001a\u000b2Q\u0013p}Hzo>Xl衚AH1&E2mJy~z\u001d|\rR\u001bG1L\f>\\\u0006 խD4\u0001ƦN\u0006ƾ\u0019qx\t4\u001b\nQѵh\u0004)$*#3\bݟ'|5o\u0017x\u0018|t M\u001d\u0004IxGq*L\u0015>QGq*\b>Z=r6S$q\u000f\n#\u001bˍq!\u0013\u0017o.[[\u0014\u0016uNn:֐N\u0006+H?g\u0000S ȣ\\NU;ku75\u0011y\u0018˵VF\u0007\u0017\u001e2\u001c`%\u001fG\"\u0001y+]ZzI5T\u000eVFq\u0015m\u0003*,O$PKD(Œ\rFC\u0007\u0019ZnAtypݪ,uj\u001cfS%l0\\yRZf3\u0014|SRɔ~8eP:M\u0013\u0013s5K0%SZbuL8.6Ϫ}ؼkUm\u000e})GK\tƉMW\u0010LZNL\u001aR\u000b\u00140\u0017^KwWV)uhJg.t*\r\u0005VFd/\u000bE~Q͡owbjN7\u0005Q\u0010\u0002Kgk8k8KmNXz\b7w@Frf[\u0016$TAZ|ixzD).\rƥ\u0019YhwA0tm3O<ۆ}[%qA\u0011n0A[\n=\r}\bpk\u000b\u0014\u0002a\u0013'\u001diT\u001bh̶dT7\\K=F\r%\u0004\u0007۾!=q-\u0018ʪ8\u0017$I澇R\u0003}[x;hp]rOuAm~s\fB\u0013\"*W-s\r<`O]\r}s]\u001d_ؾ,\u001f\u0010)\b\u00072\u00041Tr<\u0003mz%* \\aQ]!r\\\f\u0015Kj!\ff Ti\f6\tX'}|Ƙ\u0000\u0015TX·]\u0012`\u000eO`{\u0016.8}K\u0015!\u001bhYl˶\f\u0004)ߑR\u0015x\u0011vʒEд\u001d,\u0000\u0000RIN\u0005a\u000e(\rǆ\u001a]hq!\nOX\u0006+%b\u001f\u001al߲G7%<\u0019$ψ~J]Dg<\u001cŐ@=߅P6eۆ\u0007I9Dt%\fR$Ǡ\b@\u001dLZ@HQ\u000f\u0001V\ttx|ζlip \nz`(r\u0001i\u0001\u0010a@%̶f\u0000,j\u0000%\u0015p=\u0011\u0014\u0004j\u0018l;\u001epS\u0010\u000bw|[X#}\u001eQ|9b\u00036S)i\u0012HH_)5\\TMY=Gc\u0000tǳ\u0018\u000bBp!\t\u0001ReA\nK\u0002!E\u0010o\u00068§vI.\u0002\u001c4T\u0007=\u00125eS[Q\"8.p!Sh\u0007\u001apklbنKOX j\u0011G8\u0013\u0012>\r.\r\u001cH]\nu;˘G\"\u0000\u0005@b\u001aE\u001c\fX|\u0003C<_\u0017q\u0005d\u0001ss\u001c_#&\bb\u0006\u0014]7 { \f0A\u001f̀3ǡ\"Q m_R\u0011\u001bkC\u000f̕]!I0\u0001f9>%%A&z\u0016\u00148QC\u0003Sx$\u0004\u0018\u0016¸am\u000fYM'DA_B&\u001dأ\u0005\u0002+\fD\bo[\u0004<@1eCx\u001c.'SfqlHH\u0000\u0000D\u001f/9y=h\u001cVeëP]\u000e\\\u001844&ȩj\u00016\u001d5\\\u001b ;B;u\t\\\u000b\u0003v\\t@\u001d\retUh'@Z\u001e*\u001f\u000bD\u0014\u0005h\f?\u0000\u000b'E\u0013\u001e\u0003πp\u00030(\u0001ۂTN%-&\u0018:\t .\u001fl\u001b*ix\u0000nIbB\u0000\rck\u0011\u0001`d^A*HȰ5Ku\u000eI\u0005@P\u0003d|\u000e\u00183[ۍ6Q\rz\u000eU\u0001\u0016.A\u0013\u001e(q\u000e=\u0002g\n\u0005MlG\u000b\u0010@C\u001dr\u0003cA\u0005b\u0011)v%n,r?\u0016Ww\u0016y18?\u0018\u0000\u0002\u000f}\u0014y7z\n0P?ȏb`d3Xp\u001c\u0019Ki(\u0000Hr\u0002\u000e?S OY\u0014$\u0018\u0014\u0004L\u000f֧'pޭkS%mA{p`\u0006\r\u001aT`HB\u0004>'/\tؤz\u001aS\u00025$\u0000\u001d\u0012rpUڐ\u001ce\u0006%\u0018\u000bp\u001c\fPlz5uԊ˄z тG\u000b'\fTzJy\u0001\u0000<\u0012\u001e{i~on)\u0019\u0016|U`}T۪~:\u000e:\u00102VA}eo)2K\fq@/Mo>-#^fzD\u0005]ifU\u0017)\u0017f`j:T\u0005o[kf`7o4SV]o7q+u|k?6SoO\u0015z(z\u0000з\u0003]D\r\nendstream\rendobj\r5 0 obj\r<</Intent 15 0 R/Name(Layer 1)/Type/OCG/Usage 16 0 R>>\rendobj\r27 0 obj\r<</Intent 36 0 R/Name(Layer 1)/Type/OCG/Usage 37 0 R>>\rendobj\r48 0 obj\r<</Intent 57 0 R/Name(Layer 1)/Type/OCG/Usage 58 0 R>>\rendobj\r69 0 obj\r<</Intent 78 0 R/Name(Layer 1)/Type/OCG/Usage 79 0 R>>\rendobj\r90 0 obj\r<</Intent 99 0 R/Name(Layer 1)/Type/OCG/Usage 100 0 R>>\rendobj\r111 0 obj\r<</Intent 120 0 R/Name(Layer 1)/Type/OCG/Usage 121 0 R>>\rendobj\r120 0 obj\r[/View/Design]\rendobj\r121 0 obj\r<</CreatorInfo<</Creator(Adobe Illustrator 22.1)/Subtype/Artwork>>>>\rendobj\r99 0 obj\r[/View/Design]\rendobj\r100 0 obj\r<</CreatorInfo<</Creator(Adobe Illustrator 22.1)/Subtype/Artwork>>>>\rendobj\r78 0 obj\r[/View/Design]\rendobj\r79 0 obj\r<</CreatorInfo<</Creator(Adobe Illustrator 22.1)/Subtype/Artwork>>>>\rendobj\r57 0 obj\r[/View/Design]\rendobj\r58 0 obj\r<</CreatorInfo<</Creator(Adobe Illustrator 22.1)/Subtype/Artwork>>>>\rendobj\r36 0 obj\r[/View/Design]\rendobj\r37 0 obj\r<</CreatorInfo<</Creator(Adobe Illustrator 22.1)/Subtype/Artwork>>>>\rendobj\r15 0 obj\r[/View/Design]\rendobj\r16 0 obj\r<</CreatorInfo<</Creator(Adobe Illustrator 22.1)/Subtype/Artwork>>>>\rendobj\r133 0 obj\r[132 0 R]\rendobj\r152 0 obj\r<</CreationDate(D:20180726104312+01'00')/Creator(Adobe Illustrator CC 22.1 \\(Windows\\))/CreatorVersion(21.0.0)/ModDate(D:20180726105321+01'00')/Producer(Adobe PDF library 15.00)/Title(Web)>>\rendobj\rxref\r\n0 153\r\n0000000004 65535 f\r\n0000000016 00000 n\r\n0000000234 00000 n\r\n0000035917 00000 n\r\n0000000006 00000 f\r\n0000348722 00000 n\r\n0000000008 00000 f\r\n0000035968 00000 n\r\n0000000009 00000 f\r\n0000000010 00000 f\r\n0000000011 00000 f\r\n0000000012 00000 f\r\n0000000013 00000 f\r\n0000000014 00000 f\r\n0000000017 00000 f\r\n0000349734 00000 n\r\n0000349765 00000 n\r\n0000000018 00000 f\r\n0000000019 00000 f\r\n0000000020 00000 f\r\n0000000021 00000 f\r\n0000000022 00000 f\r\n0000000023 00000 f\r\n0000000024 00000 f\r\n0000000025 00000 f\r\n0000000026 00000 f\r\n0000000028 00000 f\r\n0000348792 00000 n\r\n0000000029 00000 f\r\n0000000030 00000 f\r\n0000000031 00000 f\r\n0000000032 00000 f\r\n0000000033 00000 f\r\n0000000034 00000 f\r\n0000000035 00000 f\r\n0000000038 00000 f\r\n0000349618 00000 n\r\n0000349649 00000 n\r\n0000000039 00000 f\r\n0000000040 00000 f\r\n0000000041 00000 f\r\n0000000042 00000 f\r\n0000000043 00000 f\r\n0000000044 00000 f\r\n0000000045 00000 f\r\n0000000046 00000 f\r\n0000000047 00000 f\r\n0000000049 00000 f\r\n0000348863 00000 n\r\n0000000050 00000 f\r\n0000000051 00000 f\r\n0000000052 00000 f\r\n0000000053 00000 f\r\n0000000054 00000 f\r\n0000000055 00000 f\r\n0000000056 00000 f\r\n0000000059 00000 f\r\n0000349502 00000 n\r\n0000349533 00000 n\r\n0000000060 00000 f\r\n0000000061 00000 f\r\n0000000062 00000 f\r\n0000000063 00000 f\r\n0000000064 00000 f\r\n0000000065 00000 f\r\n0000000066 00000 f\r\n0000000067 00000 f\r\n0000000068 00000 f\r\n0000000070 00000 f\r\n0000348934 00000 n\r\n0000000071 00000 f\r\n0000000072 00000 f\r\n0000000073 00000 f\r\n0000000074 00000 f\r\n0000000075 00000 f\r\n0000000076 00000 f\r\n0000000077 00000 f\r\n0000000080 00000 f\r\n0000349386 00000 n\r\n0000349417 00000 n\r\n0000000081 00000 f\r\n0000000082 00000 f\r\n0000000083 00000 f\r\n0000000084 00000 f\r\n0000000085 00000 f\r\n0000000086 00000 f\r\n0000000087 00000 f\r\n0000000088 00000 f\r\n0000000089 00000 f\r\n0000000091 00000 f\r\n0000349005 00000 n\r\n0000000092 00000 f\r\n0000000093 00000 f\r\n0000000094 00000 f\r\n0000000095 00000 f\r\n0000000096 00000 f\r\n0000000097 00000 f\r\n0000000098 00000 f\r\n0000000101 00000 f\r\n0000349269 00000 n\r\n0000349300 00000 n\r\n0000000102 00000 f\r\n0000000103 00000 f\r\n0000000104 00000 f\r\n0000000105 00000 f\r\n0000000106 00000 f\r\n0000000107 00000 f\r\n0000000108 00000 f\r\n0000000109 00000 f\r\n0000000110 00000 f\r\n0000000000 00000 f\r\n0000349077 00000 n\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000349151 00000 n\r\n0000349183 00000 n\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000000000 00000 f\r\n0000037835 00000 n\r\n0000349850 00000 n\r\n0000036355 00000 n\r\n0000040828 00000 n\r\n0000038141 00000 n\r\n0000038027 00000 n\r\n0000037105 00000 n\r\n0000037270 00000 n\r\n0000037320 00000 n\r\n0000037909 00000 n\r\n0000037941 00000 n\r\n0000038178 00000 n\r\n0000040904 00000 n\r\n0000041174 00000 n\r\n0000042569 00000 n\r\n0000044701 00000 n\r\n0000110291 00000 n\r\n0000175881 00000 n\r\n0000241471 00000 n\r\n0000307061 00000 n\r\n0000349877 00000 n\r\ntrailer\r\n<</Size 153/Root 1 0 R/Info 152 0 R/ID[<DF05DCEE9E017548ADEDCC2E670C5564><3783D093DE805041860A5640AE0DB347>]>>\r\nstartxref\r\n350085\r\n%%EOF\r\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020 Thomas May\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Libraries/LocalPackages/microsoft.web.webview2.undocked/1.0.2739.170/.nupkg.metadata",
    "content": "{\n  \"version\": 2,\n  \"contentHash\": \"9P9b9/H315ficqW9u01EJCjKD3QYfxzGXscGHT6lndyrAzkW5iNho28ILC6bYMpgE+G/GNzTij/OVZL9Jxq5mw==\",\n  \"source\": null\n}"
  },
  {
    "path": "Libraries/LocalPackages/microsoft.web.webview2.undocked/1.0.2739.170/microsoft.web.webview2.undocked.1.0.2739.170.nupkg.sha512",
    "content": "9P9b9/H315ficqW9u01EJCjKD3QYfxzGXscGHT6lndyrAzkW5iNho28ILC6bYMpgE+G/GNzTij/OVZL9Jxq5mw=="
  },
  {
    "path": "Libraries/LocalPackages/microsoft.web.webview2.undocked/1.0.2739.170/microsoft.web.webview2.undocked.nuspec",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<package xmlns=\"http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd\">\n  <metadata>\n    <id>Microsoft.Web.WebView2.Undocked</id>\n    <version>1.0.2739.170</version>\n    <title>Undocked WebView2 Library</title>\n    <authors>Microsoft, Kimbra</authors>\n    <owners>Microsoft</owners>\n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <licenseUrl>https://aka.ms/deprecateLicenseUrl</licenseUrl>\n    <projectUrl>https://github.com/microsoft/microsoft-ui-xaml</projectUrl>\n    <iconUrl>https://aka.ms/winui_icon</iconUrl>\n    <description>This package provides the WebView2 control, undocked from WinUI 2.8.</description>\n    <copyright>© Microsoft Corporation. All rights reserved.</copyright>\n    <tags>Windows WinUI UWP XAML Fluent Controls Downlevel Compatibility TreeView ColorPicker NavigationView MenuBar</tags>\n    <dependencies>\n      <group targetFramework=\"UAP10.0\">\n        <dependency id=\"Microsoft.Web.WebView2\" version=\"1.0.2739.15\" />\n      </group>\n    </dependencies>\n  </metadata>\n</package>"
  },
  {
    "path": "README.md",
    "content": "# Unicord\nA free, open source Discord Client for Windows 10 and Windows 10 Mobile, providing a fast, efficient, native feeling Discord experience, while adding handy extras along the way. Built on [DSharpPlus](https://github.com/DSharpPlus/DSharpPlus/)!\n\n[![Build Status](https://dev.azure.com/WanKerrCoLtd/Unicord/_apis/build/status/WamWooWam.Unicord?branchName=master)](https://dev.azure.com/WanKerrCoLtd/Unicord/_build/latest?definitionId=4&branchName=master)\n\n![promo](Assets/promo1.png)\n\n## Downloads\nSee the [latest release](https://github.com/UnicordDev/Unicord/releases)!\n\n## Getting Started\nSo you wanna build Unicord, well you're gonna need to have a few things handy.\n\n### Prerequisites\n - Windows 11 (Build 22000+)\n - Windows 11 SDK Build 26100\n - Visual Studio 2022 or later\n   - Universal Windows Platform tools\n     - For Visual Studio < `17.10`, Select `Universal Windows Platform Workload`\n     - For Visual Studio >= `17.10`, Select `WinUI Application Development Workload` and `Installation details`->`WinUI application development`->`Optional`->`Universal Windows Platform tools`\n\n### Building and Installing\nBy default, cloning a repository through Visual Studio should handle submodules, but for the sake of completeness and as with all GitHub projects, you'll also need to pull submodules.\nTo do this, use:\n\n```sh\n$ git submodule update --init --recursive\n```\n\nFrom here, building should be as simple as double clicking `Unicord.sln`, ensuring your targets are appropriate to your testing platform (i.e. Debug x64), and hitting F5. \nOnce built and deployed, it should show in your start menu as \"Unicord Canary\", data and settings are kept separate from the Store version, so they can be installed side by side.\n\n![Canary](Assets/canarylauncher.png)\n\n## Testing\nUnicord currently lacks any kind of unit testing. This will likely change as I adopt a more sane workflow, but for now, I suggest going around the app and making sure everything you'd use regularly works, and ensuring all configurations build. A handy way of doing this, is Visual Studio's Batch Build feature, accessible like so:\n\n![batch build](Assets/batchbuildmenu.png)\n\nOn one specific note, while the project technically targets a minimum of Windows 10 version 1709 (Fall Creators Update), all code should compile and run on version 170**3** (Creators Update) to maintain Windows Phone support. Please pay special attention to the minimum required Windows version when consuming UWP APIs, and be careful when consuming .NET Standard 2.0 APIs, which may require a newer Windows version.\n\n## Contributing\nUnicord accepts contributions! Want a feature that doesn't already exist? Feel free to dig right in and give it a shot. Do be mindful of other ongoing projects, make sure someone isn't already building the feature you want, etc. If you don't have the know how yourself, file an issue, someone might pick up on it.\n\n## Get in Touch\nWe have a Discord server specifically for Unicord development and testing, join here:\n\n[![Unicord](https://discordapp.com/api/guilds/648519011130408980/widget.png?style=banner2)](https://discord.gg/64g7M5Y)\n\n## License\nUnicord is licensed under the [MIT License](LICENSE).\n\n## Acknowledgements\n - [DSharpPlus](https://github.com/DSharpPlus/DSharpPlus) Contributors, for providing a wonderful base on which I've built much of this\n - Any member of my personal Discord server who's given me any tips, feedback or guidance! <3\n"
  },
  {
    "path": "Research/README.md",
    "content": "# Research\nThis folder contains my own original research into how certain Discord functions work. All research is done in a clean room, black box manner. No source code has been inspected, and all data inspected was gathered by simply using Fiddler, and only from accounts I own and have complete control over. All IDs and personally identifiable information has been scrubbed."
  },
  {
    "path": "Research/REST.md",
    "content": "# REST APIs\n\n## `GET /users/@me/mentions`\nGets list of recent mentions for the current user \n\n Query Parameter  | Type      | Default | Details \n ---------------- | --------- | ------- | ------- \n `limit`          | number    | `25`    | Limit of mentions to get\n `guild_id`       | snowflake | `none`  | The guild to get mentions in\n `roles`          | bool      | `true`  | Include @role mentions?\n `everyone`       | bool      | `true`  | Include @everyone mentions?\n\nReturns a list of message objects.\n\n## `POST /channels/:channel_id/call/ring` \nStarts a voice call in a DM channel.\n\n JSON Parameter | Type      | Default | Details \n -------------- | --------- | ------- | ------- \n `recipients`   | ??        | null    | Unknown (maybe group related?)\n\n```json\n{\"recipients\":null}\n```\n"
  },
  {
    "path": "Research/WebSocket.md",
    "content": "# WebSocket Events\n\n## 3: Status Update\nSee https://discordapp.com/developers/docs/topics/gateway#update-status\n\n JSON Parameter | Type      | Default | Details \n -------------- | --------- | ------- | ------- \n `afk`          | `bool`    | n/a     | If `true`, push notifications are delivered to mobile devices.\n\n```json\n{\"op\":3,\"d\":{\"status\":\"online\",\"since\":0,\"activities\":[],\"afk\":true}}\n```\n\n## 8: Guild Member Request\nRequests a chunk of guild members, quite advanced, can be used for searching as well as optimising number of presences. Generally used after messages have been fetched in large guilds.\n\n JSON Parameter | Type          | Default | Details \n -------------- | ------------- | ------- | ------- \n `guild_id`     | `snowflake[]` | n/a     | List of guilds to request user presences for\n `user_ids`     | `snowflake[]` | n/a     | List of users to request user presences for\n\n\n```json\n{\"op\":8,\"d\":{\"guild_id\":[\"guild_id\"],\"user_ids\":[\"user_id\"]}}\n```\n\n## 14: FUCKING EVERYTHING\nSo Discord seem to use this opcode for like 50 different things, it's used for requesting presences, statuses, and so on, but also activating typing and activity events in guilds?! Like jesus what the fuck is with the focus on 14\n\n JSON Parameter | Type                           | Default | Details \n -------------- | ------------------------------ | ------- | ------- \n `guild_id`     | `snowflake`                    | n/a     | The guild to sync\n `typing`       | `bool`                         | n/a     | Recieve typing events?\n `activities`   | `bool`                         | n/a     | Recieve status update events?\n `lfg`          | `bool`                         | n/a     | Recieve LFG update events? (presumably)\n `channels`     | `map<snowflake, list<range>>?` | n/a     | Map of Channel ID to range of user presences to fetch\n\n\nRequests Discord send typing events for the specified `guild_id`:\n```json\n{\"op\":14,\"d\":{\"guild_id\":\"guild_id\",\"typing\":true,\"activities\":true}}\n```\n\nRequests members for the last 99 messages? in the specified channels. Could also be top 99 in the user list. Not 100% sure.\n```json\n{\"op\":14,\"d\":{\"guild_id\":\"guild_id\",\"typing\":true,\"activities\":true,\"lfg\":true,\"channels\":{\"channel_id\":[[0,99]]}}}\n\n{\"op\":14,\"d\":{\"guild_id\":\"guild_id\",\"channels\":{\"channel_id\":[[0,99]],\"channel_id\":[[0,99]]}}}\n```\n\n```json\n{\"t\":\"GUILD_MEMBERS_CHUNK\",\"s\":46,\"op\":0,\"d\":{\"not_found\":[],\"members\":[{\"user\": { }}],\"guild_id\":\"guild_id\"}}\n````"
  },
  {
    "path": "Unicord/PropertyChangedBase.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\nusing System.Threading;\n\nnamespace Unicord\n{\n    /// <summary>\n    /// Provides a base class to objects that can raise property change events \n    /// via <see cref=\"INotifyPropertyChanged\"/> in a thread safe manner\n    /// </summary>\n    public class NotifyPropertyChangeImpl : INotifyPropertyChanged\n    {\n        private ThreadLocal<ThreadHandlerCollection<PropertyChangedEventHandler>> _propertyChangedEvents;\n\n        private ThreadHandlerCollection<PropertyChangedEventHandler> PropertyChangeEvents\n        {\n            get\n            {\n                if (_propertyChangedEvents == null)\n                    _propertyChangedEvents = new ThreadLocal<ThreadHandlerCollection<PropertyChangedEventHandler>>(() =>\n                        new ThreadHandlerCollection<PropertyChangedEventHandler>(SynchronizationContext.Current), true);\n\n                try\n                {\n                    return _propertyChangedEvents.Value;\n                }\n                catch (ObjectDisposedException) // why the fuck\n                {\n                    _propertyChangedEvents = null;\n                    return PropertyChangeEvents; // we go againe\n                }\n            }\n        }\n\n        public event PropertyChangedEventHandler PropertyChanged\n        {\n            add => PropertyChangeEvents.Add(value);\n            remove => PropertyChangeEvents.Remove(value);\n        }\n\n        // Holy hell is the C# Discord great.\n        // Y'all should join https://aka.ms/csharp-discord\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        protected void OnPropertySet<T>(ref T oldValue, T newValue, [CallerMemberName] string property = null)\n        {\n            if (oldValue == null || newValue == null || !newValue.Equals(oldValue))\n            {\n                oldValue = newValue;\n                InvokePropertyChanged(property);\n            }\n        }\n\n        // overload might avoid boxing?\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        protected void OnPropertySet<T>(ref T oldValue, T newValue, params string[] additionalProperties)\n        {\n            if (oldValue == null || newValue == null || !newValue.Equals(oldValue))\n            {\n                oldValue = newValue;\n\n                foreach (var str in additionalProperties)\n                {\n                    InvokePropertyChanged(str);\n                }\n            }\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        public virtual void InvokePropertyChanged([CallerMemberName] string property = null)\n        {\n            if (_propertyChangedEvents == null)\n                return;\n\n            var args = new PropertyChangedEventArgs(property);\n            var context = SynchronizationContext.Current;\n            foreach (var item in _propertyChangedEvents.Values)\n            {\n                if (item.context == context || item.context == null)\n                {\n                    InvokeHandler(args, item.events);\n                }\n                else\n                {\n                    item.context.Post(o => InvokeHandler(args, item.events), null);\n                }\n            }\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        private void InvokeHandler(PropertyChangedEventArgs args, PropertyChangedEventHandler handler)\n        {\n            try\n            {\n                handler?.Invoke(this, args);\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine(\"Error in binding: {0}\", ex);\n            }\n        }\n\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\n        protected void UnsafeInvokePropertyChanged(string property)\n        {\n            if (_propertyChangedEvents == null)\n                return;\n\n            var args = new PropertyChangedEventArgs(property);\n            foreach (var item in _propertyChangedEvents.Values)\n            {\n                item.events?.Invoke(this, args);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord/README.md",
    "content": "﻿# Unicord\nThis class library contains code shared between `DSharpPlus` and the main `Unicord.Universal` project, and is here for the sake of cleanliness. That said, generally speaking you don't want to add code here."
  },
  {
    "path": "Unicord/ThreadHandlerCollection.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\nusing System.Text;\nusing System.Threading;\n\nnamespace Unicord\n{\n    public class ThreadHandlerCollection<T> where T : Delegate\n    {\n        public ThreadHandlerCollection(SynchronizationContext c)\n        {\n            context = c;\n        }\n\n        public readonly SynchronizationContext context;\n        public T events;\n\n        public void Add(T handler)\n        {\n            events = (T)Delegate.Combine(events, handler);\n        }\n\n        public void Remove(T handler)\n        {\n            events = (T)Delegate.Remove(events, handler);\n        }\n    }\n\n}\n"
  },
  {
    "path": "Unicord/Unicord.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFrameworks>netstandard2.0</TargetFrameworks>\n    <LangVersion>7.3</LangVersion>\n  </PropertyGroup>\n\n</Project>\n"
  },
  {
    "path": "Unicord/VersionHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Text;\n\nnamespace Unicord\n{\n    public interface IVersionProvider\n    {\n        string GetVersionString();\n    }\n\n    public static class VersionHelper\n    {\n        private static IVersionProvider _versionProvider;\n\n        public static T RegisterVersionProvider<T>() where T : IVersionProvider, new()\n        {\n            if (_versionProvider != null)\n                throw new Exception(\"Version Provider has already been registered!\");\n\n            return (T)(_versionProvider = new T());\n        }\n\n        public static string VersionString => _versionProvider?.GetVersionString() ?? \"\";\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/App.xaml",
    "content": "﻿<Application\n    x:Class=\"Unicord.Universal.App\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:media=\"using:Microsoft.UI.Xaml.Media\"\n    xmlns:converters=\"using:Unicord.Universal.Converters\"\n    xmlns:commands=\"using:Unicord.Universal.Commands\" \n    xmlns:flyouts=\"using:Unicord.Universal.Controls.Flyouts\"\n    xmlns:themes=\"using:Unicord.Universal.Themes\"\n    RequiresPointerMode=\"WhenRequested\">\n    <Application.Resources>\n        <themes:ThemeResources>\n            <themes:ThemeResources.MergedDictionaries>\n                <ResourceDictionary>\n                    <ResourceDictionary.ThemeDictionaries>\n                        <ResourceDictionary x:Key=\"Light\">\n                            <SvgImageSource x:Key=\"DiscordClyde\" UriSource=\"Assets/DiscordClyde.Light.svg\" />\n                            <SvgImageSource x:Key=\"DiscordLogo\" UriSource=\"Assets/DiscordLogo.Light.svg\"/>\n                            <SvgImageSource x:Key=\"DiscordWordMark\" UriSource=\"Assets/DiscordWordMark.Light.svg\"/>\n                            <BitmapImage x:Key=\"DiscordSplashScreen\" UriSource=\"Assets/Store/SplashScreen.light.png\" />\n                        </ResourceDictionary>\n                        <ResourceDictionary x:Key=\"Dark\">\n                            <SvgImageSource x:Key=\"DiscordClyde\" UriSource=\"Assets/DiscordClyde.Dark.svg\" />\n                            <SvgImageSource x:Key=\"DiscordLogo\" UriSource=\"Assets/DiscordLogo.Dark.svg\"/>\n                            <SvgImageSource x:Key=\"DiscordWordMark\" UriSource=\"Assets/DiscordWordMark.Dark.svg\"/>\n                            <BitmapImage x:Key=\"DiscordSplashScreen\" UriSource=\"Assets/Store/SplashScreen.png\" />\n                        </ResourceDictionary>\n                        <ResourceDictionary x:Key=\"Default\">\n                            <SvgImageSource x:Key=\"DiscordClyde\" UriSource=\"Assets/DiscordClyde.Light.svg\" />\n                            <SvgImageSource x:Key=\"DiscordLogo\" UriSource=\"Assets/DiscordLogo.Light.svg\"/>\n                            <SvgImageSource x:Key=\"DiscordWordMark\" UriSource=\"Assets/DiscordWordMark.Light.svg\"/>\n                            <BitmapImage x:Key=\"DiscordSplashScreen\" UriSource=\"Assets/Store/SplashScreen.light.png\" />\n                        </ResourceDictionary>\n                    </ResourceDictionary.ThemeDictionaries>\n                    <ResourceDictionary.MergedDictionaries>\n                        <ResourceDictionary Source=\"Themes/Colours.xaml\"/>\n                        <ResourceDictionary Source=\"Themes/Generic.xaml\"/>\n                        <ResourceDictionary Source=\"Themes/CustomStyles.xaml\"/>\n                        <Templates xmlns=\"using:Unicord.Universal.Resources\"/>\n                    </ResourceDictionary.MergedDictionaries>\n\n                    <PathIcon x:Key=\"DiscordIcon\" \n                              Data=\"M114.65,47.25c-12.94-9.72-25.26-9.45-25.26-9.45l-1.25,1.44c15.28,4.68,22.38,11.43,22.38,11.43A73.23,73.23,0,0,0,83.46,42a76,76,0,0,0-18.16.18,8.87,8.87,0,0,0-1.53.18,67.48,67.48,0,0,0-20.4,5.67c-3.33,1.53-5.31,2.61-5.31,2.61s7.46-7.11,23.65-11.79l-.9-1.08s-12.32-.27-25.26,9.45c0,0-12.95,23.49-12.95,52.47,0,0,7.55,13,27.42,13.68,0,0,3.32-4.05,6-7.47-11.42-3.42-15.73-10.62-15.73-10.62s.9.63,2.52,1.53a1.24,1.24,0,0,0,.36.27c.27.18.54.27.81.45a52,52,0,0,0,6.56,3.06,75.29,75.29,0,0,0,13.21,3.87,62.94,62.94,0,0,0,23.29.09,59.08,59.08,0,0,0,13-3.87,51.45,51.45,0,0,0,10.34-5.31s-4.5,7.38-16.27,10.71c2.7,3.42,5.93,7.29,5.93,7.29,19.87-.63,27.51-13.68,27.51-13.68C127.6,70.74,114.65,47.25,114.65,47.25ZM58.29,91.35c-5,0-9.17-4.5-9.17-10s4.05-10,9.17-10,9.26,4.5,9.17,10S63.41,91.35,58.29,91.35Zm32.81,0c-5,0-9.17-4.5-9.17-10s4-10,9.17-10,9.17,4.5,9.17,10S96.23,91.35,91.1,91.35Z\"/>\n\n                    <CircleEase x:Key=\"EaseMove\" EasingMode=\"EaseInOut\" />\n                    <ExponentialEase x:Key=\"EaseEnter\" EasingMode=\"EaseOut\" Exponent=\"7\" />\n                    <ExponentialEase x:Key=\"EaseExit\" EasingMode=\"EaseIn\" Exponent=\"4.5\" />\n                    <SolidColorBrush x:Key=\"SystemControlBackgroundChromeLowBrush\" Color=\"{ThemeResource SystemChromeLowColor}\"/>\n\n                    <converters:ColourBrushConverter x:Key=\"ColourBrushConverter\" \n                                                     DefaultBackgroundColour=\"{ThemeResource BackgroundTertiaryColour}\"/>\n\n                    <converters:ChannelSymbolConverter x:Key=\"ChannelSymbolConverter\"\n                                                       NSFWGlyph=\"&#xF86A;\"\n                                                       TextGlyph=\"&#xF57E;\"\n                                                       VoiceGlyph=\"&#xFC64;\"\n                                                       NewsGlyph=\"&#xF538;\"\n                                                       StoreGlyph=\"&#xF92C;\"\n                                                       StageGlyph=\"&#xF30E;\"\n                                                       ForumGlyph=\"&#xF308;\"\n                                                       DirectoryGlyph=\"&#xF42F;\"/>\n\n                    <converters:DateTimeConverter x:Key=\"DateTimeConverter\"/>\n                    <converters:PresenceTextConverter x:Key=\"PresenceTextConverter\"/>\n                    <converters:HideOnNullConverter x:Key=\"HideOnNullConverter\"/>\n                    <converters:BoolOpacityConverter x:Key=\"BoolOpacityConverter\"/>\n                    <converters:BoolVisibilityConverter x:Key=\"BoolVisibilityConverter\"/>\n                    <converters:InverseBoolVisibilityConverter x:Key=\"InverseBoolVisibilityConverter\"/>\n                    <converters:TruncateConverter x:Key=\"TruncateConverter\"/>\n                    <converters:BoolConverter x:Key=\"BoolConverter\"/>\n                    <converters:ThumbnailImageConverter x:Key=\"ThumbnailImageConverter\"/>\n                    <converters:FileSizeConverter x:Key=\"FileSizeConverter\"/>\n                    <converters:TitleCaseConverter x:Key=\"TitleCaseConverter\"/>\n                    <converters:UriConverter x:Key=\"UriConverter\"/>\n\n                    <commands:EditChannelCommand x:Key=\"EditChannelCommand\"/>\n                    <commands:SettingsCommand x:Key=\"SettingsCommand\" />\n\n                    <x:Double x:Key=\"ControlContentThemeFontSize\">14</x:Double>\n                    <x:Double x:Key=\"ContentControlFontSize\">14</x:Double>\n\n                    <FontFamily x:Key=\"FluentSystemIcons\">/Assets/FluentSystemIcons-Regular.ttf#FluentSystemIcons-Regular</FontFamily>\n                    <FontFamily x:Key=\"SymbolThemeFontFamily\">/Assets/SegoeIcons.ttf#Segoe Fluent Icons</FontFamily>\n                    <FontFamily x:Key=\"MonospaceFontFamily\">/Assets/FiraCode-Regular.ttf#Fira Code</FontFamily>\n                    <StaticResource x:Key=\"SegoeMDL2Assets\" ResourceKey=\"SymbolThemeFontFamily\"/>\n                </ResourceDictionary>\n            </themes:ThemeResources.MergedDictionaries>\n        </themes:ThemeResources>       \n    </Application.Resources>\n</Application>"
  },
  {
    "path": "Unicord.Universal/App.xaml.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Runtime.InteropServices.WindowsRuntime;\r\nusing System.Threading.Tasks;\r\nusing System.Web;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing Microsoft.AppCenter;\r\nusing Microsoft.AppCenter.Analytics;\r\n#if XBOX_GAME_BAR\r\nusing Microsoft.Gaming.XboxGameBar;\r\nusing Unicord.Universal.Pages.GameBar;\r\n#endif\r\nusing Microsoft.Toolkit.Uwp.Helpers;\r\nusing Microsoft.Toolkit.Uwp.UI;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Integration;\r\nusing Unicord.Universal.Models;\r\nusing Unicord.Universal.Pages;\r\nusing Unicord.Universal.Services;\r\nusing Unicord.Universal.Utilities;\r\nusing WamWooWam.Core;\r\nusing Windows.ApplicationModel;\r\nusing Windows.ApplicationModel.Activation;\r\nusing Windows.ApplicationModel.Resources;\r\nusing Windows.Media.Transcoding;\r\nusing Windows.Security.Credentials;\r\nusing Windows.Storage;\r\nusing Windows.UI.Notifications;\r\nusing Windows.UI.Popups;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Navigation;\r\nusing static Unicord.Constants;\r\nusing UnhandledExceptionEventArgs = Windows.UI.Xaml.UnhandledExceptionEventArgs;\r\n\r\nnamespace Unicord.Universal\r\n{\r\n    sealed partial class App : Application\r\n    {\r\n#if XBOX_GAME_BAR\r\n        private static XboxGameBarWidget _chatListWidget;\r\n        private static XboxGameBarWidget _friendsListWidget;\r\n#endif\r\n        internal static ApplicationDataStorageHelper LocalSettings { get; }\r\n            = ApplicationDataStorageHelper.GetCurrent();\r\n        internal static ApplicationDataStorageHelper RoamingSettings { get; }\r\n            = ApplicationDataStorageHelper.GetCurrent();\r\n\r\n        public App()\r\n        {\r\n            InitializeComponent();\r\n            MigratePreV2Settings();\r\n\r\n            var theme = (ElementTheme)LocalSettings.Read(REQUESTED_COLOUR_SCHEME, (int)ElementTheme.Default);\r\n            switch (theme)\r\n            {\r\n                case ElementTheme.Light:\r\n                    RequestedTheme = ApplicationTheme.Light;\r\n                    break;\r\n                case ElementTheme.Dark:\r\n                    RequestedTheme = ApplicationTheme.Dark;\r\n                    break;\r\n            }\r\n\r\n            Suspending += OnSuspending;\r\n            Resuming += OnResuming;\r\n            UnhandledException += OnUnhandledException;\r\n\r\n            Debug.WriteLine(\"Welcome to Unicord!\");\r\n        }\r\n\r\n        private static void MigratePreV2Settings()\r\n        {\r\n            foreach (var item in ApplicationData.Current.RoamingSettings.Values)\r\n                ApplicationData.Current.LocalSettings.Values[item.Key] = item.Value;\r\n\r\n            if (LocalSettings.TryRead<string>(AUTO_TRANSCODE_MEDIA_OLD, out var autoTranscodeMedia))\r\n            {\r\n                if (Enum.TryParse<MediaTranscodeOptions>(autoTranscodeMedia, out var result))\r\n                    LocalSettings.Save(AUTO_TRANSCODE_MEDIA, (int)result);\r\n\r\n                LocalSettings.TryDelete(AUTO_TRANSCODE_MEDIA_OLD);\r\n            }\r\n\r\n            if (LocalSettings.TryRead<string>(VIDEO_PROCESSING_OLD, out var videoProcessingOptions))\r\n            {\r\n                if (Enum.TryParse<MediaVideoProcessingAlgorithm>(videoProcessingOptions, out var result))\r\n                    LocalSettings.Save(VIDEO_PROCESSING, (int)result);\r\n\r\n                LocalSettings.TryDelete(VIDEO_PROCESSING_OLD);\r\n            }\r\n\r\n            if (LocalSettings.TryRead<string>(TIMESTAMP_STYLE_OLD, out var timestampStyle))\r\n            {\r\n                if (Enum.TryParse<TimestampStyle>(timestampStyle, out var result))\r\n                    LocalSettings.Save(TIMESTAMP_STYLE, (int)result);\r\n\r\n                LocalSettings.TryDelete(TIMESTAMP_STYLE_OLD);\r\n            }\r\n\r\n            if (LocalSettings.TryRead<string>(REQUESTED_COLOUR_SCHEME_OLD, out var requestedScheme))\r\n            {\r\n                if (Enum.TryParse<ElementTheme>(requestedScheme, out var result))\r\n                    LocalSettings.Save(REQUESTED_COLOUR_SCHEME, (int)result);\r\n\r\n                LocalSettings.TryDelete(REQUESTED_COLOUR_SCHEME_OLD);\r\n            }\r\n\r\n            try\r\n            {\r\n                var passwordVault = new PasswordVault();\r\n                foreach (var c in passwordVault.FindAllByResource(TOKEN_IDENTIFIER_OLD))\r\n                {\r\n                    c.RetrievePassword();\r\n                    passwordVault.Add(new PasswordCredential(TOKEN_IDENTIFIER, c.UserName, c.Password));\r\n\r\n                    passwordVault.Remove(c);\r\n                }\r\n            }\r\n            catch { }\r\n        }\r\n\r\n        private void OnUnhandledException(object sender, UnhandledExceptionEventArgs e)\r\n        {\r\n            Logger.LogError(e.Exception);\r\n            Logger.Log(e.Message);\r\n            e.Handled = true;\r\n        }\r\n\r\n        protected override async void OnActivated(IActivatedEventArgs e)\r\n        {\r\n            switch (e)\r\n            {\r\n                case ContactPanelActivatedEventArgs cont:\r\n                    await OnContactPanelActivated(cont);\r\n                    return;\r\n                case ToastNotificationActivatedEventArgs toast:\r\n                    OnLaunched(false, toast.Argument);\r\n                    return;\r\n                case ProtocolActivatedEventArgs protocol:\r\n                    OnProtocolActivatedAsync(protocol);\r\n                    return;\r\n#if XBOX_GAME_BAR\r\n                case XboxGameBarWidgetActivatedEventArgs xbox:\r\n                    OnXboxGameBarActivated(xbox);\r\n                    return;\r\n#endif\r\n                default:\r\n                    Debug.WriteLine(e.Kind);\r\n                    break;\r\n            }\r\n        }\r\n\r\n        protected override async void OnBackgroundActivated(BackgroundActivatedEventArgs args)\r\n        {\r\n            var deferral = args.TaskInstance.GetDeferral();\r\n\r\n            switch (args.TaskInstance.Task.Name)\r\n            {\r\n                case TOAST_BACKGROUND_TASK_NAME:\r\n                    if (args.TaskInstance.TriggerDetails is not ToastNotificationActionTriggerDetail details || !DiscordManager.TryGetToken(out var token))\r\n                        break;\r\n\r\n                    var arguments = ParseArgs(details.Argument);\r\n                    var userInput = details.UserInput;\r\n\r\n                    if (!arguments.TryGetValue(\"channelId\", out var cId) || !ulong.TryParse(cId, out var channelId))\r\n                        break;\r\n\r\n                    if (!userInput.TryGetValue(\"tbReply\", out var t) || t is not string text)\r\n                        break;\r\n\r\n                    var client = new DiscordRestClient(new DiscordConfiguration() { Token = token, TokenType = TokenType.User });\r\n                    await client.CreateMessageAsync(channelId, new DiscordMessageBuilder().WithContent(text));\r\n                    break;\r\n            }\r\n\r\n            deferral.Complete();\r\n        }\r\n        private void OnProtocolActivatedAsync(ProtocolActivatedEventArgs protocol)\r\n        {\r\n            if (protocol.Uri.IsAbsoluteUri)\r\n                Analytics.TrackEvent(\"Unicord_LaunchForProtocol\", new Dictionary<string, string>() { [\"protocol\"] = protocol.Uri.GetLeftPart(UriPartial.Authority) });\r\n\r\n            if (protocol.Uri.Scheme == \"ms-ipmessaging\")\r\n            {\r\n                var queryString = HttpUtility.ParseQueryString(protocol.Uri.Query);\r\n                var ids = queryString.GetValues(\"ContactRemoteIds\").FirstOrDefault();\r\n                if (ids != null)\r\n                {\r\n                    var id = ulong.Parse(ids.Split(',')[0].Split('_')[1]);\r\n                    if (!(Window.Current.Content is Frame rootFrame))\r\n                    {\r\n                        rootFrame = new Frame();\r\n                        Window.Current.Content = rootFrame;\r\n                    }\r\n\r\n                    rootFrame.Navigate(typeof(MainPage), new MainPageArgs() { UserId = id, IsUriActivation = true });\r\n                    Window.Current.Activate();\r\n                    return;\r\n                }\r\n            }\r\n\r\n            if (protocol.Uri.AbsolutePath.Trim('/').StartsWith(\"channels\"))\r\n            {\r\n                var path = protocol.Uri.AbsolutePath.Split('/').Skip(1).ToArray();\r\n                if (path.Length > 1 && ulong.TryParse(path[2], out var channel))\r\n                {\r\n                    if (!(Window.Current.Content is Frame rootFrame))\r\n                    {\r\n                        rootFrame = new Frame();\r\n                        Window.Current.Content = rootFrame;\r\n                    }\r\n\r\n                    rootFrame.Navigate(typeof(MainPage), new MainPageArgs() { ChannelId = channel, IsUriActivation = true });\r\n                    Window.Current.Activate();\r\n                    return;\r\n                }\r\n            }\r\n\r\n            OnLaunched(false, \"\");\r\n        }\r\n\r\n        private static async Task OnContactPanelActivated(ContactPanelActivatedEventArgs task)\r\n        {\r\n            Analytics.TrackEvent(\"Unicord_LaunchForMyPeople\");\r\n\r\n            if (!(Window.Current.Content is Frame rootFrame))\r\n            {\r\n                // Create a Frame to act as the navigation context and navigate to the first page\r\n                rootFrame = new Frame();\r\n\r\n                try\r\n                {\r\n                    var id = await ContactListManager.TryGetChannelIdAsync(task.Contact);\r\n                    if (id != 0)\r\n                    {\r\n                        rootFrame.Navigate(typeof(MainPage), new MainPageArgs() { UserId = id, FullFrame = true, IsUriActivation = false });\r\n                    }\r\n                }\r\n                catch\r\n                {\r\n                    Analytics.TrackEvent(\"Unicord_MyPeopleFailedToFindPerson\");\r\n                    var dialog = new MessageDialog(\"Something went wrong trying to find this person, sorry!\", \"Whoops!\");\r\n                    await dialog.ShowAsync();\r\n                }\r\n\r\n                // Place the frame in the current Window\r\n                Window.Current.Content = rootFrame;\r\n            }\r\n\r\n            Window.Current.Activate();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Invoked when the application is launched normally by the end user.  Other entry points\r\n        /// will be used such as when the application is launched to open a specific file.\r\n        /// </summary>\r\n        /// <param name=\"e\">Details about the launch request and process.</param>\r\n        protected override void OnLaunched(LaunchActivatedEventArgs e)\r\n        {\r\n            OnLaunched(e.PrelaunchActivated, e.Arguments, e.PreviousExecutionState);\r\n        }\r\n\r\n        private void OnLaunched(bool preLaunch, string arguments, ApplicationExecutionState previousState = ApplicationExecutionState.NotRunning)\r\n        {\r\n            var channelId = 0ul;\r\n            Exception themeLoadException = null;\r\n            var args = ParseArgs(arguments);\r\n\r\n            // Do not repeat app initialization when the Window already has content,\r\n            // just ensure that the window is active\r\n            if (!(Window.Current.Content is Frame rootFrame))\r\n            {\r\n                Analytics.TrackEvent(\"Unicord_Launch\");\r\n\r\n                // Create a Frame to act as the navigation context and navigate to the first page\r\n                rootFrame = new Frame();\r\n                rootFrame.NavigationFailed += OnNavigationFailed;\r\n\r\n                if (previousState == ApplicationExecutionState.Terminated)\r\n                    channelId = LocalSettings.Read(\"LastViewedChannel\", 0ul);\r\n\r\n                WindowingService.Current.SetMainWindow(rootFrame);\r\n                Window.Current.Content = rootFrame;\r\n            }\r\n\r\n            if (args.TryGetValue(\"channelId\", out var id) && ulong.TryParse(id, out var pId))\r\n            {\r\n                channelId = pId;\r\n            }\r\n\r\n            if (rootFrame.Content == null || channelId != 0)\r\n                rootFrame.Navigate(typeof(MainPage), new MainPageArgs() { ChannelId = channelId, ThemeLoadException = themeLoadException });\r\n\r\n            // Ensure the current window is active\r\n            Window.Current.Activate();\r\n        }\r\n\r\n        private static Dictionary<string, string> ParseArgs(string arguments)\r\n        {\r\n            var rawArgs = Strings.SplitCommandLine(arguments);\r\n            var args = new Dictionary<string, string>();\r\n            foreach (var str in rawArgs)\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(str) && str.Contains('-', '='))\r\n                {\r\n                    var arg = str.TrimStart('-');\r\n                    args.Add(arg.Substring(0, arg.IndexOf('=')), arg.Substring(arg.IndexOf('=') + 1));\r\n                }\r\n            }\r\n\r\n            return args;\r\n        }\r\n\r\n        protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)\r\n        {\r\n            if (Window.Current.Content is not Frame rootFrame)\r\n            {\r\n                Analytics.TrackEvent(\"Unicord_LaunchForShare\");\r\n\r\n                // Create a Frame to act as the navigation context and navigate to the first page\r\n                rootFrame = new Frame();\r\n\r\n                rootFrame.Navigate(typeof(MainPage), args.ShareOperation);\r\n\r\n                // Place the frame in the current Window\r\n                Window.Current.Content = rootFrame;\r\n            }\r\n\r\n            Window.Current.Activate();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Invoked when Navigation to a certain page fails\r\n        /// </summary>\r\n        /// <param name=\"sender\">The Frame which failed navigation</param>\r\n        /// <param name=\"e\">Details about the navigation failure</param>\r\n        void OnNavigationFailed(object sender, NavigationFailedEventArgs e)\r\n        {\r\n            throw new Exception(\"Failed to load Page \" + e.SourcePageType.FullName);\r\n        }\r\n\r\n        private DiscordClient temporaryCache;\r\n\r\n        /// <summary>\r\n        /// Invoked when application execution is being suspended.  Application state is saved\r\n        /// without knowing whether the application will be terminated or resumed with the contents\r\n        /// of memory still intact.\r\n        /// </summary>\r\n        /// <param name=\"sender\">The source of the suspend request.</param>\r\n        /// <param name=\"e\">Details about the suspend request.</param>\r\n        private async void OnSuspending(object sender, SuspendingEventArgs e)\r\n        {\r\n            var deferral = e.SuspendingOperation.GetDeferral();\r\n\r\n            if (DiscordManager.Discord != null)\r\n            {\r\n                temporaryCache = DiscordManager.Discord;\r\n                await DiscordManager.Discord.DisconnectAsync(4002);\r\n            }\r\n\r\n            await Logger.OnSuspendingAsync();\r\n            deferral.Complete();\r\n        }\r\n\r\n        private async void OnResuming(object sender, object e)\r\n        {\r\n            if (temporaryCache != null)\r\n            {\r\n                await temporaryCache.ConnectAsync();\r\n            }\r\n        }\r\n\r\n        internal static async Task LogoutAsync()\r\n        {\r\n            await WebView.ClearTemporaryWebDataAsync();\r\n            await WindowingService.Current.CloseAllWindowsAsync();\r\n            await ImageCache.Instance.ClearAsync();\r\n            await DiscordManager.LogoutAsync();\r\n\r\n            try\r\n            {\r\n                var passwordVault = new PasswordVault();\r\n                foreach (var c in passwordVault.FindAllByResource(TOKEN_IDENTIFIER))\r\n                {\r\n                    passwordVault.Remove(c);\r\n                }\r\n            }\r\n            catch { }\r\n\r\n            // ditto above about the background process\r\n            LocalSettings.TryDelete(\"Token\");\r\n\r\n            DiscordNavigationService.Reset();\r\n            FullscreenService.Reset();\r\n            OverlayService.Reset();\r\n            SettingsService.Reset();\r\n            SwipeOpenService.Reset();\r\n\r\n            var frame = (Window.Current.Content as Frame);\r\n            frame.Navigate(typeof(Page));\r\n            frame.BackStack.Clear();\r\n            frame.ForwardStack.Clear();\r\n\r\n            frame = new Frame();\r\n            frame.Navigate(typeof(MainPage));\r\n            Window.Current.Content = frame;\r\n        }\r\n\r\n        internal static async Task LoginError(Exception ex)\r\n        {\r\n            if (ex != null)\r\n            {\r\n                var loader = ResourceLoader.GetForViewIndependentUse();\r\n                await UIUtilities.ShowErrorDialogAsync(loader.GetString(\"LoginFailedDialogTitle\"), loader.GetString(\"LoginFailedDialogMessage\"));\r\n                RoamingSettings.Save(VERIFY_LOGIN, false);\r\n            }\r\n\r\n            await DiscordManager.LogoutAsync();\r\n\r\n            var mainPage = Window.Current.Content.FindChild<MainPage>();\r\n\r\n            if (mainPage.FindChild<LoginPage>() == null)\r\n            {\r\n                mainPage.Nagivate(typeof(LoginPage));\r\n            }\r\n\r\n            mainPage.HideConnectingOverlay();\r\n        }\r\n\r\n        protected override void OnWindowCreated(WindowCreatedEventArgs args)\r\n        {\r\n            base.OnWindowCreated(args);\r\n\r\n            if (RoamingSettings.Read(ENABLE_ANALYTICS, true) && APPCENTER_IDENTIFIER != null)\r\n            {\r\n                AppCenter.Start(APPCENTER_IDENTIFIER, typeof(Analytics));\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Assets/Captcha/hCaptcha.html",
    "content": "﻿<!DOCTYPE html>\n<html>\n<head>\n    <title>Beep Boop! Boop Beep?</title>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <script src=\"https://js.hcaptcha.com/1/api.js?host=discord.com&onload=onLoad&render=explicit\" async defer></script>\n    <style>\n        * {\n            padding: 0;\n            margin: 0;\n        }\n\n        body {\n            display: table;\n            width: 100vw;\n            height: 100vh;\n            text-align: center;\n            background: #F3F3F3;\n        }\n\n        #captcha {\n            margin-top: 5px;\n            display: table-cell;\n            vertical-align: middle;\n        }\n\n        /* overwrite hCaptcha iframe overlay which adds a #FFF background with opacity 0.05 */\n        div > div:nth-child(2) {\n            opacity: 0 !important;\n            width: 0 !important;\n            height: 0 !important;\n        }\n\n        @media (prefers-color-scheme: dark) {\n            body {\n                background: #2b2b2b;\n            }\n        }\n    </style>\n</head>\n<body>\n    <script>\n        async function onLoad() {\n            const gotToken = (token) => {\n                window.chrome.webview.postMessage({\n                    op: \"captcha_complete\",\n                    token\n                })\n            }\n\n            const params = new URLSearchParams(window.location.search);\n            const sitekey = params.get(\"siteKey\");\n            const theme = params.get(\"theme\");\n\n            const widget = hcaptcha.render('captcha', {\n                theme,\n                sitekey,\n                callback: gotToken,\n            })\n            const response = hcaptcha.execute(widget, { async: true });\n        }\n    </script>\n    <div id=\"captcha\" class=\"h-captcha\"></div>\n</body>\n</html>\n"
  },
  {
    "path": "Unicord.Universal/Assets/emoji.json",
    "content": "[{\"codes\":\"1F600\",\"char\":\"😀\",\"name\":\"grinning face\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F603\",\"char\":\"😃\",\"name\":\"grinning face with big eyes\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F604\",\"char\":\"😄\",\"name\":\"grinning face with smiling eyes\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F601\",\"char\":\"😁\",\"name\":\"beaming face with smiling eyes\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F606\",\"char\":\"😆\",\"name\":\"grinning squinting face\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F605\",\"char\":\"😅\",\"name\":\"grinning face with sweat\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F923\",\"char\":\"🤣\",\"name\":\"rolling on the floor laughing\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F602\",\"char\":\"😂\",\"name\":\"face with tears of joy\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F642\",\"char\":\"🙂\",\"name\":\"slightly smiling face\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F643\",\"char\":\"🙃\",\"name\":\"upside-down face\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F609\",\"char\":\"😉\",\"name\":\"winking face\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F60A\",\"char\":\"😊\",\"name\":\"smiling face with smiling eyes\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F607\",\"char\":\"😇\",\"name\":\"smiling face with halo\",\"category\":\"Smileys & Emotion (face-smiling)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-smiling\"},{\"codes\":\"1F970\",\"char\":\"🥰\",\"name\":\"smiling face with hearts\",\"category\":\"Smileys & Emotion (face-affection)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-affection\"},{\"codes\":\"1F60D\",\"char\":\"😍\",\"name\":\"smiling face with heart-eyes\",\"category\":\"Smileys & Emotion (face-affection)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-affection\"},{\"codes\":\"1F929\",\"char\":\"🤩\",\"name\":\"star-struck\",\"category\":\"Smileys & Emotion (face-affection)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-affection\"},{\"codes\":\"1F618\",\"char\":\"😘\",\"name\":\"face blowing a kiss\",\"category\":\"Smileys & Emotion (face-affection)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-affection\"},{\"codes\":\"1F617\",\"char\":\"😗\",\"name\":\"kissing face\",\"category\":\"Smileys & Emotion (face-affection)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-affection\"},{\"codes\":\"263A FE0F\",\"char\":\"☺️\",\"name\":\"smiling face\",\"category\":\"Smileys & Emotion (face-affection)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-affection\"},{\"codes\":\"263A\",\"char\":\"☺\",\"name\":\"smiling face\",\"category\":\"Smileys & Emotion (face-affection)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-affection\"},{\"codes\":\"1F61A\",\"char\":\"😚\",\"name\":\"kissing face with closed eyes\",\"category\":\"Smileys & Emotion (face-affection)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-affection\"},{\"codes\":\"1F619\",\"char\":\"😙\",\"name\":\"kissing face with smiling eyes\",\"category\":\"Smileys & Emotion (face-affection)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-affection\"},{\"codes\":\"1F972\",\"char\":\"🥲\",\"name\":\"smiling face with tear\",\"category\":\"Smileys & Emotion (face-affection)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-affection\"},{\"codes\":\"1F60B\",\"char\":\"😋\",\"name\":\"face savoring food\",\"category\":\"Smileys & Emotion (face-tongue)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-tongue\"},{\"codes\":\"1F61B\",\"char\":\"😛\",\"name\":\"face with tongue\",\"category\":\"Smileys & Emotion (face-tongue)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-tongue\"},{\"codes\":\"1F61C\",\"char\":\"😜\",\"name\":\"winking face with tongue\",\"category\":\"Smileys & Emotion (face-tongue)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-tongue\"},{\"codes\":\"1F92A\",\"char\":\"🤪\",\"name\":\"zany face\",\"category\":\"Smileys & Emotion (face-tongue)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-tongue\"},{\"codes\":\"1F61D\",\"char\":\"😝\",\"name\":\"squinting face with tongue\",\"category\":\"Smileys & Emotion (face-tongue)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-tongue\"},{\"codes\":\"1F911\",\"char\":\"🤑\",\"name\":\"money-mouth face\",\"category\":\"Smileys & Emotion (face-tongue)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-tongue\"},{\"codes\":\"1F917\",\"char\":\"🤗\",\"name\":\"hugging face\",\"category\":\"Smileys & Emotion (face-hand)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-hand\"},{\"codes\":\"1F92D\",\"char\":\"🤭\",\"name\":\"face with hand over mouth\",\"category\":\"Smileys & Emotion (face-hand)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-hand\"},{\"codes\":\"1F92B\",\"char\":\"🤫\",\"name\":\"shushing face\",\"category\":\"Smileys & Emotion (face-hand)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-hand\"},{\"codes\":\"1F914\",\"char\":\"🤔\",\"name\":\"thinking face\",\"category\":\"Smileys & Emotion (face-hand)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-hand\"},{\"codes\":\"1F910\",\"char\":\"🤐\",\"name\":\"zipper-mouth face\",\"category\":\"Smileys & Emotion (face-neutral-skeptical)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-neutral-skeptical\"},{\"codes\":\"1F928\",\"char\":\"🤨\",\"name\":\"face with raised eyebrow\",\"category\":\"Smileys & Emotion (face-neutral-skeptical)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-neutral-skeptical\"},{\"codes\":\"1F610\",\"char\":\"😐\",\"name\":\"neutral face\",\"category\":\"Smileys & Emotion (face-neutral-skeptical)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-neutral-skeptical\"},{\"codes\":\"1F611\",\"char\":\"😑\",\"name\":\"expressionless face\",\"category\":\"Smileys & Emotion (face-neutral-skeptical)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-neutral-skeptical\"},{\"codes\":\"1F636\",\"char\":\"😶\",\"name\":\"face without mouth\",\"category\":\"Smileys & Emotion (face-neutral-skeptical)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-neutral-skeptical\"},{\"codes\":\"1F60F\",\"char\":\"😏\",\"name\":\"smirking face\",\"category\":\"Smileys & Emotion (face-neutral-skeptical)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-neutral-skeptical\"},{\"codes\":\"1F612\",\"char\":\"😒\",\"name\":\"unamused face\",\"category\":\"Smileys & Emotion (face-neutral-skeptical)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-neutral-skeptical\"},{\"codes\":\"1F644\",\"char\":\"🙄\",\"name\":\"face with rolling eyes\",\"category\":\"Smileys & Emotion (face-neutral-skeptical)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-neutral-skeptical\"},{\"codes\":\"1F62C\",\"char\":\"😬\",\"name\":\"grimacing face\",\"category\":\"Smileys & Emotion (face-neutral-skeptical)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-neutral-skeptical\"},{\"codes\":\"1F925\",\"char\":\"🤥\",\"name\":\"lying face\",\"category\":\"Smileys & Emotion (face-neutral-skeptical)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-neutral-skeptical\"},{\"codes\":\"1F60C\",\"char\":\"😌\",\"name\":\"relieved face\",\"category\":\"Smileys & Emotion (face-sleepy)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-sleepy\"},{\"codes\":\"1F614\",\"char\":\"😔\",\"name\":\"pensive face\",\"category\":\"Smileys & Emotion (face-sleepy)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-sleepy\"},{\"codes\":\"1F62A\",\"char\":\"😪\",\"name\":\"sleepy face\",\"category\":\"Smileys & Emotion (face-sleepy)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-sleepy\"},{\"codes\":\"1F924\",\"char\":\"🤤\",\"name\":\"drooling face\",\"category\":\"Smileys & Emotion (face-sleepy)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-sleepy\"},{\"codes\":\"1F634\",\"char\":\"😴\",\"name\":\"sleeping face\",\"category\":\"Smileys & Emotion (face-sleepy)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-sleepy\"},{\"codes\":\"1F637\",\"char\":\"😷\",\"name\":\"face with medical mask\",\"category\":\"Smileys & Emotion (face-unwell)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-unwell\"},{\"codes\":\"1F912\",\"char\":\"🤒\",\"name\":\"face with thermometer\",\"category\":\"Smileys & Emotion (face-unwell)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-unwell\"},{\"codes\":\"1F915\",\"char\":\"🤕\",\"name\":\"face with head-bandage\",\"category\":\"Smileys & Emotion (face-unwell)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-unwell\"},{\"codes\":\"1F922\",\"char\":\"🤢\",\"name\":\"nauseated face\",\"category\":\"Smileys & Emotion (face-unwell)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-unwell\"},{\"codes\":\"1F92E\",\"char\":\"🤮\",\"name\":\"face vomiting\",\"category\":\"Smileys & Emotion (face-unwell)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-unwell\"},{\"codes\":\"1F927\",\"char\":\"🤧\",\"name\":\"sneezing face\",\"category\":\"Smileys & Emotion (face-unwell)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-unwell\"},{\"codes\":\"1F975\",\"char\":\"🥵\",\"name\":\"hot face\",\"category\":\"Smileys & Emotion (face-unwell)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-unwell\"},{\"codes\":\"1F976\",\"char\":\"🥶\",\"name\":\"cold face\",\"category\":\"Smileys & Emotion (face-unwell)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-unwell\"},{\"codes\":\"1F974\",\"char\":\"🥴\",\"name\":\"woozy face\",\"category\":\"Smileys & Emotion (face-unwell)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-unwell\"},{\"codes\":\"1F635\",\"char\":\"😵\",\"name\":\"dizzy face\",\"category\":\"Smileys & Emotion (face-unwell)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-unwell\"},{\"codes\":\"1F92F\",\"char\":\"🤯\",\"name\":\"exploding head\",\"category\":\"Smileys & Emotion (face-unwell)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-unwell\"},{\"codes\":\"1F920\",\"char\":\"🤠\",\"name\":\"cowboy hat face\",\"category\":\"Smileys & Emotion (face-hat)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-hat\"},{\"codes\":\"1F973\",\"char\":\"🥳\",\"name\":\"partying face\",\"category\":\"Smileys & Emotion (face-hat)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-hat\"},{\"codes\":\"1F978\",\"char\":\"🥸\",\"name\":\"disguised face\",\"category\":\"Smileys & Emotion (face-hat)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-hat\"},{\"codes\":\"1F60E\",\"char\":\"😎\",\"name\":\"smiling face with sunglasses\",\"category\":\"Smileys & Emotion (face-glasses)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-glasses\"},{\"codes\":\"1F913\",\"char\":\"🤓\",\"name\":\"nerd face\",\"category\":\"Smileys & Emotion (face-glasses)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-glasses\"},{\"codes\":\"1F9D0\",\"char\":\"🧐\",\"name\":\"face with monocle\",\"category\":\"Smileys & Emotion (face-glasses)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-glasses\"},{\"codes\":\"1F615\",\"char\":\"😕\",\"name\":\"confused face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F61F\",\"char\":\"😟\",\"name\":\"worried face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F641\",\"char\":\"🙁\",\"name\":\"slightly frowning face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"2639 FE0F\",\"char\":\"☹️\",\"name\":\"frowning face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"2639\",\"char\":\"☹\",\"name\":\"frowning face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F62E\",\"char\":\"😮\",\"name\":\"face with open mouth\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F62F\",\"char\":\"😯\",\"name\":\"hushed face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F632\",\"char\":\"😲\",\"name\":\"astonished face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F633\",\"char\":\"😳\",\"name\":\"flushed face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F97A\",\"char\":\"🥺\",\"name\":\"pleading face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F626\",\"char\":\"😦\",\"name\":\"frowning face with open mouth\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F627\",\"char\":\"😧\",\"name\":\"anguished face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F628\",\"char\":\"😨\",\"name\":\"fearful face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F630\",\"char\":\"😰\",\"name\":\"anxious face with sweat\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F625\",\"char\":\"😥\",\"name\":\"sad but relieved face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F622\",\"char\":\"😢\",\"name\":\"crying face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F62D\",\"char\":\"😭\",\"name\":\"loudly crying face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F631\",\"char\":\"😱\",\"name\":\"face screaming in fear\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F616\",\"char\":\"😖\",\"name\":\"confounded face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F623\",\"char\":\"😣\",\"name\":\"persevering face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F61E\",\"char\":\"😞\",\"name\":\"disappointed face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F613\",\"char\":\"😓\",\"name\":\"downcast face with sweat\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F629\",\"char\":\"😩\",\"name\":\"weary face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F62B\",\"char\":\"😫\",\"name\":\"tired face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F971\",\"char\":\"🥱\",\"name\":\"yawning face\",\"category\":\"Smileys & Emotion (face-concerned)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-concerned\"},{\"codes\":\"1F624\",\"char\":\"😤\",\"name\":\"face with steam from nose\",\"category\":\"Smileys & Emotion (face-negative)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-negative\"},{\"codes\":\"1F621\",\"char\":\"😡\",\"name\":\"pouting face\",\"category\":\"Smileys & Emotion (face-negative)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-negative\"},{\"codes\":\"1F620\",\"char\":\"😠\",\"name\":\"angry face\",\"category\":\"Smileys & Emotion (face-negative)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-negative\"},{\"codes\":\"1F92C\",\"char\":\"🤬\",\"name\":\"face with symbols on mouth\",\"category\":\"Smileys & Emotion (face-negative)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-negative\"},{\"codes\":\"1F608\",\"char\":\"😈\",\"name\":\"smiling face with horns\",\"category\":\"Smileys & Emotion (face-negative)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-negative\"},{\"codes\":\"1F47F\",\"char\":\"👿\",\"name\":\"angry face with horns\",\"category\":\"Smileys & Emotion (face-negative)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-negative\"},{\"codes\":\"1F480\",\"char\":\"💀\",\"name\":\"skull\",\"category\":\"Smileys & Emotion (face-negative)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-negative\"},{\"codes\":\"2620 FE0F\",\"char\":\"☠️\",\"name\":\"skull and crossbones\",\"category\":\"Smileys & Emotion (face-negative)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-negative\"},{\"codes\":\"2620\",\"char\":\"☠\",\"name\":\"skull and crossbones\",\"category\":\"Smileys & Emotion (face-negative)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-negative\"},{\"codes\":\"1F4A9\",\"char\":\"💩\",\"name\":\"pile of poo\",\"category\":\"Smileys & Emotion (face-costume)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-costume\"},{\"codes\":\"1F921\",\"char\":\"🤡\",\"name\":\"clown face\",\"category\":\"Smileys & Emotion (face-costume)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-costume\"},{\"codes\":\"1F479\",\"char\":\"👹\",\"name\":\"ogre\",\"category\":\"Smileys & Emotion (face-costume)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-costume\"},{\"codes\":\"1F47A\",\"char\":\"👺\",\"name\":\"goblin\",\"category\":\"Smileys & Emotion (face-costume)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-costume\"},{\"codes\":\"1F47B\",\"char\":\"👻\",\"name\":\"ghost\",\"category\":\"Smileys & Emotion (face-costume)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-costume\"},{\"codes\":\"1F47D\",\"char\":\"👽\",\"name\":\"alien\",\"category\":\"Smileys & Emotion (face-costume)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-costume\"},{\"codes\":\"1F47E\",\"char\":\"👾\",\"name\":\"alien monster\",\"category\":\"Smileys & Emotion (face-costume)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-costume\"},{\"codes\":\"1F916\",\"char\":\"🤖\",\"name\":\"robot\",\"category\":\"Smileys & Emotion (face-costume)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"face-costume\"},{\"codes\":\"1F63A\",\"char\":\"😺\",\"name\":\"grinning cat\",\"category\":\"Smileys & Emotion (cat-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"cat-face\"},{\"codes\":\"1F638\",\"char\":\"😸\",\"name\":\"grinning cat with smiling eyes\",\"category\":\"Smileys & Emotion (cat-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"cat-face\"},{\"codes\":\"1F639\",\"char\":\"😹\",\"name\":\"cat with tears of joy\",\"category\":\"Smileys & Emotion (cat-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"cat-face\"},{\"codes\":\"1F63B\",\"char\":\"😻\",\"name\":\"smiling cat with heart-eyes\",\"category\":\"Smileys & Emotion (cat-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"cat-face\"},{\"codes\":\"1F63C\",\"char\":\"😼\",\"name\":\"cat with wry smile\",\"category\":\"Smileys & Emotion (cat-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"cat-face\"},{\"codes\":\"1F63D\",\"char\":\"😽\",\"name\":\"kissing cat\",\"category\":\"Smileys & Emotion (cat-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"cat-face\"},{\"codes\":\"1F640\",\"char\":\"🙀\",\"name\":\"weary cat\",\"category\":\"Smileys & Emotion (cat-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"cat-face\"},{\"codes\":\"1F63F\",\"char\":\"😿\",\"name\":\"crying cat\",\"category\":\"Smileys & Emotion (cat-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"cat-face\"},{\"codes\":\"1F63E\",\"char\":\"😾\",\"name\":\"pouting cat\",\"category\":\"Smileys & Emotion (cat-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"cat-face\"},{\"codes\":\"1F648\",\"char\":\"🙈\",\"name\":\"see-no-evil monkey\",\"category\":\"Smileys & Emotion (monkey-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"monkey-face\"},{\"codes\":\"1F649\",\"char\":\"🙉\",\"name\":\"hear-no-evil monkey\",\"category\":\"Smileys & Emotion (monkey-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"monkey-face\"},{\"codes\":\"1F64A\",\"char\":\"🙊\",\"name\":\"speak-no-evil monkey\",\"category\":\"Smileys & Emotion (monkey-face)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"monkey-face\"},{\"codes\":\"1F48B\",\"char\":\"💋\",\"name\":\"kiss mark\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F48C\",\"char\":\"💌\",\"name\":\"love letter\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F498\",\"char\":\"💘\",\"name\":\"heart with arrow\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F49D\",\"char\":\"💝\",\"name\":\"heart with ribbon\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F496\",\"char\":\"💖\",\"name\":\"sparkling heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F497\",\"char\":\"💗\",\"name\":\"growing heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F493\",\"char\":\"💓\",\"name\":\"beating heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F49E\",\"char\":\"💞\",\"name\":\"revolving hearts\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F495\",\"char\":\"💕\",\"name\":\"two hearts\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F49F\",\"char\":\"💟\",\"name\":\"heart decoration\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"2763 FE0F\",\"char\":\"❣️\",\"name\":\"heart exclamation\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"2763\",\"char\":\"❣\",\"name\":\"heart exclamation\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F494\",\"char\":\"💔\",\"name\":\"broken heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"2764 FE0F\",\"char\":\"❤️\",\"name\":\"red heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"2764\",\"char\":\"❤\",\"name\":\"red heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F9E1\",\"char\":\"🧡\",\"name\":\"orange heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F49B\",\"char\":\"💛\",\"name\":\"yellow heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F49A\",\"char\":\"💚\",\"name\":\"green heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F499\",\"char\":\"💙\",\"name\":\"blue heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F49C\",\"char\":\"💜\",\"name\":\"purple heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F90E\",\"char\":\"🤎\",\"name\":\"brown heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F5A4\",\"char\":\"🖤\",\"name\":\"black heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F90D\",\"char\":\"🤍\",\"name\":\"white heart\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F4AF\",\"char\":\"💯\",\"name\":\"hundred points\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F4A2\",\"char\":\"💢\",\"name\":\"anger symbol\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F4A5\",\"char\":\"💥\",\"name\":\"collision\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F4AB\",\"char\":\"💫\",\"name\":\"dizzy\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F4A6\",\"char\":\"💦\",\"name\":\"sweat droplets\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F4A8\",\"char\":\"💨\",\"name\":\"dashing away\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F573 FE0F\",\"char\":\"🕳️\",\"name\":\"hole\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F573\",\"char\":\"🕳\",\"name\":\"hole\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F4A3\",\"char\":\"💣\",\"name\":\"bomb\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F4AC\",\"char\":\"💬\",\"name\":\"speech balloon\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F441 FE0F 200D 1F5E8 FE0F\",\"char\":\"👁️‍🗨️\",\"name\":\"eye in speech bubble\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F441 200D 1F5E8 FE0F\",\"char\":\"👁‍🗨️\",\"name\":\"eye in speech bubble\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F441 FE0F 200D 1F5E8\",\"char\":\"👁️‍🗨\",\"name\":\"eye in speech bubble\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F441 200D 1F5E8\",\"char\":\"👁‍🗨\",\"name\":\"eye in speech bubble\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F5E8 FE0F\",\"char\":\"🗨️\",\"name\":\"left speech bubble\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F5E8\",\"char\":\"🗨\",\"name\":\"left speech bubble\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F5EF FE0F\",\"char\":\"🗯️\",\"name\":\"right anger bubble\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F5EF\",\"char\":\"🗯\",\"name\":\"right anger bubble\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F4AD\",\"char\":\"💭\",\"name\":\"thought balloon\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F4A4\",\"char\":\"💤\",\"name\":\"zzz\",\"category\":\"Smileys & Emotion (emotion)\",\"group\":\"Smileys & Emotion\",\"subgroup\":\"emotion\"},{\"codes\":\"1F44B\",\"char\":\"👋\",\"name\":\"waving hand\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F44B 1F3FB\",\"char\":\"👋🏻\",\"name\":\"waving hand: light skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F44B 1F3FC\",\"char\":\"👋🏼\",\"name\":\"waving hand: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F44B 1F3FD\",\"char\":\"👋🏽\",\"name\":\"waving hand: medium skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F44B 1F3FE\",\"char\":\"👋🏾\",\"name\":\"waving hand: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F44B 1F3FF\",\"char\":\"👋🏿\",\"name\":\"waving hand: dark skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F91A\",\"char\":\"🤚\",\"name\":\"raised back of hand\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F91A 1F3FB\",\"char\":\"🤚🏻\",\"name\":\"raised back of hand: light skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F91A 1F3FC\",\"char\":\"🤚🏼\",\"name\":\"raised back of hand: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F91A 1F3FD\",\"char\":\"🤚🏽\",\"name\":\"raised back of hand: medium skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F91A 1F3FE\",\"char\":\"🤚🏾\",\"name\":\"raised back of hand: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F91A 1F3FF\",\"char\":\"🤚🏿\",\"name\":\"raised back of hand: dark skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F590 FE0F\",\"char\":\"🖐️\",\"name\":\"hand with fingers splayed\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F590\",\"char\":\"🖐\",\"name\":\"hand with fingers splayed\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F590 1F3FB\",\"char\":\"🖐🏻\",\"name\":\"hand with fingers splayed: light skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F590 1F3FC\",\"char\":\"🖐🏼\",\"name\":\"hand with fingers splayed: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F590 1F3FD\",\"char\":\"🖐🏽\",\"name\":\"hand with fingers splayed: medium skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F590 1F3FE\",\"char\":\"🖐🏾\",\"name\":\"hand with fingers splayed: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F590 1F3FF\",\"char\":\"🖐🏿\",\"name\":\"hand with fingers splayed: dark skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"270B\",\"char\":\"✋\",\"name\":\"raised hand\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"270B 1F3FB\",\"char\":\"✋🏻\",\"name\":\"raised hand: light skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"270B 1F3FC\",\"char\":\"✋🏼\",\"name\":\"raised hand: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"270B 1F3FD\",\"char\":\"✋🏽\",\"name\":\"raised hand: medium skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"270B 1F3FE\",\"char\":\"✋🏾\",\"name\":\"raised hand: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"270B 1F3FF\",\"char\":\"✋🏿\",\"name\":\"raised hand: dark skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F596\",\"char\":\"🖖\",\"name\":\"vulcan salute\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F596 1F3FB\",\"char\":\"🖖🏻\",\"name\":\"vulcan salute: light skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F596 1F3FC\",\"char\":\"🖖🏼\",\"name\":\"vulcan salute: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F596 1F3FD\",\"char\":\"🖖🏽\",\"name\":\"vulcan salute: medium skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F596 1F3FE\",\"char\":\"🖖🏾\",\"name\":\"vulcan salute: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F596 1F3FF\",\"char\":\"🖖🏿\",\"name\":\"vulcan salute: dark skin tone\",\"category\":\"People & Body (hand-fingers-open)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-open\"},{\"codes\":\"1F44C\",\"char\":\"👌\",\"name\":\"OK hand\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F44C 1F3FB\",\"char\":\"👌🏻\",\"name\":\"OK hand: light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F44C 1F3FC\",\"char\":\"👌🏼\",\"name\":\"OK hand: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F44C 1F3FD\",\"char\":\"👌🏽\",\"name\":\"OK hand: medium skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F44C 1F3FE\",\"char\":\"👌🏾\",\"name\":\"OK hand: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F44C 1F3FF\",\"char\":\"👌🏿\",\"name\":\"OK hand: dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90C\",\"char\":\"🤌\",\"name\":\"pinched fingers\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90C 1F3FB\",\"char\":\"🤌🏻\",\"name\":\"pinched fingers: light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90C 1F3FC\",\"char\":\"🤌🏼\",\"name\":\"pinched fingers: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90C 1F3FD\",\"char\":\"🤌🏽\",\"name\":\"pinched fingers: medium skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90C 1F3FE\",\"char\":\"🤌🏾\",\"name\":\"pinched fingers: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90C 1F3FF\",\"char\":\"🤌🏿\",\"name\":\"pinched fingers: dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90F\",\"char\":\"🤏\",\"name\":\"pinching hand\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90F 1F3FB\",\"char\":\"🤏🏻\",\"name\":\"pinching hand: light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90F 1F3FC\",\"char\":\"🤏🏼\",\"name\":\"pinching hand: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90F 1F3FD\",\"char\":\"🤏🏽\",\"name\":\"pinching hand: medium skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90F 1F3FE\",\"char\":\"🤏🏾\",\"name\":\"pinching hand: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F90F 1F3FF\",\"char\":\"🤏🏿\",\"name\":\"pinching hand: dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"270C FE0F\",\"char\":\"✌️\",\"name\":\"victory hand\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"270C\",\"char\":\"✌\",\"name\":\"victory hand\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"270C 1F3FB\",\"char\":\"✌🏻\",\"name\":\"victory hand: light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"270C 1F3FC\",\"char\":\"✌🏼\",\"name\":\"victory hand: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"270C 1F3FD\",\"char\":\"✌🏽\",\"name\":\"victory hand: medium skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"270C 1F3FE\",\"char\":\"✌🏾\",\"name\":\"victory hand: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"270C 1F3FF\",\"char\":\"✌🏿\",\"name\":\"victory hand: dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91E\",\"char\":\"🤞\",\"name\":\"crossed fingers\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91E 1F3FB\",\"char\":\"🤞🏻\",\"name\":\"crossed fingers: light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91E 1F3FC\",\"char\":\"🤞🏼\",\"name\":\"crossed fingers: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91E 1F3FD\",\"char\":\"🤞🏽\",\"name\":\"crossed fingers: medium skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91E 1F3FE\",\"char\":\"🤞🏾\",\"name\":\"crossed fingers: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91E 1F3FF\",\"char\":\"🤞🏿\",\"name\":\"crossed fingers: dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91F\",\"char\":\"🤟\",\"name\":\"love-you gesture\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91F 1F3FB\",\"char\":\"🤟🏻\",\"name\":\"love-you gesture: light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91F 1F3FC\",\"char\":\"🤟🏼\",\"name\":\"love-you gesture: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91F 1F3FD\",\"char\":\"🤟🏽\",\"name\":\"love-you gesture: medium skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91F 1F3FE\",\"char\":\"🤟🏾\",\"name\":\"love-you gesture: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F91F 1F3FF\",\"char\":\"🤟🏿\",\"name\":\"love-you gesture: dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F918\",\"char\":\"🤘\",\"name\":\"sign of the horns\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F918 1F3FB\",\"char\":\"🤘🏻\",\"name\":\"sign of the horns: light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F918 1F3FC\",\"char\":\"🤘🏼\",\"name\":\"sign of the horns: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F918 1F3FD\",\"char\":\"🤘🏽\",\"name\":\"sign of the horns: medium skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F918 1F3FE\",\"char\":\"🤘🏾\",\"name\":\"sign of the horns: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F918 1F3FF\",\"char\":\"🤘🏿\",\"name\":\"sign of the horns: dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F919\",\"char\":\"🤙\",\"name\":\"call me hand\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F919 1F3FB\",\"char\":\"🤙🏻\",\"name\":\"call me hand: light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F919 1F3FC\",\"char\":\"🤙🏼\",\"name\":\"call me hand: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F919 1F3FD\",\"char\":\"🤙🏽\",\"name\":\"call me hand: medium skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F919 1F3FE\",\"char\":\"🤙🏾\",\"name\":\"call me hand: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F919 1F3FF\",\"char\":\"🤙🏿\",\"name\":\"call me hand: dark skin tone\",\"category\":\"People & Body (hand-fingers-partial)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-partial\"},{\"codes\":\"1F448\",\"char\":\"👈\",\"name\":\"backhand index pointing left\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F448 1F3FB\",\"char\":\"👈🏻\",\"name\":\"backhand index pointing left: light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F448 1F3FC\",\"char\":\"👈🏼\",\"name\":\"backhand index pointing left: medium-light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F448 1F3FD\",\"char\":\"👈🏽\",\"name\":\"backhand index pointing left: medium skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F448 1F3FE\",\"char\":\"👈🏾\",\"name\":\"backhand index pointing left: medium-dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F448 1F3FF\",\"char\":\"👈🏿\",\"name\":\"backhand index pointing left: dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F449\",\"char\":\"👉\",\"name\":\"backhand index pointing right\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F449 1F3FB\",\"char\":\"👉🏻\",\"name\":\"backhand index pointing right: light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F449 1F3FC\",\"char\":\"👉🏼\",\"name\":\"backhand index pointing right: medium-light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F449 1F3FD\",\"char\":\"👉🏽\",\"name\":\"backhand index pointing right: medium skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F449 1F3FE\",\"char\":\"👉🏾\",\"name\":\"backhand index pointing right: medium-dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F449 1F3FF\",\"char\":\"👉🏿\",\"name\":\"backhand index pointing right: dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F446\",\"char\":\"👆\",\"name\":\"backhand index pointing up\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F446 1F3FB\",\"char\":\"👆🏻\",\"name\":\"backhand index pointing up: light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F446 1F3FC\",\"char\":\"👆🏼\",\"name\":\"backhand index pointing up: medium-light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F446 1F3FD\",\"char\":\"👆🏽\",\"name\":\"backhand index pointing up: medium skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F446 1F3FE\",\"char\":\"👆🏾\",\"name\":\"backhand index pointing up: medium-dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F446 1F3FF\",\"char\":\"👆🏿\",\"name\":\"backhand index pointing up: dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F595\",\"char\":\"🖕\",\"name\":\"middle finger\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F595 1F3FB\",\"char\":\"🖕🏻\",\"name\":\"middle finger: light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F595 1F3FC\",\"char\":\"🖕🏼\",\"name\":\"middle finger: medium-light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F595 1F3FD\",\"char\":\"🖕🏽\",\"name\":\"middle finger: medium skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F595 1F3FE\",\"char\":\"🖕🏾\",\"name\":\"middle finger: medium-dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F595 1F3FF\",\"char\":\"🖕🏿\",\"name\":\"middle finger: dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F447\",\"char\":\"👇\",\"name\":\"backhand index pointing down\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F447 1F3FB\",\"char\":\"👇🏻\",\"name\":\"backhand index pointing down: light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F447 1F3FC\",\"char\":\"👇🏼\",\"name\":\"backhand index pointing down: medium-light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F447 1F3FD\",\"char\":\"👇🏽\",\"name\":\"backhand index pointing down: medium skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F447 1F3FE\",\"char\":\"👇🏾\",\"name\":\"backhand index pointing down: medium-dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F447 1F3FF\",\"char\":\"👇🏿\",\"name\":\"backhand index pointing down: dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"261D FE0F\",\"char\":\"☝️\",\"name\":\"index pointing up\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"261D\",\"char\":\"☝\",\"name\":\"index pointing up\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"261D 1F3FB\",\"char\":\"☝🏻\",\"name\":\"index pointing up: light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"261D 1F3FC\",\"char\":\"☝🏼\",\"name\":\"index pointing up: medium-light skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"261D 1F3FD\",\"char\":\"☝🏽\",\"name\":\"index pointing up: medium skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"261D 1F3FE\",\"char\":\"☝🏾\",\"name\":\"index pointing up: medium-dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"261D 1F3FF\",\"char\":\"☝🏿\",\"name\":\"index pointing up: dark skin tone\",\"category\":\"People & Body (hand-single-finger)\",\"group\":\"People & Body\",\"subgroup\":\"hand-single-finger\"},{\"codes\":\"1F44D\",\"char\":\"👍\",\"name\":\"thumbs up\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44D 1F3FB\",\"char\":\"👍🏻\",\"name\":\"thumbs up: light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44D 1F3FC\",\"char\":\"👍🏼\",\"name\":\"thumbs up: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44D 1F3FD\",\"char\":\"👍🏽\",\"name\":\"thumbs up: medium skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44D 1F3FE\",\"char\":\"👍🏾\",\"name\":\"thumbs up: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44D 1F3FF\",\"char\":\"👍🏿\",\"name\":\"thumbs up: dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44E\",\"char\":\"👎\",\"name\":\"thumbs down\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44E 1F3FB\",\"char\":\"👎🏻\",\"name\":\"thumbs down: light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44E 1F3FC\",\"char\":\"👎🏼\",\"name\":\"thumbs down: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44E 1F3FD\",\"char\":\"👎🏽\",\"name\":\"thumbs down: medium skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44E 1F3FE\",\"char\":\"👎🏾\",\"name\":\"thumbs down: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44E 1F3FF\",\"char\":\"👎🏿\",\"name\":\"thumbs down: dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"270A\",\"char\":\"✊\",\"name\":\"raised fist\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"270A 1F3FB\",\"char\":\"✊🏻\",\"name\":\"raised fist: light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"270A 1F3FC\",\"char\":\"✊🏼\",\"name\":\"raised fist: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"270A 1F3FD\",\"char\":\"✊🏽\",\"name\":\"raised fist: medium skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"270A 1F3FE\",\"char\":\"✊🏾\",\"name\":\"raised fist: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"270A 1F3FF\",\"char\":\"✊🏿\",\"name\":\"raised fist: dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44A\",\"char\":\"👊\",\"name\":\"oncoming fist\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44A 1F3FB\",\"char\":\"👊🏻\",\"name\":\"oncoming fist: light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44A 1F3FC\",\"char\":\"👊🏼\",\"name\":\"oncoming fist: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44A 1F3FD\",\"char\":\"👊🏽\",\"name\":\"oncoming fist: medium skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44A 1F3FE\",\"char\":\"👊🏾\",\"name\":\"oncoming fist: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44A 1F3FF\",\"char\":\"👊🏿\",\"name\":\"oncoming fist: dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91B\",\"char\":\"🤛\",\"name\":\"left-facing fist\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91B 1F3FB\",\"char\":\"🤛🏻\",\"name\":\"left-facing fist: light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91B 1F3FC\",\"char\":\"🤛🏼\",\"name\":\"left-facing fist: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91B 1F3FD\",\"char\":\"🤛🏽\",\"name\":\"left-facing fist: medium skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91B 1F3FE\",\"char\":\"🤛🏾\",\"name\":\"left-facing fist: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91B 1F3FF\",\"char\":\"🤛🏿\",\"name\":\"left-facing fist: dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91C\",\"char\":\"🤜\",\"name\":\"right-facing fist\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91C 1F3FB\",\"char\":\"🤜🏻\",\"name\":\"right-facing fist: light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91C 1F3FC\",\"char\":\"🤜🏼\",\"name\":\"right-facing fist: medium-light skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91C 1F3FD\",\"char\":\"🤜🏽\",\"name\":\"right-facing fist: medium skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91C 1F3FE\",\"char\":\"🤜🏾\",\"name\":\"right-facing fist: medium-dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F91C 1F3FF\",\"char\":\"🤜🏿\",\"name\":\"right-facing fist: dark skin tone\",\"category\":\"People & Body (hand-fingers-closed)\",\"group\":\"People & Body\",\"subgroup\":\"hand-fingers-closed\"},{\"codes\":\"1F44F\",\"char\":\"👏\",\"name\":\"clapping hands\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F44F 1F3FB\",\"char\":\"👏🏻\",\"name\":\"clapping hands: light skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F44F 1F3FC\",\"char\":\"👏🏼\",\"name\":\"clapping hands: medium-light skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F44F 1F3FD\",\"char\":\"👏🏽\",\"name\":\"clapping hands: medium skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F44F 1F3FE\",\"char\":\"👏🏾\",\"name\":\"clapping hands: medium-dark skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F44F 1F3FF\",\"char\":\"👏🏿\",\"name\":\"clapping hands: dark skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64C\",\"char\":\"🙌\",\"name\":\"raising hands\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64C 1F3FB\",\"char\":\"🙌🏻\",\"name\":\"raising hands: light skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64C 1F3FC\",\"char\":\"🙌🏼\",\"name\":\"raising hands: medium-light skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64C 1F3FD\",\"char\":\"🙌🏽\",\"name\":\"raising hands: medium skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64C 1F3FE\",\"char\":\"🙌🏾\",\"name\":\"raising hands: medium-dark skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64C 1F3FF\",\"char\":\"🙌🏿\",\"name\":\"raising hands: dark skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F450\",\"char\":\"👐\",\"name\":\"open hands\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F450 1F3FB\",\"char\":\"👐🏻\",\"name\":\"open hands: light skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F450 1F3FC\",\"char\":\"👐🏼\",\"name\":\"open hands: medium-light skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F450 1F3FD\",\"char\":\"👐🏽\",\"name\":\"open hands: medium skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F450 1F3FE\",\"char\":\"👐🏾\",\"name\":\"open hands: medium-dark skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F450 1F3FF\",\"char\":\"👐🏿\",\"name\":\"open hands: dark skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F932\",\"char\":\"🤲\",\"name\":\"palms up together\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F932 1F3FB\",\"char\":\"🤲🏻\",\"name\":\"palms up together: light skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F932 1F3FC\",\"char\":\"🤲🏼\",\"name\":\"palms up together: medium-light skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F932 1F3FD\",\"char\":\"🤲🏽\",\"name\":\"palms up together: medium skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F932 1F3FE\",\"char\":\"🤲🏾\",\"name\":\"palms up together: medium-dark skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F932 1F3FF\",\"char\":\"🤲🏿\",\"name\":\"palms up together: dark skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F91D\",\"char\":\"🤝\",\"name\":\"handshake\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64F\",\"char\":\"🙏\",\"name\":\"folded hands\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64F 1F3FB\",\"char\":\"🙏🏻\",\"name\":\"folded hands: light skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64F 1F3FC\",\"char\":\"🙏🏼\",\"name\":\"folded hands: medium-light skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64F 1F3FD\",\"char\":\"🙏🏽\",\"name\":\"folded hands: medium skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64F 1F3FE\",\"char\":\"🙏🏾\",\"name\":\"folded hands: medium-dark skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"1F64F 1F3FF\",\"char\":\"🙏🏿\",\"name\":\"folded hands: dark skin tone\",\"category\":\"People & Body (hands)\",\"group\":\"People & Body\",\"subgroup\":\"hands\"},{\"codes\":\"270D FE0F\",\"char\":\"✍️\",\"name\":\"writing hand\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"270D\",\"char\":\"✍\",\"name\":\"writing hand\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"270D 1F3FB\",\"char\":\"✍🏻\",\"name\":\"writing hand: light skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"270D 1F3FC\",\"char\":\"✍🏼\",\"name\":\"writing hand: medium-light skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"270D 1F3FD\",\"char\":\"✍🏽\",\"name\":\"writing hand: medium skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"270D 1F3FE\",\"char\":\"✍🏾\",\"name\":\"writing hand: medium-dark skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"270D 1F3FF\",\"char\":\"✍🏿\",\"name\":\"writing hand: dark skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F485\",\"char\":\"💅\",\"name\":\"nail polish\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F485 1F3FB\",\"char\":\"💅🏻\",\"name\":\"nail polish: light skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F485 1F3FC\",\"char\":\"💅🏼\",\"name\":\"nail polish: medium-light skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F485 1F3FD\",\"char\":\"💅🏽\",\"name\":\"nail polish: medium skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F485 1F3FE\",\"char\":\"💅🏾\",\"name\":\"nail polish: medium-dark skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F485 1F3FF\",\"char\":\"💅🏿\",\"name\":\"nail polish: dark skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F933\",\"char\":\"🤳\",\"name\":\"selfie\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F933 1F3FB\",\"char\":\"🤳🏻\",\"name\":\"selfie: light skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F933 1F3FC\",\"char\":\"🤳🏼\",\"name\":\"selfie: medium-light skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F933 1F3FD\",\"char\":\"🤳🏽\",\"name\":\"selfie: medium skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F933 1F3FE\",\"char\":\"🤳🏾\",\"name\":\"selfie: medium-dark skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F933 1F3FF\",\"char\":\"🤳🏿\",\"name\":\"selfie: dark skin tone\",\"category\":\"People & Body (hand-prop)\",\"group\":\"People & Body\",\"subgroup\":\"hand-prop\"},{\"codes\":\"1F4AA\",\"char\":\"💪\",\"name\":\"flexed biceps\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F4AA 1F3FB\",\"char\":\"💪🏻\",\"name\":\"flexed biceps: light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F4AA 1F3FC\",\"char\":\"💪🏼\",\"name\":\"flexed biceps: medium-light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F4AA 1F3FD\",\"char\":\"💪🏽\",\"name\":\"flexed biceps: medium skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F4AA 1F3FE\",\"char\":\"💪🏾\",\"name\":\"flexed biceps: medium-dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F4AA 1F3FF\",\"char\":\"💪🏿\",\"name\":\"flexed biceps: dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9BE\",\"char\":\"🦾\",\"name\":\"mechanical arm\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9BF\",\"char\":\"🦿\",\"name\":\"mechanical leg\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B5\",\"char\":\"🦵\",\"name\":\"leg\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B5 1F3FB\",\"char\":\"🦵🏻\",\"name\":\"leg: light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B5 1F3FC\",\"char\":\"🦵🏼\",\"name\":\"leg: medium-light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B5 1F3FD\",\"char\":\"🦵🏽\",\"name\":\"leg: medium skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B5 1F3FE\",\"char\":\"🦵🏾\",\"name\":\"leg: medium-dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B5 1F3FF\",\"char\":\"🦵🏿\",\"name\":\"leg: dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B6\",\"char\":\"🦶\",\"name\":\"foot\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B6 1F3FB\",\"char\":\"🦶🏻\",\"name\":\"foot: light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B6 1F3FC\",\"char\":\"🦶🏼\",\"name\":\"foot: medium-light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B6 1F3FD\",\"char\":\"🦶🏽\",\"name\":\"foot: medium skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B6 1F3FE\",\"char\":\"🦶🏾\",\"name\":\"foot: medium-dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B6 1F3FF\",\"char\":\"🦶🏿\",\"name\":\"foot: dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F442\",\"char\":\"👂\",\"name\":\"ear\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F442 1F3FB\",\"char\":\"👂🏻\",\"name\":\"ear: light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F442 1F3FC\",\"char\":\"👂🏼\",\"name\":\"ear: medium-light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F442 1F3FD\",\"char\":\"👂🏽\",\"name\":\"ear: medium skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F442 1F3FE\",\"char\":\"👂🏾\",\"name\":\"ear: medium-dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F442 1F3FF\",\"char\":\"👂🏿\",\"name\":\"ear: dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9BB\",\"char\":\"🦻\",\"name\":\"ear with hearing aid\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9BB 1F3FB\",\"char\":\"🦻🏻\",\"name\":\"ear with hearing aid: light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9BB 1F3FC\",\"char\":\"🦻🏼\",\"name\":\"ear with hearing aid: medium-light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9BB 1F3FD\",\"char\":\"🦻🏽\",\"name\":\"ear with hearing aid: medium skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9BB 1F3FE\",\"char\":\"🦻🏾\",\"name\":\"ear with hearing aid: medium-dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9BB 1F3FF\",\"char\":\"🦻🏿\",\"name\":\"ear with hearing aid: dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F443\",\"char\":\"👃\",\"name\":\"nose\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F443 1F3FB\",\"char\":\"👃🏻\",\"name\":\"nose: light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F443 1F3FC\",\"char\":\"👃🏼\",\"name\":\"nose: medium-light skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F443 1F3FD\",\"char\":\"👃🏽\",\"name\":\"nose: medium skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F443 1F3FE\",\"char\":\"👃🏾\",\"name\":\"nose: medium-dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F443 1F3FF\",\"char\":\"👃🏿\",\"name\":\"nose: dark skin tone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9E0\",\"char\":\"🧠\",\"name\":\"brain\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1FAC0\",\"char\":\"🫀\",\"name\":\"anatomical heart\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1FAC1\",\"char\":\"🫁\",\"name\":\"lungs\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B7\",\"char\":\"🦷\",\"name\":\"tooth\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F9B4\",\"char\":\"🦴\",\"name\":\"bone\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F440\",\"char\":\"👀\",\"name\":\"eyes\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F441 FE0F\",\"char\":\"👁️\",\"name\":\"eye\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F441\",\"char\":\"👁\",\"name\":\"eye\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F445\",\"char\":\"👅\",\"name\":\"tongue\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F444\",\"char\":\"👄\",\"name\":\"mouth\",\"category\":\"People & Body (body-parts)\",\"group\":\"People & Body\",\"subgroup\":\"body-parts\"},{\"codes\":\"1F476\",\"char\":\"👶\",\"name\":\"baby\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F476 1F3FB\",\"char\":\"👶🏻\",\"name\":\"baby: light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F476 1F3FC\",\"char\":\"👶🏼\",\"name\":\"baby: medium-light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F476 1F3FD\",\"char\":\"👶🏽\",\"name\":\"baby: medium skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F476 1F3FE\",\"char\":\"👶🏾\",\"name\":\"baby: medium-dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F476 1F3FF\",\"char\":\"👶🏿\",\"name\":\"baby: dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D2\",\"char\":\"🧒\",\"name\":\"child\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D2 1F3FB\",\"char\":\"🧒🏻\",\"name\":\"child: light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D2 1F3FC\",\"char\":\"🧒🏼\",\"name\":\"child: medium-light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D2 1F3FD\",\"char\":\"🧒🏽\",\"name\":\"child: medium skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D2 1F3FE\",\"char\":\"🧒🏾\",\"name\":\"child: medium-dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D2 1F3FF\",\"char\":\"🧒🏿\",\"name\":\"child: dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F466\",\"char\":\"👦\",\"name\":\"boy\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F466 1F3FB\",\"char\":\"👦🏻\",\"name\":\"boy: light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F466 1F3FC\",\"char\":\"👦🏼\",\"name\":\"boy: medium-light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F466 1F3FD\",\"char\":\"👦🏽\",\"name\":\"boy: medium skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F466 1F3FE\",\"char\":\"👦🏾\",\"name\":\"boy: medium-dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F466 1F3FF\",\"char\":\"👦🏿\",\"name\":\"boy: dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F467\",\"char\":\"👧\",\"name\":\"girl\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F467 1F3FB\",\"char\":\"👧🏻\",\"name\":\"girl: light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F467 1F3FC\",\"char\":\"👧🏼\",\"name\":\"girl: medium-light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F467 1F3FD\",\"char\":\"👧🏽\",\"name\":\"girl: medium skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F467 1F3FE\",\"char\":\"👧🏾\",\"name\":\"girl: medium-dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F467 1F3FF\",\"char\":\"👧🏿\",\"name\":\"girl: dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1\",\"char\":\"🧑\",\"name\":\"person\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FB\",\"char\":\"🧑🏻\",\"name\":\"person: light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FC\",\"char\":\"🧑🏼\",\"name\":\"person: medium-light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FD\",\"char\":\"🧑🏽\",\"name\":\"person: medium skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FE\",\"char\":\"🧑🏾\",\"name\":\"person: medium-dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FF\",\"char\":\"🧑🏿\",\"name\":\"person: dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471\",\"char\":\"👱\",\"name\":\"person: blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FB\",\"char\":\"👱🏻\",\"name\":\"person: light skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FC\",\"char\":\"👱🏼\",\"name\":\"person: medium-light skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FD\",\"char\":\"👱🏽\",\"name\":\"person: medium skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FE\",\"char\":\"👱🏾\",\"name\":\"person: medium-dark skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FF\",\"char\":\"👱🏿\",\"name\":\"person: dark skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468\",\"char\":\"👨\",\"name\":\"man\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FB\",\"char\":\"👨🏻\",\"name\":\"man: light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FC\",\"char\":\"👨🏼\",\"name\":\"man: medium-light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FD\",\"char\":\"👨🏽\",\"name\":\"man: medium skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FE\",\"char\":\"👨🏾\",\"name\":\"man: medium-dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FF\",\"char\":\"👨🏿\",\"name\":\"man: dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D4\",\"char\":\"🧔\",\"name\":\"man: beard\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D4 1F3FB\",\"char\":\"🧔🏻\",\"name\":\"man: light skin tone, beard\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D4 1F3FC\",\"char\":\"🧔🏼\",\"name\":\"man: medium-light skin tone, beard\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D4 1F3FD\",\"char\":\"🧔🏽\",\"name\":\"man: medium skin tone, beard\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D4 1F3FE\",\"char\":\"🧔🏾\",\"name\":\"man: medium-dark skin tone, beard\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D4 1F3FF\",\"char\":\"🧔🏿\",\"name\":\"man: dark skin tone, beard\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 200D 1F9B0\",\"char\":\"👨‍🦰\",\"name\":\"man: red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FB 200D 1F9B0\",\"char\":\"👨🏻‍🦰\",\"name\":\"man: light skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FC 200D 1F9B0\",\"char\":\"👨🏼‍🦰\",\"name\":\"man: medium-light skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FD 200D 1F9B0\",\"char\":\"👨🏽‍🦰\",\"name\":\"man: medium skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FE 200D 1F9B0\",\"char\":\"👨🏾‍🦰\",\"name\":\"man: medium-dark skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FF 200D 1F9B0\",\"char\":\"👨🏿‍🦰\",\"name\":\"man: dark skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 200D 1F9B1\",\"char\":\"👨‍🦱\",\"name\":\"man: curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FB 200D 1F9B1\",\"char\":\"👨🏻‍🦱\",\"name\":\"man: light skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FC 200D 1F9B1\",\"char\":\"👨🏼‍🦱\",\"name\":\"man: medium-light skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FD 200D 1F9B1\",\"char\":\"👨🏽‍🦱\",\"name\":\"man: medium skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FE 200D 1F9B1\",\"char\":\"👨🏾‍🦱\",\"name\":\"man: medium-dark skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FF 200D 1F9B1\",\"char\":\"👨🏿‍🦱\",\"name\":\"man: dark skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 200D 1F9B3\",\"char\":\"👨‍🦳\",\"name\":\"man: white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FB 200D 1F9B3\",\"char\":\"👨🏻‍🦳\",\"name\":\"man: light skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FC 200D 1F9B3\",\"char\":\"👨🏼‍🦳\",\"name\":\"man: medium-light skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FD 200D 1F9B3\",\"char\":\"👨🏽‍🦳\",\"name\":\"man: medium skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FE 200D 1F9B3\",\"char\":\"👨🏾‍🦳\",\"name\":\"man: medium-dark skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FF 200D 1F9B3\",\"char\":\"👨🏿‍🦳\",\"name\":\"man: dark skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 200D 1F9B2\",\"char\":\"👨‍🦲\",\"name\":\"man: bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FB 200D 1F9B2\",\"char\":\"👨🏻‍🦲\",\"name\":\"man: light skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FC 200D 1F9B2\",\"char\":\"👨🏼‍🦲\",\"name\":\"man: medium-light skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FD 200D 1F9B2\",\"char\":\"👨🏽‍🦲\",\"name\":\"man: medium skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FE 200D 1F9B2\",\"char\":\"👨🏾‍🦲\",\"name\":\"man: medium-dark skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F468 1F3FF 200D 1F9B2\",\"char\":\"👨🏿‍🦲\",\"name\":\"man: dark skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469\",\"char\":\"👩\",\"name\":\"woman\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FB\",\"char\":\"👩🏻\",\"name\":\"woman: light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FC\",\"char\":\"👩🏼\",\"name\":\"woman: medium-light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FD\",\"char\":\"👩🏽\",\"name\":\"woman: medium skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FE\",\"char\":\"👩🏾\",\"name\":\"woman: medium-dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FF\",\"char\":\"👩🏿\",\"name\":\"woman: dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 200D 1F9B0\",\"char\":\"👩‍🦰\",\"name\":\"woman: red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FB 200D 1F9B0\",\"char\":\"👩🏻‍🦰\",\"name\":\"woman: light skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FC 200D 1F9B0\",\"char\":\"👩🏼‍🦰\",\"name\":\"woman: medium-light skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FD 200D 1F9B0\",\"char\":\"👩🏽‍🦰\",\"name\":\"woman: medium skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FE 200D 1F9B0\",\"char\":\"👩🏾‍🦰\",\"name\":\"woman: medium-dark skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FF 200D 1F9B0\",\"char\":\"👩🏿‍🦰\",\"name\":\"woman: dark skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 200D 1F9B0\",\"char\":\"🧑‍🦰\",\"name\":\"person: red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FB 200D 1F9B0\",\"char\":\"🧑🏻‍🦰\",\"name\":\"person: light skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FC 200D 1F9B0\",\"char\":\"🧑🏼‍🦰\",\"name\":\"person: medium-light skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FD 200D 1F9B0\",\"char\":\"🧑🏽‍🦰\",\"name\":\"person: medium skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FE 200D 1F9B0\",\"char\":\"🧑🏾‍🦰\",\"name\":\"person: medium-dark skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FF 200D 1F9B0\",\"char\":\"🧑🏿‍🦰\",\"name\":\"person: dark skin tone, red hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 200D 1F9B1\",\"char\":\"👩‍🦱\",\"name\":\"woman: curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FB 200D 1F9B1\",\"char\":\"👩🏻‍🦱\",\"name\":\"woman: light skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FC 200D 1F9B1\",\"char\":\"👩🏼‍🦱\",\"name\":\"woman: medium-light skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FD 200D 1F9B1\",\"char\":\"👩🏽‍🦱\",\"name\":\"woman: medium skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FE 200D 1F9B1\",\"char\":\"👩🏾‍🦱\",\"name\":\"woman: medium-dark skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FF 200D 1F9B1\",\"char\":\"👩🏿‍🦱\",\"name\":\"woman: dark skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 200D 1F9B1\",\"char\":\"🧑‍🦱\",\"name\":\"person: curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FB 200D 1F9B1\",\"char\":\"🧑🏻‍🦱\",\"name\":\"person: light skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FC 200D 1F9B1\",\"char\":\"🧑🏼‍🦱\",\"name\":\"person: medium-light skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FD 200D 1F9B1\",\"char\":\"🧑🏽‍🦱\",\"name\":\"person: medium skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FE 200D 1F9B1\",\"char\":\"🧑🏾‍🦱\",\"name\":\"person: medium-dark skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FF 200D 1F9B1\",\"char\":\"🧑🏿‍🦱\",\"name\":\"person: dark skin tone, curly hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 200D 1F9B3\",\"char\":\"👩‍🦳\",\"name\":\"woman: white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FB 200D 1F9B3\",\"char\":\"👩🏻‍🦳\",\"name\":\"woman: light skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FC 200D 1F9B3\",\"char\":\"👩🏼‍🦳\",\"name\":\"woman: medium-light skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FD 200D 1F9B3\",\"char\":\"👩🏽‍🦳\",\"name\":\"woman: medium skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FE 200D 1F9B3\",\"char\":\"👩🏾‍🦳\",\"name\":\"woman: medium-dark skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FF 200D 1F9B3\",\"char\":\"👩🏿‍🦳\",\"name\":\"woman: dark skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 200D 1F9B3\",\"char\":\"🧑‍🦳\",\"name\":\"person: white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FB 200D 1F9B3\",\"char\":\"🧑🏻‍🦳\",\"name\":\"person: light skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FC 200D 1F9B3\",\"char\":\"🧑🏼‍🦳\",\"name\":\"person: medium-light skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FD 200D 1F9B3\",\"char\":\"🧑🏽‍🦳\",\"name\":\"person: medium skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FE 200D 1F9B3\",\"char\":\"🧑🏾‍🦳\",\"name\":\"person: medium-dark skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FF 200D 1F9B3\",\"char\":\"🧑🏿‍🦳\",\"name\":\"person: dark skin tone, white hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 200D 1F9B2\",\"char\":\"👩‍🦲\",\"name\":\"woman: bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FB 200D 1F9B2\",\"char\":\"👩🏻‍🦲\",\"name\":\"woman: light skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FC 200D 1F9B2\",\"char\":\"👩🏼‍🦲\",\"name\":\"woman: medium-light skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FD 200D 1F9B2\",\"char\":\"👩🏽‍🦲\",\"name\":\"woman: medium skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FE 200D 1F9B2\",\"char\":\"👩🏾‍🦲\",\"name\":\"woman: medium-dark skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F469 1F3FF 200D 1F9B2\",\"char\":\"👩🏿‍🦲\",\"name\":\"woman: dark skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 200D 1F9B2\",\"char\":\"🧑‍🦲\",\"name\":\"person: bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FB 200D 1F9B2\",\"char\":\"🧑🏻‍🦲\",\"name\":\"person: light skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FC 200D 1F9B2\",\"char\":\"🧑🏼‍🦲\",\"name\":\"person: medium-light skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FD 200D 1F9B2\",\"char\":\"🧑🏽‍🦲\",\"name\":\"person: medium skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FE 200D 1F9B2\",\"char\":\"🧑🏾‍🦲\",\"name\":\"person: medium-dark skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D1 1F3FF 200D 1F9B2\",\"char\":\"🧑🏿‍🦲\",\"name\":\"person: dark skin tone, bald\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 200D 2640 FE0F\",\"char\":\"👱‍♀️\",\"name\":\"woman: blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 200D 2640\",\"char\":\"👱‍♀\",\"name\":\"woman: blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FB 200D 2640 FE0F\",\"char\":\"👱🏻‍♀️\",\"name\":\"woman: light skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FB 200D 2640\",\"char\":\"👱🏻‍♀\",\"name\":\"woman: light skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FC 200D 2640 FE0F\",\"char\":\"👱🏼‍♀️\",\"name\":\"woman: medium-light skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FC 200D 2640\",\"char\":\"👱🏼‍♀\",\"name\":\"woman: medium-light skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FD 200D 2640 FE0F\",\"char\":\"👱🏽‍♀️\",\"name\":\"woman: medium skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FD 200D 2640\",\"char\":\"👱🏽‍♀\",\"name\":\"woman: medium skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FE 200D 2640 FE0F\",\"char\":\"👱🏾‍♀️\",\"name\":\"woman: medium-dark skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FE 200D 2640\",\"char\":\"👱🏾‍♀\",\"name\":\"woman: medium-dark skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FF 200D 2640 FE0F\",\"char\":\"👱🏿‍♀️\",\"name\":\"woman: dark skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FF 200D 2640\",\"char\":\"👱🏿‍♀\",\"name\":\"woman: dark skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 200D 2642 FE0F\",\"char\":\"👱‍♂️\",\"name\":\"man: blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 200D 2642\",\"char\":\"👱‍♂\",\"name\":\"man: blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FB 200D 2642 FE0F\",\"char\":\"👱🏻‍♂️\",\"name\":\"man: light skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FB 200D 2642\",\"char\":\"👱🏻‍♂\",\"name\":\"man: light skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FC 200D 2642 FE0F\",\"char\":\"👱🏼‍♂️\",\"name\":\"man: medium-light skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FC 200D 2642\",\"char\":\"👱🏼‍♂\",\"name\":\"man: medium-light skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FD 200D 2642 FE0F\",\"char\":\"👱🏽‍♂️\",\"name\":\"man: medium skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FD 200D 2642\",\"char\":\"👱🏽‍♂\",\"name\":\"man: medium skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FE 200D 2642 FE0F\",\"char\":\"👱🏾‍♂️\",\"name\":\"man: medium-dark skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FE 200D 2642\",\"char\":\"👱🏾‍♂\",\"name\":\"man: medium-dark skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FF 200D 2642 FE0F\",\"char\":\"👱🏿‍♂️\",\"name\":\"man: dark skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F471 1F3FF 200D 2642\",\"char\":\"👱🏿‍♂\",\"name\":\"man: dark skin tone, blond hair\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D3\",\"char\":\"🧓\",\"name\":\"older person\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D3 1F3FB\",\"char\":\"🧓🏻\",\"name\":\"older person: light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D3 1F3FC\",\"char\":\"🧓🏼\",\"name\":\"older person: medium-light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D3 1F3FD\",\"char\":\"🧓🏽\",\"name\":\"older person: medium skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D3 1F3FE\",\"char\":\"🧓🏾\",\"name\":\"older person: medium-dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F9D3 1F3FF\",\"char\":\"🧓🏿\",\"name\":\"older person: dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F474\",\"char\":\"👴\",\"name\":\"old man\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F474 1F3FB\",\"char\":\"👴🏻\",\"name\":\"old man: light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F474 1F3FC\",\"char\":\"👴🏼\",\"name\":\"old man: medium-light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F474 1F3FD\",\"char\":\"👴🏽\",\"name\":\"old man: medium skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F474 1F3FE\",\"char\":\"👴🏾\",\"name\":\"old man: medium-dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F474 1F3FF\",\"char\":\"👴🏿\",\"name\":\"old man: dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F475\",\"char\":\"👵\",\"name\":\"old woman\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F475 1F3FB\",\"char\":\"👵🏻\",\"name\":\"old woman: light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F475 1F3FC\",\"char\":\"👵🏼\",\"name\":\"old woman: medium-light skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F475 1F3FD\",\"char\":\"👵🏽\",\"name\":\"old woman: medium skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F475 1F3FE\",\"char\":\"👵🏾\",\"name\":\"old woman: medium-dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F475 1F3FF\",\"char\":\"👵🏿\",\"name\":\"old woman: dark skin tone\",\"category\":\"People & Body (person)\",\"group\":\"People & Body\",\"subgroup\":\"person\"},{\"codes\":\"1F64D\",\"char\":\"🙍\",\"name\":\"person frowning\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FB\",\"char\":\"🙍🏻\",\"name\":\"person frowning: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FC\",\"char\":\"🙍🏼\",\"name\":\"person frowning: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FD\",\"char\":\"🙍🏽\",\"name\":\"person frowning: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FE\",\"char\":\"🙍🏾\",\"name\":\"person frowning: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FF\",\"char\":\"🙍🏿\",\"name\":\"person frowning: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 200D 2642 FE0F\",\"char\":\"🙍‍♂️\",\"name\":\"man frowning\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 200D 2642\",\"char\":\"🙍‍♂\",\"name\":\"man frowning\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FB 200D 2642 FE0F\",\"char\":\"🙍🏻‍♂️\",\"name\":\"man frowning: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FB 200D 2642\",\"char\":\"🙍🏻‍♂\",\"name\":\"man frowning: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FC 200D 2642 FE0F\",\"char\":\"🙍🏼‍♂️\",\"name\":\"man frowning: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FC 200D 2642\",\"char\":\"🙍🏼‍♂\",\"name\":\"man frowning: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FD 200D 2642 FE0F\",\"char\":\"🙍🏽‍♂️\",\"name\":\"man frowning: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FD 200D 2642\",\"char\":\"🙍🏽‍♂\",\"name\":\"man frowning: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FE 200D 2642 FE0F\",\"char\":\"🙍🏾‍♂️\",\"name\":\"man frowning: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FE 200D 2642\",\"char\":\"🙍🏾‍♂\",\"name\":\"man frowning: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FF 200D 2642 FE0F\",\"char\":\"🙍🏿‍♂️\",\"name\":\"man frowning: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FF 200D 2642\",\"char\":\"🙍🏿‍♂\",\"name\":\"man frowning: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 200D 2640 FE0F\",\"char\":\"🙍‍♀️\",\"name\":\"woman frowning\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 200D 2640\",\"char\":\"🙍‍♀\",\"name\":\"woman frowning\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FB 200D 2640 FE0F\",\"char\":\"🙍🏻‍♀️\",\"name\":\"woman frowning: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FB 200D 2640\",\"char\":\"🙍🏻‍♀\",\"name\":\"woman frowning: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FC 200D 2640 FE0F\",\"char\":\"🙍🏼‍♀️\",\"name\":\"woman frowning: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FC 200D 2640\",\"char\":\"🙍🏼‍♀\",\"name\":\"woman frowning: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FD 200D 2640 FE0F\",\"char\":\"🙍🏽‍♀️\",\"name\":\"woman frowning: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FD 200D 2640\",\"char\":\"🙍🏽‍♀\",\"name\":\"woman frowning: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FE 200D 2640 FE0F\",\"char\":\"🙍🏾‍♀️\",\"name\":\"woman frowning: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FE 200D 2640\",\"char\":\"🙍🏾‍♀\",\"name\":\"woman frowning: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FF 200D 2640 FE0F\",\"char\":\"🙍🏿‍♀️\",\"name\":\"woman frowning: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64D 1F3FF 200D 2640\",\"char\":\"🙍🏿‍♀\",\"name\":\"woman frowning: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E\",\"char\":\"🙎\",\"name\":\"person pouting\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FB\",\"char\":\"🙎🏻\",\"name\":\"person pouting: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FC\",\"char\":\"🙎🏼\",\"name\":\"person pouting: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FD\",\"char\":\"🙎🏽\",\"name\":\"person pouting: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FE\",\"char\":\"🙎🏾\",\"name\":\"person pouting: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FF\",\"char\":\"🙎🏿\",\"name\":\"person pouting: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 200D 2642 FE0F\",\"char\":\"🙎‍♂️\",\"name\":\"man pouting\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 200D 2642\",\"char\":\"🙎‍♂\",\"name\":\"man pouting\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FB 200D 2642 FE0F\",\"char\":\"🙎🏻‍♂️\",\"name\":\"man pouting: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FB 200D 2642\",\"char\":\"🙎🏻‍♂\",\"name\":\"man pouting: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FC 200D 2642 FE0F\",\"char\":\"🙎🏼‍♂️\",\"name\":\"man pouting: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FC 200D 2642\",\"char\":\"🙎🏼‍♂\",\"name\":\"man pouting: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FD 200D 2642 FE0F\",\"char\":\"🙎🏽‍♂️\",\"name\":\"man pouting: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FD 200D 2642\",\"char\":\"🙎🏽‍♂\",\"name\":\"man pouting: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FE 200D 2642 FE0F\",\"char\":\"🙎🏾‍♂️\",\"name\":\"man pouting: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FE 200D 2642\",\"char\":\"🙎🏾‍♂\",\"name\":\"man pouting: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FF 200D 2642 FE0F\",\"char\":\"🙎🏿‍♂️\",\"name\":\"man pouting: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FF 200D 2642\",\"char\":\"🙎🏿‍♂\",\"name\":\"man pouting: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 200D 2640 FE0F\",\"char\":\"🙎‍♀️\",\"name\":\"woman pouting\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 200D 2640\",\"char\":\"🙎‍♀\",\"name\":\"woman pouting\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FB 200D 2640 FE0F\",\"char\":\"🙎🏻‍♀️\",\"name\":\"woman pouting: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FB 200D 2640\",\"char\":\"🙎🏻‍♀\",\"name\":\"woman pouting: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FC 200D 2640 FE0F\",\"char\":\"🙎🏼‍♀️\",\"name\":\"woman pouting: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FC 200D 2640\",\"char\":\"🙎🏼‍♀\",\"name\":\"woman pouting: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FD 200D 2640 FE0F\",\"char\":\"🙎🏽‍♀️\",\"name\":\"woman pouting: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FD 200D 2640\",\"char\":\"🙎🏽‍♀\",\"name\":\"woman pouting: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FE 200D 2640 FE0F\",\"char\":\"🙎🏾‍♀️\",\"name\":\"woman pouting: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FE 200D 2640\",\"char\":\"🙎🏾‍♀\",\"name\":\"woman pouting: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FF 200D 2640 FE0F\",\"char\":\"🙎🏿‍♀️\",\"name\":\"woman pouting: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64E 1F3FF 200D 2640\",\"char\":\"🙎🏿‍♀\",\"name\":\"woman pouting: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645\",\"char\":\"🙅\",\"name\":\"person gesturing NO\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FB\",\"char\":\"🙅🏻\",\"name\":\"person gesturing NO: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FC\",\"char\":\"🙅🏼\",\"name\":\"person gesturing NO: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FD\",\"char\":\"🙅🏽\",\"name\":\"person gesturing NO: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FE\",\"char\":\"🙅🏾\",\"name\":\"person gesturing NO: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FF\",\"char\":\"🙅🏿\",\"name\":\"person gesturing NO: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 200D 2642 FE0F\",\"char\":\"🙅‍♂️\",\"name\":\"man gesturing NO\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 200D 2642\",\"char\":\"🙅‍♂\",\"name\":\"man gesturing NO\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FB 200D 2642 FE0F\",\"char\":\"🙅🏻‍♂️\",\"name\":\"man gesturing NO: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FB 200D 2642\",\"char\":\"🙅🏻‍♂\",\"name\":\"man gesturing NO: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FC 200D 2642 FE0F\",\"char\":\"🙅🏼‍♂️\",\"name\":\"man gesturing NO: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FC 200D 2642\",\"char\":\"🙅🏼‍♂\",\"name\":\"man gesturing NO: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FD 200D 2642 FE0F\",\"char\":\"🙅🏽‍♂️\",\"name\":\"man gesturing NO: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FD 200D 2642\",\"char\":\"🙅🏽‍♂\",\"name\":\"man gesturing NO: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FE 200D 2642 FE0F\",\"char\":\"🙅🏾‍♂️\",\"name\":\"man gesturing NO: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FE 200D 2642\",\"char\":\"🙅🏾‍♂\",\"name\":\"man gesturing NO: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FF 200D 2642 FE0F\",\"char\":\"🙅🏿‍♂️\",\"name\":\"man gesturing NO: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FF 200D 2642\",\"char\":\"🙅🏿‍♂\",\"name\":\"man gesturing NO: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 200D 2640 FE0F\",\"char\":\"🙅‍♀️\",\"name\":\"woman gesturing NO\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 200D 2640\",\"char\":\"🙅‍♀\",\"name\":\"woman gesturing NO\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FB 200D 2640 FE0F\",\"char\":\"🙅🏻‍♀️\",\"name\":\"woman gesturing NO: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FB 200D 2640\",\"char\":\"🙅🏻‍♀\",\"name\":\"woman gesturing NO: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FC 200D 2640 FE0F\",\"char\":\"🙅🏼‍♀️\",\"name\":\"woman gesturing NO: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FC 200D 2640\",\"char\":\"🙅🏼‍♀\",\"name\":\"woman gesturing NO: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FD 200D 2640 FE0F\",\"char\":\"🙅🏽‍♀️\",\"name\":\"woman gesturing NO: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FD 200D 2640\",\"char\":\"🙅🏽‍♀\",\"name\":\"woman gesturing NO: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FE 200D 2640 FE0F\",\"char\":\"🙅🏾‍♀️\",\"name\":\"woman gesturing NO: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FE 200D 2640\",\"char\":\"🙅🏾‍♀\",\"name\":\"woman gesturing NO: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FF 200D 2640 FE0F\",\"char\":\"🙅🏿‍♀️\",\"name\":\"woman gesturing NO: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F645 1F3FF 200D 2640\",\"char\":\"🙅🏿‍♀\",\"name\":\"woman gesturing NO: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646\",\"char\":\"🙆\",\"name\":\"person gesturing OK\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FB\",\"char\":\"🙆🏻\",\"name\":\"person gesturing OK: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FC\",\"char\":\"🙆🏼\",\"name\":\"person gesturing OK: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FD\",\"char\":\"🙆🏽\",\"name\":\"person gesturing OK: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FE\",\"char\":\"🙆🏾\",\"name\":\"person gesturing OK: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FF\",\"char\":\"🙆🏿\",\"name\":\"person gesturing OK: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 200D 2642 FE0F\",\"char\":\"🙆‍♂️\",\"name\":\"man gesturing OK\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 200D 2642\",\"char\":\"🙆‍♂\",\"name\":\"man gesturing OK\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FB 200D 2642 FE0F\",\"char\":\"🙆🏻‍♂️\",\"name\":\"man gesturing OK: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FB 200D 2642\",\"char\":\"🙆🏻‍♂\",\"name\":\"man gesturing OK: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FC 200D 2642 FE0F\",\"char\":\"🙆🏼‍♂️\",\"name\":\"man gesturing OK: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FC 200D 2642\",\"char\":\"🙆🏼‍♂\",\"name\":\"man gesturing OK: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FD 200D 2642 FE0F\",\"char\":\"🙆🏽‍♂️\",\"name\":\"man gesturing OK: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FD 200D 2642\",\"char\":\"🙆🏽‍♂\",\"name\":\"man gesturing OK: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FE 200D 2642 FE0F\",\"char\":\"🙆🏾‍♂️\",\"name\":\"man gesturing OK: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FE 200D 2642\",\"char\":\"🙆🏾‍♂\",\"name\":\"man gesturing OK: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FF 200D 2642 FE0F\",\"char\":\"🙆🏿‍♂️\",\"name\":\"man gesturing OK: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FF 200D 2642\",\"char\":\"🙆🏿‍♂\",\"name\":\"man gesturing OK: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 200D 2640 FE0F\",\"char\":\"🙆‍♀️\",\"name\":\"woman gesturing OK\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 200D 2640\",\"char\":\"🙆‍♀\",\"name\":\"woman gesturing OK\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FB 200D 2640 FE0F\",\"char\":\"🙆🏻‍♀️\",\"name\":\"woman gesturing OK: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FB 200D 2640\",\"char\":\"🙆🏻‍♀\",\"name\":\"woman gesturing OK: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FC 200D 2640 FE0F\",\"char\":\"🙆🏼‍♀️\",\"name\":\"woman gesturing OK: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FC 200D 2640\",\"char\":\"🙆🏼‍♀\",\"name\":\"woman gesturing OK: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FD 200D 2640 FE0F\",\"char\":\"🙆🏽‍♀️\",\"name\":\"woman gesturing OK: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FD 200D 2640\",\"char\":\"🙆🏽‍♀\",\"name\":\"woman gesturing OK: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FE 200D 2640 FE0F\",\"char\":\"🙆🏾‍♀️\",\"name\":\"woman gesturing OK: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FE 200D 2640\",\"char\":\"🙆🏾‍♀\",\"name\":\"woman gesturing OK: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FF 200D 2640 FE0F\",\"char\":\"🙆🏿‍♀️\",\"name\":\"woman gesturing OK: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F646 1F3FF 200D 2640\",\"char\":\"🙆🏿‍♀\",\"name\":\"woman gesturing OK: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481\",\"char\":\"💁\",\"name\":\"person tipping hand\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FB\",\"char\":\"💁🏻\",\"name\":\"person tipping hand: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FC\",\"char\":\"💁🏼\",\"name\":\"person tipping hand: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FD\",\"char\":\"💁🏽\",\"name\":\"person tipping hand: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FE\",\"char\":\"💁🏾\",\"name\":\"person tipping hand: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FF\",\"char\":\"💁🏿\",\"name\":\"person tipping hand: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 200D 2642 FE0F\",\"char\":\"💁‍♂️\",\"name\":\"man tipping hand\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 200D 2642\",\"char\":\"💁‍♂\",\"name\":\"man tipping hand\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FB 200D 2642 FE0F\",\"char\":\"💁🏻‍♂️\",\"name\":\"man tipping hand: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FB 200D 2642\",\"char\":\"💁🏻‍♂\",\"name\":\"man tipping hand: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FC 200D 2642 FE0F\",\"char\":\"💁🏼‍♂️\",\"name\":\"man tipping hand: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FC 200D 2642\",\"char\":\"💁🏼‍♂\",\"name\":\"man tipping hand: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FD 200D 2642 FE0F\",\"char\":\"💁🏽‍♂️\",\"name\":\"man tipping hand: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FD 200D 2642\",\"char\":\"💁🏽‍♂\",\"name\":\"man tipping hand: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FE 200D 2642 FE0F\",\"char\":\"💁🏾‍♂️\",\"name\":\"man tipping hand: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FE 200D 2642\",\"char\":\"💁🏾‍♂\",\"name\":\"man tipping hand: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FF 200D 2642 FE0F\",\"char\":\"💁🏿‍♂️\",\"name\":\"man tipping hand: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FF 200D 2642\",\"char\":\"💁🏿‍♂\",\"name\":\"man tipping hand: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 200D 2640 FE0F\",\"char\":\"💁‍♀️\",\"name\":\"woman tipping hand\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 200D 2640\",\"char\":\"💁‍♀\",\"name\":\"woman tipping hand\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FB 200D 2640 FE0F\",\"char\":\"💁🏻‍♀️\",\"name\":\"woman tipping hand: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FB 200D 2640\",\"char\":\"💁🏻‍♀\",\"name\":\"woman tipping hand: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FC 200D 2640 FE0F\",\"char\":\"💁🏼‍♀️\",\"name\":\"woman tipping hand: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FC 200D 2640\",\"char\":\"💁🏼‍♀\",\"name\":\"woman tipping hand: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FD 200D 2640 FE0F\",\"char\":\"💁🏽‍♀️\",\"name\":\"woman tipping hand: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FD 200D 2640\",\"char\":\"💁🏽‍♀\",\"name\":\"woman tipping hand: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FE 200D 2640 FE0F\",\"char\":\"💁🏾‍♀️\",\"name\":\"woman tipping hand: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FE 200D 2640\",\"char\":\"💁🏾‍♀\",\"name\":\"woman tipping hand: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FF 200D 2640 FE0F\",\"char\":\"💁🏿‍♀️\",\"name\":\"woman tipping hand: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F481 1F3FF 200D 2640\",\"char\":\"💁🏿‍♀\",\"name\":\"woman tipping hand: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B\",\"char\":\"🙋\",\"name\":\"person raising hand\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FB\",\"char\":\"🙋🏻\",\"name\":\"person raising hand: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FC\",\"char\":\"🙋🏼\",\"name\":\"person raising hand: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FD\",\"char\":\"🙋🏽\",\"name\":\"person raising hand: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FE\",\"char\":\"🙋🏾\",\"name\":\"person raising hand: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FF\",\"char\":\"🙋🏿\",\"name\":\"person raising hand: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 200D 2642 FE0F\",\"char\":\"🙋‍♂️\",\"name\":\"man raising hand\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 200D 2642\",\"char\":\"🙋‍♂\",\"name\":\"man raising hand\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FB 200D 2642 FE0F\",\"char\":\"🙋🏻‍♂️\",\"name\":\"man raising hand: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FB 200D 2642\",\"char\":\"🙋🏻‍♂\",\"name\":\"man raising hand: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FC 200D 2642 FE0F\",\"char\":\"🙋🏼‍♂️\",\"name\":\"man raising hand: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FC 200D 2642\",\"char\":\"🙋🏼‍♂\",\"name\":\"man raising hand: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FD 200D 2642 FE0F\",\"char\":\"🙋🏽‍♂️\",\"name\":\"man raising hand: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FD 200D 2642\",\"char\":\"🙋🏽‍♂\",\"name\":\"man raising hand: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FE 200D 2642 FE0F\",\"char\":\"🙋🏾‍♂️\",\"name\":\"man raising hand: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FE 200D 2642\",\"char\":\"🙋🏾‍♂\",\"name\":\"man raising hand: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FF 200D 2642 FE0F\",\"char\":\"🙋🏿‍♂️\",\"name\":\"man raising hand: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FF 200D 2642\",\"char\":\"🙋🏿‍♂\",\"name\":\"man raising hand: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 200D 2640 FE0F\",\"char\":\"🙋‍♀️\",\"name\":\"woman raising hand\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 200D 2640\",\"char\":\"🙋‍♀\",\"name\":\"woman raising hand\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FB 200D 2640 FE0F\",\"char\":\"🙋🏻‍♀️\",\"name\":\"woman raising hand: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FB 200D 2640\",\"char\":\"🙋🏻‍♀\",\"name\":\"woman raising hand: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FC 200D 2640 FE0F\",\"char\":\"🙋🏼‍♀️\",\"name\":\"woman raising hand: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FC 200D 2640\",\"char\":\"🙋🏼‍♀\",\"name\":\"woman raising hand: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FD 200D 2640 FE0F\",\"char\":\"🙋🏽‍♀️\",\"name\":\"woman raising hand: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FD 200D 2640\",\"char\":\"🙋🏽‍♀\",\"name\":\"woman raising hand: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FE 200D 2640 FE0F\",\"char\":\"🙋🏾‍♀️\",\"name\":\"woman raising hand: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FE 200D 2640\",\"char\":\"🙋🏾‍♀\",\"name\":\"woman raising hand: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FF 200D 2640 FE0F\",\"char\":\"🙋🏿‍♀️\",\"name\":\"woman raising hand: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F64B 1F3FF 200D 2640\",\"char\":\"🙋🏿‍♀\",\"name\":\"woman raising hand: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF\",\"char\":\"🧏\",\"name\":\"deaf person\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FB\",\"char\":\"🧏🏻\",\"name\":\"deaf person: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FC\",\"char\":\"🧏🏼\",\"name\":\"deaf person: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FD\",\"char\":\"🧏🏽\",\"name\":\"deaf person: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FE\",\"char\":\"🧏🏾\",\"name\":\"deaf person: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FF\",\"char\":\"🧏🏿\",\"name\":\"deaf person: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 200D 2642 FE0F\",\"char\":\"🧏‍♂️\",\"name\":\"deaf man\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 200D 2642\",\"char\":\"🧏‍♂\",\"name\":\"deaf man\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FB 200D 2642 FE0F\",\"char\":\"🧏🏻‍♂️\",\"name\":\"deaf man: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FB 200D 2642\",\"char\":\"🧏🏻‍♂\",\"name\":\"deaf man: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FC 200D 2642 FE0F\",\"char\":\"🧏🏼‍♂️\",\"name\":\"deaf man: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FC 200D 2642\",\"char\":\"🧏🏼‍♂\",\"name\":\"deaf man: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FD 200D 2642 FE0F\",\"char\":\"🧏🏽‍♂️\",\"name\":\"deaf man: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FD 200D 2642\",\"char\":\"🧏🏽‍♂\",\"name\":\"deaf man: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FE 200D 2642 FE0F\",\"char\":\"🧏🏾‍♂️\",\"name\":\"deaf man: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FE 200D 2642\",\"char\":\"🧏🏾‍♂\",\"name\":\"deaf man: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FF 200D 2642 FE0F\",\"char\":\"🧏🏿‍♂️\",\"name\":\"deaf man: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FF 200D 2642\",\"char\":\"🧏🏿‍♂\",\"name\":\"deaf man: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 200D 2640 FE0F\",\"char\":\"🧏‍♀️\",\"name\":\"deaf woman\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 200D 2640\",\"char\":\"🧏‍♀\",\"name\":\"deaf woman\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FB 200D 2640 FE0F\",\"char\":\"🧏🏻‍♀️\",\"name\":\"deaf woman: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FB 200D 2640\",\"char\":\"🧏🏻‍♀\",\"name\":\"deaf woman: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FC 200D 2640 FE0F\",\"char\":\"🧏🏼‍♀️\",\"name\":\"deaf woman: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FC 200D 2640\",\"char\":\"🧏🏼‍♀\",\"name\":\"deaf woman: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FD 200D 2640 FE0F\",\"char\":\"🧏🏽‍♀️\",\"name\":\"deaf woman: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FD 200D 2640\",\"char\":\"🧏🏽‍♀\",\"name\":\"deaf woman: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FE 200D 2640 FE0F\",\"char\":\"🧏🏾‍♀️\",\"name\":\"deaf woman: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FE 200D 2640\",\"char\":\"🧏🏾‍♀\",\"name\":\"deaf woman: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FF 200D 2640 FE0F\",\"char\":\"🧏🏿‍♀️\",\"name\":\"deaf woman: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9CF 1F3FF 200D 2640\",\"char\":\"🧏🏿‍♀\",\"name\":\"deaf woman: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647\",\"char\":\"🙇\",\"name\":\"person bowing\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FB\",\"char\":\"🙇🏻\",\"name\":\"person bowing: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FC\",\"char\":\"🙇🏼\",\"name\":\"person bowing: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FD\",\"char\":\"🙇🏽\",\"name\":\"person bowing: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FE\",\"char\":\"🙇🏾\",\"name\":\"person bowing: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FF\",\"char\":\"🙇🏿\",\"name\":\"person bowing: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 200D 2642 FE0F\",\"char\":\"🙇‍♂️\",\"name\":\"man bowing\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 200D 2642\",\"char\":\"🙇‍♂\",\"name\":\"man bowing\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FB 200D 2642 FE0F\",\"char\":\"🙇🏻‍♂️\",\"name\":\"man bowing: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FB 200D 2642\",\"char\":\"🙇🏻‍♂\",\"name\":\"man bowing: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FC 200D 2642 FE0F\",\"char\":\"🙇🏼‍♂️\",\"name\":\"man bowing: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FC 200D 2642\",\"char\":\"🙇🏼‍♂\",\"name\":\"man bowing: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FD 200D 2642 FE0F\",\"char\":\"🙇🏽‍♂️\",\"name\":\"man bowing: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FD 200D 2642\",\"char\":\"🙇🏽‍♂\",\"name\":\"man bowing: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FE 200D 2642 FE0F\",\"char\":\"🙇🏾‍♂️\",\"name\":\"man bowing: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FE 200D 2642\",\"char\":\"🙇🏾‍♂\",\"name\":\"man bowing: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FF 200D 2642 FE0F\",\"char\":\"🙇🏿‍♂️\",\"name\":\"man bowing: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FF 200D 2642\",\"char\":\"🙇🏿‍♂\",\"name\":\"man bowing: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 200D 2640 FE0F\",\"char\":\"🙇‍♀️\",\"name\":\"woman bowing\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 200D 2640\",\"char\":\"🙇‍♀\",\"name\":\"woman bowing\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FB 200D 2640 FE0F\",\"char\":\"🙇🏻‍♀️\",\"name\":\"woman bowing: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FB 200D 2640\",\"char\":\"🙇🏻‍♀\",\"name\":\"woman bowing: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FC 200D 2640 FE0F\",\"char\":\"🙇🏼‍♀️\",\"name\":\"woman bowing: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FC 200D 2640\",\"char\":\"🙇🏼‍♀\",\"name\":\"woman bowing: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FD 200D 2640 FE0F\",\"char\":\"🙇🏽‍♀️\",\"name\":\"woman bowing: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FD 200D 2640\",\"char\":\"🙇🏽‍♀\",\"name\":\"woman bowing: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FE 200D 2640 FE0F\",\"char\":\"🙇🏾‍♀️\",\"name\":\"woman bowing: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FE 200D 2640\",\"char\":\"🙇🏾‍♀\",\"name\":\"woman bowing: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FF 200D 2640 FE0F\",\"char\":\"🙇🏿‍♀️\",\"name\":\"woman bowing: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F647 1F3FF 200D 2640\",\"char\":\"🙇🏿‍♀\",\"name\":\"woman bowing: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926\",\"char\":\"🤦\",\"name\":\"person facepalming\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FB\",\"char\":\"🤦🏻\",\"name\":\"person facepalming: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FC\",\"char\":\"🤦🏼\",\"name\":\"person facepalming: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FD\",\"char\":\"🤦🏽\",\"name\":\"person facepalming: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FE\",\"char\":\"🤦🏾\",\"name\":\"person facepalming: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FF\",\"char\":\"🤦🏿\",\"name\":\"person facepalming: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 200D 2642 FE0F\",\"char\":\"🤦‍♂️\",\"name\":\"man facepalming\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 200D 2642\",\"char\":\"🤦‍♂\",\"name\":\"man facepalming\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FB 200D 2642 FE0F\",\"char\":\"🤦🏻‍♂️\",\"name\":\"man facepalming: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FB 200D 2642\",\"char\":\"🤦🏻‍♂\",\"name\":\"man facepalming: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FC 200D 2642 FE0F\",\"char\":\"🤦🏼‍♂️\",\"name\":\"man facepalming: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FC 200D 2642\",\"char\":\"🤦🏼‍♂\",\"name\":\"man facepalming: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FD 200D 2642 FE0F\",\"char\":\"🤦🏽‍♂️\",\"name\":\"man facepalming: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FD 200D 2642\",\"char\":\"🤦🏽‍♂\",\"name\":\"man facepalming: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FE 200D 2642 FE0F\",\"char\":\"🤦🏾‍♂️\",\"name\":\"man facepalming: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FE 200D 2642\",\"char\":\"🤦🏾‍♂\",\"name\":\"man facepalming: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FF 200D 2642 FE0F\",\"char\":\"🤦🏿‍♂️\",\"name\":\"man facepalming: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FF 200D 2642\",\"char\":\"🤦🏿‍♂\",\"name\":\"man facepalming: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 200D 2640 FE0F\",\"char\":\"🤦‍♀️\",\"name\":\"woman facepalming\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 200D 2640\",\"char\":\"🤦‍♀\",\"name\":\"woman facepalming\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FB 200D 2640 FE0F\",\"char\":\"🤦🏻‍♀️\",\"name\":\"woman facepalming: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FB 200D 2640\",\"char\":\"🤦🏻‍♀\",\"name\":\"woman facepalming: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FC 200D 2640 FE0F\",\"char\":\"🤦🏼‍♀️\",\"name\":\"woman facepalming: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FC 200D 2640\",\"char\":\"🤦🏼‍♀\",\"name\":\"woman facepalming: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FD 200D 2640 FE0F\",\"char\":\"🤦🏽‍♀️\",\"name\":\"woman facepalming: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FD 200D 2640\",\"char\":\"🤦🏽‍♀\",\"name\":\"woman facepalming: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FE 200D 2640 FE0F\",\"char\":\"🤦🏾‍♀️\",\"name\":\"woman facepalming: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FE 200D 2640\",\"char\":\"🤦🏾‍♀\",\"name\":\"woman facepalming: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FF 200D 2640 FE0F\",\"char\":\"🤦🏿‍♀️\",\"name\":\"woman facepalming: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F926 1F3FF 200D 2640\",\"char\":\"🤦🏿‍♀\",\"name\":\"woman facepalming: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937\",\"char\":\"🤷\",\"name\":\"person shrugging\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FB\",\"char\":\"🤷🏻\",\"name\":\"person shrugging: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FC\",\"char\":\"🤷🏼\",\"name\":\"person shrugging: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FD\",\"char\":\"🤷🏽\",\"name\":\"person shrugging: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FE\",\"char\":\"🤷🏾\",\"name\":\"person shrugging: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FF\",\"char\":\"🤷🏿\",\"name\":\"person shrugging: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 200D 2642 FE0F\",\"char\":\"🤷‍♂️\",\"name\":\"man shrugging\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 200D 2642\",\"char\":\"🤷‍♂\",\"name\":\"man shrugging\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FB 200D 2642 FE0F\",\"char\":\"🤷🏻‍♂️\",\"name\":\"man shrugging: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FB 200D 2642\",\"char\":\"🤷🏻‍♂\",\"name\":\"man shrugging: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FC 200D 2642 FE0F\",\"char\":\"🤷🏼‍♂️\",\"name\":\"man shrugging: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FC 200D 2642\",\"char\":\"🤷🏼‍♂\",\"name\":\"man shrugging: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FD 200D 2642 FE0F\",\"char\":\"🤷🏽‍♂️\",\"name\":\"man shrugging: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FD 200D 2642\",\"char\":\"🤷🏽‍♂\",\"name\":\"man shrugging: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FE 200D 2642 FE0F\",\"char\":\"🤷🏾‍♂️\",\"name\":\"man shrugging: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FE 200D 2642\",\"char\":\"🤷🏾‍♂\",\"name\":\"man shrugging: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FF 200D 2642 FE0F\",\"char\":\"🤷🏿‍♂️\",\"name\":\"man shrugging: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FF 200D 2642\",\"char\":\"🤷🏿‍♂\",\"name\":\"man shrugging: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 200D 2640 FE0F\",\"char\":\"🤷‍♀️\",\"name\":\"woman shrugging\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 200D 2640\",\"char\":\"🤷‍♀\",\"name\":\"woman shrugging\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FB 200D 2640 FE0F\",\"char\":\"🤷🏻‍♀️\",\"name\":\"woman shrugging: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FB 200D 2640\",\"char\":\"🤷🏻‍♀\",\"name\":\"woman shrugging: light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FC 200D 2640 FE0F\",\"char\":\"🤷🏼‍♀️\",\"name\":\"woman shrugging: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FC 200D 2640\",\"char\":\"🤷🏼‍♀\",\"name\":\"woman shrugging: medium-light skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FD 200D 2640 FE0F\",\"char\":\"🤷🏽‍♀️\",\"name\":\"woman shrugging: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FD 200D 2640\",\"char\":\"🤷🏽‍♀\",\"name\":\"woman shrugging: medium skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FE 200D 2640 FE0F\",\"char\":\"🤷🏾‍♀️\",\"name\":\"woman shrugging: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FE 200D 2640\",\"char\":\"🤷🏾‍♀\",\"name\":\"woman shrugging: medium-dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FF 200D 2640 FE0F\",\"char\":\"🤷🏿‍♀️\",\"name\":\"woman shrugging: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F937 1F3FF 200D 2640\",\"char\":\"🤷🏿‍♀\",\"name\":\"woman shrugging: dark skin tone\",\"category\":\"People & Body (person-gesture)\",\"group\":\"People & Body\",\"subgroup\":\"person-gesture\"},{\"codes\":\"1F9D1 200D 2695 FE0F\",\"char\":\"🧑‍⚕️\",\"name\":\"health worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 2695\",\"char\":\"🧑‍⚕\",\"name\":\"health worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 2695 FE0F\",\"char\":\"🧑🏻‍⚕️\",\"name\":\"health worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 2695\",\"char\":\"🧑🏻‍⚕\",\"name\":\"health worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 2695 FE0F\",\"char\":\"🧑🏼‍⚕️\",\"name\":\"health worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 2695\",\"char\":\"🧑🏼‍⚕\",\"name\":\"health worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 2695 FE0F\",\"char\":\"🧑🏽‍⚕️\",\"name\":\"health worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 2695\",\"char\":\"🧑🏽‍⚕\",\"name\":\"health worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 2695 FE0F\",\"char\":\"🧑🏾‍⚕️\",\"name\":\"health worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 2695\",\"char\":\"🧑🏾‍⚕\",\"name\":\"health worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 2695 FE0F\",\"char\":\"🧑🏿‍⚕️\",\"name\":\"health worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 2695\",\"char\":\"🧑🏿‍⚕\",\"name\":\"health worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 2695 FE0F\",\"char\":\"👨‍⚕️\",\"name\":\"man health worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 2695\",\"char\":\"👨‍⚕\",\"name\":\"man health worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 2695 FE0F\",\"char\":\"👨🏻‍⚕️\",\"name\":\"man health worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 2695\",\"char\":\"👨🏻‍⚕\",\"name\":\"man health worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 2695 FE0F\",\"char\":\"👨🏼‍⚕️\",\"name\":\"man health worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 2695\",\"char\":\"👨🏼‍⚕\",\"name\":\"man health worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 2695 FE0F\",\"char\":\"👨🏽‍⚕️\",\"name\":\"man health worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 2695\",\"char\":\"👨🏽‍⚕\",\"name\":\"man health worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 2695 FE0F\",\"char\":\"👨🏾‍⚕️\",\"name\":\"man health worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 2695\",\"char\":\"👨🏾‍⚕\",\"name\":\"man health worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 2695 FE0F\",\"char\":\"👨🏿‍⚕️\",\"name\":\"man health worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 2695\",\"char\":\"👨🏿‍⚕\",\"name\":\"man health worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 2695 FE0F\",\"char\":\"👩‍⚕️\",\"name\":\"woman health worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 2695\",\"char\":\"👩‍⚕\",\"name\":\"woman health worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 2695 FE0F\",\"char\":\"👩🏻‍⚕️\",\"name\":\"woman health worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 2695\",\"char\":\"👩🏻‍⚕\",\"name\":\"woman health worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 2695 FE0F\",\"char\":\"👩🏼‍⚕️\",\"name\":\"woman health worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 2695\",\"char\":\"👩🏼‍⚕\",\"name\":\"woman health worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 2695 FE0F\",\"char\":\"👩🏽‍⚕️\",\"name\":\"woman health worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 2695\",\"char\":\"👩🏽‍⚕\",\"name\":\"woman health worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 2695 FE0F\",\"char\":\"👩🏾‍⚕️\",\"name\":\"woman health worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 2695\",\"char\":\"👩🏾‍⚕\",\"name\":\"woman health worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 2695 FE0F\",\"char\":\"👩🏿‍⚕️\",\"name\":\"woman health worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 2695\",\"char\":\"👩🏿‍⚕\",\"name\":\"woman health worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F393\",\"char\":\"🧑‍🎓\",\"name\":\"student\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F393\",\"char\":\"🧑🏻‍🎓\",\"name\":\"student: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F393\",\"char\":\"🧑🏼‍🎓\",\"name\":\"student: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F393\",\"char\":\"🧑🏽‍🎓\",\"name\":\"student: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F393\",\"char\":\"🧑🏾‍🎓\",\"name\":\"student: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F393\",\"char\":\"🧑🏿‍🎓\",\"name\":\"student: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F393\",\"char\":\"👨‍🎓\",\"name\":\"man student\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F393\",\"char\":\"👨🏻‍🎓\",\"name\":\"man student: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F393\",\"char\":\"👨🏼‍🎓\",\"name\":\"man student: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F393\",\"char\":\"👨🏽‍🎓\",\"name\":\"man student: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F393\",\"char\":\"👨🏾‍🎓\",\"name\":\"man student: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F393\",\"char\":\"👨🏿‍🎓\",\"name\":\"man student: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F393\",\"char\":\"👩‍🎓\",\"name\":\"woman student\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F393\",\"char\":\"👩🏻‍🎓\",\"name\":\"woman student: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F393\",\"char\":\"👩🏼‍🎓\",\"name\":\"woman student: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F393\",\"char\":\"👩🏽‍🎓\",\"name\":\"woman student: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F393\",\"char\":\"👩🏾‍🎓\",\"name\":\"woman student: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F393\",\"char\":\"👩🏿‍🎓\",\"name\":\"woman student: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F3EB\",\"char\":\"🧑‍🏫\",\"name\":\"teacher\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F3EB\",\"char\":\"🧑🏻‍🏫\",\"name\":\"teacher: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F3EB\",\"char\":\"🧑🏼‍🏫\",\"name\":\"teacher: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F3EB\",\"char\":\"🧑🏽‍🏫\",\"name\":\"teacher: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F3EB\",\"char\":\"🧑🏾‍🏫\",\"name\":\"teacher: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F3EB\",\"char\":\"🧑🏿‍🏫\",\"name\":\"teacher: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F3EB\",\"char\":\"👨‍🏫\",\"name\":\"man teacher\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F3EB\",\"char\":\"👨🏻‍🏫\",\"name\":\"man teacher: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F3EB\",\"char\":\"👨🏼‍🏫\",\"name\":\"man teacher: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F3EB\",\"char\":\"👨🏽‍🏫\",\"name\":\"man teacher: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F3EB\",\"char\":\"👨🏾‍🏫\",\"name\":\"man teacher: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F3EB\",\"char\":\"👨🏿‍🏫\",\"name\":\"man teacher: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F3EB\",\"char\":\"👩‍🏫\",\"name\":\"woman teacher\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F3EB\",\"char\":\"👩🏻‍🏫\",\"name\":\"woman teacher: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F3EB\",\"char\":\"👩🏼‍🏫\",\"name\":\"woman teacher: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F3EB\",\"char\":\"👩🏽‍🏫\",\"name\":\"woman teacher: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F3EB\",\"char\":\"👩🏾‍🏫\",\"name\":\"woman teacher: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F3EB\",\"char\":\"👩🏿‍🏫\",\"name\":\"woman teacher: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 2696 FE0F\",\"char\":\"🧑‍⚖️\",\"name\":\"judge\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 2696\",\"char\":\"🧑‍⚖\",\"name\":\"judge\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 2696 FE0F\",\"char\":\"🧑🏻‍⚖️\",\"name\":\"judge: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 2696\",\"char\":\"🧑🏻‍⚖\",\"name\":\"judge: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 2696 FE0F\",\"char\":\"🧑🏼‍⚖️\",\"name\":\"judge: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 2696\",\"char\":\"🧑🏼‍⚖\",\"name\":\"judge: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 2696 FE0F\",\"char\":\"🧑🏽‍⚖️\",\"name\":\"judge: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 2696\",\"char\":\"🧑🏽‍⚖\",\"name\":\"judge: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 2696 FE0F\",\"char\":\"🧑🏾‍⚖️\",\"name\":\"judge: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 2696\",\"char\":\"🧑🏾‍⚖\",\"name\":\"judge: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 2696 FE0F\",\"char\":\"🧑🏿‍⚖️\",\"name\":\"judge: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 2696\",\"char\":\"🧑🏿‍⚖\",\"name\":\"judge: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 2696 FE0F\",\"char\":\"👨‍⚖️\",\"name\":\"man judge\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 2696\",\"char\":\"👨‍⚖\",\"name\":\"man judge\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 2696 FE0F\",\"char\":\"👨🏻‍⚖️\",\"name\":\"man judge: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 2696\",\"char\":\"👨🏻‍⚖\",\"name\":\"man judge: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 2696 FE0F\",\"char\":\"👨🏼‍⚖️\",\"name\":\"man judge: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 2696\",\"char\":\"👨🏼‍⚖\",\"name\":\"man judge: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 2696 FE0F\",\"char\":\"👨🏽‍⚖️\",\"name\":\"man judge: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 2696\",\"char\":\"👨🏽‍⚖\",\"name\":\"man judge: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 2696 FE0F\",\"char\":\"👨🏾‍⚖️\",\"name\":\"man judge: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 2696\",\"char\":\"👨🏾‍⚖\",\"name\":\"man judge: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 2696 FE0F\",\"char\":\"👨🏿‍⚖️\",\"name\":\"man judge: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 2696\",\"char\":\"👨🏿‍⚖\",\"name\":\"man judge: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 2696 FE0F\",\"char\":\"👩‍⚖️\",\"name\":\"woman judge\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 2696\",\"char\":\"👩‍⚖\",\"name\":\"woman judge\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 2696 FE0F\",\"char\":\"👩🏻‍⚖️\",\"name\":\"woman judge: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 2696\",\"char\":\"👩🏻‍⚖\",\"name\":\"woman judge: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 2696 FE0F\",\"char\":\"👩🏼‍⚖️\",\"name\":\"woman judge: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 2696\",\"char\":\"👩🏼‍⚖\",\"name\":\"woman judge: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 2696 FE0F\",\"char\":\"👩🏽‍⚖️\",\"name\":\"woman judge: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 2696\",\"char\":\"👩🏽‍⚖\",\"name\":\"woman judge: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 2696 FE0F\",\"char\":\"👩🏾‍⚖️\",\"name\":\"woman judge: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 2696\",\"char\":\"👩🏾‍⚖\",\"name\":\"woman judge: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 2696 FE0F\",\"char\":\"👩🏿‍⚖️\",\"name\":\"woman judge: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 2696\",\"char\":\"👩🏿‍⚖\",\"name\":\"woman judge: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F33E\",\"char\":\"🧑‍🌾\",\"name\":\"farmer\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F33E\",\"char\":\"🧑🏻‍🌾\",\"name\":\"farmer: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F33E\",\"char\":\"🧑🏼‍🌾\",\"name\":\"farmer: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F33E\",\"char\":\"🧑🏽‍🌾\",\"name\":\"farmer: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F33E\",\"char\":\"🧑🏾‍🌾\",\"name\":\"farmer: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F33E\",\"char\":\"🧑🏿‍🌾\",\"name\":\"farmer: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F33E\",\"char\":\"👨‍🌾\",\"name\":\"man farmer\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F33E\",\"char\":\"👨🏻‍🌾\",\"name\":\"man farmer: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F33E\",\"char\":\"👨🏼‍🌾\",\"name\":\"man farmer: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F33E\",\"char\":\"👨🏽‍🌾\",\"name\":\"man farmer: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F33E\",\"char\":\"👨🏾‍🌾\",\"name\":\"man farmer: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F33E\",\"char\":\"👨🏿‍🌾\",\"name\":\"man farmer: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F33E\",\"char\":\"👩‍🌾\",\"name\":\"woman farmer\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F33E\",\"char\":\"👩🏻‍🌾\",\"name\":\"woman farmer: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F33E\",\"char\":\"👩🏼‍🌾\",\"name\":\"woman farmer: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F33E\",\"char\":\"👩🏽‍🌾\",\"name\":\"woman farmer: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F33E\",\"char\":\"👩🏾‍🌾\",\"name\":\"woman farmer: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F33E\",\"char\":\"👩🏿‍🌾\",\"name\":\"woman farmer: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F373\",\"char\":\"🧑‍🍳\",\"name\":\"cook\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F373\",\"char\":\"🧑🏻‍🍳\",\"name\":\"cook: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F373\",\"char\":\"🧑🏼‍🍳\",\"name\":\"cook: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F373\",\"char\":\"🧑🏽‍🍳\",\"name\":\"cook: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F373\",\"char\":\"🧑🏾‍🍳\",\"name\":\"cook: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F373\",\"char\":\"🧑🏿‍🍳\",\"name\":\"cook: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F373\",\"char\":\"👨‍🍳\",\"name\":\"man cook\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F373\",\"char\":\"👨🏻‍🍳\",\"name\":\"man cook: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F373\",\"char\":\"👨🏼‍🍳\",\"name\":\"man cook: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F373\",\"char\":\"👨🏽‍🍳\",\"name\":\"man cook: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F373\",\"char\":\"👨🏾‍🍳\",\"name\":\"man cook: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F373\",\"char\":\"👨🏿‍🍳\",\"name\":\"man cook: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F373\",\"char\":\"👩‍🍳\",\"name\":\"woman cook\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F373\",\"char\":\"👩🏻‍🍳\",\"name\":\"woman cook: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F373\",\"char\":\"👩🏼‍🍳\",\"name\":\"woman cook: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F373\",\"char\":\"👩🏽‍🍳\",\"name\":\"woman cook: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F373\",\"char\":\"👩🏾‍🍳\",\"name\":\"woman cook: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F373\",\"char\":\"👩🏿‍🍳\",\"name\":\"woman cook: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F527\",\"char\":\"🧑‍🔧\",\"name\":\"mechanic\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F527\",\"char\":\"🧑🏻‍🔧\",\"name\":\"mechanic: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F527\",\"char\":\"🧑🏼‍🔧\",\"name\":\"mechanic: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F527\",\"char\":\"🧑🏽‍🔧\",\"name\":\"mechanic: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F527\",\"char\":\"🧑🏾‍🔧\",\"name\":\"mechanic: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F527\",\"char\":\"🧑🏿‍🔧\",\"name\":\"mechanic: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F527\",\"char\":\"👨‍🔧\",\"name\":\"man mechanic\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F527\",\"char\":\"👨🏻‍🔧\",\"name\":\"man mechanic: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F527\",\"char\":\"👨🏼‍🔧\",\"name\":\"man mechanic: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F527\",\"char\":\"👨🏽‍🔧\",\"name\":\"man mechanic: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F527\",\"char\":\"👨🏾‍🔧\",\"name\":\"man mechanic: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F527\",\"char\":\"👨🏿‍🔧\",\"name\":\"man mechanic: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F527\",\"char\":\"👩‍🔧\",\"name\":\"woman mechanic\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F527\",\"char\":\"👩🏻‍🔧\",\"name\":\"woman mechanic: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F527\",\"char\":\"👩🏼‍🔧\",\"name\":\"woman mechanic: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F527\",\"char\":\"👩🏽‍🔧\",\"name\":\"woman mechanic: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F527\",\"char\":\"👩🏾‍🔧\",\"name\":\"woman mechanic: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F527\",\"char\":\"👩🏿‍🔧\",\"name\":\"woman mechanic: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F3ED\",\"char\":\"🧑‍🏭\",\"name\":\"factory worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F3ED\",\"char\":\"🧑🏻‍🏭\",\"name\":\"factory worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F3ED\",\"char\":\"🧑🏼‍🏭\",\"name\":\"factory worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F3ED\",\"char\":\"🧑🏽‍🏭\",\"name\":\"factory worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F3ED\",\"char\":\"🧑🏾‍🏭\",\"name\":\"factory worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F3ED\",\"char\":\"🧑🏿‍🏭\",\"name\":\"factory worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F3ED\",\"char\":\"👨‍🏭\",\"name\":\"man factory worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F3ED\",\"char\":\"👨🏻‍🏭\",\"name\":\"man factory worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F3ED\",\"char\":\"👨🏼‍🏭\",\"name\":\"man factory worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F3ED\",\"char\":\"👨🏽‍🏭\",\"name\":\"man factory worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F3ED\",\"char\":\"👨🏾‍🏭\",\"name\":\"man factory worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F3ED\",\"char\":\"👨🏿‍🏭\",\"name\":\"man factory worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F3ED\",\"char\":\"👩‍🏭\",\"name\":\"woman factory worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F3ED\",\"char\":\"👩🏻‍🏭\",\"name\":\"woman factory worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F3ED\",\"char\":\"👩🏼‍🏭\",\"name\":\"woman factory worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F3ED\",\"char\":\"👩🏽‍🏭\",\"name\":\"woman factory worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F3ED\",\"char\":\"👩🏾‍🏭\",\"name\":\"woman factory worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F3ED\",\"char\":\"👩🏿‍🏭\",\"name\":\"woman factory worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F4BC\",\"char\":\"🧑‍💼\",\"name\":\"office worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F4BC\",\"char\":\"🧑🏻‍💼\",\"name\":\"office worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F4BC\",\"char\":\"🧑🏼‍💼\",\"name\":\"office worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F4BC\",\"char\":\"🧑🏽‍💼\",\"name\":\"office worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F4BC\",\"char\":\"🧑🏾‍💼\",\"name\":\"office worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F4BC\",\"char\":\"🧑🏿‍💼\",\"name\":\"office worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F4BC\",\"char\":\"👨‍💼\",\"name\":\"man office worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F4BC\",\"char\":\"👨🏻‍💼\",\"name\":\"man office worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F4BC\",\"char\":\"👨🏼‍💼\",\"name\":\"man office worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F4BC\",\"char\":\"👨🏽‍💼\",\"name\":\"man office worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F4BC\",\"char\":\"👨🏾‍💼\",\"name\":\"man office worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F4BC\",\"char\":\"👨🏿‍💼\",\"name\":\"man office worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F4BC\",\"char\":\"👩‍💼\",\"name\":\"woman office worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F4BC\",\"char\":\"👩🏻‍💼\",\"name\":\"woman office worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F4BC\",\"char\":\"👩🏼‍💼\",\"name\":\"woman office worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F4BC\",\"char\":\"👩🏽‍💼\",\"name\":\"woman office worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F4BC\",\"char\":\"👩🏾‍💼\",\"name\":\"woman office worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F4BC\",\"char\":\"👩🏿‍💼\",\"name\":\"woman office worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F52C\",\"char\":\"🧑‍🔬\",\"name\":\"scientist\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F52C\",\"char\":\"🧑🏻‍🔬\",\"name\":\"scientist: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F52C\",\"char\":\"🧑🏼‍🔬\",\"name\":\"scientist: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F52C\",\"char\":\"🧑🏽‍🔬\",\"name\":\"scientist: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F52C\",\"char\":\"🧑🏾‍🔬\",\"name\":\"scientist: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F52C\",\"char\":\"🧑🏿‍🔬\",\"name\":\"scientist: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F52C\",\"char\":\"👨‍🔬\",\"name\":\"man scientist\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F52C\",\"char\":\"👨🏻‍🔬\",\"name\":\"man scientist: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F52C\",\"char\":\"👨🏼‍🔬\",\"name\":\"man scientist: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F52C\",\"char\":\"👨🏽‍🔬\",\"name\":\"man scientist: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F52C\",\"char\":\"👨🏾‍🔬\",\"name\":\"man scientist: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F52C\",\"char\":\"👨🏿‍🔬\",\"name\":\"man scientist: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F52C\",\"char\":\"👩‍🔬\",\"name\":\"woman scientist\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F52C\",\"char\":\"👩🏻‍🔬\",\"name\":\"woman scientist: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F52C\",\"char\":\"👩🏼‍🔬\",\"name\":\"woman scientist: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F52C\",\"char\":\"👩🏽‍🔬\",\"name\":\"woman scientist: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F52C\",\"char\":\"👩🏾‍🔬\",\"name\":\"woman scientist: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F52C\",\"char\":\"👩🏿‍🔬\",\"name\":\"woman scientist: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F4BB\",\"char\":\"🧑‍💻\",\"name\":\"technologist\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F4BB\",\"char\":\"🧑🏻‍💻\",\"name\":\"technologist: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F4BB\",\"char\":\"🧑🏼‍💻\",\"name\":\"technologist: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F4BB\",\"char\":\"🧑🏽‍💻\",\"name\":\"technologist: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F4BB\",\"char\":\"🧑🏾‍💻\",\"name\":\"technologist: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F4BB\",\"char\":\"🧑🏿‍💻\",\"name\":\"technologist: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F4BB\",\"char\":\"👨‍💻\",\"name\":\"man technologist\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F4BB\",\"char\":\"👨🏻‍💻\",\"name\":\"man technologist: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F4BB\",\"char\":\"👨🏼‍💻\",\"name\":\"man technologist: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F4BB\",\"char\":\"👨🏽‍💻\",\"name\":\"man technologist: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F4BB\",\"char\":\"👨🏾‍💻\",\"name\":\"man technologist: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F4BB\",\"char\":\"👨🏿‍💻\",\"name\":\"man technologist: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F4BB\",\"char\":\"👩‍💻\",\"name\":\"woman technologist\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F4BB\",\"char\":\"👩🏻‍💻\",\"name\":\"woman technologist: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F4BB\",\"char\":\"👩🏼‍💻\",\"name\":\"woman technologist: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F4BB\",\"char\":\"👩🏽‍💻\",\"name\":\"woman technologist: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F4BB\",\"char\":\"👩🏾‍💻\",\"name\":\"woman technologist: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F4BB\",\"char\":\"👩🏿‍💻\",\"name\":\"woman technologist: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F3A4\",\"char\":\"🧑‍🎤\",\"name\":\"singer\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F3A4\",\"char\":\"🧑🏻‍🎤\",\"name\":\"singer: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F3A4\",\"char\":\"🧑🏼‍🎤\",\"name\":\"singer: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F3A4\",\"char\":\"🧑🏽‍🎤\",\"name\":\"singer: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F3A4\",\"char\":\"🧑🏾‍🎤\",\"name\":\"singer: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F3A4\",\"char\":\"🧑🏿‍🎤\",\"name\":\"singer: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F3A4\",\"char\":\"👨‍🎤\",\"name\":\"man singer\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F3A4\",\"char\":\"👨🏻‍🎤\",\"name\":\"man singer: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F3A4\",\"char\":\"👨🏼‍🎤\",\"name\":\"man singer: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F3A4\",\"char\":\"👨🏽‍🎤\",\"name\":\"man singer: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F3A4\",\"char\":\"👨🏾‍🎤\",\"name\":\"man singer: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F3A4\",\"char\":\"👨🏿‍🎤\",\"name\":\"man singer: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F3A4\",\"char\":\"👩‍🎤\",\"name\":\"woman singer\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F3A4\",\"char\":\"👩🏻‍🎤\",\"name\":\"woman singer: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F3A4\",\"char\":\"👩🏼‍🎤\",\"name\":\"woman singer: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F3A4\",\"char\":\"👩🏽‍🎤\",\"name\":\"woman singer: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F3A4\",\"char\":\"👩🏾‍🎤\",\"name\":\"woman singer: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F3A4\",\"char\":\"👩🏿‍🎤\",\"name\":\"woman singer: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F3A8\",\"char\":\"🧑‍🎨\",\"name\":\"artist\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F3A8\",\"char\":\"🧑🏻‍🎨\",\"name\":\"artist: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F3A8\",\"char\":\"🧑🏼‍🎨\",\"name\":\"artist: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F3A8\",\"char\":\"🧑🏽‍🎨\",\"name\":\"artist: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F3A8\",\"char\":\"🧑🏾‍🎨\",\"name\":\"artist: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F3A8\",\"char\":\"🧑🏿‍🎨\",\"name\":\"artist: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F3A8\",\"char\":\"👨‍🎨\",\"name\":\"man artist\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F3A8\",\"char\":\"👨🏻‍🎨\",\"name\":\"man artist: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F3A8\",\"char\":\"👨🏼‍🎨\",\"name\":\"man artist: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F3A8\",\"char\":\"👨🏽‍🎨\",\"name\":\"man artist: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F3A8\",\"char\":\"👨🏾‍🎨\",\"name\":\"man artist: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F3A8\",\"char\":\"👨🏿‍🎨\",\"name\":\"man artist: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F3A8\",\"char\":\"👩‍🎨\",\"name\":\"woman artist\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F3A8\",\"char\":\"👩🏻‍🎨\",\"name\":\"woman artist: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F3A8\",\"char\":\"👩🏼‍🎨\",\"name\":\"woman artist: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F3A8\",\"char\":\"👩🏽‍🎨\",\"name\":\"woman artist: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F3A8\",\"char\":\"👩🏾‍🎨\",\"name\":\"woman artist: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F3A8\",\"char\":\"👩🏿‍🎨\",\"name\":\"woman artist: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 2708 FE0F\",\"char\":\"🧑‍✈️\",\"name\":\"pilot\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 2708\",\"char\":\"🧑‍✈\",\"name\":\"pilot\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 2708 FE0F\",\"char\":\"🧑🏻‍✈️\",\"name\":\"pilot: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 2708\",\"char\":\"🧑🏻‍✈\",\"name\":\"pilot: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 2708 FE0F\",\"char\":\"🧑🏼‍✈️\",\"name\":\"pilot: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 2708\",\"char\":\"🧑🏼‍✈\",\"name\":\"pilot: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 2708 FE0F\",\"char\":\"🧑🏽‍✈️\",\"name\":\"pilot: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 2708\",\"char\":\"🧑🏽‍✈\",\"name\":\"pilot: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 2708 FE0F\",\"char\":\"🧑🏾‍✈️\",\"name\":\"pilot: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 2708\",\"char\":\"🧑🏾‍✈\",\"name\":\"pilot: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 2708 FE0F\",\"char\":\"🧑🏿‍✈️\",\"name\":\"pilot: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 2708\",\"char\":\"🧑🏿‍✈\",\"name\":\"pilot: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 2708 FE0F\",\"char\":\"👨‍✈️\",\"name\":\"man pilot\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 2708\",\"char\":\"👨‍✈\",\"name\":\"man pilot\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 2708 FE0F\",\"char\":\"👨🏻‍✈️\",\"name\":\"man pilot: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 2708\",\"char\":\"👨🏻‍✈\",\"name\":\"man pilot: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 2708 FE0F\",\"char\":\"👨🏼‍✈️\",\"name\":\"man pilot: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 2708\",\"char\":\"👨🏼‍✈\",\"name\":\"man pilot: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 2708 FE0F\",\"char\":\"👨🏽‍✈️\",\"name\":\"man pilot: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 2708\",\"char\":\"👨🏽‍✈\",\"name\":\"man pilot: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 2708 FE0F\",\"char\":\"👨🏾‍✈️\",\"name\":\"man pilot: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 2708\",\"char\":\"👨🏾‍✈\",\"name\":\"man pilot: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 2708 FE0F\",\"char\":\"👨🏿‍✈️\",\"name\":\"man pilot: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 2708\",\"char\":\"👨🏿‍✈\",\"name\":\"man pilot: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 2708 FE0F\",\"char\":\"👩‍✈️\",\"name\":\"woman pilot\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 2708\",\"char\":\"👩‍✈\",\"name\":\"woman pilot\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 2708 FE0F\",\"char\":\"👩🏻‍✈️\",\"name\":\"woman pilot: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 2708\",\"char\":\"👩🏻‍✈\",\"name\":\"woman pilot: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 2708 FE0F\",\"char\":\"👩🏼‍✈️\",\"name\":\"woman pilot: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 2708\",\"char\":\"👩🏼‍✈\",\"name\":\"woman pilot: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 2708 FE0F\",\"char\":\"👩🏽‍✈️\",\"name\":\"woman pilot: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 2708\",\"char\":\"👩🏽‍✈\",\"name\":\"woman pilot: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 2708 FE0F\",\"char\":\"👩🏾‍✈️\",\"name\":\"woman pilot: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 2708\",\"char\":\"👩🏾‍✈\",\"name\":\"woman pilot: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 2708 FE0F\",\"char\":\"👩🏿‍✈️\",\"name\":\"woman pilot: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 2708\",\"char\":\"👩🏿‍✈\",\"name\":\"woman pilot: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F680\",\"char\":\"🧑‍🚀\",\"name\":\"astronaut\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F680\",\"char\":\"🧑🏻‍🚀\",\"name\":\"astronaut: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F680\",\"char\":\"🧑🏼‍🚀\",\"name\":\"astronaut: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F680\",\"char\":\"🧑🏽‍🚀\",\"name\":\"astronaut: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F680\",\"char\":\"🧑🏾‍🚀\",\"name\":\"astronaut: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F680\",\"char\":\"🧑🏿‍🚀\",\"name\":\"astronaut: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F680\",\"char\":\"👨‍🚀\",\"name\":\"man astronaut\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F680\",\"char\":\"👨🏻‍🚀\",\"name\":\"man astronaut: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F680\",\"char\":\"👨🏼‍🚀\",\"name\":\"man astronaut: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F680\",\"char\":\"👨🏽‍🚀\",\"name\":\"man astronaut: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F680\",\"char\":\"👨🏾‍🚀\",\"name\":\"man astronaut: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F680\",\"char\":\"👨🏿‍🚀\",\"name\":\"man astronaut: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F680\",\"char\":\"👩‍🚀\",\"name\":\"woman astronaut\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F680\",\"char\":\"👩🏻‍🚀\",\"name\":\"woman astronaut: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F680\",\"char\":\"👩🏼‍🚀\",\"name\":\"woman astronaut: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F680\",\"char\":\"👩🏽‍🚀\",\"name\":\"woman astronaut: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F680\",\"char\":\"👩🏾‍🚀\",\"name\":\"woman astronaut: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F680\",\"char\":\"👩🏿‍🚀\",\"name\":\"woman astronaut: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F692\",\"char\":\"🧑‍🚒\",\"name\":\"firefighter\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F692\",\"char\":\"🧑🏻‍🚒\",\"name\":\"firefighter: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F692\",\"char\":\"🧑🏼‍🚒\",\"name\":\"firefighter: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F692\",\"char\":\"🧑🏽‍🚒\",\"name\":\"firefighter: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F692\",\"char\":\"🧑🏾‍🚒\",\"name\":\"firefighter: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F692\",\"char\":\"🧑🏿‍🚒\",\"name\":\"firefighter: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F692\",\"char\":\"👨‍🚒\",\"name\":\"man firefighter\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F692\",\"char\":\"👨🏻‍🚒\",\"name\":\"man firefighter: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F692\",\"char\":\"👨🏼‍🚒\",\"name\":\"man firefighter: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F692\",\"char\":\"👨🏽‍🚒\",\"name\":\"man firefighter: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F692\",\"char\":\"👨🏾‍🚒\",\"name\":\"man firefighter: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F692\",\"char\":\"👨🏿‍🚒\",\"name\":\"man firefighter: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F692\",\"char\":\"👩‍🚒\",\"name\":\"woman firefighter\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F692\",\"char\":\"👩🏻‍🚒\",\"name\":\"woman firefighter: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F692\",\"char\":\"👩🏼‍🚒\",\"name\":\"woman firefighter: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F692\",\"char\":\"👩🏽‍🚒\",\"name\":\"woman firefighter: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F692\",\"char\":\"👩🏾‍🚒\",\"name\":\"woman firefighter: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F692\",\"char\":\"👩🏿‍🚒\",\"name\":\"woman firefighter: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E\",\"char\":\"👮\",\"name\":\"police officer\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FB\",\"char\":\"👮🏻\",\"name\":\"police officer: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FC\",\"char\":\"👮🏼\",\"name\":\"police officer: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FD\",\"char\":\"👮🏽\",\"name\":\"police officer: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FE\",\"char\":\"👮🏾\",\"name\":\"police officer: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FF\",\"char\":\"👮🏿\",\"name\":\"police officer: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 200D 2642 FE0F\",\"char\":\"👮‍♂️\",\"name\":\"man police officer\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 200D 2642\",\"char\":\"👮‍♂\",\"name\":\"man police officer\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FB 200D 2642 FE0F\",\"char\":\"👮🏻‍♂️\",\"name\":\"man police officer: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FB 200D 2642\",\"char\":\"👮🏻‍♂\",\"name\":\"man police officer: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FC 200D 2642 FE0F\",\"char\":\"👮🏼‍♂️\",\"name\":\"man police officer: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FC 200D 2642\",\"char\":\"👮🏼‍♂\",\"name\":\"man police officer: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FD 200D 2642 FE0F\",\"char\":\"👮🏽‍♂️\",\"name\":\"man police officer: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FD 200D 2642\",\"char\":\"👮🏽‍♂\",\"name\":\"man police officer: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FE 200D 2642 FE0F\",\"char\":\"👮🏾‍♂️\",\"name\":\"man police officer: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FE 200D 2642\",\"char\":\"👮🏾‍♂\",\"name\":\"man police officer: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FF 200D 2642 FE0F\",\"char\":\"👮🏿‍♂️\",\"name\":\"man police officer: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FF 200D 2642\",\"char\":\"👮🏿‍♂\",\"name\":\"man police officer: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 200D 2640 FE0F\",\"char\":\"👮‍♀️\",\"name\":\"woman police officer\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 200D 2640\",\"char\":\"👮‍♀\",\"name\":\"woman police officer\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FB 200D 2640 FE0F\",\"char\":\"👮🏻‍♀️\",\"name\":\"woman police officer: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FB 200D 2640\",\"char\":\"👮🏻‍♀\",\"name\":\"woman police officer: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FC 200D 2640 FE0F\",\"char\":\"👮🏼‍♀️\",\"name\":\"woman police officer: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FC 200D 2640\",\"char\":\"👮🏼‍♀\",\"name\":\"woman police officer: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FD 200D 2640 FE0F\",\"char\":\"👮🏽‍♀️\",\"name\":\"woman police officer: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FD 200D 2640\",\"char\":\"👮🏽‍♀\",\"name\":\"woman police officer: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FE 200D 2640 FE0F\",\"char\":\"👮🏾‍♀️\",\"name\":\"woman police officer: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FE 200D 2640\",\"char\":\"👮🏾‍♀\",\"name\":\"woman police officer: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FF 200D 2640 FE0F\",\"char\":\"👮🏿‍♀️\",\"name\":\"woman police officer: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F46E 1F3FF 200D 2640\",\"char\":\"👮🏿‍♀\",\"name\":\"woman police officer: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 FE0F\",\"char\":\"🕵️\",\"name\":\"detective\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575\",\"char\":\"🕵\",\"name\":\"detective\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FB\",\"char\":\"🕵🏻\",\"name\":\"detective: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FC\",\"char\":\"🕵🏼\",\"name\":\"detective: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FD\",\"char\":\"🕵🏽\",\"name\":\"detective: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FE\",\"char\":\"🕵🏾\",\"name\":\"detective: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FF\",\"char\":\"🕵🏿\",\"name\":\"detective: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 FE0F 200D 2642 FE0F\",\"char\":\"🕵️‍♂️\",\"name\":\"man detective\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 200D 2642 FE0F\",\"char\":\"🕵‍♂️\",\"name\":\"man detective\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 FE0F 200D 2642\",\"char\":\"🕵️‍♂\",\"name\":\"man detective\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 200D 2642\",\"char\":\"🕵‍♂\",\"name\":\"man detective\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FB 200D 2642 FE0F\",\"char\":\"🕵🏻‍♂️\",\"name\":\"man detective: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FB 200D 2642\",\"char\":\"🕵🏻‍♂\",\"name\":\"man detective: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FC 200D 2642 FE0F\",\"char\":\"🕵🏼‍♂️\",\"name\":\"man detective: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FC 200D 2642\",\"char\":\"🕵🏼‍♂\",\"name\":\"man detective: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FD 200D 2642 FE0F\",\"char\":\"🕵🏽‍♂️\",\"name\":\"man detective: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FD 200D 2642\",\"char\":\"🕵🏽‍♂\",\"name\":\"man detective: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FE 200D 2642 FE0F\",\"char\":\"🕵🏾‍♂️\",\"name\":\"man detective: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FE 200D 2642\",\"char\":\"🕵🏾‍♂\",\"name\":\"man detective: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FF 200D 2642 FE0F\",\"char\":\"🕵🏿‍♂️\",\"name\":\"man detective: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FF 200D 2642\",\"char\":\"🕵🏿‍♂\",\"name\":\"man detective: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 FE0F 200D 2640 FE0F\",\"char\":\"🕵️‍♀️\",\"name\":\"woman detective\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 200D 2640 FE0F\",\"char\":\"🕵‍♀️\",\"name\":\"woman detective\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 FE0F 200D 2640\",\"char\":\"🕵️‍♀\",\"name\":\"woman detective\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 200D 2640\",\"char\":\"🕵‍♀\",\"name\":\"woman detective\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FB 200D 2640 FE0F\",\"char\":\"🕵🏻‍♀️\",\"name\":\"woman detective: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FB 200D 2640\",\"char\":\"🕵🏻‍♀\",\"name\":\"woman detective: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FC 200D 2640 FE0F\",\"char\":\"🕵🏼‍♀️\",\"name\":\"woman detective: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FC 200D 2640\",\"char\":\"🕵🏼‍♀\",\"name\":\"woman detective: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FD 200D 2640 FE0F\",\"char\":\"🕵🏽‍♀️\",\"name\":\"woman detective: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FD 200D 2640\",\"char\":\"🕵🏽‍♀\",\"name\":\"woman detective: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FE 200D 2640 FE0F\",\"char\":\"🕵🏾‍♀️\",\"name\":\"woman detective: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FE 200D 2640\",\"char\":\"🕵🏾‍♀\",\"name\":\"woman detective: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FF 200D 2640 FE0F\",\"char\":\"🕵🏿‍♀️\",\"name\":\"woman detective: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F575 1F3FF 200D 2640\",\"char\":\"🕵🏿‍♀\",\"name\":\"woman detective: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482\",\"char\":\"💂\",\"name\":\"guard\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FB\",\"char\":\"💂🏻\",\"name\":\"guard: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FC\",\"char\":\"💂🏼\",\"name\":\"guard: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FD\",\"char\":\"💂🏽\",\"name\":\"guard: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FE\",\"char\":\"💂🏾\",\"name\":\"guard: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FF\",\"char\":\"💂🏿\",\"name\":\"guard: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 200D 2642 FE0F\",\"char\":\"💂‍♂️\",\"name\":\"man guard\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 200D 2642\",\"char\":\"💂‍♂\",\"name\":\"man guard\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FB 200D 2642 FE0F\",\"char\":\"💂🏻‍♂️\",\"name\":\"man guard: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FB 200D 2642\",\"char\":\"💂🏻‍♂\",\"name\":\"man guard: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FC 200D 2642 FE0F\",\"char\":\"💂🏼‍♂️\",\"name\":\"man guard: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FC 200D 2642\",\"char\":\"💂🏼‍♂\",\"name\":\"man guard: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FD 200D 2642 FE0F\",\"char\":\"💂🏽‍♂️\",\"name\":\"man guard: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FD 200D 2642\",\"char\":\"💂🏽‍♂\",\"name\":\"man guard: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FE 200D 2642 FE0F\",\"char\":\"💂🏾‍♂️\",\"name\":\"man guard: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FE 200D 2642\",\"char\":\"💂🏾‍♂\",\"name\":\"man guard: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FF 200D 2642 FE0F\",\"char\":\"💂🏿‍♂️\",\"name\":\"man guard: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FF 200D 2642\",\"char\":\"💂🏿‍♂\",\"name\":\"man guard: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 200D 2640 FE0F\",\"char\":\"💂‍♀️\",\"name\":\"woman guard\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 200D 2640\",\"char\":\"💂‍♀\",\"name\":\"woman guard\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FB 200D 2640 FE0F\",\"char\":\"💂🏻‍♀️\",\"name\":\"woman guard: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FB 200D 2640\",\"char\":\"💂🏻‍♀\",\"name\":\"woman guard: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FC 200D 2640 FE0F\",\"char\":\"💂🏼‍♀️\",\"name\":\"woman guard: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FC 200D 2640\",\"char\":\"💂🏼‍♀\",\"name\":\"woman guard: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FD 200D 2640 FE0F\",\"char\":\"💂🏽‍♀️\",\"name\":\"woman guard: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FD 200D 2640\",\"char\":\"💂🏽‍♀\",\"name\":\"woman guard: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FE 200D 2640 FE0F\",\"char\":\"💂🏾‍♀️\",\"name\":\"woman guard: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FE 200D 2640\",\"char\":\"💂🏾‍♀\",\"name\":\"woman guard: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FF 200D 2640 FE0F\",\"char\":\"💂🏿‍♀️\",\"name\":\"woman guard: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F482 1F3FF 200D 2640\",\"char\":\"💂🏿‍♀\",\"name\":\"woman guard: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F977\",\"char\":\"🥷\",\"name\":\"ninja\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F977 1F3FB\",\"char\":\"🥷🏻\",\"name\":\"ninja: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F977 1F3FC\",\"char\":\"🥷🏼\",\"name\":\"ninja: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F977 1F3FD\",\"char\":\"🥷🏽\",\"name\":\"ninja: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F977 1F3FE\",\"char\":\"🥷🏾\",\"name\":\"ninja: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F977 1F3FF\",\"char\":\"🥷🏿\",\"name\":\"ninja: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477\",\"char\":\"👷\",\"name\":\"construction worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FB\",\"char\":\"👷🏻\",\"name\":\"construction worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FC\",\"char\":\"👷🏼\",\"name\":\"construction worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FD\",\"char\":\"👷🏽\",\"name\":\"construction worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FE\",\"char\":\"👷🏾\",\"name\":\"construction worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FF\",\"char\":\"👷🏿\",\"name\":\"construction worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 200D 2642 FE0F\",\"char\":\"👷‍♂️\",\"name\":\"man construction worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 200D 2642\",\"char\":\"👷‍♂\",\"name\":\"man construction worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FB 200D 2642 FE0F\",\"char\":\"👷🏻‍♂️\",\"name\":\"man construction worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FB 200D 2642\",\"char\":\"👷🏻‍♂\",\"name\":\"man construction worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FC 200D 2642 FE0F\",\"char\":\"👷🏼‍♂️\",\"name\":\"man construction worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FC 200D 2642\",\"char\":\"👷🏼‍♂\",\"name\":\"man construction worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FD 200D 2642 FE0F\",\"char\":\"👷🏽‍♂️\",\"name\":\"man construction worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FD 200D 2642\",\"char\":\"👷🏽‍♂\",\"name\":\"man construction worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FE 200D 2642 FE0F\",\"char\":\"👷🏾‍♂️\",\"name\":\"man construction worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FE 200D 2642\",\"char\":\"👷🏾‍♂\",\"name\":\"man construction worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FF 200D 2642 FE0F\",\"char\":\"👷🏿‍♂️\",\"name\":\"man construction worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FF 200D 2642\",\"char\":\"👷🏿‍♂\",\"name\":\"man construction worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 200D 2640 FE0F\",\"char\":\"👷‍♀️\",\"name\":\"woman construction worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 200D 2640\",\"char\":\"👷‍♀\",\"name\":\"woman construction worker\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FB 200D 2640 FE0F\",\"char\":\"👷🏻‍♀️\",\"name\":\"woman construction worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FB 200D 2640\",\"char\":\"👷🏻‍♀\",\"name\":\"woman construction worker: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FC 200D 2640 FE0F\",\"char\":\"👷🏼‍♀️\",\"name\":\"woman construction worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FC 200D 2640\",\"char\":\"👷🏼‍♀\",\"name\":\"woman construction worker: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FD 200D 2640 FE0F\",\"char\":\"👷🏽‍♀️\",\"name\":\"woman construction worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FD 200D 2640\",\"char\":\"👷🏽‍♀\",\"name\":\"woman construction worker: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FE 200D 2640 FE0F\",\"char\":\"👷🏾‍♀️\",\"name\":\"woman construction worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FE 200D 2640\",\"char\":\"👷🏾‍♀\",\"name\":\"woman construction worker: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FF 200D 2640 FE0F\",\"char\":\"👷🏿‍♀️\",\"name\":\"woman construction worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F477 1F3FF 200D 2640\",\"char\":\"👷🏿‍♀\",\"name\":\"woman construction worker: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F934\",\"char\":\"🤴\",\"name\":\"prince\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F934 1F3FB\",\"char\":\"🤴🏻\",\"name\":\"prince: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F934 1F3FC\",\"char\":\"🤴🏼\",\"name\":\"prince: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F934 1F3FD\",\"char\":\"🤴🏽\",\"name\":\"prince: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F934 1F3FE\",\"char\":\"🤴🏾\",\"name\":\"prince: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F934 1F3FF\",\"char\":\"🤴🏿\",\"name\":\"prince: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F478\",\"char\":\"👸\",\"name\":\"princess\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F478 1F3FB\",\"char\":\"👸🏻\",\"name\":\"princess: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F478 1F3FC\",\"char\":\"👸🏼\",\"name\":\"princess: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F478 1F3FD\",\"char\":\"👸🏽\",\"name\":\"princess: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F478 1F3FE\",\"char\":\"👸🏾\",\"name\":\"princess: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F478 1F3FF\",\"char\":\"👸🏿\",\"name\":\"princess: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473\",\"char\":\"👳\",\"name\":\"person wearing turban\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FB\",\"char\":\"👳🏻\",\"name\":\"person wearing turban: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FC\",\"char\":\"👳🏼\",\"name\":\"person wearing turban: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FD\",\"char\":\"👳🏽\",\"name\":\"person wearing turban: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FE\",\"char\":\"👳🏾\",\"name\":\"person wearing turban: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FF\",\"char\":\"👳🏿\",\"name\":\"person wearing turban: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 200D 2642 FE0F\",\"char\":\"👳‍♂️\",\"name\":\"man wearing turban\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 200D 2642\",\"char\":\"👳‍♂\",\"name\":\"man wearing turban\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FB 200D 2642 FE0F\",\"char\":\"👳🏻‍♂️\",\"name\":\"man wearing turban: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FB 200D 2642\",\"char\":\"👳🏻‍♂\",\"name\":\"man wearing turban: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FC 200D 2642 FE0F\",\"char\":\"👳🏼‍♂️\",\"name\":\"man wearing turban: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FC 200D 2642\",\"char\":\"👳🏼‍♂\",\"name\":\"man wearing turban: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FD 200D 2642 FE0F\",\"char\":\"👳🏽‍♂️\",\"name\":\"man wearing turban: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FD 200D 2642\",\"char\":\"👳🏽‍♂\",\"name\":\"man wearing turban: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FE 200D 2642 FE0F\",\"char\":\"👳🏾‍♂️\",\"name\":\"man wearing turban: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FE 200D 2642\",\"char\":\"👳🏾‍♂\",\"name\":\"man wearing turban: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FF 200D 2642 FE0F\",\"char\":\"👳🏿‍♂️\",\"name\":\"man wearing turban: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FF 200D 2642\",\"char\":\"👳🏿‍♂\",\"name\":\"man wearing turban: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 200D 2640 FE0F\",\"char\":\"👳‍♀️\",\"name\":\"woman wearing turban\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 200D 2640\",\"char\":\"👳‍♀\",\"name\":\"woman wearing turban\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FB 200D 2640 FE0F\",\"char\":\"👳🏻‍♀️\",\"name\":\"woman wearing turban: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FB 200D 2640\",\"char\":\"👳🏻‍♀\",\"name\":\"woman wearing turban: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FC 200D 2640 FE0F\",\"char\":\"👳🏼‍♀️\",\"name\":\"woman wearing turban: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FC 200D 2640\",\"char\":\"👳🏼‍♀\",\"name\":\"woman wearing turban: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FD 200D 2640 FE0F\",\"char\":\"👳🏽‍♀️\",\"name\":\"woman wearing turban: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FD 200D 2640\",\"char\":\"👳🏽‍♀\",\"name\":\"woman wearing turban: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FE 200D 2640 FE0F\",\"char\":\"👳🏾‍♀️\",\"name\":\"woman wearing turban: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FE 200D 2640\",\"char\":\"👳🏾‍♀\",\"name\":\"woman wearing turban: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FF 200D 2640 FE0F\",\"char\":\"👳🏿‍♀️\",\"name\":\"woman wearing turban: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F473 1F3FF 200D 2640\",\"char\":\"👳🏿‍♀\",\"name\":\"woman wearing turban: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F472\",\"char\":\"👲\",\"name\":\"person with skullcap\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F472 1F3FB\",\"char\":\"👲🏻\",\"name\":\"person with skullcap: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F472 1F3FC\",\"char\":\"👲🏼\",\"name\":\"person with skullcap: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F472 1F3FD\",\"char\":\"👲🏽\",\"name\":\"person with skullcap: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F472 1F3FE\",\"char\":\"👲🏾\",\"name\":\"person with skullcap: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F472 1F3FF\",\"char\":\"👲🏿\",\"name\":\"person with skullcap: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D5\",\"char\":\"🧕\",\"name\":\"woman with headscarf\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D5 1F3FB\",\"char\":\"🧕🏻\",\"name\":\"woman with headscarf: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D5 1F3FC\",\"char\":\"🧕🏼\",\"name\":\"woman with headscarf: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D5 1F3FD\",\"char\":\"🧕🏽\",\"name\":\"woman with headscarf: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D5 1F3FE\",\"char\":\"🧕🏾\",\"name\":\"woman with headscarf: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D5 1F3FF\",\"char\":\"🧕🏿\",\"name\":\"woman with headscarf: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935\",\"char\":\"🤵\",\"name\":\"person in tuxedo\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FB\",\"char\":\"🤵🏻\",\"name\":\"person in tuxedo: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FC\",\"char\":\"🤵🏼\",\"name\":\"person in tuxedo: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FD\",\"char\":\"🤵🏽\",\"name\":\"person in tuxedo: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FE\",\"char\":\"🤵🏾\",\"name\":\"person in tuxedo: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FF\",\"char\":\"🤵🏿\",\"name\":\"person in tuxedo: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 200D 2642 FE0F\",\"char\":\"🤵‍♂️\",\"name\":\"man in tuxedo\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 200D 2642\",\"char\":\"🤵‍♂\",\"name\":\"man in tuxedo\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FB 200D 2642 FE0F\",\"char\":\"🤵🏻‍♂️\",\"name\":\"man in tuxedo: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FB 200D 2642\",\"char\":\"🤵🏻‍♂\",\"name\":\"man in tuxedo: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FC 200D 2642 FE0F\",\"char\":\"🤵🏼‍♂️\",\"name\":\"man in tuxedo: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FC 200D 2642\",\"char\":\"🤵🏼‍♂\",\"name\":\"man in tuxedo: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FD 200D 2642 FE0F\",\"char\":\"🤵🏽‍♂️\",\"name\":\"man in tuxedo: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FD 200D 2642\",\"char\":\"🤵🏽‍♂\",\"name\":\"man in tuxedo: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FE 200D 2642 FE0F\",\"char\":\"🤵🏾‍♂️\",\"name\":\"man in tuxedo: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FE 200D 2642\",\"char\":\"🤵🏾‍♂\",\"name\":\"man in tuxedo: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FF 200D 2642 FE0F\",\"char\":\"🤵🏿‍♂️\",\"name\":\"man in tuxedo: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FF 200D 2642\",\"char\":\"🤵🏿‍♂\",\"name\":\"man in tuxedo: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 200D 2640 FE0F\",\"char\":\"🤵‍♀️\",\"name\":\"woman in tuxedo\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 200D 2640\",\"char\":\"🤵‍♀\",\"name\":\"woman in tuxedo\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FB 200D 2640 FE0F\",\"char\":\"🤵🏻‍♀️\",\"name\":\"woman in tuxedo: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FB 200D 2640\",\"char\":\"🤵🏻‍♀\",\"name\":\"woman in tuxedo: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FC 200D 2640 FE0F\",\"char\":\"🤵🏼‍♀️\",\"name\":\"woman in tuxedo: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FC 200D 2640\",\"char\":\"🤵🏼‍♀\",\"name\":\"woman in tuxedo: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FD 200D 2640 FE0F\",\"char\":\"🤵🏽‍♀️\",\"name\":\"woman in tuxedo: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FD 200D 2640\",\"char\":\"🤵🏽‍♀\",\"name\":\"woman in tuxedo: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FE 200D 2640 FE0F\",\"char\":\"🤵🏾‍♀️\",\"name\":\"woman in tuxedo: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FE 200D 2640\",\"char\":\"🤵🏾‍♀\",\"name\":\"woman in tuxedo: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FF 200D 2640 FE0F\",\"char\":\"🤵🏿‍♀️\",\"name\":\"woman in tuxedo: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F935 1F3FF 200D 2640\",\"char\":\"🤵🏿‍♀\",\"name\":\"woman in tuxedo: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470\",\"char\":\"👰\",\"name\":\"person with veil\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FB\",\"char\":\"👰🏻\",\"name\":\"person with veil: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FC\",\"char\":\"👰🏼\",\"name\":\"person with veil: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FD\",\"char\":\"👰🏽\",\"name\":\"person with veil: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FE\",\"char\":\"👰🏾\",\"name\":\"person with veil: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FF\",\"char\":\"👰🏿\",\"name\":\"person with veil: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 200D 2642 FE0F\",\"char\":\"👰‍♂️\",\"name\":\"man with veil\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 200D 2642\",\"char\":\"👰‍♂\",\"name\":\"man with veil\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FB 200D 2642 FE0F\",\"char\":\"👰🏻‍♂️\",\"name\":\"man with veil: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FB 200D 2642\",\"char\":\"👰🏻‍♂\",\"name\":\"man with veil: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FC 200D 2642 FE0F\",\"char\":\"👰🏼‍♂️\",\"name\":\"man with veil: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FC 200D 2642\",\"char\":\"👰🏼‍♂\",\"name\":\"man with veil: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FD 200D 2642 FE0F\",\"char\":\"👰🏽‍♂️\",\"name\":\"man with veil: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FD 200D 2642\",\"char\":\"👰🏽‍♂\",\"name\":\"man with veil: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FE 200D 2642 FE0F\",\"char\":\"👰🏾‍♂️\",\"name\":\"man with veil: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FE 200D 2642\",\"char\":\"👰🏾‍♂\",\"name\":\"man with veil: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FF 200D 2642 FE0F\",\"char\":\"👰🏿‍♂️\",\"name\":\"man with veil: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FF 200D 2642\",\"char\":\"👰🏿‍♂\",\"name\":\"man with veil: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 200D 2640 FE0F\",\"char\":\"👰‍♀️\",\"name\":\"woman with veil\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 200D 2640\",\"char\":\"👰‍♀\",\"name\":\"woman with veil\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FB 200D 2640 FE0F\",\"char\":\"👰🏻‍♀️\",\"name\":\"woman with veil: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FB 200D 2640\",\"char\":\"👰🏻‍♀\",\"name\":\"woman with veil: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FC 200D 2640 FE0F\",\"char\":\"👰🏼‍♀️\",\"name\":\"woman with veil: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FC 200D 2640\",\"char\":\"👰🏼‍♀\",\"name\":\"woman with veil: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FD 200D 2640 FE0F\",\"char\":\"👰🏽‍♀️\",\"name\":\"woman with veil: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FD 200D 2640\",\"char\":\"👰🏽‍♀\",\"name\":\"woman with veil: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FE 200D 2640 FE0F\",\"char\":\"👰🏾‍♀️\",\"name\":\"woman with veil: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FE 200D 2640\",\"char\":\"👰🏾‍♀\",\"name\":\"woman with veil: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FF 200D 2640 FE0F\",\"char\":\"👰🏿‍♀️\",\"name\":\"woman with veil: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F470 1F3FF 200D 2640\",\"char\":\"👰🏿‍♀\",\"name\":\"woman with veil: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F930\",\"char\":\"🤰\",\"name\":\"pregnant woman\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F930 1F3FB\",\"char\":\"🤰🏻\",\"name\":\"pregnant woman: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F930 1F3FC\",\"char\":\"🤰🏼\",\"name\":\"pregnant woman: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F930 1F3FD\",\"char\":\"🤰🏽\",\"name\":\"pregnant woman: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F930 1F3FE\",\"char\":\"🤰🏾\",\"name\":\"pregnant woman: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F930 1F3FF\",\"char\":\"🤰🏿\",\"name\":\"pregnant woman: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F931\",\"char\":\"🤱\",\"name\":\"breast-feeding\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F931 1F3FB\",\"char\":\"🤱🏻\",\"name\":\"breast-feeding: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F931 1F3FC\",\"char\":\"🤱🏼\",\"name\":\"breast-feeding: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F931 1F3FD\",\"char\":\"🤱🏽\",\"name\":\"breast-feeding: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F931 1F3FE\",\"char\":\"🤱🏾\",\"name\":\"breast-feeding: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F931 1F3FF\",\"char\":\"🤱🏿\",\"name\":\"breast-feeding: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 200D 1F37C\",\"char\":\"👩‍🍼\",\"name\":\"woman feeding baby\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FB 200D 1F37C\",\"char\":\"👩🏻‍🍼\",\"name\":\"woman feeding baby: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FC 200D 1F37C\",\"char\":\"👩🏼‍🍼\",\"name\":\"woman feeding baby: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FD 200D 1F37C\",\"char\":\"👩🏽‍🍼\",\"name\":\"woman feeding baby: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FE 200D 1F37C\",\"char\":\"👩🏾‍🍼\",\"name\":\"woman feeding baby: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F469 1F3FF 200D 1F37C\",\"char\":\"👩🏿‍🍼\",\"name\":\"woman feeding baby: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 200D 1F37C\",\"char\":\"👨‍🍼\",\"name\":\"man feeding baby\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FB 200D 1F37C\",\"char\":\"👨🏻‍🍼\",\"name\":\"man feeding baby: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FC 200D 1F37C\",\"char\":\"👨🏼‍🍼\",\"name\":\"man feeding baby: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FD 200D 1F37C\",\"char\":\"👨🏽‍🍼\",\"name\":\"man feeding baby: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FE 200D 1F37C\",\"char\":\"👨🏾‍🍼\",\"name\":\"man feeding baby: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F468 1F3FF 200D 1F37C\",\"char\":\"👨🏿‍🍼\",\"name\":\"man feeding baby: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 200D 1F37C\",\"char\":\"🧑‍🍼\",\"name\":\"person feeding baby\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FB 200D 1F37C\",\"char\":\"🧑🏻‍🍼\",\"name\":\"person feeding baby: light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FC 200D 1F37C\",\"char\":\"🧑🏼‍🍼\",\"name\":\"person feeding baby: medium-light skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FD 200D 1F37C\",\"char\":\"🧑🏽‍🍼\",\"name\":\"person feeding baby: medium skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FE 200D 1F37C\",\"char\":\"🧑🏾‍🍼\",\"name\":\"person feeding baby: medium-dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F9D1 1F3FF 200D 1F37C\",\"char\":\"🧑🏿‍🍼\",\"name\":\"person feeding baby: dark skin tone\",\"category\":\"People & Body (person-role)\",\"group\":\"People & Body\",\"subgroup\":\"person-role\"},{\"codes\":\"1F47C\",\"char\":\"👼\",\"name\":\"baby angel\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F47C 1F3FB\",\"char\":\"👼🏻\",\"name\":\"baby angel: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F47C 1F3FC\",\"char\":\"👼🏼\",\"name\":\"baby angel: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F47C 1F3FD\",\"char\":\"👼🏽\",\"name\":\"baby angel: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F47C 1F3FE\",\"char\":\"👼🏾\",\"name\":\"baby angel: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F47C 1F3FF\",\"char\":\"👼🏿\",\"name\":\"baby angel: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F385\",\"char\":\"🎅\",\"name\":\"Santa Claus\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F385 1F3FB\",\"char\":\"🎅🏻\",\"name\":\"Santa Claus: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F385 1F3FC\",\"char\":\"🎅🏼\",\"name\":\"Santa Claus: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F385 1F3FD\",\"char\":\"🎅🏽\",\"name\":\"Santa Claus: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F385 1F3FE\",\"char\":\"🎅🏾\",\"name\":\"Santa Claus: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F385 1F3FF\",\"char\":\"🎅🏿\",\"name\":\"Santa Claus: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F936\",\"char\":\"🤶\",\"name\":\"Mrs. Claus\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F936 1F3FB\",\"char\":\"🤶🏻\",\"name\":\"Mrs. Claus: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F936 1F3FC\",\"char\":\"🤶🏼\",\"name\":\"Mrs. Claus: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F936 1F3FD\",\"char\":\"🤶🏽\",\"name\":\"Mrs. Claus: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F936 1F3FE\",\"char\":\"🤶🏾\",\"name\":\"Mrs. Claus: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F936 1F3FF\",\"char\":\"🤶🏿\",\"name\":\"Mrs. Claus: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D1 200D 1F384\",\"char\":\"🧑‍🎄\",\"name\":\"mx claus\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D1 1F3FB 200D 1F384\",\"char\":\"🧑🏻‍🎄\",\"name\":\"mx claus: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D1 1F3FC 200D 1F384\",\"char\":\"🧑🏼‍🎄\",\"name\":\"mx claus: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D1 1F3FD 200D 1F384\",\"char\":\"🧑🏽‍🎄\",\"name\":\"mx claus: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D1 1F3FE 200D 1F384\",\"char\":\"🧑🏾‍🎄\",\"name\":\"mx claus: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D1 1F3FF 200D 1F384\",\"char\":\"🧑🏿‍🎄\",\"name\":\"mx claus: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8\",\"char\":\"🦸\",\"name\":\"superhero\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FB\",\"char\":\"🦸🏻\",\"name\":\"superhero: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FC\",\"char\":\"🦸🏼\",\"name\":\"superhero: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FD\",\"char\":\"🦸🏽\",\"name\":\"superhero: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FE\",\"char\":\"🦸🏾\",\"name\":\"superhero: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FF\",\"char\":\"🦸🏿\",\"name\":\"superhero: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 200D 2642 FE0F\",\"char\":\"🦸‍♂️\",\"name\":\"man superhero\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 200D 2642\",\"char\":\"🦸‍♂\",\"name\":\"man superhero\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FB 200D 2642 FE0F\",\"char\":\"🦸🏻‍♂️\",\"name\":\"man superhero: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FB 200D 2642\",\"char\":\"🦸🏻‍♂\",\"name\":\"man superhero: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FC 200D 2642 FE0F\",\"char\":\"🦸🏼‍♂️\",\"name\":\"man superhero: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FC 200D 2642\",\"char\":\"🦸🏼‍♂\",\"name\":\"man superhero: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FD 200D 2642 FE0F\",\"char\":\"🦸🏽‍♂️\",\"name\":\"man superhero: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FD 200D 2642\",\"char\":\"🦸🏽‍♂\",\"name\":\"man superhero: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FE 200D 2642 FE0F\",\"char\":\"🦸🏾‍♂️\",\"name\":\"man superhero: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FE 200D 2642\",\"char\":\"🦸🏾‍♂\",\"name\":\"man superhero: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FF 200D 2642 FE0F\",\"char\":\"🦸🏿‍♂️\",\"name\":\"man superhero: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FF 200D 2642\",\"char\":\"🦸🏿‍♂\",\"name\":\"man superhero: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 200D 2640 FE0F\",\"char\":\"🦸‍♀️\",\"name\":\"woman superhero\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 200D 2640\",\"char\":\"🦸‍♀\",\"name\":\"woman superhero\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FB 200D 2640 FE0F\",\"char\":\"🦸🏻‍♀️\",\"name\":\"woman superhero: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FB 200D 2640\",\"char\":\"🦸🏻‍♀\",\"name\":\"woman superhero: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FC 200D 2640 FE0F\",\"char\":\"🦸🏼‍♀️\",\"name\":\"woman superhero: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FC 200D 2640\",\"char\":\"🦸🏼‍♀\",\"name\":\"woman superhero: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FD 200D 2640 FE0F\",\"char\":\"🦸🏽‍♀️\",\"name\":\"woman superhero: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FD 200D 2640\",\"char\":\"🦸🏽‍♀\",\"name\":\"woman superhero: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FE 200D 2640 FE0F\",\"char\":\"🦸🏾‍♀️\",\"name\":\"woman superhero: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FE 200D 2640\",\"char\":\"🦸🏾‍♀\",\"name\":\"woman superhero: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FF 200D 2640 FE0F\",\"char\":\"🦸🏿‍♀️\",\"name\":\"woman superhero: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B8 1F3FF 200D 2640\",\"char\":\"🦸🏿‍♀\",\"name\":\"woman superhero: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9\",\"char\":\"🦹\",\"name\":\"supervillain\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FB\",\"char\":\"🦹🏻\",\"name\":\"supervillain: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FC\",\"char\":\"🦹🏼\",\"name\":\"supervillain: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FD\",\"char\":\"🦹🏽\",\"name\":\"supervillain: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FE\",\"char\":\"🦹🏾\",\"name\":\"supervillain: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FF\",\"char\":\"🦹🏿\",\"name\":\"supervillain: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 200D 2642 FE0F\",\"char\":\"🦹‍♂️\",\"name\":\"man supervillain\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 200D 2642\",\"char\":\"🦹‍♂\",\"name\":\"man supervillain\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FB 200D 2642 FE0F\",\"char\":\"🦹🏻‍♂️\",\"name\":\"man supervillain: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FB 200D 2642\",\"char\":\"🦹🏻‍♂\",\"name\":\"man supervillain: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FC 200D 2642 FE0F\",\"char\":\"🦹🏼‍♂️\",\"name\":\"man supervillain: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FC 200D 2642\",\"char\":\"🦹🏼‍♂\",\"name\":\"man supervillain: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FD 200D 2642 FE0F\",\"char\":\"🦹🏽‍♂️\",\"name\":\"man supervillain: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FD 200D 2642\",\"char\":\"🦹🏽‍♂\",\"name\":\"man supervillain: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FE 200D 2642 FE0F\",\"char\":\"🦹🏾‍♂️\",\"name\":\"man supervillain: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FE 200D 2642\",\"char\":\"🦹🏾‍♂\",\"name\":\"man supervillain: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FF 200D 2642 FE0F\",\"char\":\"🦹🏿‍♂️\",\"name\":\"man supervillain: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FF 200D 2642\",\"char\":\"🦹🏿‍♂\",\"name\":\"man supervillain: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 200D 2640 FE0F\",\"char\":\"🦹‍♀️\",\"name\":\"woman supervillain\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 200D 2640\",\"char\":\"🦹‍♀\",\"name\":\"woman supervillain\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FB 200D 2640 FE0F\",\"char\":\"🦹🏻‍♀️\",\"name\":\"woman supervillain: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FB 200D 2640\",\"char\":\"🦹🏻‍♀\",\"name\":\"woman supervillain: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FC 200D 2640 FE0F\",\"char\":\"🦹🏼‍♀️\",\"name\":\"woman supervillain: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FC 200D 2640\",\"char\":\"🦹🏼‍♀\",\"name\":\"woman supervillain: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FD 200D 2640 FE0F\",\"char\":\"🦹🏽‍♀️\",\"name\":\"woman supervillain: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FD 200D 2640\",\"char\":\"🦹🏽‍♀\",\"name\":\"woman supervillain: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FE 200D 2640 FE0F\",\"char\":\"🦹🏾‍♀️\",\"name\":\"woman supervillain: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FE 200D 2640\",\"char\":\"🦹🏾‍♀\",\"name\":\"woman supervillain: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FF 200D 2640 FE0F\",\"char\":\"🦹🏿‍♀️\",\"name\":\"woman supervillain: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9B9 1F3FF 200D 2640\",\"char\":\"🦹🏿‍♀\",\"name\":\"woman supervillain: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9\",\"char\":\"🧙\",\"name\":\"mage\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FB\",\"char\":\"🧙🏻\",\"name\":\"mage: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FC\",\"char\":\"🧙🏼\",\"name\":\"mage: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FD\",\"char\":\"🧙🏽\",\"name\":\"mage: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FE\",\"char\":\"🧙🏾\",\"name\":\"mage: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FF\",\"char\":\"🧙🏿\",\"name\":\"mage: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 200D 2642 FE0F\",\"char\":\"🧙‍♂️\",\"name\":\"man mage\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 200D 2642\",\"char\":\"🧙‍♂\",\"name\":\"man mage\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FB 200D 2642 FE0F\",\"char\":\"🧙🏻‍♂️\",\"name\":\"man mage: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FB 200D 2642\",\"char\":\"🧙🏻‍♂\",\"name\":\"man mage: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FC 200D 2642 FE0F\",\"char\":\"🧙🏼‍♂️\",\"name\":\"man mage: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FC 200D 2642\",\"char\":\"🧙🏼‍♂\",\"name\":\"man mage: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FD 200D 2642 FE0F\",\"char\":\"🧙🏽‍♂️\",\"name\":\"man mage: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FD 200D 2642\",\"char\":\"🧙🏽‍♂\",\"name\":\"man mage: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FE 200D 2642 FE0F\",\"char\":\"🧙🏾‍♂️\",\"name\":\"man mage: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FE 200D 2642\",\"char\":\"🧙🏾‍♂\",\"name\":\"man mage: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FF 200D 2642 FE0F\",\"char\":\"🧙🏿‍♂️\",\"name\":\"man mage: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FF 200D 2642\",\"char\":\"🧙🏿‍♂\",\"name\":\"man mage: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 200D 2640 FE0F\",\"char\":\"🧙‍♀️\",\"name\":\"woman mage\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 200D 2640\",\"char\":\"🧙‍♀\",\"name\":\"woman mage\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FB 200D 2640 FE0F\",\"char\":\"🧙🏻‍♀️\",\"name\":\"woman mage: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FB 200D 2640\",\"char\":\"🧙🏻‍♀\",\"name\":\"woman mage: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FC 200D 2640 FE0F\",\"char\":\"🧙🏼‍♀️\",\"name\":\"woman mage: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FC 200D 2640\",\"char\":\"🧙🏼‍♀\",\"name\":\"woman mage: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FD 200D 2640 FE0F\",\"char\":\"🧙🏽‍♀️\",\"name\":\"woman mage: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FD 200D 2640\",\"char\":\"🧙🏽‍♀\",\"name\":\"woman mage: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FE 200D 2640 FE0F\",\"char\":\"🧙🏾‍♀️\",\"name\":\"woman mage: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FE 200D 2640\",\"char\":\"🧙🏾‍♀\",\"name\":\"woman mage: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FF 200D 2640 FE0F\",\"char\":\"🧙🏿‍♀️\",\"name\":\"woman mage: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9D9 1F3FF 200D 2640\",\"char\":\"🧙🏿‍♀\",\"name\":\"woman mage: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA\",\"char\":\"🧚\",\"name\":\"fairy\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FB\",\"char\":\"🧚🏻\",\"name\":\"fairy: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FC\",\"char\":\"🧚🏼\",\"name\":\"fairy: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FD\",\"char\":\"🧚🏽\",\"name\":\"fairy: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FE\",\"char\":\"🧚🏾\",\"name\":\"fairy: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FF\",\"char\":\"🧚🏿\",\"name\":\"fairy: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 200D 2642 FE0F\",\"char\":\"🧚‍♂️\",\"name\":\"man fairy\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 200D 2642\",\"char\":\"🧚‍♂\",\"name\":\"man fairy\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FB 200D 2642 FE0F\",\"char\":\"🧚🏻‍♂️\",\"name\":\"man fairy: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FB 200D 2642\",\"char\":\"🧚🏻‍♂\",\"name\":\"man fairy: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FC 200D 2642 FE0F\",\"char\":\"🧚🏼‍♂️\",\"name\":\"man fairy: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FC 200D 2642\",\"char\":\"🧚🏼‍♂\",\"name\":\"man fairy: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FD 200D 2642 FE0F\",\"char\":\"🧚🏽‍♂️\",\"name\":\"man fairy: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FD 200D 2642\",\"char\":\"🧚🏽‍♂\",\"name\":\"man fairy: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FE 200D 2642 FE0F\",\"char\":\"🧚🏾‍♂️\",\"name\":\"man fairy: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FE 200D 2642\",\"char\":\"🧚🏾‍♂\",\"name\":\"man fairy: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FF 200D 2642 FE0F\",\"char\":\"🧚🏿‍♂️\",\"name\":\"man fairy: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FF 200D 2642\",\"char\":\"🧚🏿‍♂\",\"name\":\"man fairy: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 200D 2640 FE0F\",\"char\":\"🧚‍♀️\",\"name\":\"woman fairy\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 200D 2640\",\"char\":\"🧚‍♀\",\"name\":\"woman fairy\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FB 200D 2640 FE0F\",\"char\":\"🧚🏻‍♀️\",\"name\":\"woman fairy: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FB 200D 2640\",\"char\":\"🧚🏻‍♀\",\"name\":\"woman fairy: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FC 200D 2640 FE0F\",\"char\":\"🧚🏼‍♀️\",\"name\":\"woman fairy: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FC 200D 2640\",\"char\":\"🧚🏼‍♀\",\"name\":\"woman fairy: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FD 200D 2640 FE0F\",\"char\":\"🧚🏽‍♀️\",\"name\":\"woman fairy: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FD 200D 2640\",\"char\":\"🧚🏽‍♀\",\"name\":\"woman fairy: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FE 200D 2640 FE0F\",\"char\":\"🧚🏾‍♀️\",\"name\":\"woman fairy: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FE 200D 2640\",\"char\":\"🧚🏾‍♀\",\"name\":\"woman fairy: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FF 200D 2640 FE0F\",\"char\":\"🧚🏿‍♀️\",\"name\":\"woman fairy: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DA 1F3FF 200D 2640\",\"char\":\"🧚🏿‍♀\",\"name\":\"woman fairy: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB\",\"char\":\"🧛\",\"name\":\"vampire\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FB\",\"char\":\"🧛🏻\",\"name\":\"vampire: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FC\",\"char\":\"🧛🏼\",\"name\":\"vampire: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FD\",\"char\":\"🧛🏽\",\"name\":\"vampire: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FE\",\"char\":\"🧛🏾\",\"name\":\"vampire: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FF\",\"char\":\"🧛🏿\",\"name\":\"vampire: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 200D 2642 FE0F\",\"char\":\"🧛‍♂️\",\"name\":\"man vampire\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 200D 2642\",\"char\":\"🧛‍♂\",\"name\":\"man vampire\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FB 200D 2642 FE0F\",\"char\":\"🧛🏻‍♂️\",\"name\":\"man vampire: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FB 200D 2642\",\"char\":\"🧛🏻‍♂\",\"name\":\"man vampire: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FC 200D 2642 FE0F\",\"char\":\"🧛🏼‍♂️\",\"name\":\"man vampire: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FC 200D 2642\",\"char\":\"🧛🏼‍♂\",\"name\":\"man vampire: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FD 200D 2642 FE0F\",\"char\":\"🧛🏽‍♂️\",\"name\":\"man vampire: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FD 200D 2642\",\"char\":\"🧛🏽‍♂\",\"name\":\"man vampire: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FE 200D 2642 FE0F\",\"char\":\"🧛🏾‍♂️\",\"name\":\"man vampire: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FE 200D 2642\",\"char\":\"🧛🏾‍♂\",\"name\":\"man vampire: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FF 200D 2642 FE0F\",\"char\":\"🧛🏿‍♂️\",\"name\":\"man vampire: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FF 200D 2642\",\"char\":\"🧛🏿‍♂\",\"name\":\"man vampire: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 200D 2640 FE0F\",\"char\":\"🧛‍♀️\",\"name\":\"woman vampire\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 200D 2640\",\"char\":\"🧛‍♀\",\"name\":\"woman vampire\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FB 200D 2640 FE0F\",\"char\":\"🧛🏻‍♀️\",\"name\":\"woman vampire: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FB 200D 2640\",\"char\":\"🧛🏻‍♀\",\"name\":\"woman vampire: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FC 200D 2640 FE0F\",\"char\":\"🧛🏼‍♀️\",\"name\":\"woman vampire: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FC 200D 2640\",\"char\":\"🧛🏼‍♀\",\"name\":\"woman vampire: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FD 200D 2640 FE0F\",\"char\":\"🧛🏽‍♀️\",\"name\":\"woman vampire: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FD 200D 2640\",\"char\":\"🧛🏽‍♀\",\"name\":\"woman vampire: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FE 200D 2640 FE0F\",\"char\":\"🧛🏾‍♀️\",\"name\":\"woman vampire: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FE 200D 2640\",\"char\":\"🧛🏾‍♀\",\"name\":\"woman vampire: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FF 200D 2640 FE0F\",\"char\":\"🧛🏿‍♀️\",\"name\":\"woman vampire: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DB 1F3FF 200D 2640\",\"char\":\"🧛🏿‍♀\",\"name\":\"woman vampire: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC\",\"char\":\"🧜\",\"name\":\"merperson\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FB\",\"char\":\"🧜🏻\",\"name\":\"merperson: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FC\",\"char\":\"🧜🏼\",\"name\":\"merperson: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FD\",\"char\":\"🧜🏽\",\"name\":\"merperson: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FE\",\"char\":\"🧜🏾\",\"name\":\"merperson: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FF\",\"char\":\"🧜🏿\",\"name\":\"merperson: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 200D 2642 FE0F\",\"char\":\"🧜‍♂️\",\"name\":\"merman\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 200D 2642\",\"char\":\"🧜‍♂\",\"name\":\"merman\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FB 200D 2642 FE0F\",\"char\":\"🧜🏻‍♂️\",\"name\":\"merman: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FB 200D 2642\",\"char\":\"🧜🏻‍♂\",\"name\":\"merman: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FC 200D 2642 FE0F\",\"char\":\"🧜🏼‍♂️\",\"name\":\"merman: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FC 200D 2642\",\"char\":\"🧜🏼‍♂\",\"name\":\"merman: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FD 200D 2642 FE0F\",\"char\":\"🧜🏽‍♂️\",\"name\":\"merman: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FD 200D 2642\",\"char\":\"🧜🏽‍♂\",\"name\":\"merman: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FE 200D 2642 FE0F\",\"char\":\"🧜🏾‍♂️\",\"name\":\"merman: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FE 200D 2642\",\"char\":\"🧜🏾‍♂\",\"name\":\"merman: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FF 200D 2642 FE0F\",\"char\":\"🧜🏿‍♂️\",\"name\":\"merman: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FF 200D 2642\",\"char\":\"🧜🏿‍♂\",\"name\":\"merman: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 200D 2640 FE0F\",\"char\":\"🧜‍♀️\",\"name\":\"mermaid\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 200D 2640\",\"char\":\"🧜‍♀\",\"name\":\"mermaid\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FB 200D 2640 FE0F\",\"char\":\"🧜🏻‍♀️\",\"name\":\"mermaid: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FB 200D 2640\",\"char\":\"🧜🏻‍♀\",\"name\":\"mermaid: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FC 200D 2640 FE0F\",\"char\":\"🧜🏼‍♀️\",\"name\":\"mermaid: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FC 200D 2640\",\"char\":\"🧜🏼‍♀\",\"name\":\"mermaid: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FD 200D 2640 FE0F\",\"char\":\"🧜🏽‍♀️\",\"name\":\"mermaid: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FD 200D 2640\",\"char\":\"🧜🏽‍♀\",\"name\":\"mermaid: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FE 200D 2640 FE0F\",\"char\":\"🧜🏾‍♀️\",\"name\":\"mermaid: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FE 200D 2640\",\"char\":\"🧜🏾‍♀\",\"name\":\"mermaid: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FF 200D 2640 FE0F\",\"char\":\"🧜🏿‍♀️\",\"name\":\"mermaid: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DC 1F3FF 200D 2640\",\"char\":\"🧜🏿‍♀\",\"name\":\"mermaid: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD\",\"char\":\"🧝\",\"name\":\"elf\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FB\",\"char\":\"🧝🏻\",\"name\":\"elf: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FC\",\"char\":\"🧝🏼\",\"name\":\"elf: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FD\",\"char\":\"🧝🏽\",\"name\":\"elf: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FE\",\"char\":\"🧝🏾\",\"name\":\"elf: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FF\",\"char\":\"🧝🏿\",\"name\":\"elf: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 200D 2642 FE0F\",\"char\":\"🧝‍♂️\",\"name\":\"man elf\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 200D 2642\",\"char\":\"🧝‍♂\",\"name\":\"man elf\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FB 200D 2642 FE0F\",\"char\":\"🧝🏻‍♂️\",\"name\":\"man elf: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FB 200D 2642\",\"char\":\"🧝🏻‍♂\",\"name\":\"man elf: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FC 200D 2642 FE0F\",\"char\":\"🧝🏼‍♂️\",\"name\":\"man elf: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FC 200D 2642\",\"char\":\"🧝🏼‍♂\",\"name\":\"man elf: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FD 200D 2642 FE0F\",\"char\":\"🧝🏽‍♂️\",\"name\":\"man elf: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FD 200D 2642\",\"char\":\"🧝🏽‍♂\",\"name\":\"man elf: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FE 200D 2642 FE0F\",\"char\":\"🧝🏾‍♂️\",\"name\":\"man elf: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FE 200D 2642\",\"char\":\"🧝🏾‍♂\",\"name\":\"man elf: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FF 200D 2642 FE0F\",\"char\":\"🧝🏿‍♂️\",\"name\":\"man elf: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FF 200D 2642\",\"char\":\"🧝🏿‍♂\",\"name\":\"man elf: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 200D 2640 FE0F\",\"char\":\"🧝‍♀️\",\"name\":\"woman elf\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 200D 2640\",\"char\":\"🧝‍♀\",\"name\":\"woman elf\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FB 200D 2640 FE0F\",\"char\":\"🧝🏻‍♀️\",\"name\":\"woman elf: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FB 200D 2640\",\"char\":\"🧝🏻‍♀\",\"name\":\"woman elf: light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FC 200D 2640 FE0F\",\"char\":\"🧝🏼‍♀️\",\"name\":\"woman elf: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FC 200D 2640\",\"char\":\"🧝🏼‍♀\",\"name\":\"woman elf: medium-light skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FD 200D 2640 FE0F\",\"char\":\"🧝🏽‍♀️\",\"name\":\"woman elf: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FD 200D 2640\",\"char\":\"🧝🏽‍♀\",\"name\":\"woman elf: medium skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FE 200D 2640 FE0F\",\"char\":\"🧝🏾‍♀️\",\"name\":\"woman elf: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FE 200D 2640\",\"char\":\"🧝🏾‍♀\",\"name\":\"woman elf: medium-dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FF 200D 2640 FE0F\",\"char\":\"🧝🏿‍♀️\",\"name\":\"woman elf: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DD 1F3FF 200D 2640\",\"char\":\"🧝🏿‍♀\",\"name\":\"woman elf: dark skin tone\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DE\",\"char\":\"🧞\",\"name\":\"genie\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DE 200D 2642 FE0F\",\"char\":\"🧞‍♂️\",\"name\":\"man genie\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DE 200D 2642\",\"char\":\"🧞‍♂\",\"name\":\"man genie\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DE 200D 2640 FE0F\",\"char\":\"🧞‍♀️\",\"name\":\"woman genie\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DE 200D 2640\",\"char\":\"🧞‍♀\",\"name\":\"woman genie\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DF\",\"char\":\"🧟\",\"name\":\"zombie\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DF 200D 2642 FE0F\",\"char\":\"🧟‍♂️\",\"name\":\"man zombie\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DF 200D 2642\",\"char\":\"🧟‍♂\",\"name\":\"man zombie\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DF 200D 2640 FE0F\",\"char\":\"🧟‍♀️\",\"name\":\"woman zombie\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F9DF 200D 2640\",\"char\":\"🧟‍♀\",\"name\":\"woman zombie\",\"category\":\"People & Body (person-fantasy)\",\"group\":\"People & Body\",\"subgroup\":\"person-fantasy\"},{\"codes\":\"1F486\",\"char\":\"💆\",\"name\":\"person getting massage\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FB\",\"char\":\"💆🏻\",\"name\":\"person getting massage: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FC\",\"char\":\"💆🏼\",\"name\":\"person getting massage: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FD\",\"char\":\"💆🏽\",\"name\":\"person getting massage: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FE\",\"char\":\"💆🏾\",\"name\":\"person getting massage: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FF\",\"char\":\"💆🏿\",\"name\":\"person getting massage: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 200D 2642 FE0F\",\"char\":\"💆‍♂️\",\"name\":\"man getting massage\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 200D 2642\",\"char\":\"💆‍♂\",\"name\":\"man getting massage\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FB 200D 2642 FE0F\",\"char\":\"💆🏻‍♂️\",\"name\":\"man getting massage: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FB 200D 2642\",\"char\":\"💆🏻‍♂\",\"name\":\"man getting massage: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FC 200D 2642 FE0F\",\"char\":\"💆🏼‍♂️\",\"name\":\"man getting massage: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FC 200D 2642\",\"char\":\"💆🏼‍♂\",\"name\":\"man getting massage: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FD 200D 2642 FE0F\",\"char\":\"💆🏽‍♂️\",\"name\":\"man getting massage: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FD 200D 2642\",\"char\":\"💆🏽‍♂\",\"name\":\"man getting massage: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FE 200D 2642 FE0F\",\"char\":\"💆🏾‍♂️\",\"name\":\"man getting massage: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FE 200D 2642\",\"char\":\"💆🏾‍♂\",\"name\":\"man getting massage: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FF 200D 2642 FE0F\",\"char\":\"💆🏿‍♂️\",\"name\":\"man getting massage: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FF 200D 2642\",\"char\":\"💆🏿‍♂\",\"name\":\"man getting massage: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 200D 2640 FE0F\",\"char\":\"💆‍♀️\",\"name\":\"woman getting massage\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 200D 2640\",\"char\":\"💆‍♀\",\"name\":\"woman getting massage\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FB 200D 2640 FE0F\",\"char\":\"💆🏻‍♀️\",\"name\":\"woman getting massage: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FB 200D 2640\",\"char\":\"💆🏻‍♀\",\"name\":\"woman getting massage: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FC 200D 2640 FE0F\",\"char\":\"💆🏼‍♀️\",\"name\":\"woman getting massage: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FC 200D 2640\",\"char\":\"💆🏼‍♀\",\"name\":\"woman getting massage: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FD 200D 2640 FE0F\",\"char\":\"💆🏽‍♀️\",\"name\":\"woman getting massage: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FD 200D 2640\",\"char\":\"💆🏽‍♀\",\"name\":\"woman getting massage: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FE 200D 2640 FE0F\",\"char\":\"💆🏾‍♀️\",\"name\":\"woman getting massage: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FE 200D 2640\",\"char\":\"💆🏾‍♀\",\"name\":\"woman getting massage: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FF 200D 2640 FE0F\",\"char\":\"💆🏿‍♀️\",\"name\":\"woman getting massage: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F486 1F3FF 200D 2640\",\"char\":\"💆🏿‍♀\",\"name\":\"woman getting massage: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487\",\"char\":\"💇\",\"name\":\"person getting haircut\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FB\",\"char\":\"💇🏻\",\"name\":\"person getting haircut: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FC\",\"char\":\"💇🏼\",\"name\":\"person getting haircut: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FD\",\"char\":\"💇🏽\",\"name\":\"person getting haircut: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FE\",\"char\":\"💇🏾\",\"name\":\"person getting haircut: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FF\",\"char\":\"💇🏿\",\"name\":\"person getting haircut: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 200D 2642 FE0F\",\"char\":\"💇‍♂️\",\"name\":\"man getting haircut\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 200D 2642\",\"char\":\"💇‍♂\",\"name\":\"man getting haircut\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FB 200D 2642 FE0F\",\"char\":\"💇🏻‍♂️\",\"name\":\"man getting haircut: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FB 200D 2642\",\"char\":\"💇🏻‍♂\",\"name\":\"man getting haircut: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FC 200D 2642 FE0F\",\"char\":\"💇🏼‍♂️\",\"name\":\"man getting haircut: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FC 200D 2642\",\"char\":\"💇🏼‍♂\",\"name\":\"man getting haircut: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FD 200D 2642 FE0F\",\"char\":\"💇🏽‍♂️\",\"name\":\"man getting haircut: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FD 200D 2642\",\"char\":\"💇🏽‍♂\",\"name\":\"man getting haircut: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FE 200D 2642 FE0F\",\"char\":\"💇🏾‍♂️\",\"name\":\"man getting haircut: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FE 200D 2642\",\"char\":\"💇🏾‍♂\",\"name\":\"man getting haircut: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FF 200D 2642 FE0F\",\"char\":\"💇🏿‍♂️\",\"name\":\"man getting haircut: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FF 200D 2642\",\"char\":\"💇🏿‍♂\",\"name\":\"man getting haircut: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 200D 2640 FE0F\",\"char\":\"💇‍♀️\",\"name\":\"woman getting haircut\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 200D 2640\",\"char\":\"💇‍♀\",\"name\":\"woman getting haircut\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FB 200D 2640 FE0F\",\"char\":\"💇🏻‍♀️\",\"name\":\"woman getting haircut: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FB 200D 2640\",\"char\":\"💇🏻‍♀\",\"name\":\"woman getting haircut: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FC 200D 2640 FE0F\",\"char\":\"💇🏼‍♀️\",\"name\":\"woman getting haircut: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FC 200D 2640\",\"char\":\"💇🏼‍♀\",\"name\":\"woman getting haircut: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FD 200D 2640 FE0F\",\"char\":\"💇🏽‍♀️\",\"name\":\"woman getting haircut: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FD 200D 2640\",\"char\":\"💇🏽‍♀\",\"name\":\"woman getting haircut: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FE 200D 2640 FE0F\",\"char\":\"💇🏾‍♀️\",\"name\":\"woman getting haircut: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FE 200D 2640\",\"char\":\"💇🏾‍♀\",\"name\":\"woman getting haircut: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FF 200D 2640 FE0F\",\"char\":\"💇🏿‍♀️\",\"name\":\"woman getting haircut: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F487 1F3FF 200D 2640\",\"char\":\"💇🏿‍♀\",\"name\":\"woman getting haircut: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6\",\"char\":\"🚶\",\"name\":\"person walking\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FB\",\"char\":\"🚶🏻\",\"name\":\"person walking: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FC\",\"char\":\"🚶🏼\",\"name\":\"person walking: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FD\",\"char\":\"🚶🏽\",\"name\":\"person walking: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FE\",\"char\":\"🚶🏾\",\"name\":\"person walking: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FF\",\"char\":\"🚶🏿\",\"name\":\"person walking: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 200D 2642 FE0F\",\"char\":\"🚶‍♂️\",\"name\":\"man walking\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 200D 2642\",\"char\":\"🚶‍♂\",\"name\":\"man walking\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FB 200D 2642 FE0F\",\"char\":\"🚶🏻‍♂️\",\"name\":\"man walking: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FB 200D 2642\",\"char\":\"🚶🏻‍♂\",\"name\":\"man walking: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FC 200D 2642 FE0F\",\"char\":\"🚶🏼‍♂️\",\"name\":\"man walking: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FC 200D 2642\",\"char\":\"🚶🏼‍♂\",\"name\":\"man walking: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FD 200D 2642 FE0F\",\"char\":\"🚶🏽‍♂️\",\"name\":\"man walking: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FD 200D 2642\",\"char\":\"🚶🏽‍♂\",\"name\":\"man walking: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FE 200D 2642 FE0F\",\"char\":\"🚶🏾‍♂️\",\"name\":\"man walking: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FE 200D 2642\",\"char\":\"🚶🏾‍♂\",\"name\":\"man walking: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FF 200D 2642 FE0F\",\"char\":\"🚶🏿‍♂️\",\"name\":\"man walking: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FF 200D 2642\",\"char\":\"🚶🏿‍♂\",\"name\":\"man walking: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 200D 2640 FE0F\",\"char\":\"🚶‍♀️\",\"name\":\"woman walking\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 200D 2640\",\"char\":\"🚶‍♀\",\"name\":\"woman walking\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FB 200D 2640 FE0F\",\"char\":\"🚶🏻‍♀️\",\"name\":\"woman walking: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FB 200D 2640\",\"char\":\"🚶🏻‍♀\",\"name\":\"woman walking: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FC 200D 2640 FE0F\",\"char\":\"🚶🏼‍♀️\",\"name\":\"woman walking: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FC 200D 2640\",\"char\":\"🚶🏼‍♀\",\"name\":\"woman walking: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FD 200D 2640 FE0F\",\"char\":\"🚶🏽‍♀️\",\"name\":\"woman walking: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FD 200D 2640\",\"char\":\"🚶🏽‍♀\",\"name\":\"woman walking: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FE 200D 2640 FE0F\",\"char\":\"🚶🏾‍♀️\",\"name\":\"woman walking: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FE 200D 2640\",\"char\":\"🚶🏾‍♀\",\"name\":\"woman walking: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FF 200D 2640 FE0F\",\"char\":\"🚶🏿‍♀️\",\"name\":\"woman walking: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F6B6 1F3FF 200D 2640\",\"char\":\"🚶🏿‍♀\",\"name\":\"woman walking: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD\",\"char\":\"🧍\",\"name\":\"person standing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FB\",\"char\":\"🧍🏻\",\"name\":\"person standing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FC\",\"char\":\"🧍🏼\",\"name\":\"person standing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FD\",\"char\":\"🧍🏽\",\"name\":\"person standing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FE\",\"char\":\"🧍🏾\",\"name\":\"person standing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FF\",\"char\":\"🧍🏿\",\"name\":\"person standing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 200D 2642 FE0F\",\"char\":\"🧍‍♂️\",\"name\":\"man standing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 200D 2642\",\"char\":\"🧍‍♂\",\"name\":\"man standing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FB 200D 2642 FE0F\",\"char\":\"🧍🏻‍♂️\",\"name\":\"man standing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FB 200D 2642\",\"char\":\"🧍🏻‍♂\",\"name\":\"man standing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FC 200D 2642 FE0F\",\"char\":\"🧍🏼‍♂️\",\"name\":\"man standing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FC 200D 2642\",\"char\":\"🧍🏼‍♂\",\"name\":\"man standing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FD 200D 2642 FE0F\",\"char\":\"🧍🏽‍♂️\",\"name\":\"man standing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FD 200D 2642\",\"char\":\"🧍🏽‍♂\",\"name\":\"man standing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FE 200D 2642 FE0F\",\"char\":\"🧍🏾‍♂️\",\"name\":\"man standing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FE 200D 2642\",\"char\":\"🧍🏾‍♂\",\"name\":\"man standing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FF 200D 2642 FE0F\",\"char\":\"🧍🏿‍♂️\",\"name\":\"man standing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FF 200D 2642\",\"char\":\"🧍🏿‍♂\",\"name\":\"man standing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 200D 2640 FE0F\",\"char\":\"🧍‍♀️\",\"name\":\"woman standing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 200D 2640\",\"char\":\"🧍‍♀\",\"name\":\"woman standing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FB 200D 2640 FE0F\",\"char\":\"🧍🏻‍♀️\",\"name\":\"woman standing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FB 200D 2640\",\"char\":\"🧍🏻‍♀\",\"name\":\"woman standing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FC 200D 2640 FE0F\",\"char\":\"🧍🏼‍♀️\",\"name\":\"woman standing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FC 200D 2640\",\"char\":\"🧍🏼‍♀\",\"name\":\"woman standing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FD 200D 2640 FE0F\",\"char\":\"🧍🏽‍♀️\",\"name\":\"woman standing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FD 200D 2640\",\"char\":\"🧍🏽‍♀\",\"name\":\"woman standing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FE 200D 2640 FE0F\",\"char\":\"🧍🏾‍♀️\",\"name\":\"woman standing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FE 200D 2640\",\"char\":\"🧍🏾‍♀\",\"name\":\"woman standing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FF 200D 2640 FE0F\",\"char\":\"🧍🏿‍♀️\",\"name\":\"woman standing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CD 1F3FF 200D 2640\",\"char\":\"🧍🏿‍♀\",\"name\":\"woman standing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE\",\"char\":\"🧎\",\"name\":\"person kneeling\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FB\",\"char\":\"🧎🏻\",\"name\":\"person kneeling: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FC\",\"char\":\"🧎🏼\",\"name\":\"person kneeling: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FD\",\"char\":\"🧎🏽\",\"name\":\"person kneeling: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FE\",\"char\":\"🧎🏾\",\"name\":\"person kneeling: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FF\",\"char\":\"🧎🏿\",\"name\":\"person kneeling: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 200D 2642 FE0F\",\"char\":\"🧎‍♂️\",\"name\":\"man kneeling\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 200D 2642\",\"char\":\"🧎‍♂\",\"name\":\"man kneeling\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FB 200D 2642 FE0F\",\"char\":\"🧎🏻‍♂️\",\"name\":\"man kneeling: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FB 200D 2642\",\"char\":\"🧎🏻‍♂\",\"name\":\"man kneeling: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FC 200D 2642 FE0F\",\"char\":\"🧎🏼‍♂️\",\"name\":\"man kneeling: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FC 200D 2642\",\"char\":\"🧎🏼‍♂\",\"name\":\"man kneeling: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FD 200D 2642 FE0F\",\"char\":\"🧎🏽‍♂️\",\"name\":\"man kneeling: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FD 200D 2642\",\"char\":\"🧎🏽‍♂\",\"name\":\"man kneeling: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FE 200D 2642 FE0F\",\"char\":\"🧎🏾‍♂️\",\"name\":\"man kneeling: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FE 200D 2642\",\"char\":\"🧎🏾‍♂\",\"name\":\"man kneeling: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FF 200D 2642 FE0F\",\"char\":\"🧎🏿‍♂️\",\"name\":\"man kneeling: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FF 200D 2642\",\"char\":\"🧎🏿‍♂\",\"name\":\"man kneeling: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 200D 2640 FE0F\",\"char\":\"🧎‍♀️\",\"name\":\"woman kneeling\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 200D 2640\",\"char\":\"🧎‍♀\",\"name\":\"woman kneeling\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FB 200D 2640 FE0F\",\"char\":\"🧎🏻‍♀️\",\"name\":\"woman kneeling: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FB 200D 2640\",\"char\":\"🧎🏻‍♀\",\"name\":\"woman kneeling: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FC 200D 2640 FE0F\",\"char\":\"🧎🏼‍♀️\",\"name\":\"woman kneeling: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FC 200D 2640\",\"char\":\"🧎🏼‍♀\",\"name\":\"woman kneeling: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FD 200D 2640 FE0F\",\"char\":\"🧎🏽‍♀️\",\"name\":\"woman kneeling: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FD 200D 2640\",\"char\":\"🧎🏽‍♀\",\"name\":\"woman kneeling: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FE 200D 2640 FE0F\",\"char\":\"🧎🏾‍♀️\",\"name\":\"woman kneeling: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FE 200D 2640\",\"char\":\"🧎🏾‍♀\",\"name\":\"woman kneeling: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FF 200D 2640 FE0F\",\"char\":\"🧎🏿‍♀️\",\"name\":\"woman kneeling: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9CE 1F3FF 200D 2640\",\"char\":\"🧎🏿‍♀\",\"name\":\"woman kneeling: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 200D 1F9AF\",\"char\":\"🧑‍🦯\",\"name\":\"person with white cane\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FB 200D 1F9AF\",\"char\":\"🧑🏻‍🦯\",\"name\":\"person with white cane: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FC 200D 1F9AF\",\"char\":\"🧑🏼‍🦯\",\"name\":\"person with white cane: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FD 200D 1F9AF\",\"char\":\"🧑🏽‍🦯\",\"name\":\"person with white cane: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FE 200D 1F9AF\",\"char\":\"🧑🏾‍🦯\",\"name\":\"person with white cane: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FF 200D 1F9AF\",\"char\":\"🧑🏿‍🦯\",\"name\":\"person with white cane: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 200D 1F9AF\",\"char\":\"👨‍🦯\",\"name\":\"man with white cane\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FB 200D 1F9AF\",\"char\":\"👨🏻‍🦯\",\"name\":\"man with white cane: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FC 200D 1F9AF\",\"char\":\"👨🏼‍🦯\",\"name\":\"man with white cane: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FD 200D 1F9AF\",\"char\":\"👨🏽‍🦯\",\"name\":\"man with white cane: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FE 200D 1F9AF\",\"char\":\"👨🏾‍🦯\",\"name\":\"man with white cane: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FF 200D 1F9AF\",\"char\":\"👨🏿‍🦯\",\"name\":\"man with white cane: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 200D 1F9AF\",\"char\":\"👩‍🦯\",\"name\":\"woman with white cane\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FB 200D 1F9AF\",\"char\":\"👩🏻‍🦯\",\"name\":\"woman with white cane: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FC 200D 1F9AF\",\"char\":\"👩🏼‍🦯\",\"name\":\"woman with white cane: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FD 200D 1F9AF\",\"char\":\"👩🏽‍🦯\",\"name\":\"woman with white cane: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FE 200D 1F9AF\",\"char\":\"👩🏾‍🦯\",\"name\":\"woman with white cane: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FF 200D 1F9AF\",\"char\":\"👩🏿‍🦯\",\"name\":\"woman with white cane: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 200D 1F9BC\",\"char\":\"🧑‍🦼\",\"name\":\"person in motorized wheelchair\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FB 200D 1F9BC\",\"char\":\"🧑🏻‍🦼\",\"name\":\"person in motorized wheelchair: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FC 200D 1F9BC\",\"char\":\"🧑🏼‍🦼\",\"name\":\"person in motorized wheelchair: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FD 200D 1F9BC\",\"char\":\"🧑🏽‍🦼\",\"name\":\"person in motorized wheelchair: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FE 200D 1F9BC\",\"char\":\"🧑🏾‍🦼\",\"name\":\"person in motorized wheelchair: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FF 200D 1F9BC\",\"char\":\"🧑🏿‍🦼\",\"name\":\"person in motorized wheelchair: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 200D 1F9BC\",\"char\":\"👨‍🦼\",\"name\":\"man in motorized wheelchair\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FB 200D 1F9BC\",\"char\":\"👨🏻‍🦼\",\"name\":\"man in motorized wheelchair: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FC 200D 1F9BC\",\"char\":\"👨🏼‍🦼\",\"name\":\"man in motorized wheelchair: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FD 200D 1F9BC\",\"char\":\"👨🏽‍🦼\",\"name\":\"man in motorized wheelchair: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FE 200D 1F9BC\",\"char\":\"👨🏾‍🦼\",\"name\":\"man in motorized wheelchair: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FF 200D 1F9BC\",\"char\":\"👨🏿‍🦼\",\"name\":\"man in motorized wheelchair: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 200D 1F9BC\",\"char\":\"👩‍🦼\",\"name\":\"woman in motorized wheelchair\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FB 200D 1F9BC\",\"char\":\"👩🏻‍🦼\",\"name\":\"woman in motorized wheelchair: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FC 200D 1F9BC\",\"char\":\"👩🏼‍🦼\",\"name\":\"woman in motorized wheelchair: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FD 200D 1F9BC\",\"char\":\"👩🏽‍🦼\",\"name\":\"woman in motorized wheelchair: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FE 200D 1F9BC\",\"char\":\"👩🏾‍🦼\",\"name\":\"woman in motorized wheelchair: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FF 200D 1F9BC\",\"char\":\"👩🏿‍🦼\",\"name\":\"woman in motorized wheelchair: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 200D 1F9BD\",\"char\":\"🧑‍🦽\",\"name\":\"person in manual wheelchair\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FB 200D 1F9BD\",\"char\":\"🧑🏻‍🦽\",\"name\":\"person in manual wheelchair: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FC 200D 1F9BD\",\"char\":\"🧑🏼‍🦽\",\"name\":\"person in manual wheelchair: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FD 200D 1F9BD\",\"char\":\"🧑🏽‍🦽\",\"name\":\"person in manual wheelchair: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FE 200D 1F9BD\",\"char\":\"🧑🏾‍🦽\",\"name\":\"person in manual wheelchair: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D1 1F3FF 200D 1F9BD\",\"char\":\"🧑🏿‍🦽\",\"name\":\"person in manual wheelchair: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 200D 1F9BD\",\"char\":\"👨‍🦽\",\"name\":\"man in manual wheelchair\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FB 200D 1F9BD\",\"char\":\"👨🏻‍🦽\",\"name\":\"man in manual wheelchair: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FC 200D 1F9BD\",\"char\":\"👨🏼‍🦽\",\"name\":\"man in manual wheelchair: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FD 200D 1F9BD\",\"char\":\"👨🏽‍🦽\",\"name\":\"man in manual wheelchair: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FE 200D 1F9BD\",\"char\":\"👨🏾‍🦽\",\"name\":\"man in manual wheelchair: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F468 1F3FF 200D 1F9BD\",\"char\":\"👨🏿‍🦽\",\"name\":\"man in manual wheelchair: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 200D 1F9BD\",\"char\":\"👩‍🦽\",\"name\":\"woman in manual wheelchair\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FB 200D 1F9BD\",\"char\":\"👩🏻‍🦽\",\"name\":\"woman in manual wheelchair: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FC 200D 1F9BD\",\"char\":\"👩🏼‍🦽\",\"name\":\"woman in manual wheelchair: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FD 200D 1F9BD\",\"char\":\"👩🏽‍🦽\",\"name\":\"woman in manual wheelchair: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FE 200D 1F9BD\",\"char\":\"👩🏾‍🦽\",\"name\":\"woman in manual wheelchair: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F469 1F3FF 200D 1F9BD\",\"char\":\"👩🏿‍🦽\",\"name\":\"woman in manual wheelchair: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3\",\"char\":\"🏃\",\"name\":\"person running\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FB\",\"char\":\"🏃🏻\",\"name\":\"person running: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FC\",\"char\":\"🏃🏼\",\"name\":\"person running: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FD\",\"char\":\"🏃🏽\",\"name\":\"person running: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FE\",\"char\":\"🏃🏾\",\"name\":\"person running: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FF\",\"char\":\"🏃🏿\",\"name\":\"person running: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 200D 2642 FE0F\",\"char\":\"🏃‍♂️\",\"name\":\"man running\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 200D 2642\",\"char\":\"🏃‍♂\",\"name\":\"man running\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FB 200D 2642 FE0F\",\"char\":\"🏃🏻‍♂️\",\"name\":\"man running: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FB 200D 2642\",\"char\":\"🏃🏻‍♂\",\"name\":\"man running: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FC 200D 2642 FE0F\",\"char\":\"🏃🏼‍♂️\",\"name\":\"man running: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FC 200D 2642\",\"char\":\"🏃🏼‍♂\",\"name\":\"man running: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FD 200D 2642 FE0F\",\"char\":\"🏃🏽‍♂️\",\"name\":\"man running: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FD 200D 2642\",\"char\":\"🏃🏽‍♂\",\"name\":\"man running: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FE 200D 2642 FE0F\",\"char\":\"🏃🏾‍♂️\",\"name\":\"man running: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FE 200D 2642\",\"char\":\"🏃🏾‍♂\",\"name\":\"man running: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FF 200D 2642 FE0F\",\"char\":\"🏃🏿‍♂️\",\"name\":\"man running: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FF 200D 2642\",\"char\":\"🏃🏿‍♂\",\"name\":\"man running: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 200D 2640 FE0F\",\"char\":\"🏃‍♀️\",\"name\":\"woman running\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 200D 2640\",\"char\":\"🏃‍♀\",\"name\":\"woman running\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FB 200D 2640 FE0F\",\"char\":\"🏃🏻‍♀️\",\"name\":\"woman running: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FB 200D 2640\",\"char\":\"🏃🏻‍♀\",\"name\":\"woman running: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FC 200D 2640 FE0F\",\"char\":\"🏃🏼‍♀️\",\"name\":\"woman running: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FC 200D 2640\",\"char\":\"🏃🏼‍♀\",\"name\":\"woman running: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FD 200D 2640 FE0F\",\"char\":\"🏃🏽‍♀️\",\"name\":\"woman running: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FD 200D 2640\",\"char\":\"🏃🏽‍♀\",\"name\":\"woman running: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FE 200D 2640 FE0F\",\"char\":\"🏃🏾‍♀️\",\"name\":\"woman running: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FE 200D 2640\",\"char\":\"🏃🏾‍♀\",\"name\":\"woman running: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FF 200D 2640 FE0F\",\"char\":\"🏃🏿‍♀️\",\"name\":\"woman running: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F3C3 1F3FF 200D 2640\",\"char\":\"🏃🏿‍♀\",\"name\":\"woman running: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F483\",\"char\":\"💃\",\"name\":\"woman dancing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F483 1F3FB\",\"char\":\"💃🏻\",\"name\":\"woman dancing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F483 1F3FC\",\"char\":\"💃🏼\",\"name\":\"woman dancing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F483 1F3FD\",\"char\":\"💃🏽\",\"name\":\"woman dancing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F483 1F3FE\",\"char\":\"💃🏾\",\"name\":\"woman dancing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F483 1F3FF\",\"char\":\"💃🏿\",\"name\":\"woman dancing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F57A\",\"char\":\"🕺\",\"name\":\"man dancing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F57A 1F3FB\",\"char\":\"🕺🏻\",\"name\":\"man dancing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F57A 1F3FC\",\"char\":\"🕺🏼\",\"name\":\"man dancing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F57A 1F3FD\",\"char\":\"🕺🏽\",\"name\":\"man dancing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F57A 1F3FE\",\"char\":\"🕺🏾\",\"name\":\"man dancing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F57A 1F3FF\",\"char\":\"🕺🏿\",\"name\":\"man dancing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F574 FE0F\",\"char\":\"🕴️\",\"name\":\"person in suit levitating\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F574\",\"char\":\"🕴\",\"name\":\"person in suit levitating\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F574 1F3FB\",\"char\":\"🕴🏻\",\"name\":\"person in suit levitating: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F574 1F3FC\",\"char\":\"🕴🏼\",\"name\":\"person in suit levitating: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F574 1F3FD\",\"char\":\"🕴🏽\",\"name\":\"person in suit levitating: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F574 1F3FE\",\"char\":\"🕴🏾\",\"name\":\"person in suit levitating: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F574 1F3FF\",\"char\":\"🕴🏿\",\"name\":\"person in suit levitating: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F46F\",\"char\":\"👯\",\"name\":\"people with bunny ears\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F46F 200D 2642 FE0F\",\"char\":\"👯‍♂️\",\"name\":\"men with bunny ears\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F46F 200D 2642\",\"char\":\"👯‍♂\",\"name\":\"men with bunny ears\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F46F 200D 2640 FE0F\",\"char\":\"👯‍♀️\",\"name\":\"women with bunny ears\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F46F 200D 2640\",\"char\":\"👯‍♀\",\"name\":\"women with bunny ears\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6\",\"char\":\"🧖\",\"name\":\"person in steamy room\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FB\",\"char\":\"🧖🏻\",\"name\":\"person in steamy room: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FC\",\"char\":\"🧖🏼\",\"name\":\"person in steamy room: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FD\",\"char\":\"🧖🏽\",\"name\":\"person in steamy room: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FE\",\"char\":\"🧖🏾\",\"name\":\"person in steamy room: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FF\",\"char\":\"🧖🏿\",\"name\":\"person in steamy room: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 200D 2642 FE0F\",\"char\":\"🧖‍♂️\",\"name\":\"man in steamy room\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 200D 2642\",\"char\":\"🧖‍♂\",\"name\":\"man in steamy room\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FB 200D 2642 FE0F\",\"char\":\"🧖🏻‍♂️\",\"name\":\"man in steamy room: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FB 200D 2642\",\"char\":\"🧖🏻‍♂\",\"name\":\"man in steamy room: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FC 200D 2642 FE0F\",\"char\":\"🧖🏼‍♂️\",\"name\":\"man in steamy room: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FC 200D 2642\",\"char\":\"🧖🏼‍♂\",\"name\":\"man in steamy room: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FD 200D 2642 FE0F\",\"char\":\"🧖🏽‍♂️\",\"name\":\"man in steamy room: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FD 200D 2642\",\"char\":\"🧖🏽‍♂\",\"name\":\"man in steamy room: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FE 200D 2642 FE0F\",\"char\":\"🧖🏾‍♂️\",\"name\":\"man in steamy room: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FE 200D 2642\",\"char\":\"🧖🏾‍♂\",\"name\":\"man in steamy room: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FF 200D 2642 FE0F\",\"char\":\"🧖🏿‍♂️\",\"name\":\"man in steamy room: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FF 200D 2642\",\"char\":\"🧖🏿‍♂\",\"name\":\"man in steamy room: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 200D 2640 FE0F\",\"char\":\"🧖‍♀️\",\"name\":\"woman in steamy room\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 200D 2640\",\"char\":\"🧖‍♀\",\"name\":\"woman in steamy room\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FB 200D 2640 FE0F\",\"char\":\"🧖🏻‍♀️\",\"name\":\"woman in steamy room: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FB 200D 2640\",\"char\":\"🧖🏻‍♀\",\"name\":\"woman in steamy room: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FC 200D 2640 FE0F\",\"char\":\"🧖🏼‍♀️\",\"name\":\"woman in steamy room: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FC 200D 2640\",\"char\":\"🧖🏼‍♀\",\"name\":\"woman in steamy room: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FD 200D 2640 FE0F\",\"char\":\"🧖🏽‍♀️\",\"name\":\"woman in steamy room: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FD 200D 2640\",\"char\":\"🧖🏽‍♀\",\"name\":\"woman in steamy room: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FE 200D 2640 FE0F\",\"char\":\"🧖🏾‍♀️\",\"name\":\"woman in steamy room: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FE 200D 2640\",\"char\":\"🧖🏾‍♀\",\"name\":\"woman in steamy room: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FF 200D 2640 FE0F\",\"char\":\"🧖🏿‍♀️\",\"name\":\"woman in steamy room: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D6 1F3FF 200D 2640\",\"char\":\"🧖🏿‍♀\",\"name\":\"woman in steamy room: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7\",\"char\":\"🧗\",\"name\":\"person climbing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FB\",\"char\":\"🧗🏻\",\"name\":\"person climbing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FC\",\"char\":\"🧗🏼\",\"name\":\"person climbing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FD\",\"char\":\"🧗🏽\",\"name\":\"person climbing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FE\",\"char\":\"🧗🏾\",\"name\":\"person climbing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FF\",\"char\":\"🧗🏿\",\"name\":\"person climbing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 200D 2642 FE0F\",\"char\":\"🧗‍♂️\",\"name\":\"man climbing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 200D 2642\",\"char\":\"🧗‍♂\",\"name\":\"man climbing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FB 200D 2642 FE0F\",\"char\":\"🧗🏻‍♂️\",\"name\":\"man climbing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FB 200D 2642\",\"char\":\"🧗🏻‍♂\",\"name\":\"man climbing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FC 200D 2642 FE0F\",\"char\":\"🧗🏼‍♂️\",\"name\":\"man climbing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FC 200D 2642\",\"char\":\"🧗🏼‍♂\",\"name\":\"man climbing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FD 200D 2642 FE0F\",\"char\":\"🧗🏽‍♂️\",\"name\":\"man climbing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FD 200D 2642\",\"char\":\"🧗🏽‍♂\",\"name\":\"man climbing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FE 200D 2642 FE0F\",\"char\":\"🧗🏾‍♂️\",\"name\":\"man climbing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FE 200D 2642\",\"char\":\"🧗🏾‍♂\",\"name\":\"man climbing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FF 200D 2642 FE0F\",\"char\":\"🧗🏿‍♂️\",\"name\":\"man climbing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FF 200D 2642\",\"char\":\"🧗🏿‍♂\",\"name\":\"man climbing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 200D 2640 FE0F\",\"char\":\"🧗‍♀️\",\"name\":\"woman climbing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 200D 2640\",\"char\":\"🧗‍♀\",\"name\":\"woman climbing\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FB 200D 2640 FE0F\",\"char\":\"🧗🏻‍♀️\",\"name\":\"woman climbing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FB 200D 2640\",\"char\":\"🧗🏻‍♀\",\"name\":\"woman climbing: light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FC 200D 2640 FE0F\",\"char\":\"🧗🏼‍♀️\",\"name\":\"woman climbing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FC 200D 2640\",\"char\":\"🧗🏼‍♀\",\"name\":\"woman climbing: medium-light skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FD 200D 2640 FE0F\",\"char\":\"🧗🏽‍♀️\",\"name\":\"woman climbing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FD 200D 2640\",\"char\":\"🧗🏽‍♀\",\"name\":\"woman climbing: medium skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FE 200D 2640 FE0F\",\"char\":\"🧗🏾‍♀️\",\"name\":\"woman climbing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FE 200D 2640\",\"char\":\"🧗🏾‍♀\",\"name\":\"woman climbing: medium-dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FF 200D 2640 FE0F\",\"char\":\"🧗🏿‍♀️\",\"name\":\"woman climbing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F9D7 1F3FF 200D 2640\",\"char\":\"🧗🏿‍♀\",\"name\":\"woman climbing: dark skin tone\",\"category\":\"People & Body (person-activity)\",\"group\":\"People & Body\",\"subgroup\":\"person-activity\"},{\"codes\":\"1F93A\",\"char\":\"🤺\",\"name\":\"person fencing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C7\",\"char\":\"🏇\",\"name\":\"horse racing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C7 1F3FB\",\"char\":\"🏇🏻\",\"name\":\"horse racing: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C7 1F3FC\",\"char\":\"🏇🏼\",\"name\":\"horse racing: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C7 1F3FD\",\"char\":\"🏇🏽\",\"name\":\"horse racing: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C7 1F3FE\",\"char\":\"🏇🏾\",\"name\":\"horse racing: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C7 1F3FF\",\"char\":\"🏇🏿\",\"name\":\"horse racing: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F7 FE0F\",\"char\":\"⛷️\",\"name\":\"skier\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F7\",\"char\":\"⛷\",\"name\":\"skier\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C2\",\"char\":\"🏂\",\"name\":\"snowboarder\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C2 1F3FB\",\"char\":\"🏂🏻\",\"name\":\"snowboarder: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C2 1F3FC\",\"char\":\"🏂🏼\",\"name\":\"snowboarder: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C2 1F3FD\",\"char\":\"🏂🏽\",\"name\":\"snowboarder: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C2 1F3FE\",\"char\":\"🏂🏾\",\"name\":\"snowboarder: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C2 1F3FF\",\"char\":\"🏂🏿\",\"name\":\"snowboarder: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC FE0F\",\"char\":\"🏌️\",\"name\":\"person golfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC\",\"char\":\"🏌\",\"name\":\"person golfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FB\",\"char\":\"🏌🏻\",\"name\":\"person golfing: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FC\",\"char\":\"🏌🏼\",\"name\":\"person golfing: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FD\",\"char\":\"🏌🏽\",\"name\":\"person golfing: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FE\",\"char\":\"🏌🏾\",\"name\":\"person golfing: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FF\",\"char\":\"🏌🏿\",\"name\":\"person golfing: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC FE0F 200D 2642 FE0F\",\"char\":\"🏌️‍♂️\",\"name\":\"man golfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 200D 2642 FE0F\",\"char\":\"🏌‍♂️\",\"name\":\"man golfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC FE0F 200D 2642\",\"char\":\"🏌️‍♂\",\"name\":\"man golfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 200D 2642\",\"char\":\"🏌‍♂\",\"name\":\"man golfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FB 200D 2642 FE0F\",\"char\":\"🏌🏻‍♂️\",\"name\":\"man golfing: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FB 200D 2642\",\"char\":\"🏌🏻‍♂\",\"name\":\"man golfing: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FC 200D 2642 FE0F\",\"char\":\"🏌🏼‍♂️\",\"name\":\"man golfing: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FC 200D 2642\",\"char\":\"🏌🏼‍♂\",\"name\":\"man golfing: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FD 200D 2642 FE0F\",\"char\":\"🏌🏽‍♂️\",\"name\":\"man golfing: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FD 200D 2642\",\"char\":\"🏌🏽‍♂\",\"name\":\"man golfing: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FE 200D 2642 FE0F\",\"char\":\"🏌🏾‍♂️\",\"name\":\"man golfing: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FE 200D 2642\",\"char\":\"🏌🏾‍♂\",\"name\":\"man golfing: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FF 200D 2642 FE0F\",\"char\":\"🏌🏿‍♂️\",\"name\":\"man golfing: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FF 200D 2642\",\"char\":\"🏌🏿‍♂\",\"name\":\"man golfing: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC FE0F 200D 2640 FE0F\",\"char\":\"🏌️‍♀️\",\"name\":\"woman golfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 200D 2640 FE0F\",\"char\":\"🏌‍♀️\",\"name\":\"woman golfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC FE0F 200D 2640\",\"char\":\"🏌️‍♀\",\"name\":\"woman golfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 200D 2640\",\"char\":\"🏌‍♀\",\"name\":\"woman golfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FB 200D 2640 FE0F\",\"char\":\"🏌🏻‍♀️\",\"name\":\"woman golfing: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FB 200D 2640\",\"char\":\"🏌🏻‍♀\",\"name\":\"woman golfing: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FC 200D 2640 FE0F\",\"char\":\"🏌🏼‍♀️\",\"name\":\"woman golfing: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FC 200D 2640\",\"char\":\"🏌🏼‍♀\",\"name\":\"woman golfing: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FD 200D 2640 FE0F\",\"char\":\"🏌🏽‍♀️\",\"name\":\"woman golfing: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FD 200D 2640\",\"char\":\"🏌🏽‍♀\",\"name\":\"woman golfing: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FE 200D 2640 FE0F\",\"char\":\"🏌🏾‍♀️\",\"name\":\"woman golfing: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FE 200D 2640\",\"char\":\"🏌🏾‍♀\",\"name\":\"woman golfing: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FF 200D 2640 FE0F\",\"char\":\"🏌🏿‍♀️\",\"name\":\"woman golfing: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CC 1F3FF 200D 2640\",\"char\":\"🏌🏿‍♀\",\"name\":\"woman golfing: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4\",\"char\":\"🏄\",\"name\":\"person surfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FB\",\"char\":\"🏄🏻\",\"name\":\"person surfing: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FC\",\"char\":\"🏄🏼\",\"name\":\"person surfing: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FD\",\"char\":\"🏄🏽\",\"name\":\"person surfing: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FE\",\"char\":\"🏄🏾\",\"name\":\"person surfing: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FF\",\"char\":\"🏄🏿\",\"name\":\"person surfing: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 200D 2642 FE0F\",\"char\":\"🏄‍♂️\",\"name\":\"man surfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 200D 2642\",\"char\":\"🏄‍♂\",\"name\":\"man surfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FB 200D 2642 FE0F\",\"char\":\"🏄🏻‍♂️\",\"name\":\"man surfing: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FB 200D 2642\",\"char\":\"🏄🏻‍♂\",\"name\":\"man surfing: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FC 200D 2642 FE0F\",\"char\":\"🏄🏼‍♂️\",\"name\":\"man surfing: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FC 200D 2642\",\"char\":\"🏄🏼‍♂\",\"name\":\"man surfing: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FD 200D 2642 FE0F\",\"char\":\"🏄🏽‍♂️\",\"name\":\"man surfing: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FD 200D 2642\",\"char\":\"🏄🏽‍♂\",\"name\":\"man surfing: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FE 200D 2642 FE0F\",\"char\":\"🏄🏾‍♂️\",\"name\":\"man surfing: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FE 200D 2642\",\"char\":\"🏄🏾‍♂\",\"name\":\"man surfing: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FF 200D 2642 FE0F\",\"char\":\"🏄🏿‍♂️\",\"name\":\"man surfing: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FF 200D 2642\",\"char\":\"🏄🏿‍♂\",\"name\":\"man surfing: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 200D 2640 FE0F\",\"char\":\"🏄‍♀️\",\"name\":\"woman surfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 200D 2640\",\"char\":\"🏄‍♀\",\"name\":\"woman surfing\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FB 200D 2640 FE0F\",\"char\":\"🏄🏻‍♀️\",\"name\":\"woman surfing: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FB 200D 2640\",\"char\":\"🏄🏻‍♀\",\"name\":\"woman surfing: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FC 200D 2640 FE0F\",\"char\":\"🏄🏼‍♀️\",\"name\":\"woman surfing: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FC 200D 2640\",\"char\":\"🏄🏼‍♀\",\"name\":\"woman surfing: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FD 200D 2640 FE0F\",\"char\":\"🏄🏽‍♀️\",\"name\":\"woman surfing: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FD 200D 2640\",\"char\":\"🏄🏽‍♀\",\"name\":\"woman surfing: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FE 200D 2640 FE0F\",\"char\":\"🏄🏾‍♀️\",\"name\":\"woman surfing: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FE 200D 2640\",\"char\":\"🏄🏾‍♀\",\"name\":\"woman surfing: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FF 200D 2640 FE0F\",\"char\":\"🏄🏿‍♀️\",\"name\":\"woman surfing: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3C4 1F3FF 200D 2640\",\"char\":\"🏄🏿‍♀\",\"name\":\"woman surfing: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3\",\"char\":\"🚣\",\"name\":\"person rowing boat\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FB\",\"char\":\"🚣🏻\",\"name\":\"person rowing boat: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FC\",\"char\":\"🚣🏼\",\"name\":\"person rowing boat: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FD\",\"char\":\"🚣🏽\",\"name\":\"person rowing boat: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FE\",\"char\":\"🚣🏾\",\"name\":\"person rowing boat: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FF\",\"char\":\"🚣🏿\",\"name\":\"person rowing boat: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 200D 2642 FE0F\",\"char\":\"🚣‍♂️\",\"name\":\"man rowing boat\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 200D 2642\",\"char\":\"🚣‍♂\",\"name\":\"man rowing boat\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FB 200D 2642 FE0F\",\"char\":\"🚣🏻‍♂️\",\"name\":\"man rowing boat: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FB 200D 2642\",\"char\":\"🚣🏻‍♂\",\"name\":\"man rowing boat: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FC 200D 2642 FE0F\",\"char\":\"🚣🏼‍♂️\",\"name\":\"man rowing boat: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FC 200D 2642\",\"char\":\"🚣🏼‍♂\",\"name\":\"man rowing boat: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FD 200D 2642 FE0F\",\"char\":\"🚣🏽‍♂️\",\"name\":\"man rowing boat: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FD 200D 2642\",\"char\":\"🚣🏽‍♂\",\"name\":\"man rowing boat: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FE 200D 2642 FE0F\",\"char\":\"🚣🏾‍♂️\",\"name\":\"man rowing boat: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FE 200D 2642\",\"char\":\"🚣🏾‍♂\",\"name\":\"man rowing boat: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FF 200D 2642 FE0F\",\"char\":\"🚣🏿‍♂️\",\"name\":\"man rowing boat: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FF 200D 2642\",\"char\":\"🚣🏿‍♂\",\"name\":\"man rowing boat: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 200D 2640 FE0F\",\"char\":\"🚣‍♀️\",\"name\":\"woman rowing boat\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 200D 2640\",\"char\":\"🚣‍♀\",\"name\":\"woman rowing boat\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FB 200D 2640 FE0F\",\"char\":\"🚣🏻‍♀️\",\"name\":\"woman rowing boat: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FB 200D 2640\",\"char\":\"🚣🏻‍♀\",\"name\":\"woman rowing boat: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FC 200D 2640 FE0F\",\"char\":\"🚣🏼‍♀️\",\"name\":\"woman rowing boat: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FC 200D 2640\",\"char\":\"🚣🏼‍♀\",\"name\":\"woman rowing boat: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FD 200D 2640 FE0F\",\"char\":\"🚣🏽‍♀️\",\"name\":\"woman rowing boat: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FD 200D 2640\",\"char\":\"🚣🏽‍♀\",\"name\":\"woman rowing boat: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FE 200D 2640 FE0F\",\"char\":\"🚣🏾‍♀️\",\"name\":\"woman rowing boat: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FE 200D 2640\",\"char\":\"🚣🏾‍♀\",\"name\":\"woman rowing boat: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FF 200D 2640 FE0F\",\"char\":\"🚣🏿‍♀️\",\"name\":\"woman rowing boat: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6A3 1F3FF 200D 2640\",\"char\":\"🚣🏿‍♀\",\"name\":\"woman rowing boat: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA\",\"char\":\"🏊\",\"name\":\"person swimming\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FB\",\"char\":\"🏊🏻\",\"name\":\"person swimming: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FC\",\"char\":\"🏊🏼\",\"name\":\"person swimming: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FD\",\"char\":\"🏊🏽\",\"name\":\"person swimming: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FE\",\"char\":\"🏊🏾\",\"name\":\"person swimming: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FF\",\"char\":\"🏊🏿\",\"name\":\"person swimming: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 200D 2642 FE0F\",\"char\":\"🏊‍♂️\",\"name\":\"man swimming\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 200D 2642\",\"char\":\"🏊‍♂\",\"name\":\"man swimming\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FB 200D 2642 FE0F\",\"char\":\"🏊🏻‍♂️\",\"name\":\"man swimming: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FB 200D 2642\",\"char\":\"🏊🏻‍♂\",\"name\":\"man swimming: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FC 200D 2642 FE0F\",\"char\":\"🏊🏼‍♂️\",\"name\":\"man swimming: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FC 200D 2642\",\"char\":\"🏊🏼‍♂\",\"name\":\"man swimming: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FD 200D 2642 FE0F\",\"char\":\"🏊🏽‍♂️\",\"name\":\"man swimming: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FD 200D 2642\",\"char\":\"🏊🏽‍♂\",\"name\":\"man swimming: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FE 200D 2642 FE0F\",\"char\":\"🏊🏾‍♂️\",\"name\":\"man swimming: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FE 200D 2642\",\"char\":\"🏊🏾‍♂\",\"name\":\"man swimming: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FF 200D 2642 FE0F\",\"char\":\"🏊🏿‍♂️\",\"name\":\"man swimming: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FF 200D 2642\",\"char\":\"🏊🏿‍♂\",\"name\":\"man swimming: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 200D 2640 FE0F\",\"char\":\"🏊‍♀️\",\"name\":\"woman swimming\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 200D 2640\",\"char\":\"🏊‍♀\",\"name\":\"woman swimming\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FB 200D 2640 FE0F\",\"char\":\"🏊🏻‍♀️\",\"name\":\"woman swimming: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FB 200D 2640\",\"char\":\"🏊🏻‍♀\",\"name\":\"woman swimming: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FC 200D 2640 FE0F\",\"char\":\"🏊🏼‍♀️\",\"name\":\"woman swimming: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FC 200D 2640\",\"char\":\"🏊🏼‍♀\",\"name\":\"woman swimming: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FD 200D 2640 FE0F\",\"char\":\"🏊🏽‍♀️\",\"name\":\"woman swimming: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FD 200D 2640\",\"char\":\"🏊🏽‍♀\",\"name\":\"woman swimming: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FE 200D 2640 FE0F\",\"char\":\"🏊🏾‍♀️\",\"name\":\"woman swimming: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FE 200D 2640\",\"char\":\"🏊🏾‍♀\",\"name\":\"woman swimming: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FF 200D 2640 FE0F\",\"char\":\"🏊🏿‍♀️\",\"name\":\"woman swimming: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CA 1F3FF 200D 2640\",\"char\":\"🏊🏿‍♀\",\"name\":\"woman swimming: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 FE0F\",\"char\":\"⛹️\",\"name\":\"person bouncing ball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9\",\"char\":\"⛹\",\"name\":\"person bouncing ball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FB\",\"char\":\"⛹🏻\",\"name\":\"person bouncing ball: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FC\",\"char\":\"⛹🏼\",\"name\":\"person bouncing ball: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FD\",\"char\":\"⛹🏽\",\"name\":\"person bouncing ball: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FE\",\"char\":\"⛹🏾\",\"name\":\"person bouncing ball: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FF\",\"char\":\"⛹🏿\",\"name\":\"person bouncing ball: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 FE0F 200D 2642 FE0F\",\"char\":\"⛹️‍♂️\",\"name\":\"man bouncing ball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 200D 2642 FE0F\",\"char\":\"⛹‍♂️\",\"name\":\"man bouncing ball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 FE0F 200D 2642\",\"char\":\"⛹️‍♂\",\"name\":\"man bouncing ball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 200D 2642\",\"char\":\"⛹‍♂\",\"name\":\"man bouncing ball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FB 200D 2642 FE0F\",\"char\":\"⛹🏻‍♂️\",\"name\":\"man bouncing ball: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FB 200D 2642\",\"char\":\"⛹🏻‍♂\",\"name\":\"man bouncing ball: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FC 200D 2642 FE0F\",\"char\":\"⛹🏼‍♂️\",\"name\":\"man bouncing ball: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FC 200D 2642\",\"char\":\"⛹🏼‍♂\",\"name\":\"man bouncing ball: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FD 200D 2642 FE0F\",\"char\":\"⛹🏽‍♂️\",\"name\":\"man bouncing ball: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FD 200D 2642\",\"char\":\"⛹🏽‍♂\",\"name\":\"man bouncing ball: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FE 200D 2642 FE0F\",\"char\":\"⛹🏾‍♂️\",\"name\":\"man bouncing ball: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FE 200D 2642\",\"char\":\"⛹🏾‍♂\",\"name\":\"man bouncing ball: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FF 200D 2642 FE0F\",\"char\":\"⛹🏿‍♂️\",\"name\":\"man bouncing ball: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FF 200D 2642\",\"char\":\"⛹🏿‍♂\",\"name\":\"man bouncing ball: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 FE0F 200D 2640 FE0F\",\"char\":\"⛹️‍♀️\",\"name\":\"woman bouncing ball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 200D 2640 FE0F\",\"char\":\"⛹‍♀️\",\"name\":\"woman bouncing ball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 FE0F 200D 2640\",\"char\":\"⛹️‍♀\",\"name\":\"woman bouncing ball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 200D 2640\",\"char\":\"⛹‍♀\",\"name\":\"woman bouncing ball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FB 200D 2640 FE0F\",\"char\":\"⛹🏻‍♀️\",\"name\":\"woman bouncing ball: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FB 200D 2640\",\"char\":\"⛹🏻‍♀\",\"name\":\"woman bouncing ball: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FC 200D 2640 FE0F\",\"char\":\"⛹🏼‍♀️\",\"name\":\"woman bouncing ball: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FC 200D 2640\",\"char\":\"⛹🏼‍♀\",\"name\":\"woman bouncing ball: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FD 200D 2640 FE0F\",\"char\":\"⛹🏽‍♀️\",\"name\":\"woman bouncing ball: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FD 200D 2640\",\"char\":\"⛹🏽‍♀\",\"name\":\"woman bouncing ball: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FE 200D 2640 FE0F\",\"char\":\"⛹🏾‍♀️\",\"name\":\"woman bouncing ball: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FE 200D 2640\",\"char\":\"⛹🏾‍♀\",\"name\":\"woman bouncing ball: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FF 200D 2640 FE0F\",\"char\":\"⛹🏿‍♀️\",\"name\":\"woman bouncing ball: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"26F9 1F3FF 200D 2640\",\"char\":\"⛹🏿‍♀\",\"name\":\"woman bouncing ball: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB FE0F\",\"char\":\"🏋️\",\"name\":\"person lifting weights\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB\",\"char\":\"🏋\",\"name\":\"person lifting weights\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FB\",\"char\":\"🏋🏻\",\"name\":\"person lifting weights: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FC\",\"char\":\"🏋🏼\",\"name\":\"person lifting weights: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FD\",\"char\":\"🏋🏽\",\"name\":\"person lifting weights: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FE\",\"char\":\"🏋🏾\",\"name\":\"person lifting weights: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FF\",\"char\":\"🏋🏿\",\"name\":\"person lifting weights: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB FE0F 200D 2642 FE0F\",\"char\":\"🏋️‍♂️\",\"name\":\"man lifting weights\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 200D 2642 FE0F\",\"char\":\"🏋‍♂️\",\"name\":\"man lifting weights\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB FE0F 200D 2642\",\"char\":\"🏋️‍♂\",\"name\":\"man lifting weights\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 200D 2642\",\"char\":\"🏋‍♂\",\"name\":\"man lifting weights\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FB 200D 2642 FE0F\",\"char\":\"🏋🏻‍♂️\",\"name\":\"man lifting weights: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FB 200D 2642\",\"char\":\"🏋🏻‍♂\",\"name\":\"man lifting weights: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FC 200D 2642 FE0F\",\"char\":\"🏋🏼‍♂️\",\"name\":\"man lifting weights: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FC 200D 2642\",\"char\":\"🏋🏼‍♂\",\"name\":\"man lifting weights: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FD 200D 2642 FE0F\",\"char\":\"🏋🏽‍♂️\",\"name\":\"man lifting weights: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FD 200D 2642\",\"char\":\"🏋🏽‍♂\",\"name\":\"man lifting weights: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FE 200D 2642 FE0F\",\"char\":\"🏋🏾‍♂️\",\"name\":\"man lifting weights: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FE 200D 2642\",\"char\":\"🏋🏾‍♂\",\"name\":\"man lifting weights: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FF 200D 2642 FE0F\",\"char\":\"🏋🏿‍♂️\",\"name\":\"man lifting weights: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FF 200D 2642\",\"char\":\"🏋🏿‍♂\",\"name\":\"man lifting weights: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB FE0F 200D 2640 FE0F\",\"char\":\"🏋️‍♀️\",\"name\":\"woman lifting weights\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 200D 2640 FE0F\",\"char\":\"🏋‍♀️\",\"name\":\"woman lifting weights\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB FE0F 200D 2640\",\"char\":\"🏋️‍♀\",\"name\":\"woman lifting weights\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 200D 2640\",\"char\":\"🏋‍♀\",\"name\":\"woman lifting weights\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FB 200D 2640 FE0F\",\"char\":\"🏋🏻‍♀️\",\"name\":\"woman lifting weights: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FB 200D 2640\",\"char\":\"🏋🏻‍♀\",\"name\":\"woman lifting weights: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FC 200D 2640 FE0F\",\"char\":\"🏋🏼‍♀️\",\"name\":\"woman lifting weights: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FC 200D 2640\",\"char\":\"🏋🏼‍♀\",\"name\":\"woman lifting weights: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FD 200D 2640 FE0F\",\"char\":\"🏋🏽‍♀️\",\"name\":\"woman lifting weights: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FD 200D 2640\",\"char\":\"🏋🏽‍♀\",\"name\":\"woman lifting weights: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FE 200D 2640 FE0F\",\"char\":\"🏋🏾‍♀️\",\"name\":\"woman lifting weights: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FE 200D 2640\",\"char\":\"🏋🏾‍♀\",\"name\":\"woman lifting weights: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FF 200D 2640 FE0F\",\"char\":\"🏋🏿‍♀️\",\"name\":\"woman lifting weights: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F3CB 1F3FF 200D 2640\",\"char\":\"🏋🏿‍♀\",\"name\":\"woman lifting weights: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4\",\"char\":\"🚴\",\"name\":\"person biking\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FB\",\"char\":\"🚴🏻\",\"name\":\"person biking: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FC\",\"char\":\"🚴🏼\",\"name\":\"person biking: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FD\",\"char\":\"🚴🏽\",\"name\":\"person biking: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FE\",\"char\":\"🚴🏾\",\"name\":\"person biking: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FF\",\"char\":\"🚴🏿\",\"name\":\"person biking: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 200D 2642 FE0F\",\"char\":\"🚴‍♂️\",\"name\":\"man biking\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 200D 2642\",\"char\":\"🚴‍♂\",\"name\":\"man biking\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FB 200D 2642 FE0F\",\"char\":\"🚴🏻‍♂️\",\"name\":\"man biking: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FB 200D 2642\",\"char\":\"🚴🏻‍♂\",\"name\":\"man biking: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FC 200D 2642 FE0F\",\"char\":\"🚴🏼‍♂️\",\"name\":\"man biking: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FC 200D 2642\",\"char\":\"🚴🏼‍♂\",\"name\":\"man biking: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FD 200D 2642 FE0F\",\"char\":\"🚴🏽‍♂️\",\"name\":\"man biking: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FD 200D 2642\",\"char\":\"🚴🏽‍♂\",\"name\":\"man biking: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FE 200D 2642 FE0F\",\"char\":\"🚴🏾‍♂️\",\"name\":\"man biking: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FE 200D 2642\",\"char\":\"🚴🏾‍♂\",\"name\":\"man biking: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FF 200D 2642 FE0F\",\"char\":\"🚴🏿‍♂️\",\"name\":\"man biking: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FF 200D 2642\",\"char\":\"🚴🏿‍♂\",\"name\":\"man biking: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 200D 2640 FE0F\",\"char\":\"🚴‍♀️\",\"name\":\"woman biking\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 200D 2640\",\"char\":\"🚴‍♀\",\"name\":\"woman biking\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FB 200D 2640 FE0F\",\"char\":\"🚴🏻‍♀️\",\"name\":\"woman biking: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FB 200D 2640\",\"char\":\"🚴🏻‍♀\",\"name\":\"woman biking: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FC 200D 2640 FE0F\",\"char\":\"🚴🏼‍♀️\",\"name\":\"woman biking: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FC 200D 2640\",\"char\":\"🚴🏼‍♀\",\"name\":\"woman biking: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FD 200D 2640 FE0F\",\"char\":\"🚴🏽‍♀️\",\"name\":\"woman biking: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FD 200D 2640\",\"char\":\"🚴🏽‍♀\",\"name\":\"woman biking: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FE 200D 2640 FE0F\",\"char\":\"🚴🏾‍♀️\",\"name\":\"woman biking: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FE 200D 2640\",\"char\":\"🚴🏾‍♀\",\"name\":\"woman biking: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FF 200D 2640 FE0F\",\"char\":\"🚴🏿‍♀️\",\"name\":\"woman biking: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B4 1F3FF 200D 2640\",\"char\":\"🚴🏿‍♀\",\"name\":\"woman biking: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5\",\"char\":\"🚵\",\"name\":\"person mountain biking\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FB\",\"char\":\"🚵🏻\",\"name\":\"person mountain biking: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FC\",\"char\":\"🚵🏼\",\"name\":\"person mountain biking: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FD\",\"char\":\"🚵🏽\",\"name\":\"person mountain biking: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FE\",\"char\":\"🚵🏾\",\"name\":\"person mountain biking: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FF\",\"char\":\"🚵🏿\",\"name\":\"person mountain biking: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 200D 2642 FE0F\",\"char\":\"🚵‍♂️\",\"name\":\"man mountain biking\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 200D 2642\",\"char\":\"🚵‍♂\",\"name\":\"man mountain biking\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FB 200D 2642 FE0F\",\"char\":\"🚵🏻‍♂️\",\"name\":\"man mountain biking: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FB 200D 2642\",\"char\":\"🚵🏻‍♂\",\"name\":\"man mountain biking: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FC 200D 2642 FE0F\",\"char\":\"🚵🏼‍♂️\",\"name\":\"man mountain biking: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FC 200D 2642\",\"char\":\"🚵🏼‍♂\",\"name\":\"man mountain biking: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FD 200D 2642 FE0F\",\"char\":\"🚵🏽‍♂️\",\"name\":\"man mountain biking: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FD 200D 2642\",\"char\":\"🚵🏽‍♂\",\"name\":\"man mountain biking: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FE 200D 2642 FE0F\",\"char\":\"🚵🏾‍♂️\",\"name\":\"man mountain biking: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FE 200D 2642\",\"char\":\"🚵🏾‍♂\",\"name\":\"man mountain biking: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FF 200D 2642 FE0F\",\"char\":\"🚵🏿‍♂️\",\"name\":\"man mountain biking: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FF 200D 2642\",\"char\":\"🚵🏿‍♂\",\"name\":\"man mountain biking: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 200D 2640 FE0F\",\"char\":\"🚵‍♀️\",\"name\":\"woman mountain biking\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 200D 2640\",\"char\":\"🚵‍♀\",\"name\":\"woman mountain biking\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FB 200D 2640 FE0F\",\"char\":\"🚵🏻‍♀️\",\"name\":\"woman mountain biking: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FB 200D 2640\",\"char\":\"🚵🏻‍♀\",\"name\":\"woman mountain biking: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FC 200D 2640 FE0F\",\"char\":\"🚵🏼‍♀️\",\"name\":\"woman mountain biking: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FC 200D 2640\",\"char\":\"🚵🏼‍♀\",\"name\":\"woman mountain biking: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FD 200D 2640 FE0F\",\"char\":\"🚵🏽‍♀️\",\"name\":\"woman mountain biking: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FD 200D 2640\",\"char\":\"🚵🏽‍♀\",\"name\":\"woman mountain biking: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FE 200D 2640 FE0F\",\"char\":\"🚵🏾‍♀️\",\"name\":\"woman mountain biking: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FE 200D 2640\",\"char\":\"🚵🏾‍♀\",\"name\":\"woman mountain biking: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FF 200D 2640 FE0F\",\"char\":\"🚵🏿‍♀️\",\"name\":\"woman mountain biking: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F6B5 1F3FF 200D 2640\",\"char\":\"🚵🏿‍♀\",\"name\":\"woman mountain biking: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938\",\"char\":\"🤸\",\"name\":\"person cartwheeling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FB\",\"char\":\"🤸🏻\",\"name\":\"person cartwheeling: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FC\",\"char\":\"🤸🏼\",\"name\":\"person cartwheeling: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FD\",\"char\":\"🤸🏽\",\"name\":\"person cartwheeling: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FE\",\"char\":\"🤸🏾\",\"name\":\"person cartwheeling: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FF\",\"char\":\"🤸🏿\",\"name\":\"person cartwheeling: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 200D 2642 FE0F\",\"char\":\"🤸‍♂️\",\"name\":\"man cartwheeling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 200D 2642\",\"char\":\"🤸‍♂\",\"name\":\"man cartwheeling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FB 200D 2642 FE0F\",\"char\":\"🤸🏻‍♂️\",\"name\":\"man cartwheeling: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FB 200D 2642\",\"char\":\"🤸🏻‍♂\",\"name\":\"man cartwheeling: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FC 200D 2642 FE0F\",\"char\":\"🤸🏼‍♂️\",\"name\":\"man cartwheeling: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FC 200D 2642\",\"char\":\"🤸🏼‍♂\",\"name\":\"man cartwheeling: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FD 200D 2642 FE0F\",\"char\":\"🤸🏽‍♂️\",\"name\":\"man cartwheeling: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FD 200D 2642\",\"char\":\"🤸🏽‍♂\",\"name\":\"man cartwheeling: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FE 200D 2642 FE0F\",\"char\":\"🤸🏾‍♂️\",\"name\":\"man cartwheeling: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FE 200D 2642\",\"char\":\"🤸🏾‍♂\",\"name\":\"man cartwheeling: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FF 200D 2642 FE0F\",\"char\":\"🤸🏿‍♂️\",\"name\":\"man cartwheeling: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FF 200D 2642\",\"char\":\"🤸🏿‍♂\",\"name\":\"man cartwheeling: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 200D 2640 FE0F\",\"char\":\"🤸‍♀️\",\"name\":\"woman cartwheeling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 200D 2640\",\"char\":\"🤸‍♀\",\"name\":\"woman cartwheeling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FB 200D 2640 FE0F\",\"char\":\"🤸🏻‍♀️\",\"name\":\"woman cartwheeling: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FB 200D 2640\",\"char\":\"🤸🏻‍♀\",\"name\":\"woman cartwheeling: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FC 200D 2640 FE0F\",\"char\":\"🤸🏼‍♀️\",\"name\":\"woman cartwheeling: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FC 200D 2640\",\"char\":\"🤸🏼‍♀\",\"name\":\"woman cartwheeling: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FD 200D 2640 FE0F\",\"char\":\"🤸🏽‍♀️\",\"name\":\"woman cartwheeling: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FD 200D 2640\",\"char\":\"🤸🏽‍♀\",\"name\":\"woman cartwheeling: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FE 200D 2640 FE0F\",\"char\":\"🤸🏾‍♀️\",\"name\":\"woman cartwheeling: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FE 200D 2640\",\"char\":\"🤸🏾‍♀\",\"name\":\"woman cartwheeling: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FF 200D 2640 FE0F\",\"char\":\"🤸🏿‍♀️\",\"name\":\"woman cartwheeling: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F938 1F3FF 200D 2640\",\"char\":\"🤸🏿‍♀\",\"name\":\"woman cartwheeling: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93C\",\"char\":\"🤼\",\"name\":\"people wrestling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93C 200D 2642 FE0F\",\"char\":\"🤼‍♂️\",\"name\":\"men wrestling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93C 200D 2642\",\"char\":\"🤼‍♂\",\"name\":\"men wrestling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93C 200D 2640 FE0F\",\"char\":\"🤼‍♀️\",\"name\":\"women wrestling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93C 200D 2640\",\"char\":\"🤼‍♀\",\"name\":\"women wrestling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D\",\"char\":\"🤽\",\"name\":\"person playing water polo\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FB\",\"char\":\"🤽🏻\",\"name\":\"person playing water polo: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FC\",\"char\":\"🤽🏼\",\"name\":\"person playing water polo: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FD\",\"char\":\"🤽🏽\",\"name\":\"person playing water polo: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FE\",\"char\":\"🤽🏾\",\"name\":\"person playing water polo: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FF\",\"char\":\"🤽🏿\",\"name\":\"person playing water polo: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 200D 2642 FE0F\",\"char\":\"🤽‍♂️\",\"name\":\"man playing water polo\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 200D 2642\",\"char\":\"🤽‍♂\",\"name\":\"man playing water polo\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FB 200D 2642 FE0F\",\"char\":\"🤽🏻‍♂️\",\"name\":\"man playing water polo: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FB 200D 2642\",\"char\":\"🤽🏻‍♂\",\"name\":\"man playing water polo: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FC 200D 2642 FE0F\",\"char\":\"🤽🏼‍♂️\",\"name\":\"man playing water polo: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FC 200D 2642\",\"char\":\"🤽🏼‍♂\",\"name\":\"man playing water polo: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FD 200D 2642 FE0F\",\"char\":\"🤽🏽‍♂️\",\"name\":\"man playing water polo: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FD 200D 2642\",\"char\":\"🤽🏽‍♂\",\"name\":\"man playing water polo: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FE 200D 2642 FE0F\",\"char\":\"🤽🏾‍♂️\",\"name\":\"man playing water polo: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FE 200D 2642\",\"char\":\"🤽🏾‍♂\",\"name\":\"man playing water polo: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FF 200D 2642 FE0F\",\"char\":\"🤽🏿‍♂️\",\"name\":\"man playing water polo: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FF 200D 2642\",\"char\":\"🤽🏿‍♂\",\"name\":\"man playing water polo: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 200D 2640 FE0F\",\"char\":\"🤽‍♀️\",\"name\":\"woman playing water polo\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 200D 2640\",\"char\":\"🤽‍♀\",\"name\":\"woman playing water polo\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FB 200D 2640 FE0F\",\"char\":\"🤽🏻‍♀️\",\"name\":\"woman playing water polo: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FB 200D 2640\",\"char\":\"🤽🏻‍♀\",\"name\":\"woman playing water polo: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FC 200D 2640 FE0F\",\"char\":\"🤽🏼‍♀️\",\"name\":\"woman playing water polo: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FC 200D 2640\",\"char\":\"🤽🏼‍♀\",\"name\":\"woman playing water polo: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FD 200D 2640 FE0F\",\"char\":\"🤽🏽‍♀️\",\"name\":\"woman playing water polo: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FD 200D 2640\",\"char\":\"🤽🏽‍♀\",\"name\":\"woman playing water polo: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FE 200D 2640 FE0F\",\"char\":\"🤽🏾‍♀️\",\"name\":\"woman playing water polo: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FE 200D 2640\",\"char\":\"🤽🏾‍♀\",\"name\":\"woman playing water polo: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FF 200D 2640 FE0F\",\"char\":\"🤽🏿‍♀️\",\"name\":\"woman playing water polo: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93D 1F3FF 200D 2640\",\"char\":\"🤽🏿‍♀\",\"name\":\"woman playing water polo: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E\",\"char\":\"🤾\",\"name\":\"person playing handball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FB\",\"char\":\"🤾🏻\",\"name\":\"person playing handball: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FC\",\"char\":\"🤾🏼\",\"name\":\"person playing handball: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FD\",\"char\":\"🤾🏽\",\"name\":\"person playing handball: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FE\",\"char\":\"🤾🏾\",\"name\":\"person playing handball: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FF\",\"char\":\"🤾🏿\",\"name\":\"person playing handball: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 200D 2642 FE0F\",\"char\":\"🤾‍♂️\",\"name\":\"man playing handball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 200D 2642\",\"char\":\"🤾‍♂\",\"name\":\"man playing handball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FB 200D 2642 FE0F\",\"char\":\"🤾🏻‍♂️\",\"name\":\"man playing handball: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FB 200D 2642\",\"char\":\"🤾🏻‍♂\",\"name\":\"man playing handball: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FC 200D 2642 FE0F\",\"char\":\"🤾🏼‍♂️\",\"name\":\"man playing handball: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FC 200D 2642\",\"char\":\"🤾🏼‍♂\",\"name\":\"man playing handball: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FD 200D 2642 FE0F\",\"char\":\"🤾🏽‍♂️\",\"name\":\"man playing handball: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FD 200D 2642\",\"char\":\"🤾🏽‍♂\",\"name\":\"man playing handball: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FE 200D 2642 FE0F\",\"char\":\"🤾🏾‍♂️\",\"name\":\"man playing handball: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FE 200D 2642\",\"char\":\"🤾🏾‍♂\",\"name\":\"man playing handball: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FF 200D 2642 FE0F\",\"char\":\"🤾🏿‍♂️\",\"name\":\"man playing handball: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FF 200D 2642\",\"char\":\"🤾🏿‍♂\",\"name\":\"man playing handball: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 200D 2640 FE0F\",\"char\":\"🤾‍♀️\",\"name\":\"woman playing handball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 200D 2640\",\"char\":\"🤾‍♀\",\"name\":\"woman playing handball\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FB 200D 2640 FE0F\",\"char\":\"🤾🏻‍♀️\",\"name\":\"woman playing handball: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FB 200D 2640\",\"char\":\"🤾🏻‍♀\",\"name\":\"woman playing handball: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FC 200D 2640 FE0F\",\"char\":\"🤾🏼‍♀️\",\"name\":\"woman playing handball: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FC 200D 2640\",\"char\":\"🤾🏼‍♀\",\"name\":\"woman playing handball: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FD 200D 2640 FE0F\",\"char\":\"🤾🏽‍♀️\",\"name\":\"woman playing handball: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FD 200D 2640\",\"char\":\"🤾🏽‍♀\",\"name\":\"woman playing handball: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FE 200D 2640 FE0F\",\"char\":\"🤾🏾‍♀️\",\"name\":\"woman playing handball: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FE 200D 2640\",\"char\":\"🤾🏾‍♀\",\"name\":\"woman playing handball: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FF 200D 2640 FE0F\",\"char\":\"🤾🏿‍♀️\",\"name\":\"woman playing handball: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F93E 1F3FF 200D 2640\",\"char\":\"🤾🏿‍♀\",\"name\":\"woman playing handball: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939\",\"char\":\"🤹\",\"name\":\"person juggling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FB\",\"char\":\"🤹🏻\",\"name\":\"person juggling: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FC\",\"char\":\"🤹🏼\",\"name\":\"person juggling: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FD\",\"char\":\"🤹🏽\",\"name\":\"person juggling: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FE\",\"char\":\"🤹🏾\",\"name\":\"person juggling: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FF\",\"char\":\"🤹🏿\",\"name\":\"person juggling: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 200D 2642 FE0F\",\"char\":\"🤹‍♂️\",\"name\":\"man juggling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 200D 2642\",\"char\":\"🤹‍♂\",\"name\":\"man juggling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FB 200D 2642 FE0F\",\"char\":\"🤹🏻‍♂️\",\"name\":\"man juggling: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FB 200D 2642\",\"char\":\"🤹🏻‍♂\",\"name\":\"man juggling: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FC 200D 2642 FE0F\",\"char\":\"🤹🏼‍♂️\",\"name\":\"man juggling: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FC 200D 2642\",\"char\":\"🤹🏼‍♂\",\"name\":\"man juggling: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FD 200D 2642 FE0F\",\"char\":\"🤹🏽‍♂️\",\"name\":\"man juggling: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FD 200D 2642\",\"char\":\"🤹🏽‍♂\",\"name\":\"man juggling: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FE 200D 2642 FE0F\",\"char\":\"🤹🏾‍♂️\",\"name\":\"man juggling: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FE 200D 2642\",\"char\":\"🤹🏾‍♂\",\"name\":\"man juggling: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FF 200D 2642 FE0F\",\"char\":\"🤹🏿‍♂️\",\"name\":\"man juggling: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FF 200D 2642\",\"char\":\"🤹🏿‍♂\",\"name\":\"man juggling: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 200D 2640 FE0F\",\"char\":\"🤹‍♀️\",\"name\":\"woman juggling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 200D 2640\",\"char\":\"🤹‍♀\",\"name\":\"woman juggling\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FB 200D 2640 FE0F\",\"char\":\"🤹🏻‍♀️\",\"name\":\"woman juggling: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FB 200D 2640\",\"char\":\"🤹🏻‍♀\",\"name\":\"woman juggling: light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FC 200D 2640 FE0F\",\"char\":\"🤹🏼‍♀️\",\"name\":\"woman juggling: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FC 200D 2640\",\"char\":\"🤹🏼‍♀\",\"name\":\"woman juggling: medium-light skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FD 200D 2640 FE0F\",\"char\":\"🤹🏽‍♀️\",\"name\":\"woman juggling: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FD 200D 2640\",\"char\":\"🤹🏽‍♀\",\"name\":\"woman juggling: medium skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FE 200D 2640 FE0F\",\"char\":\"🤹🏾‍♀️\",\"name\":\"woman juggling: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FE 200D 2640\",\"char\":\"🤹🏾‍♀\",\"name\":\"woman juggling: medium-dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FF 200D 2640 FE0F\",\"char\":\"🤹🏿‍♀️\",\"name\":\"woman juggling: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F939 1F3FF 200D 2640\",\"char\":\"🤹🏿‍♀\",\"name\":\"woman juggling: dark skin tone\",\"category\":\"People & Body (person-sport)\",\"group\":\"People & Body\",\"subgroup\":\"person-sport\"},{\"codes\":\"1F9D8\",\"char\":\"🧘\",\"name\":\"person in lotus position\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FB\",\"char\":\"🧘🏻\",\"name\":\"person in lotus position: light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FC\",\"char\":\"🧘🏼\",\"name\":\"person in lotus position: medium-light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FD\",\"char\":\"🧘🏽\",\"name\":\"person in lotus position: medium skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FE\",\"char\":\"🧘🏾\",\"name\":\"person in lotus position: medium-dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FF\",\"char\":\"🧘🏿\",\"name\":\"person in lotus position: dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 200D 2642 FE0F\",\"char\":\"🧘‍♂️\",\"name\":\"man in lotus position\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 200D 2642\",\"char\":\"🧘‍♂\",\"name\":\"man in lotus position\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FB 200D 2642 FE0F\",\"char\":\"🧘🏻‍♂️\",\"name\":\"man in lotus position: light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FB 200D 2642\",\"char\":\"🧘🏻‍♂\",\"name\":\"man in lotus position: light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FC 200D 2642 FE0F\",\"char\":\"🧘🏼‍♂️\",\"name\":\"man in lotus position: medium-light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FC 200D 2642\",\"char\":\"🧘🏼‍♂\",\"name\":\"man in lotus position: medium-light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FD 200D 2642 FE0F\",\"char\":\"🧘🏽‍♂️\",\"name\":\"man in lotus position: medium skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FD 200D 2642\",\"char\":\"🧘🏽‍♂\",\"name\":\"man in lotus position: medium skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FE 200D 2642 FE0F\",\"char\":\"🧘🏾‍♂️\",\"name\":\"man in lotus position: medium-dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FE 200D 2642\",\"char\":\"🧘🏾‍♂\",\"name\":\"man in lotus position: medium-dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FF 200D 2642 FE0F\",\"char\":\"🧘🏿‍♂️\",\"name\":\"man in lotus position: dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FF 200D 2642\",\"char\":\"🧘🏿‍♂\",\"name\":\"man in lotus position: dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 200D 2640 FE0F\",\"char\":\"🧘‍♀️\",\"name\":\"woman in lotus position\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 200D 2640\",\"char\":\"🧘‍♀\",\"name\":\"woman in lotus position\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FB 200D 2640 FE0F\",\"char\":\"🧘🏻‍♀️\",\"name\":\"woman in lotus position: light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FB 200D 2640\",\"char\":\"🧘🏻‍♀\",\"name\":\"woman in lotus position: light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FC 200D 2640 FE0F\",\"char\":\"🧘🏼‍♀️\",\"name\":\"woman in lotus position: medium-light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FC 200D 2640\",\"char\":\"🧘🏼‍♀\",\"name\":\"woman in lotus position: medium-light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FD 200D 2640 FE0F\",\"char\":\"🧘🏽‍♀️\",\"name\":\"woman in lotus position: medium skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FD 200D 2640\",\"char\":\"🧘🏽‍♀\",\"name\":\"woman in lotus position: medium skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FE 200D 2640 FE0F\",\"char\":\"🧘🏾‍♀️\",\"name\":\"woman in lotus position: medium-dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FE 200D 2640\",\"char\":\"🧘🏾‍♀\",\"name\":\"woman in lotus position: medium-dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FF 200D 2640 FE0F\",\"char\":\"🧘🏿‍♀️\",\"name\":\"woman in lotus position: dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D8 1F3FF 200D 2640\",\"char\":\"🧘🏿‍♀\",\"name\":\"woman in lotus position: dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6C0\",\"char\":\"🛀\",\"name\":\"person taking bath\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6C0 1F3FB\",\"char\":\"🛀🏻\",\"name\":\"person taking bath: light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6C0 1F3FC\",\"char\":\"🛀🏼\",\"name\":\"person taking bath: medium-light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6C0 1F3FD\",\"char\":\"🛀🏽\",\"name\":\"person taking bath: medium skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6C0 1F3FE\",\"char\":\"🛀🏾\",\"name\":\"person taking bath: medium-dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6C0 1F3FF\",\"char\":\"🛀🏿\",\"name\":\"person taking bath: dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6CC\",\"char\":\"🛌\",\"name\":\"person in bed\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6CC 1F3FB\",\"char\":\"🛌🏻\",\"name\":\"person in bed: light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6CC 1F3FC\",\"char\":\"🛌🏼\",\"name\":\"person in bed: medium-light skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6CC 1F3FD\",\"char\":\"🛌🏽\",\"name\":\"person in bed: medium skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6CC 1F3FE\",\"char\":\"🛌🏾\",\"name\":\"person in bed: medium-dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F6CC 1F3FF\",\"char\":\"🛌🏿\",\"name\":\"person in bed: dark skin tone\",\"category\":\"People & Body (person-resting)\",\"group\":\"People & Body\",\"subgroup\":\"person-resting\"},{\"codes\":\"1F9D1 200D 1F91D 200D 1F9D1\",\"char\":\"🧑‍🤝‍🧑\",\"name\":\"people holding hands\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FB\",\"char\":\"🧑🏻‍🤝‍🧑🏻\",\"name\":\"people holding hands: light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FC\",\"char\":\"🧑🏻‍🤝‍🧑🏼\",\"name\":\"people holding hands: light skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FD\",\"char\":\"🧑🏻‍🤝‍🧑🏽\",\"name\":\"people holding hands: light skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FE\",\"char\":\"🧑🏻‍🤝‍🧑🏾\",\"name\":\"people holding hands: light skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FB 200D 1F91D 200D 1F9D1 1F3FF\",\"char\":\"🧑🏻‍🤝‍🧑🏿\",\"name\":\"people holding hands: light skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FB\",\"char\":\"🧑🏼‍🤝‍🧑🏻\",\"name\":\"people holding hands: medium-light skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FC\",\"char\":\"🧑🏼‍🤝‍🧑🏼\",\"name\":\"people holding hands: medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FD\",\"char\":\"🧑🏼‍🤝‍🧑🏽\",\"name\":\"people holding hands: medium-light skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FE\",\"char\":\"🧑🏼‍🤝‍🧑🏾\",\"name\":\"people holding hands: medium-light skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FC 200D 1F91D 200D 1F9D1 1F3FF\",\"char\":\"🧑🏼‍🤝‍🧑🏿\",\"name\":\"people holding hands: medium-light skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FB\",\"char\":\"🧑🏽‍🤝‍🧑🏻\",\"name\":\"people holding hands: medium skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FC\",\"char\":\"🧑🏽‍🤝‍🧑🏼\",\"name\":\"people holding hands: medium skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FD\",\"char\":\"🧑🏽‍🤝‍🧑🏽\",\"name\":\"people holding hands: medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FE\",\"char\":\"🧑🏽‍🤝‍🧑🏾\",\"name\":\"people holding hands: medium skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FD 200D 1F91D 200D 1F9D1 1F3FF\",\"char\":\"🧑🏽‍🤝‍🧑🏿\",\"name\":\"people holding hands: medium skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FB\",\"char\":\"🧑🏾‍🤝‍🧑🏻\",\"name\":\"people holding hands: medium-dark skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FC\",\"char\":\"🧑🏾‍🤝‍🧑🏼\",\"name\":\"people holding hands: medium-dark skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FD\",\"char\":\"🧑🏾‍🤝‍🧑🏽\",\"name\":\"people holding hands: medium-dark skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FE\",\"char\":\"🧑🏾‍🤝‍🧑🏾\",\"name\":\"people holding hands: medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FE 200D 1F91D 200D 1F9D1 1F3FF\",\"char\":\"🧑🏾‍🤝‍🧑🏿\",\"name\":\"people holding hands: medium-dark skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FB\",\"char\":\"🧑🏿‍🤝‍🧑🏻\",\"name\":\"people holding hands: dark skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FC\",\"char\":\"🧑🏿‍🤝‍🧑🏼\",\"name\":\"people holding hands: dark skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FD\",\"char\":\"🧑🏿‍🤝‍🧑🏽\",\"name\":\"people holding hands: dark skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FE\",\"char\":\"🧑🏿‍🤝‍🧑🏾\",\"name\":\"people holding hands: dark skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F9D1 1F3FF 200D 1F91D 200D 1F9D1 1F3FF\",\"char\":\"🧑🏿‍🤝‍🧑🏿\",\"name\":\"people holding hands: dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46D\",\"char\":\"👭\",\"name\":\"women holding hands\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46D 1F3FB\",\"char\":\"👭🏻\",\"name\":\"women holding hands: light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FB 200D 1F91D 200D 1F469 1F3FC\",\"char\":\"👩🏻‍🤝‍👩🏼\",\"name\":\"women holding hands: light skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FB 200D 1F91D 200D 1F469 1F3FD\",\"char\":\"👩🏻‍🤝‍👩🏽\",\"name\":\"women holding hands: light skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FB 200D 1F91D 200D 1F469 1F3FE\",\"char\":\"👩🏻‍🤝‍👩🏾\",\"name\":\"women holding hands: light skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FB 200D 1F91D 200D 1F469 1F3FF\",\"char\":\"👩🏻‍🤝‍👩🏿\",\"name\":\"women holding hands: light skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FC 200D 1F91D 200D 1F469 1F3FB\",\"char\":\"👩🏼‍🤝‍👩🏻\",\"name\":\"women holding hands: medium-light skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46D 1F3FC\",\"char\":\"👭🏼\",\"name\":\"women holding hands: medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FC 200D 1F91D 200D 1F469 1F3FD\",\"char\":\"👩🏼‍🤝‍👩🏽\",\"name\":\"women holding hands: medium-light skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FC 200D 1F91D 200D 1F469 1F3FE\",\"char\":\"👩🏼‍🤝‍👩🏾\",\"name\":\"women holding hands: medium-light skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FC 200D 1F91D 200D 1F469 1F3FF\",\"char\":\"👩🏼‍🤝‍👩🏿\",\"name\":\"women holding hands: medium-light skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FD 200D 1F91D 200D 1F469 1F3FB\",\"char\":\"👩🏽‍🤝‍👩🏻\",\"name\":\"women holding hands: medium skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FD 200D 1F91D 200D 1F469 1F3FC\",\"char\":\"👩🏽‍🤝‍👩🏼\",\"name\":\"women holding hands: medium skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46D 1F3FD\",\"char\":\"👭🏽\",\"name\":\"women holding hands: medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FD 200D 1F91D 200D 1F469 1F3FE\",\"char\":\"👩🏽‍🤝‍👩🏾\",\"name\":\"women holding hands: medium skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FD 200D 1F91D 200D 1F469 1F3FF\",\"char\":\"👩🏽‍🤝‍👩🏿\",\"name\":\"women holding hands: medium skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FE 200D 1F91D 200D 1F469 1F3FB\",\"char\":\"👩🏾‍🤝‍👩🏻\",\"name\":\"women holding hands: medium-dark skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FE 200D 1F91D 200D 1F469 1F3FC\",\"char\":\"👩🏾‍🤝‍👩🏼\",\"name\":\"women holding hands: medium-dark skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FE 200D 1F91D 200D 1F469 1F3FD\",\"char\":\"👩🏾‍🤝‍👩🏽\",\"name\":\"women holding hands: medium-dark skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46D 1F3FE\",\"char\":\"👭🏾\",\"name\":\"women holding hands: medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FE 200D 1F91D 200D 1F469 1F3FF\",\"char\":\"👩🏾‍🤝‍👩🏿\",\"name\":\"women holding hands: medium-dark skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FF 200D 1F91D 200D 1F469 1F3FB\",\"char\":\"👩🏿‍🤝‍👩🏻\",\"name\":\"women holding hands: dark skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FF 200D 1F91D 200D 1F469 1F3FC\",\"char\":\"👩🏿‍🤝‍👩🏼\",\"name\":\"women holding hands: dark skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FF 200D 1F91D 200D 1F469 1F3FD\",\"char\":\"👩🏿‍🤝‍👩🏽\",\"name\":\"women holding hands: dark skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FF 200D 1F91D 200D 1F469 1F3FE\",\"char\":\"👩🏿‍🤝‍👩🏾\",\"name\":\"women holding hands: dark skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46D 1F3FF\",\"char\":\"👭🏿\",\"name\":\"women holding hands: dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46B\",\"char\":\"👫\",\"name\":\"woman and man holding hands\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46B 1F3FB\",\"char\":\"👫🏻\",\"name\":\"woman and man holding hands: light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FB 200D 1F91D 200D 1F468 1F3FC\",\"char\":\"👩🏻‍🤝‍👨🏼\",\"name\":\"woman and man holding hands: light skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FB 200D 1F91D 200D 1F468 1F3FD\",\"char\":\"👩🏻‍🤝‍👨🏽\",\"name\":\"woman and man holding hands: light skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FB 200D 1F91D 200D 1F468 1F3FE\",\"char\":\"👩🏻‍🤝‍👨🏾\",\"name\":\"woman and man holding hands: light skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FB 200D 1F91D 200D 1F468 1F3FF\",\"char\":\"👩🏻‍🤝‍👨🏿\",\"name\":\"woman and man holding hands: light skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FC 200D 1F91D 200D 1F468 1F3FB\",\"char\":\"👩🏼‍🤝‍👨🏻\",\"name\":\"woman and man holding hands: medium-light skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46B 1F3FC\",\"char\":\"👫🏼\",\"name\":\"woman and man holding hands: medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FC 200D 1F91D 200D 1F468 1F3FD\",\"char\":\"👩🏼‍🤝‍👨🏽\",\"name\":\"woman and man holding hands: medium-light skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FC 200D 1F91D 200D 1F468 1F3FE\",\"char\":\"👩🏼‍🤝‍👨🏾\",\"name\":\"woman and man holding hands: medium-light skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FC 200D 1F91D 200D 1F468 1F3FF\",\"char\":\"👩🏼‍🤝‍👨🏿\",\"name\":\"woman and man holding hands: medium-light skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FD 200D 1F91D 200D 1F468 1F3FB\",\"char\":\"👩🏽‍🤝‍👨🏻\",\"name\":\"woman and man holding hands: medium skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FD 200D 1F91D 200D 1F468 1F3FC\",\"char\":\"👩🏽‍🤝‍👨🏼\",\"name\":\"woman and man holding hands: medium skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46B 1F3FD\",\"char\":\"👫🏽\",\"name\":\"woman and man holding hands: medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FD 200D 1F91D 200D 1F468 1F3FE\",\"char\":\"👩🏽‍🤝‍👨🏾\",\"name\":\"woman and man holding hands: medium skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FD 200D 1F91D 200D 1F468 1F3FF\",\"char\":\"👩🏽‍🤝‍👨🏿\",\"name\":\"woman and man holding hands: medium skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FE 200D 1F91D 200D 1F468 1F3FB\",\"char\":\"👩🏾‍🤝‍👨🏻\",\"name\":\"woman and man holding hands: medium-dark skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FE 200D 1F91D 200D 1F468 1F3FC\",\"char\":\"👩🏾‍🤝‍👨🏼\",\"name\":\"woman and man holding hands: medium-dark skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FE 200D 1F91D 200D 1F468 1F3FD\",\"char\":\"👩🏾‍🤝‍👨🏽\",\"name\":\"woman and man holding hands: medium-dark skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46B 1F3FE\",\"char\":\"👫🏾\",\"name\":\"woman and man holding hands: medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FE 200D 1F91D 200D 1F468 1F3FF\",\"char\":\"👩🏾‍🤝‍👨🏿\",\"name\":\"woman and man holding hands: medium-dark skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FF 200D 1F91D 200D 1F468 1F3FB\",\"char\":\"👩🏿‍🤝‍👨🏻\",\"name\":\"woman and man holding hands: dark skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FF 200D 1F91D 200D 1F468 1F3FC\",\"char\":\"👩🏿‍🤝‍👨🏼\",\"name\":\"woman and man holding hands: dark skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FF 200D 1F91D 200D 1F468 1F3FD\",\"char\":\"👩🏿‍🤝‍👨🏽\",\"name\":\"woman and man holding hands: dark skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 1F3FF 200D 1F91D 200D 1F468 1F3FE\",\"char\":\"👩🏿‍🤝‍👨🏾\",\"name\":\"woman and man holding hands: dark skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46B 1F3FF\",\"char\":\"👫🏿\",\"name\":\"woman and man holding hands: dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46C\",\"char\":\"👬\",\"name\":\"men holding hands\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46C 1F3FB\",\"char\":\"👬🏻\",\"name\":\"men holding hands: light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FB 200D 1F91D 200D 1F468 1F3FC\",\"char\":\"👨🏻‍🤝‍👨🏼\",\"name\":\"men holding hands: light skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FB 200D 1F91D 200D 1F468 1F3FD\",\"char\":\"👨🏻‍🤝‍👨🏽\",\"name\":\"men holding hands: light skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FB 200D 1F91D 200D 1F468 1F3FE\",\"char\":\"👨🏻‍🤝‍👨🏾\",\"name\":\"men holding hands: light skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FB 200D 1F91D 200D 1F468 1F3FF\",\"char\":\"👨🏻‍🤝‍👨🏿\",\"name\":\"men holding hands: light skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FC 200D 1F91D 200D 1F468 1F3FB\",\"char\":\"👨🏼‍🤝‍👨🏻\",\"name\":\"men holding hands: medium-light skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46C 1F3FC\",\"char\":\"👬🏼\",\"name\":\"men holding hands: medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FC 200D 1F91D 200D 1F468 1F3FD\",\"char\":\"👨🏼‍🤝‍👨🏽\",\"name\":\"men holding hands: medium-light skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FC 200D 1F91D 200D 1F468 1F3FE\",\"char\":\"👨🏼‍🤝‍👨🏾\",\"name\":\"men holding hands: medium-light skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FC 200D 1F91D 200D 1F468 1F3FF\",\"char\":\"👨🏼‍🤝‍👨🏿\",\"name\":\"men holding hands: medium-light skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FD 200D 1F91D 200D 1F468 1F3FB\",\"char\":\"👨🏽‍🤝‍👨🏻\",\"name\":\"men holding hands: medium skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FD 200D 1F91D 200D 1F468 1F3FC\",\"char\":\"👨🏽‍🤝‍👨🏼\",\"name\":\"men holding hands: medium skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46C 1F3FD\",\"char\":\"👬🏽\",\"name\":\"men holding hands: medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FD 200D 1F91D 200D 1F468 1F3FE\",\"char\":\"👨🏽‍🤝‍👨🏾\",\"name\":\"men holding hands: medium skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FD 200D 1F91D 200D 1F468 1F3FF\",\"char\":\"👨🏽‍🤝‍👨🏿\",\"name\":\"men holding hands: medium skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FE 200D 1F91D 200D 1F468 1F3FB\",\"char\":\"👨🏾‍🤝‍👨🏻\",\"name\":\"men holding hands: medium-dark skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FE 200D 1F91D 200D 1F468 1F3FC\",\"char\":\"👨🏾‍🤝‍👨🏼\",\"name\":\"men holding hands: medium-dark skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FE 200D 1F91D 200D 1F468 1F3FD\",\"char\":\"👨🏾‍🤝‍👨🏽\",\"name\":\"men holding hands: medium-dark skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46C 1F3FE\",\"char\":\"👬🏾\",\"name\":\"men holding hands: medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FE 200D 1F91D 200D 1F468 1F3FF\",\"char\":\"👨🏾‍🤝‍👨🏿\",\"name\":\"men holding hands: medium-dark skin tone, dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FF 200D 1F91D 200D 1F468 1F3FB\",\"char\":\"👨🏿‍🤝‍👨🏻\",\"name\":\"men holding hands: dark skin tone, light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FF 200D 1F91D 200D 1F468 1F3FC\",\"char\":\"👨🏿‍🤝‍👨🏼\",\"name\":\"men holding hands: dark skin tone, medium-light skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FF 200D 1F91D 200D 1F468 1F3FD\",\"char\":\"👨🏿‍🤝‍👨🏽\",\"name\":\"men holding hands: dark skin tone, medium skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 1F3FF 200D 1F91D 200D 1F468 1F3FE\",\"char\":\"👨🏿‍🤝‍👨🏾\",\"name\":\"men holding hands: dark skin tone, medium-dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46C 1F3FF\",\"char\":\"👬🏿\",\"name\":\"men holding hands: dark skin tone\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F48F\",\"char\":\"💏\",\"name\":\"kiss\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 2764 FE0F 200D 1F48B 200D 1F468\",\"char\":\"👩‍❤️‍💋‍👨\",\"name\":\"kiss: woman, man\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 2764 200D 1F48B 200D 1F468\",\"char\":\"👩‍❤‍💋‍👨\",\"name\":\"kiss: woman, man\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 2764 FE0F 200D 1F48B 200D 1F468\",\"char\":\"👨‍❤️‍💋‍👨\",\"name\":\"kiss: man, man\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 2764 200D 1F48B 200D 1F468\",\"char\":\"👨‍❤‍💋‍👨\",\"name\":\"kiss: man, man\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 2764 FE0F 200D 1F48B 200D 1F469\",\"char\":\"👩‍❤️‍💋‍👩\",\"name\":\"kiss: woman, woman\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 2764 200D 1F48B 200D 1F469\",\"char\":\"👩‍❤‍💋‍👩\",\"name\":\"kiss: woman, woman\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F491\",\"char\":\"💑\",\"name\":\"couple with heart\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 2764 FE0F 200D 1F468\",\"char\":\"👩‍❤️‍👨\",\"name\":\"couple with heart: woman, man\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 2764 200D 1F468\",\"char\":\"👩‍❤‍👨\",\"name\":\"couple with heart: woman, man\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 2764 FE0F 200D 1F468\",\"char\":\"👨‍❤️‍👨\",\"name\":\"couple with heart: man, man\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 2764 200D 1F468\",\"char\":\"👨‍❤‍👨\",\"name\":\"couple with heart: man, man\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 2764 FE0F 200D 1F469\",\"char\":\"👩‍❤️‍👩\",\"name\":\"couple with heart: woman, woman\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 2764 200D 1F469\",\"char\":\"👩‍❤‍👩\",\"name\":\"couple with heart: woman, woman\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F46A\",\"char\":\"👪\",\"name\":\"family\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F469 200D 1F466\",\"char\":\"👨‍👩‍👦\",\"name\":\"family: man, woman, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F469 200D 1F467\",\"char\":\"👨‍👩‍👧\",\"name\":\"family: man, woman, girl\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F469 200D 1F467 200D 1F466\",\"char\":\"👨‍👩‍👧‍👦\",\"name\":\"family: man, woman, girl, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F469 200D 1F466 200D 1F466\",\"char\":\"👨‍👩‍👦‍👦\",\"name\":\"family: man, woman, boy, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F469 200D 1F467 200D 1F467\",\"char\":\"👨‍👩‍👧‍👧\",\"name\":\"family: man, woman, girl, girl\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F468 200D 1F466\",\"char\":\"👨‍👨‍👦\",\"name\":\"family: man, man, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F468 200D 1F467\",\"char\":\"👨‍👨‍👧\",\"name\":\"family: man, man, girl\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F468 200D 1F467 200D 1F466\",\"char\":\"👨‍👨‍👧‍👦\",\"name\":\"family: man, man, girl, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F468 200D 1F466 200D 1F466\",\"char\":\"👨‍👨‍👦‍👦\",\"name\":\"family: man, man, boy, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F468 200D 1F467 200D 1F467\",\"char\":\"👨‍👨‍👧‍👧\",\"name\":\"family: man, man, girl, girl\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 1F469 200D 1F466\",\"char\":\"👩‍👩‍👦\",\"name\":\"family: woman, woman, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 1F469 200D 1F467\",\"char\":\"👩‍👩‍👧\",\"name\":\"family: woman, woman, girl\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 1F469 200D 1F467 200D 1F466\",\"char\":\"👩‍👩‍👧‍👦\",\"name\":\"family: woman, woman, girl, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 1F469 200D 1F466 200D 1F466\",\"char\":\"👩‍👩‍👦‍👦\",\"name\":\"family: woman, woman, boy, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 1F469 200D 1F467 200D 1F467\",\"char\":\"👩‍👩‍👧‍👧\",\"name\":\"family: woman, woman, girl, girl\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F466\",\"char\":\"👨‍👦\",\"name\":\"family: man, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F466 200D 1F466\",\"char\":\"👨‍👦‍👦\",\"name\":\"family: man, boy, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F467\",\"char\":\"👨‍👧\",\"name\":\"family: man, girl\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F467 200D 1F466\",\"char\":\"👨‍👧‍👦\",\"name\":\"family: man, girl, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F468 200D 1F467 200D 1F467\",\"char\":\"👨‍👧‍👧\",\"name\":\"family: man, girl, girl\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 1F466\",\"char\":\"👩‍👦\",\"name\":\"family: woman, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 1F466 200D 1F466\",\"char\":\"👩‍👦‍👦\",\"name\":\"family: woman, boy, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 1F467\",\"char\":\"👩‍👧\",\"name\":\"family: woman, girl\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 1F467 200D 1F466\",\"char\":\"👩‍👧‍👦\",\"name\":\"family: woman, girl, boy\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F469 200D 1F467 200D 1F467\",\"char\":\"👩‍👧‍👧\",\"name\":\"family: woman, girl, girl\",\"category\":\"People & Body (family)\",\"group\":\"People & Body\",\"subgroup\":\"family\"},{\"codes\":\"1F5E3 FE0F\",\"char\":\"🗣️\",\"name\":\"speaking head\",\"category\":\"People & Body (person-symbol)\",\"group\":\"People & Body\",\"subgroup\":\"person-symbol\"},{\"codes\":\"1F5E3\",\"char\":\"🗣\",\"name\":\"speaking head\",\"category\":\"People & Body (person-symbol)\",\"group\":\"People & Body\",\"subgroup\":\"person-symbol\"},{\"codes\":\"1F464\",\"char\":\"👤\",\"name\":\"bust in silhouette\",\"category\":\"People & Body (person-symbol)\",\"group\":\"People & Body\",\"subgroup\":\"person-symbol\"},{\"codes\":\"1F465\",\"char\":\"👥\",\"name\":\"busts in silhouette\",\"category\":\"People & Body (person-symbol)\",\"group\":\"People & Body\",\"subgroup\":\"person-symbol\"},{\"codes\":\"1FAC2\",\"char\":\"🫂\",\"name\":\"people hugging\",\"category\":\"People & Body (person-symbol)\",\"group\":\"People & Body\",\"subgroup\":\"person-symbol\"},{\"codes\":\"1F463\",\"char\":\"👣\",\"name\":\"footprints\",\"category\":\"People & Body (person-symbol)\",\"group\":\"People & Body\",\"subgroup\":\"person-symbol\"},{\"codes\":\"1F3FB\",\"char\":\"🏻\",\"name\":\"light skin tone\",\"category\":\"Component (skin-tone)\",\"group\":\"Component\",\"subgroup\":\"skin-tone\"},{\"codes\":\"1F3FC\",\"char\":\"🏼\",\"name\":\"medium-light skin tone\",\"category\":\"Component (skin-tone)\",\"group\":\"Component\",\"subgroup\":\"skin-tone\"},{\"codes\":\"1F3FD\",\"char\":\"🏽\",\"name\":\"medium skin tone\",\"category\":\"Component (skin-tone)\",\"group\":\"Component\",\"subgroup\":\"skin-tone\"},{\"codes\":\"1F3FE\",\"char\":\"🏾\",\"name\":\"medium-dark skin tone\",\"category\":\"Component (skin-tone)\",\"group\":\"Component\",\"subgroup\":\"skin-tone\"},{\"codes\":\"1F3FF\",\"char\":\"🏿\",\"name\":\"dark skin tone\",\"category\":\"Component (skin-tone)\",\"group\":\"Component\",\"subgroup\":\"skin-tone\"},{\"codes\":\"1F9B0\",\"char\":\"🦰\",\"name\":\"red hair\",\"category\":\"Component (hair-style)\",\"group\":\"Component\",\"subgroup\":\"hair-style\"},{\"codes\":\"1F9B1\",\"char\":\"🦱\",\"name\":\"curly hair\",\"category\":\"Component (hair-style)\",\"group\":\"Component\",\"subgroup\":\"hair-style\"},{\"codes\":\"1F9B3\",\"char\":\"🦳\",\"name\":\"white hair\",\"category\":\"Component (hair-style)\",\"group\":\"Component\",\"subgroup\":\"hair-style\"},{\"codes\":\"1F9B2\",\"char\":\"🦲\",\"name\":\"bald\",\"category\":\"Component (hair-style)\",\"group\":\"Component\",\"subgroup\":\"hair-style\"},{\"codes\":\"1F435\",\"char\":\"🐵\",\"name\":\"monkey face\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F412\",\"char\":\"🐒\",\"name\":\"monkey\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F98D\",\"char\":\"🦍\",\"name\":\"gorilla\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F9A7\",\"char\":\"🦧\",\"name\":\"orangutan\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F436\",\"char\":\"🐶\",\"name\":\"dog face\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F415\",\"char\":\"🐕\",\"name\":\"dog\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F9AE\",\"char\":\"🦮\",\"name\":\"guide dog\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F415 200D 1F9BA\",\"char\":\"🐕‍🦺\",\"name\":\"service dog\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F429\",\"char\":\"🐩\",\"name\":\"poodle\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F43A\",\"char\":\"🐺\",\"name\":\"wolf\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F98A\",\"char\":\"🦊\",\"name\":\"fox\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F99D\",\"char\":\"🦝\",\"name\":\"raccoon\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F431\",\"char\":\"🐱\",\"name\":\"cat face\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F408\",\"char\":\"🐈\",\"name\":\"cat\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F408 200D 2B1B\",\"char\":\"🐈‍⬛\",\"name\":\"black cat\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F981\",\"char\":\"🦁\",\"name\":\"lion\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F42F\",\"char\":\"🐯\",\"name\":\"tiger face\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F405\",\"char\":\"🐅\",\"name\":\"tiger\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F406\",\"char\":\"🐆\",\"name\":\"leopard\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F434\",\"char\":\"🐴\",\"name\":\"horse face\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F40E\",\"char\":\"🐎\",\"name\":\"horse\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F984\",\"char\":\"🦄\",\"name\":\"unicorn\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F993\",\"char\":\"🦓\",\"name\":\"zebra\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F98C\",\"char\":\"🦌\",\"name\":\"deer\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F9AC\",\"char\":\"🦬\",\"name\":\"bison\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F42E\",\"char\":\"🐮\",\"name\":\"cow face\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F402\",\"char\":\"🐂\",\"name\":\"ox\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F403\",\"char\":\"🐃\",\"name\":\"water buffalo\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F404\",\"char\":\"🐄\",\"name\":\"cow\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F437\",\"char\":\"🐷\",\"name\":\"pig face\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F416\",\"char\":\"🐖\",\"name\":\"pig\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F417\",\"char\":\"🐗\",\"name\":\"boar\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F43D\",\"char\":\"🐽\",\"name\":\"pig nose\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F40F\",\"char\":\"🐏\",\"name\":\"ram\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F411\",\"char\":\"🐑\",\"name\":\"ewe\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F410\",\"char\":\"🐐\",\"name\":\"goat\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F42A\",\"char\":\"🐪\",\"name\":\"camel\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F42B\",\"char\":\"🐫\",\"name\":\"two-hump camel\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F999\",\"char\":\"🦙\",\"name\":\"llama\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F992\",\"char\":\"🦒\",\"name\":\"giraffe\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F418\",\"char\":\"🐘\",\"name\":\"elephant\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F9A3\",\"char\":\"🦣\",\"name\":\"mammoth\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F98F\",\"char\":\"🦏\",\"name\":\"rhinoceros\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F99B\",\"char\":\"🦛\",\"name\":\"hippopotamus\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F42D\",\"char\":\"🐭\",\"name\":\"mouse face\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F401\",\"char\":\"🐁\",\"name\":\"mouse\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F400\",\"char\":\"🐀\",\"name\":\"rat\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F439\",\"char\":\"🐹\",\"name\":\"hamster\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F430\",\"char\":\"🐰\",\"name\":\"rabbit face\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F407\",\"char\":\"🐇\",\"name\":\"rabbit\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F43F FE0F\",\"char\":\"🐿️\",\"name\":\"chipmunk\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F43F\",\"char\":\"🐿\",\"name\":\"chipmunk\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F9AB\",\"char\":\"🦫\",\"name\":\"beaver\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F994\",\"char\":\"🦔\",\"name\":\"hedgehog\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F987\",\"char\":\"🦇\",\"name\":\"bat\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F43B\",\"char\":\"🐻\",\"name\":\"bear\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F43B 200D 2744 FE0F\",\"char\":\"🐻‍❄️\",\"name\":\"polar bear\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F43B 200D 2744\",\"char\":\"🐻‍❄\",\"name\":\"polar bear\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F428\",\"char\":\"🐨\",\"name\":\"koala\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F43C\",\"char\":\"🐼\",\"name\":\"panda\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F9A5\",\"char\":\"🦥\",\"name\":\"sloth\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F9A6\",\"char\":\"🦦\",\"name\":\"otter\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F9A8\",\"char\":\"🦨\",\"name\":\"skunk\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F998\",\"char\":\"🦘\",\"name\":\"kangaroo\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F9A1\",\"char\":\"🦡\",\"name\":\"badger\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F43E\",\"char\":\"🐾\",\"name\":\"paw prints\",\"category\":\"Animals & Nature (animal-mammal)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-mammal\"},{\"codes\":\"1F983\",\"char\":\"🦃\",\"name\":\"turkey\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F414\",\"char\":\"🐔\",\"name\":\"chicken\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F413\",\"char\":\"🐓\",\"name\":\"rooster\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F423\",\"char\":\"🐣\",\"name\":\"hatching chick\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F424\",\"char\":\"🐤\",\"name\":\"baby chick\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F425\",\"char\":\"🐥\",\"name\":\"front-facing baby chick\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F426\",\"char\":\"🐦\",\"name\":\"bird\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F427\",\"char\":\"🐧\",\"name\":\"penguin\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F54A FE0F\",\"char\":\"🕊️\",\"name\":\"dove\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F54A\",\"char\":\"🕊\",\"name\":\"dove\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F985\",\"char\":\"🦅\",\"name\":\"eagle\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F986\",\"char\":\"🦆\",\"name\":\"duck\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F9A2\",\"char\":\"🦢\",\"name\":\"swan\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F989\",\"char\":\"🦉\",\"name\":\"owl\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F9A4\",\"char\":\"🦤\",\"name\":\"dodo\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1FAB6\",\"char\":\"🪶\",\"name\":\"feather\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F9A9\",\"char\":\"🦩\",\"name\":\"flamingo\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F99A\",\"char\":\"🦚\",\"name\":\"peacock\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F99C\",\"char\":\"🦜\",\"name\":\"parrot\",\"category\":\"Animals & Nature (animal-bird)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bird\"},{\"codes\":\"1F438\",\"char\":\"🐸\",\"name\":\"frog\",\"category\":\"Animals & Nature (animal-amphibian)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-amphibian\"},{\"codes\":\"1F40A\",\"char\":\"🐊\",\"name\":\"crocodile\",\"category\":\"Animals & Nature (animal-reptile)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-reptile\"},{\"codes\":\"1F422\",\"char\":\"🐢\",\"name\":\"turtle\",\"category\":\"Animals & Nature (animal-reptile)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-reptile\"},{\"codes\":\"1F98E\",\"char\":\"🦎\",\"name\":\"lizard\",\"category\":\"Animals & Nature (animal-reptile)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-reptile\"},{\"codes\":\"1F40D\",\"char\":\"🐍\",\"name\":\"snake\",\"category\":\"Animals & Nature (animal-reptile)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-reptile\"},{\"codes\":\"1F432\",\"char\":\"🐲\",\"name\":\"dragon face\",\"category\":\"Animals & Nature (animal-reptile)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-reptile\"},{\"codes\":\"1F409\",\"char\":\"🐉\",\"name\":\"dragon\",\"category\":\"Animals & Nature (animal-reptile)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-reptile\"},{\"codes\":\"1F995\",\"char\":\"🦕\",\"name\":\"sauropod\",\"category\":\"Animals & Nature (animal-reptile)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-reptile\"},{\"codes\":\"1F996\",\"char\":\"🦖\",\"name\":\"T-Rex\",\"category\":\"Animals & Nature (animal-reptile)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-reptile\"},{\"codes\":\"1F433\",\"char\":\"🐳\",\"name\":\"spouting whale\",\"category\":\"Animals & Nature (animal-marine)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-marine\"},{\"codes\":\"1F40B\",\"char\":\"🐋\",\"name\":\"whale\",\"category\":\"Animals & Nature (animal-marine)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-marine\"},{\"codes\":\"1F42C\",\"char\":\"🐬\",\"name\":\"dolphin\",\"category\":\"Animals & Nature (animal-marine)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-marine\"},{\"codes\":\"1F9AD\",\"char\":\"🦭\",\"name\":\"seal\",\"category\":\"Animals & Nature (animal-marine)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-marine\"},{\"codes\":\"1F41F\",\"char\":\"🐟\",\"name\":\"fish\",\"category\":\"Animals & Nature (animal-marine)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-marine\"},{\"codes\":\"1F420\",\"char\":\"🐠\",\"name\":\"tropical fish\",\"category\":\"Animals & Nature (animal-marine)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-marine\"},{\"codes\":\"1F421\",\"char\":\"🐡\",\"name\":\"blowfish\",\"category\":\"Animals & Nature (animal-marine)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-marine\"},{\"codes\":\"1F988\",\"char\":\"🦈\",\"name\":\"shark\",\"category\":\"Animals & Nature (animal-marine)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-marine\"},{\"codes\":\"1F419\",\"char\":\"🐙\",\"name\":\"octopus\",\"category\":\"Animals & Nature (animal-marine)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-marine\"},{\"codes\":\"1F41A\",\"char\":\"🐚\",\"name\":\"spiral shell\",\"category\":\"Animals & Nature (animal-marine)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-marine\"},{\"codes\":\"1F40C\",\"char\":\"🐌\",\"name\":\"snail\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F98B\",\"char\":\"🦋\",\"name\":\"butterfly\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F41B\",\"char\":\"🐛\",\"name\":\"bug\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F41C\",\"char\":\"🐜\",\"name\":\"ant\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F41D\",\"char\":\"🐝\",\"name\":\"honeybee\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1FAB2\",\"char\":\"🪲\",\"name\":\"beetle\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F41E\",\"char\":\"🐞\",\"name\":\"lady beetle\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F997\",\"char\":\"🦗\",\"name\":\"cricket\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1FAB3\",\"char\":\"🪳\",\"name\":\"cockroach\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F577 FE0F\",\"char\":\"🕷️\",\"name\":\"spider\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F577\",\"char\":\"🕷\",\"name\":\"spider\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F578 FE0F\",\"char\":\"🕸️\",\"name\":\"spider web\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F578\",\"char\":\"🕸\",\"name\":\"spider web\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F982\",\"char\":\"🦂\",\"name\":\"scorpion\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F99F\",\"char\":\"🦟\",\"name\":\"mosquito\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1FAB0\",\"char\":\"🪰\",\"name\":\"fly\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1FAB1\",\"char\":\"🪱\",\"name\":\"worm\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F9A0\",\"char\":\"🦠\",\"name\":\"microbe\",\"category\":\"Animals & Nature (animal-bug)\",\"group\":\"Animals & Nature\",\"subgroup\":\"animal-bug\"},{\"codes\":\"1F490\",\"char\":\"💐\",\"name\":\"bouquet\",\"category\":\"Animals & Nature (plant-flower)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-flower\"},{\"codes\":\"1F338\",\"char\":\"🌸\",\"name\":\"cherry blossom\",\"category\":\"Animals & Nature (plant-flower)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-flower\"},{\"codes\":\"1F4AE\",\"char\":\"💮\",\"name\":\"white flower\",\"category\":\"Animals & Nature (plant-flower)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-flower\"},{\"codes\":\"1F3F5 FE0F\",\"char\":\"🏵️\",\"name\":\"rosette\",\"category\":\"Animals & Nature (plant-flower)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-flower\"},{\"codes\":\"1F3F5\",\"char\":\"🏵\",\"name\":\"rosette\",\"category\":\"Animals & Nature (plant-flower)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-flower\"},{\"codes\":\"1F339\",\"char\":\"🌹\",\"name\":\"rose\",\"category\":\"Animals & Nature (plant-flower)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-flower\"},{\"codes\":\"1F940\",\"char\":\"🥀\",\"name\":\"wilted flower\",\"category\":\"Animals & Nature (plant-flower)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-flower\"},{\"codes\":\"1F33A\",\"char\":\"🌺\",\"name\":\"hibiscus\",\"category\":\"Animals & Nature (plant-flower)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-flower\"},{\"codes\":\"1F33B\",\"char\":\"🌻\",\"name\":\"sunflower\",\"category\":\"Animals & Nature (plant-flower)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-flower\"},{\"codes\":\"1F33C\",\"char\":\"🌼\",\"name\":\"blossom\",\"category\":\"Animals & Nature (plant-flower)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-flower\"},{\"codes\":\"1F337\",\"char\":\"🌷\",\"name\":\"tulip\",\"category\":\"Animals & Nature (plant-flower)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-flower\"},{\"codes\":\"1F331\",\"char\":\"🌱\",\"name\":\"seedling\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1FAB4\",\"char\":\"🪴\",\"name\":\"potted plant\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1F332\",\"char\":\"🌲\",\"name\":\"evergreen tree\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1F333\",\"char\":\"🌳\",\"name\":\"deciduous tree\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1F334\",\"char\":\"🌴\",\"name\":\"palm tree\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1F335\",\"char\":\"🌵\",\"name\":\"cactus\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1F33E\",\"char\":\"🌾\",\"name\":\"sheaf of rice\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1F33F\",\"char\":\"🌿\",\"name\":\"herb\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"2618 FE0F\",\"char\":\"☘️\",\"name\":\"shamrock\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"2618\",\"char\":\"☘\",\"name\":\"shamrock\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1F340\",\"char\":\"🍀\",\"name\":\"four leaf clover\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1F341\",\"char\":\"🍁\",\"name\":\"maple leaf\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1F342\",\"char\":\"🍂\",\"name\":\"fallen leaf\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1F343\",\"char\":\"🍃\",\"name\":\"leaf fluttering in wind\",\"category\":\"Animals & Nature (plant-other)\",\"group\":\"Animals & Nature\",\"subgroup\":\"plant-other\"},{\"codes\":\"1F347\",\"char\":\"🍇\",\"name\":\"grapes\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F348\",\"char\":\"🍈\",\"name\":\"melon\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F349\",\"char\":\"🍉\",\"name\":\"watermelon\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F34A\",\"char\":\"🍊\",\"name\":\"tangerine\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F34B\",\"char\":\"🍋\",\"name\":\"lemon\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F34C\",\"char\":\"🍌\",\"name\":\"banana\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F34D\",\"char\":\"🍍\",\"name\":\"pineapple\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F96D\",\"char\":\"🥭\",\"name\":\"mango\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F34E\",\"char\":\"🍎\",\"name\":\"red apple\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F34F\",\"char\":\"🍏\",\"name\":\"green apple\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F350\",\"char\":\"🍐\",\"name\":\"pear\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F351\",\"char\":\"🍑\",\"name\":\"peach\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F352\",\"char\":\"🍒\",\"name\":\"cherries\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F353\",\"char\":\"🍓\",\"name\":\"strawberry\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1FAD0\",\"char\":\"🫐\",\"name\":\"blueberries\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F95D\",\"char\":\"🥝\",\"name\":\"kiwi fruit\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F345\",\"char\":\"🍅\",\"name\":\"tomato\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1FAD2\",\"char\":\"🫒\",\"name\":\"olive\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F965\",\"char\":\"🥥\",\"name\":\"coconut\",\"category\":\"Food & Drink (food-fruit)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-fruit\"},{\"codes\":\"1F951\",\"char\":\"🥑\",\"name\":\"avocado\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F346\",\"char\":\"🍆\",\"name\":\"eggplant\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F954\",\"char\":\"🥔\",\"name\":\"potato\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F955\",\"char\":\"🥕\",\"name\":\"carrot\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F33D\",\"char\":\"🌽\",\"name\":\"ear of corn\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F336 FE0F\",\"char\":\"🌶️\",\"name\":\"hot pepper\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F336\",\"char\":\"🌶\",\"name\":\"hot pepper\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1FAD1\",\"char\":\"🫑\",\"name\":\"bell pepper\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F952\",\"char\":\"🥒\",\"name\":\"cucumber\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F96C\",\"char\":\"🥬\",\"name\":\"leafy green\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F966\",\"char\":\"🥦\",\"name\":\"broccoli\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F9C4\",\"char\":\"🧄\",\"name\":\"garlic\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F9C5\",\"char\":\"🧅\",\"name\":\"onion\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F344\",\"char\":\"🍄\",\"name\":\"mushroom\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F95C\",\"char\":\"🥜\",\"name\":\"peanuts\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F330\",\"char\":\"🌰\",\"name\":\"chestnut\",\"category\":\"Food & Drink (food-vegetable)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-vegetable\"},{\"codes\":\"1F35E\",\"char\":\"🍞\",\"name\":\"bread\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F950\",\"char\":\"🥐\",\"name\":\"croissant\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F956\",\"char\":\"🥖\",\"name\":\"baguette bread\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1FAD3\",\"char\":\"🫓\",\"name\":\"flatbread\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F968\",\"char\":\"🥨\",\"name\":\"pretzel\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F96F\",\"char\":\"🥯\",\"name\":\"bagel\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F95E\",\"char\":\"🥞\",\"name\":\"pancakes\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F9C7\",\"char\":\"🧇\",\"name\":\"waffle\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F9C0\",\"char\":\"🧀\",\"name\":\"cheese wedge\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F356\",\"char\":\"🍖\",\"name\":\"meat on bone\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F357\",\"char\":\"🍗\",\"name\":\"poultry leg\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F969\",\"char\":\"🥩\",\"name\":\"cut of meat\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F953\",\"char\":\"🥓\",\"name\":\"bacon\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F354\",\"char\":\"🍔\",\"name\":\"hamburger\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F35F\",\"char\":\"🍟\",\"name\":\"french fries\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F355\",\"char\":\"🍕\",\"name\":\"pizza\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F32D\",\"char\":\"🌭\",\"name\":\"hot dog\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F96A\",\"char\":\"🥪\",\"name\":\"sandwich\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F32E\",\"char\":\"🌮\",\"name\":\"taco\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F32F\",\"char\":\"🌯\",\"name\":\"burrito\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1FAD4\",\"char\":\"🫔\",\"name\":\"tamale\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F959\",\"char\":\"🥙\",\"name\":\"stuffed flatbread\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F9C6\",\"char\":\"🧆\",\"name\":\"falafel\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F95A\",\"char\":\"🥚\",\"name\":\"egg\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F373\",\"char\":\"🍳\",\"name\":\"cooking\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F958\",\"char\":\"🥘\",\"name\":\"shallow pan of food\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F372\",\"char\":\"🍲\",\"name\":\"pot of food\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1FAD5\",\"char\":\"🫕\",\"name\":\"fondue\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F963\",\"char\":\"🥣\",\"name\":\"bowl with spoon\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F957\",\"char\":\"🥗\",\"name\":\"green salad\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F37F\",\"char\":\"🍿\",\"name\":\"popcorn\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F9C8\",\"char\":\"🧈\",\"name\":\"butter\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F9C2\",\"char\":\"🧂\",\"name\":\"salt\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F96B\",\"char\":\"🥫\",\"name\":\"canned food\",\"category\":\"Food & Drink (food-prepared)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-prepared\"},{\"codes\":\"1F371\",\"char\":\"🍱\",\"name\":\"bento box\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F358\",\"char\":\"🍘\",\"name\":\"rice cracker\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F359\",\"char\":\"🍙\",\"name\":\"rice ball\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F35A\",\"char\":\"🍚\",\"name\":\"cooked rice\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F35B\",\"char\":\"🍛\",\"name\":\"curry rice\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F35C\",\"char\":\"🍜\",\"name\":\"steaming bowl\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F35D\",\"char\":\"🍝\",\"name\":\"spaghetti\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F360\",\"char\":\"🍠\",\"name\":\"roasted sweet potato\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F362\",\"char\":\"🍢\",\"name\":\"oden\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F363\",\"char\":\"🍣\",\"name\":\"sushi\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F364\",\"char\":\"🍤\",\"name\":\"fried shrimp\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F365\",\"char\":\"🍥\",\"name\":\"fish cake with swirl\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F96E\",\"char\":\"🥮\",\"name\":\"moon cake\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F361\",\"char\":\"🍡\",\"name\":\"dango\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F95F\",\"char\":\"🥟\",\"name\":\"dumpling\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F960\",\"char\":\"🥠\",\"name\":\"fortune cookie\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F961\",\"char\":\"🥡\",\"name\":\"takeout box\",\"category\":\"Food & Drink (food-asian)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-asian\"},{\"codes\":\"1F980\",\"char\":\"🦀\",\"name\":\"crab\",\"category\":\"Food & Drink (food-marine)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-marine\"},{\"codes\":\"1F99E\",\"char\":\"🦞\",\"name\":\"lobster\",\"category\":\"Food & Drink (food-marine)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-marine\"},{\"codes\":\"1F990\",\"char\":\"🦐\",\"name\":\"shrimp\",\"category\":\"Food & Drink (food-marine)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-marine\"},{\"codes\":\"1F991\",\"char\":\"🦑\",\"name\":\"squid\",\"category\":\"Food & Drink (food-marine)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-marine\"},{\"codes\":\"1F9AA\",\"char\":\"🦪\",\"name\":\"oyster\",\"category\":\"Food & Drink (food-marine)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-marine\"},{\"codes\":\"1F366\",\"char\":\"🍦\",\"name\":\"soft ice cream\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F367\",\"char\":\"🍧\",\"name\":\"shaved ice\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F368\",\"char\":\"🍨\",\"name\":\"ice cream\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F369\",\"char\":\"🍩\",\"name\":\"doughnut\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F36A\",\"char\":\"🍪\",\"name\":\"cookie\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F382\",\"char\":\"🎂\",\"name\":\"birthday cake\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F370\",\"char\":\"🍰\",\"name\":\"shortcake\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F9C1\",\"char\":\"🧁\",\"name\":\"cupcake\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F967\",\"char\":\"🥧\",\"name\":\"pie\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F36B\",\"char\":\"🍫\",\"name\":\"chocolate bar\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F36C\",\"char\":\"🍬\",\"name\":\"candy\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F36D\",\"char\":\"🍭\",\"name\":\"lollipop\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F36E\",\"char\":\"🍮\",\"name\":\"custard\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F36F\",\"char\":\"🍯\",\"name\":\"honey pot\",\"category\":\"Food & Drink (food-sweet)\",\"group\":\"Food & Drink\",\"subgroup\":\"food-sweet\"},{\"codes\":\"1F37C\",\"char\":\"🍼\",\"name\":\"baby bottle\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F95B\",\"char\":\"🥛\",\"name\":\"glass of milk\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"2615\",\"char\":\"☕\",\"name\":\"hot beverage\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1FAD6\",\"char\":\"🫖\",\"name\":\"teapot\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F375\",\"char\":\"🍵\",\"name\":\"teacup without handle\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F376\",\"char\":\"🍶\",\"name\":\"sake\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F37E\",\"char\":\"🍾\",\"name\":\"bottle with popping cork\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F377\",\"char\":\"🍷\",\"name\":\"wine glass\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F378\",\"char\":\"🍸\",\"name\":\"cocktail glass\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F379\",\"char\":\"🍹\",\"name\":\"tropical drink\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F37A\",\"char\":\"🍺\",\"name\":\"beer mug\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F37B\",\"char\":\"🍻\",\"name\":\"clinking beer mugs\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F942\",\"char\":\"🥂\",\"name\":\"clinking glasses\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F943\",\"char\":\"🥃\",\"name\":\"tumbler glass\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F964\",\"char\":\"🥤\",\"name\":\"cup with straw\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F9CB\",\"char\":\"🧋\",\"name\":\"bubble tea\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F9C3\",\"char\":\"🧃\",\"name\":\"beverage box\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F9C9\",\"char\":\"🧉\",\"name\":\"mate\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F9CA\",\"char\":\"🧊\",\"name\":\"ice\",\"category\":\"Food & Drink (drink)\",\"group\":\"Food & Drink\",\"subgroup\":\"drink\"},{\"codes\":\"1F962\",\"char\":\"🥢\",\"name\":\"chopsticks\",\"category\":\"Food & Drink (dishware)\",\"group\":\"Food & Drink\",\"subgroup\":\"dishware\"},{\"codes\":\"1F37D FE0F\",\"char\":\"🍽️\",\"name\":\"fork and knife with plate\",\"category\":\"Food & Drink (dishware)\",\"group\":\"Food & Drink\",\"subgroup\":\"dishware\"},{\"codes\":\"1F37D\",\"char\":\"🍽\",\"name\":\"fork and knife with plate\",\"category\":\"Food & Drink (dishware)\",\"group\":\"Food & Drink\",\"subgroup\":\"dishware\"},{\"codes\":\"1F374\",\"char\":\"🍴\",\"name\":\"fork and knife\",\"category\":\"Food & Drink (dishware)\",\"group\":\"Food & Drink\",\"subgroup\":\"dishware\"},{\"codes\":\"1F944\",\"char\":\"🥄\",\"name\":\"spoon\",\"category\":\"Food & Drink (dishware)\",\"group\":\"Food & Drink\",\"subgroup\":\"dishware\"},{\"codes\":\"1F52A\",\"char\":\"🔪\",\"name\":\"kitchen knife\",\"category\":\"Food & Drink (dishware)\",\"group\":\"Food & Drink\",\"subgroup\":\"dishware\"},{\"codes\":\"1F3FA\",\"char\":\"🏺\",\"name\":\"amphora\",\"category\":\"Food & Drink (dishware)\",\"group\":\"Food & Drink\",\"subgroup\":\"dishware\"},{\"codes\":\"1F30D\",\"char\":\"🌍\",\"name\":\"globe showing Europe-Africa\",\"category\":\"Travel & Places (place-map)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-map\"},{\"codes\":\"1F30E\",\"char\":\"🌎\",\"name\":\"globe showing Americas\",\"category\":\"Travel & Places (place-map)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-map\"},{\"codes\":\"1F30F\",\"char\":\"🌏\",\"name\":\"globe showing Asia-Australia\",\"category\":\"Travel & Places (place-map)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-map\"},{\"codes\":\"1F310\",\"char\":\"🌐\",\"name\":\"globe with meridians\",\"category\":\"Travel & Places (place-map)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-map\"},{\"codes\":\"1F5FA FE0F\",\"char\":\"🗺️\",\"name\":\"world map\",\"category\":\"Travel & Places (place-map)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-map\"},{\"codes\":\"1F5FA\",\"char\":\"🗺\",\"name\":\"world map\",\"category\":\"Travel & Places (place-map)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-map\"},{\"codes\":\"1F5FE\",\"char\":\"🗾\",\"name\":\"map of Japan\",\"category\":\"Travel & Places (place-map)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-map\"},{\"codes\":\"1F9ED\",\"char\":\"🧭\",\"name\":\"compass\",\"category\":\"Travel & Places (place-map)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-map\"},{\"codes\":\"1F3D4 FE0F\",\"char\":\"🏔️\",\"name\":\"snow-capped mountain\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3D4\",\"char\":\"🏔\",\"name\":\"snow-capped mountain\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"26F0 FE0F\",\"char\":\"⛰️\",\"name\":\"mountain\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"26F0\",\"char\":\"⛰\",\"name\":\"mountain\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F30B\",\"char\":\"🌋\",\"name\":\"volcano\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F5FB\",\"char\":\"🗻\",\"name\":\"mount fuji\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3D5 FE0F\",\"char\":\"🏕️\",\"name\":\"camping\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3D5\",\"char\":\"🏕\",\"name\":\"camping\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3D6 FE0F\",\"char\":\"🏖️\",\"name\":\"beach with umbrella\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3D6\",\"char\":\"🏖\",\"name\":\"beach with umbrella\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3DC FE0F\",\"char\":\"🏜️\",\"name\":\"desert\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3DC\",\"char\":\"🏜\",\"name\":\"desert\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3DD FE0F\",\"char\":\"🏝️\",\"name\":\"desert island\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3DD\",\"char\":\"🏝\",\"name\":\"desert island\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3DE FE0F\",\"char\":\"🏞️\",\"name\":\"national park\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3DE\",\"char\":\"🏞\",\"name\":\"national park\",\"category\":\"Travel & Places (place-geographic)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-geographic\"},{\"codes\":\"1F3DF FE0F\",\"char\":\"🏟️\",\"name\":\"stadium\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3DF\",\"char\":\"🏟\",\"name\":\"stadium\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3DB FE0F\",\"char\":\"🏛️\",\"name\":\"classical building\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3DB\",\"char\":\"🏛\",\"name\":\"classical building\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3D7 FE0F\",\"char\":\"🏗️\",\"name\":\"building construction\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3D7\",\"char\":\"🏗\",\"name\":\"building construction\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F9F1\",\"char\":\"🧱\",\"name\":\"brick\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1FAA8\",\"char\":\"🪨\",\"name\":\"rock\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1FAB5\",\"char\":\"🪵\",\"name\":\"wood\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F6D6\",\"char\":\"🛖\",\"name\":\"hut\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3D8 FE0F\",\"char\":\"🏘️\",\"name\":\"houses\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3D8\",\"char\":\"🏘\",\"name\":\"houses\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3DA FE0F\",\"char\":\"🏚️\",\"name\":\"derelict house\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3DA\",\"char\":\"🏚\",\"name\":\"derelict house\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3E0\",\"char\":\"🏠\",\"name\":\"house\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3E1\",\"char\":\"🏡\",\"name\":\"house with garden\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3E2\",\"char\":\"🏢\",\"name\":\"office building\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3E3\",\"char\":\"🏣\",\"name\":\"Japanese post office\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3E4\",\"char\":\"🏤\",\"name\":\"post office\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3E5\",\"char\":\"🏥\",\"name\":\"hospital\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3E6\",\"char\":\"🏦\",\"name\":\"bank\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3E8\",\"char\":\"🏨\",\"name\":\"hotel\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3E9\",\"char\":\"🏩\",\"name\":\"love hotel\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3EA\",\"char\":\"🏪\",\"name\":\"convenience store\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3EB\",\"char\":\"🏫\",\"name\":\"school\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3EC\",\"char\":\"🏬\",\"name\":\"department store\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3ED\",\"char\":\"🏭\",\"name\":\"factory\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3EF\",\"char\":\"🏯\",\"name\":\"Japanese castle\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F3F0\",\"char\":\"🏰\",\"name\":\"castle\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F492\",\"char\":\"💒\",\"name\":\"wedding\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F5FC\",\"char\":\"🗼\",\"name\":\"Tokyo tower\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"1F5FD\",\"char\":\"🗽\",\"name\":\"Statue of Liberty\",\"category\":\"Travel & Places (place-building)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-building\"},{\"codes\":\"26EA\",\"char\":\"⛪\",\"name\":\"church\",\"category\":\"Travel & Places (place-religious)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-religious\"},{\"codes\":\"1F54C\",\"char\":\"🕌\",\"name\":\"mosque\",\"category\":\"Travel & Places (place-religious)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-religious\"},{\"codes\":\"1F6D5\",\"char\":\"🛕\",\"name\":\"hindu temple\",\"category\":\"Travel & Places (place-religious)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-religious\"},{\"codes\":\"1F54D\",\"char\":\"🕍\",\"name\":\"synagogue\",\"category\":\"Travel & Places (place-religious)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-religious\"},{\"codes\":\"26E9 FE0F\",\"char\":\"⛩️\",\"name\":\"shinto shrine\",\"category\":\"Travel & Places (place-religious)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-religious\"},{\"codes\":\"26E9\",\"char\":\"⛩\",\"name\":\"shinto shrine\",\"category\":\"Travel & Places (place-religious)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-religious\"},{\"codes\":\"1F54B\",\"char\":\"🕋\",\"name\":\"kaaba\",\"category\":\"Travel & Places (place-religious)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-religious\"},{\"codes\":\"26F2\",\"char\":\"⛲\",\"name\":\"fountain\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"26FA\",\"char\":\"⛺\",\"name\":\"tent\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F301\",\"char\":\"🌁\",\"name\":\"foggy\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F303\",\"char\":\"🌃\",\"name\":\"night with stars\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F3D9 FE0F\",\"char\":\"🏙️\",\"name\":\"cityscape\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F3D9\",\"char\":\"🏙\",\"name\":\"cityscape\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F304\",\"char\":\"🌄\",\"name\":\"sunrise over mountains\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F305\",\"char\":\"🌅\",\"name\":\"sunrise\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F306\",\"char\":\"🌆\",\"name\":\"cityscape at dusk\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F307\",\"char\":\"🌇\",\"name\":\"sunset\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F309\",\"char\":\"🌉\",\"name\":\"bridge at night\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"2668 FE0F\",\"char\":\"♨️\",\"name\":\"hot springs\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"2668\",\"char\":\"♨\",\"name\":\"hot springs\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F3A0\",\"char\":\"🎠\",\"name\":\"carousel horse\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F3A1\",\"char\":\"🎡\",\"name\":\"ferris wheel\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F3A2\",\"char\":\"🎢\",\"name\":\"roller coaster\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F488\",\"char\":\"💈\",\"name\":\"barber pole\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F3AA\",\"char\":\"🎪\",\"name\":\"circus tent\",\"category\":\"Travel & Places (place-other)\",\"group\":\"Travel & Places\",\"subgroup\":\"place-other\"},{\"codes\":\"1F682\",\"char\":\"🚂\",\"name\":\"locomotive\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F683\",\"char\":\"🚃\",\"name\":\"railway car\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F684\",\"char\":\"🚄\",\"name\":\"high-speed train\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F685\",\"char\":\"🚅\",\"name\":\"bullet train\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F686\",\"char\":\"🚆\",\"name\":\"train\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F687\",\"char\":\"🚇\",\"name\":\"metro\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F688\",\"char\":\"🚈\",\"name\":\"light rail\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F689\",\"char\":\"🚉\",\"name\":\"station\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F68A\",\"char\":\"🚊\",\"name\":\"tram\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F69D\",\"char\":\"🚝\",\"name\":\"monorail\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F69E\",\"char\":\"🚞\",\"name\":\"mountain railway\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F68B\",\"char\":\"🚋\",\"name\":\"tram car\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F68C\",\"char\":\"🚌\",\"name\":\"bus\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F68D\",\"char\":\"🚍\",\"name\":\"oncoming bus\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F68E\",\"char\":\"🚎\",\"name\":\"trolleybus\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F690\",\"char\":\"🚐\",\"name\":\"minibus\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F691\",\"char\":\"🚑\",\"name\":\"ambulance\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F692\",\"char\":\"🚒\",\"name\":\"fire engine\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F693\",\"char\":\"🚓\",\"name\":\"police car\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F694\",\"char\":\"🚔\",\"name\":\"oncoming police car\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F695\",\"char\":\"🚕\",\"name\":\"taxi\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F696\",\"char\":\"🚖\",\"name\":\"oncoming taxi\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F697\",\"char\":\"🚗\",\"name\":\"automobile\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F698\",\"char\":\"🚘\",\"name\":\"oncoming automobile\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F699\",\"char\":\"🚙\",\"name\":\"sport utility vehicle\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6FB\",\"char\":\"🛻\",\"name\":\"pickup truck\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F69A\",\"char\":\"🚚\",\"name\":\"delivery truck\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F69B\",\"char\":\"🚛\",\"name\":\"articulated lorry\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F69C\",\"char\":\"🚜\",\"name\":\"tractor\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F3CE FE0F\",\"char\":\"🏎️\",\"name\":\"racing car\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F3CE\",\"char\":\"🏎\",\"name\":\"racing car\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F3CD FE0F\",\"char\":\"🏍️\",\"name\":\"motorcycle\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F3CD\",\"char\":\"🏍\",\"name\":\"motorcycle\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6F5\",\"char\":\"🛵\",\"name\":\"motor scooter\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F9BD\",\"char\":\"🦽\",\"name\":\"manual wheelchair\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F9BC\",\"char\":\"🦼\",\"name\":\"motorized wheelchair\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6FA\",\"char\":\"🛺\",\"name\":\"auto rickshaw\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6B2\",\"char\":\"🚲\",\"name\":\"bicycle\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6F4\",\"char\":\"🛴\",\"name\":\"kick scooter\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6F9\",\"char\":\"🛹\",\"name\":\"skateboard\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6FC\",\"char\":\"🛼\",\"name\":\"roller skate\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F68F\",\"char\":\"🚏\",\"name\":\"bus stop\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6E3 FE0F\",\"char\":\"🛣️\",\"name\":\"motorway\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6E3\",\"char\":\"🛣\",\"name\":\"motorway\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6E4 FE0F\",\"char\":\"🛤️\",\"name\":\"railway track\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6E4\",\"char\":\"🛤\",\"name\":\"railway track\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6E2 FE0F\",\"char\":\"🛢️\",\"name\":\"oil drum\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6E2\",\"char\":\"🛢\",\"name\":\"oil drum\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"26FD\",\"char\":\"⛽\",\"name\":\"fuel pump\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6A8\",\"char\":\"🚨\",\"name\":\"police car light\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6A5\",\"char\":\"🚥\",\"name\":\"horizontal traffic light\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6A6\",\"char\":\"🚦\",\"name\":\"vertical traffic light\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6D1\",\"char\":\"🛑\",\"name\":\"stop sign\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"1F6A7\",\"char\":\"🚧\",\"name\":\"construction\",\"category\":\"Travel & Places (transport-ground)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-ground\"},{\"codes\":\"2693\",\"char\":\"⚓\",\"name\":\"anchor\",\"category\":\"Travel & Places (transport-water)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-water\"},{\"codes\":\"26F5\",\"char\":\"⛵\",\"name\":\"sailboat\",\"category\":\"Travel & Places (transport-water)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-water\"},{\"codes\":\"1F6F6\",\"char\":\"🛶\",\"name\":\"canoe\",\"category\":\"Travel & Places (transport-water)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-water\"},{\"codes\":\"1F6A4\",\"char\":\"🚤\",\"name\":\"speedboat\",\"category\":\"Travel & Places (transport-water)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-water\"},{\"codes\":\"1F6F3 FE0F\",\"char\":\"🛳️\",\"name\":\"passenger ship\",\"category\":\"Travel & Places (transport-water)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-water\"},{\"codes\":\"1F6F3\",\"char\":\"🛳\",\"name\":\"passenger ship\",\"category\":\"Travel & Places (transport-water)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-water\"},{\"codes\":\"26F4 FE0F\",\"char\":\"⛴️\",\"name\":\"ferry\",\"category\":\"Travel & Places (transport-water)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-water\"},{\"codes\":\"26F4\",\"char\":\"⛴\",\"name\":\"ferry\",\"category\":\"Travel & Places (transport-water)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-water\"},{\"codes\":\"1F6E5 FE0F\",\"char\":\"🛥️\",\"name\":\"motor boat\",\"category\":\"Travel & Places (transport-water)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-water\"},{\"codes\":\"1F6E5\",\"char\":\"🛥\",\"name\":\"motor boat\",\"category\":\"Travel & Places (transport-water)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-water\"},{\"codes\":\"1F6A2\",\"char\":\"🚢\",\"name\":\"ship\",\"category\":\"Travel & Places (transport-water)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-water\"},{\"codes\":\"2708 FE0F\",\"char\":\"✈️\",\"name\":\"airplane\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"2708\",\"char\":\"✈\",\"name\":\"airplane\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F6E9 FE0F\",\"char\":\"🛩️\",\"name\":\"small airplane\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F6E9\",\"char\":\"🛩\",\"name\":\"small airplane\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F6EB\",\"char\":\"🛫\",\"name\":\"airplane departure\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F6EC\",\"char\":\"🛬\",\"name\":\"airplane arrival\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1FA82\",\"char\":\"🪂\",\"name\":\"parachute\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F4BA\",\"char\":\"💺\",\"name\":\"seat\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F681\",\"char\":\"🚁\",\"name\":\"helicopter\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F69F\",\"char\":\"🚟\",\"name\":\"suspension railway\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F6A0\",\"char\":\"🚠\",\"name\":\"mountain cableway\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F6A1\",\"char\":\"🚡\",\"name\":\"aerial tramway\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F6F0 FE0F\",\"char\":\"🛰️\",\"name\":\"satellite\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F6F0\",\"char\":\"🛰\",\"name\":\"satellite\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F680\",\"char\":\"🚀\",\"name\":\"rocket\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F6F8\",\"char\":\"🛸\",\"name\":\"flying saucer\",\"category\":\"Travel & Places (transport-air)\",\"group\":\"Travel & Places\",\"subgroup\":\"transport-air\"},{\"codes\":\"1F6CE FE0F\",\"char\":\"🛎️\",\"name\":\"bellhop bell\",\"category\":\"Travel & Places (hotel)\",\"group\":\"Travel & Places\",\"subgroup\":\"hotel\"},{\"codes\":\"1F6CE\",\"char\":\"🛎\",\"name\":\"bellhop bell\",\"category\":\"Travel & Places (hotel)\",\"group\":\"Travel & Places\",\"subgroup\":\"hotel\"},{\"codes\":\"1F9F3\",\"char\":\"🧳\",\"name\":\"luggage\",\"category\":\"Travel & Places (hotel)\",\"group\":\"Travel & Places\",\"subgroup\":\"hotel\"},{\"codes\":\"231B\",\"char\":\"⌛\",\"name\":\"hourglass done\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"23F3\",\"char\":\"⏳\",\"name\":\"hourglass not done\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"231A\",\"char\":\"⌚\",\"name\":\"watch\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"23F0\",\"char\":\"⏰\",\"name\":\"alarm clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"23F1 FE0F\",\"char\":\"⏱️\",\"name\":\"stopwatch\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"23F1\",\"char\":\"⏱\",\"name\":\"stopwatch\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"23F2 FE0F\",\"char\":\"⏲️\",\"name\":\"timer clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"23F2\",\"char\":\"⏲\",\"name\":\"timer clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F570 FE0F\",\"char\":\"🕰️\",\"name\":\"mantelpiece clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F570\",\"char\":\"🕰\",\"name\":\"mantelpiece clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F55B\",\"char\":\"🕛\",\"name\":\"twelve o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F567\",\"char\":\"🕧\",\"name\":\"twelve-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F550\",\"char\":\"🕐\",\"name\":\"one o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F55C\",\"char\":\"🕜\",\"name\":\"one-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F551\",\"char\":\"🕑\",\"name\":\"two o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F55D\",\"char\":\"🕝\",\"name\":\"two-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F552\",\"char\":\"🕒\",\"name\":\"three o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F55E\",\"char\":\"🕞\",\"name\":\"three-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F553\",\"char\":\"🕓\",\"name\":\"four o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F55F\",\"char\":\"🕟\",\"name\":\"four-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F554\",\"char\":\"🕔\",\"name\":\"five o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F560\",\"char\":\"🕠\",\"name\":\"five-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F555\",\"char\":\"🕕\",\"name\":\"six o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F561\",\"char\":\"🕡\",\"name\":\"six-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F556\",\"char\":\"🕖\",\"name\":\"seven o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F562\",\"char\":\"🕢\",\"name\":\"seven-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F557\",\"char\":\"🕗\",\"name\":\"eight o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F563\",\"char\":\"🕣\",\"name\":\"eight-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F558\",\"char\":\"🕘\",\"name\":\"nine o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F564\",\"char\":\"🕤\",\"name\":\"nine-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F559\",\"char\":\"🕙\",\"name\":\"ten o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F565\",\"char\":\"🕥\",\"name\":\"ten-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F55A\",\"char\":\"🕚\",\"name\":\"eleven o’clock\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F566\",\"char\":\"🕦\",\"name\":\"eleven-thirty\",\"category\":\"Travel & Places (time)\",\"group\":\"Travel & Places\",\"subgroup\":\"time\"},{\"codes\":\"1F311\",\"char\":\"🌑\",\"name\":\"new moon\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F312\",\"char\":\"🌒\",\"name\":\"waxing crescent moon\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F313\",\"char\":\"🌓\",\"name\":\"first quarter moon\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F314\",\"char\":\"🌔\",\"name\":\"waxing gibbous moon\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F315\",\"char\":\"🌕\",\"name\":\"full moon\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F316\",\"char\":\"🌖\",\"name\":\"waning gibbous moon\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F317\",\"char\":\"🌗\",\"name\":\"last quarter moon\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F318\",\"char\":\"🌘\",\"name\":\"waning crescent moon\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F319\",\"char\":\"🌙\",\"name\":\"crescent moon\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F31A\",\"char\":\"🌚\",\"name\":\"new moon face\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F31B\",\"char\":\"🌛\",\"name\":\"first quarter moon face\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F31C\",\"char\":\"🌜\",\"name\":\"last quarter moon face\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F321 FE0F\",\"char\":\"🌡️\",\"name\":\"thermometer\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F321\",\"char\":\"🌡\",\"name\":\"thermometer\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2600 FE0F\",\"char\":\"☀️\",\"name\":\"sun\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2600\",\"char\":\"☀\",\"name\":\"sun\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F31D\",\"char\":\"🌝\",\"name\":\"full moon face\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F31E\",\"char\":\"🌞\",\"name\":\"sun with face\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1FA90\",\"char\":\"🪐\",\"name\":\"ringed planet\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2B50\",\"char\":\"⭐\",\"name\":\"star\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F31F\",\"char\":\"🌟\",\"name\":\"glowing star\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F320\",\"char\":\"🌠\",\"name\":\"shooting star\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F30C\",\"char\":\"🌌\",\"name\":\"milky way\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2601 FE0F\",\"char\":\"☁️\",\"name\":\"cloud\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2601\",\"char\":\"☁\",\"name\":\"cloud\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"26C5\",\"char\":\"⛅\",\"name\":\"sun behind cloud\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"26C8 FE0F\",\"char\":\"⛈️\",\"name\":\"cloud with lightning and rain\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"26C8\",\"char\":\"⛈\",\"name\":\"cloud with lightning and rain\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F324 FE0F\",\"char\":\"🌤️\",\"name\":\"sun behind small cloud\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F324\",\"char\":\"🌤\",\"name\":\"sun behind small cloud\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F325 FE0F\",\"char\":\"🌥️\",\"name\":\"sun behind large cloud\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F325\",\"char\":\"🌥\",\"name\":\"sun behind large cloud\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F326 FE0F\",\"char\":\"🌦️\",\"name\":\"sun behind rain cloud\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F326\",\"char\":\"🌦\",\"name\":\"sun behind rain cloud\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F327 FE0F\",\"char\":\"🌧️\",\"name\":\"cloud with rain\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F327\",\"char\":\"🌧\",\"name\":\"cloud with rain\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F328 FE0F\",\"char\":\"🌨️\",\"name\":\"cloud with snow\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F328\",\"char\":\"🌨\",\"name\":\"cloud with snow\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F329 FE0F\",\"char\":\"🌩️\",\"name\":\"cloud with lightning\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F329\",\"char\":\"🌩\",\"name\":\"cloud with lightning\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F32A FE0F\",\"char\":\"🌪️\",\"name\":\"tornado\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F32A\",\"char\":\"🌪\",\"name\":\"tornado\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F32B FE0F\",\"char\":\"🌫️\",\"name\":\"fog\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F32B\",\"char\":\"🌫\",\"name\":\"fog\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F32C FE0F\",\"char\":\"🌬️\",\"name\":\"wind face\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F32C\",\"char\":\"🌬\",\"name\":\"wind face\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F300\",\"char\":\"🌀\",\"name\":\"cyclone\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F308\",\"char\":\"🌈\",\"name\":\"rainbow\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F302\",\"char\":\"🌂\",\"name\":\"closed umbrella\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2602 FE0F\",\"char\":\"☂️\",\"name\":\"umbrella\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2602\",\"char\":\"☂\",\"name\":\"umbrella\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2614\",\"char\":\"☔\",\"name\":\"umbrella with rain drops\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"26F1 FE0F\",\"char\":\"⛱️\",\"name\":\"umbrella on ground\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"26F1\",\"char\":\"⛱\",\"name\":\"umbrella on ground\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"26A1\",\"char\":\"⚡\",\"name\":\"high voltage\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2744 FE0F\",\"char\":\"❄️\",\"name\":\"snowflake\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2744\",\"char\":\"❄\",\"name\":\"snowflake\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2603 FE0F\",\"char\":\"☃️\",\"name\":\"snowman\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2603\",\"char\":\"☃\",\"name\":\"snowman\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"26C4\",\"char\":\"⛄\",\"name\":\"snowman without snow\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2604 FE0F\",\"char\":\"☄️\",\"name\":\"comet\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"2604\",\"char\":\"☄\",\"name\":\"comet\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F525\",\"char\":\"🔥\",\"name\":\"fire\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F4A7\",\"char\":\"💧\",\"name\":\"droplet\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F30A\",\"char\":\"🌊\",\"name\":\"water wave\",\"category\":\"Travel & Places (sky & weather)\",\"group\":\"Travel & Places\",\"subgroup\":\"sky & weather\"},{\"codes\":\"1F383\",\"char\":\"🎃\",\"name\":\"jack-o-lantern\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F384\",\"char\":\"🎄\",\"name\":\"Christmas tree\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F386\",\"char\":\"🎆\",\"name\":\"fireworks\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F387\",\"char\":\"🎇\",\"name\":\"sparkler\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F9E8\",\"char\":\"🧨\",\"name\":\"firecracker\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"2728\",\"char\":\"✨\",\"name\":\"sparkles\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F388\",\"char\":\"🎈\",\"name\":\"balloon\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F389\",\"char\":\"🎉\",\"name\":\"party popper\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F38A\",\"char\":\"🎊\",\"name\":\"confetti ball\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F38B\",\"char\":\"🎋\",\"name\":\"tanabata tree\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F38D\",\"char\":\"🎍\",\"name\":\"pine decoration\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F38E\",\"char\":\"🎎\",\"name\":\"Japanese dolls\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F38F\",\"char\":\"🎏\",\"name\":\"carp streamer\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F390\",\"char\":\"🎐\",\"name\":\"wind chime\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F391\",\"char\":\"🎑\",\"name\":\"moon viewing ceremony\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F9E7\",\"char\":\"🧧\",\"name\":\"red envelope\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F380\",\"char\":\"🎀\",\"name\":\"ribbon\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F381\",\"char\":\"🎁\",\"name\":\"wrapped gift\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F397 FE0F\",\"char\":\"🎗️\",\"name\":\"reminder ribbon\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F397\",\"char\":\"🎗\",\"name\":\"reminder ribbon\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F39F FE0F\",\"char\":\"🎟️\",\"name\":\"admission tickets\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F39F\",\"char\":\"🎟\",\"name\":\"admission tickets\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F3AB\",\"char\":\"🎫\",\"name\":\"ticket\",\"category\":\"Activities (event)\",\"group\":\"Activities\",\"subgroup\":\"event\"},{\"codes\":\"1F396 FE0F\",\"char\":\"🎖️\",\"name\":\"military medal\",\"category\":\"Activities (award-medal)\",\"group\":\"Activities\",\"subgroup\":\"award-medal\"},{\"codes\":\"1F396\",\"char\":\"🎖\",\"name\":\"military medal\",\"category\":\"Activities (award-medal)\",\"group\":\"Activities\",\"subgroup\":\"award-medal\"},{\"codes\":\"1F3C6\",\"char\":\"🏆\",\"name\":\"trophy\",\"category\":\"Activities (award-medal)\",\"group\":\"Activities\",\"subgroup\":\"award-medal\"},{\"codes\":\"1F3C5\",\"char\":\"🏅\",\"name\":\"sports medal\",\"category\":\"Activities (award-medal)\",\"group\":\"Activities\",\"subgroup\":\"award-medal\"},{\"codes\":\"1F947\",\"char\":\"🥇\",\"name\":\"1st place medal\",\"category\":\"Activities (award-medal)\",\"group\":\"Activities\",\"subgroup\":\"award-medal\"},{\"codes\":\"1F948\",\"char\":\"🥈\",\"name\":\"2nd place medal\",\"category\":\"Activities (award-medal)\",\"group\":\"Activities\",\"subgroup\":\"award-medal\"},{\"codes\":\"1F949\",\"char\":\"🥉\",\"name\":\"3rd place medal\",\"category\":\"Activities (award-medal)\",\"group\":\"Activities\",\"subgroup\":\"award-medal\"},{\"codes\":\"26BD\",\"char\":\"⚽\",\"name\":\"soccer ball\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"26BE\",\"char\":\"⚾\",\"name\":\"baseball\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F94E\",\"char\":\"🥎\",\"name\":\"softball\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3C0\",\"char\":\"🏀\",\"name\":\"basketball\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3D0\",\"char\":\"🏐\",\"name\":\"volleyball\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3C8\",\"char\":\"🏈\",\"name\":\"american football\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3C9\",\"char\":\"🏉\",\"name\":\"rugby football\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3BE\",\"char\":\"🎾\",\"name\":\"tennis\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F94F\",\"char\":\"🥏\",\"name\":\"flying disc\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3B3\",\"char\":\"🎳\",\"name\":\"bowling\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3CF\",\"char\":\"🏏\",\"name\":\"cricket game\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3D1\",\"char\":\"🏑\",\"name\":\"field hockey\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3D2\",\"char\":\"🏒\",\"name\":\"ice hockey\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F94D\",\"char\":\"🥍\",\"name\":\"lacrosse\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3D3\",\"char\":\"🏓\",\"name\":\"ping pong\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3F8\",\"char\":\"🏸\",\"name\":\"badminton\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F94A\",\"char\":\"🥊\",\"name\":\"boxing glove\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F94B\",\"char\":\"🥋\",\"name\":\"martial arts uniform\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F945\",\"char\":\"🥅\",\"name\":\"goal net\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"26F3\",\"char\":\"⛳\",\"name\":\"flag in hole\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"26F8 FE0F\",\"char\":\"⛸️\",\"name\":\"ice skate\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"26F8\",\"char\":\"⛸\",\"name\":\"ice skate\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3A3\",\"char\":\"🎣\",\"name\":\"fishing pole\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F93F\",\"char\":\"🤿\",\"name\":\"diving mask\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3BD\",\"char\":\"🎽\",\"name\":\"running shirt\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3BF\",\"char\":\"🎿\",\"name\":\"skis\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F6F7\",\"char\":\"🛷\",\"name\":\"sled\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F94C\",\"char\":\"🥌\",\"name\":\"curling stone\",\"category\":\"Activities (sport)\",\"group\":\"Activities\",\"subgroup\":\"sport\"},{\"codes\":\"1F3AF\",\"char\":\"🎯\",\"name\":\"direct hit\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1FA80\",\"char\":\"🪀\",\"name\":\"yo-yo\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1FA81\",\"char\":\"🪁\",\"name\":\"kite\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F3B1\",\"char\":\"🎱\",\"name\":\"pool 8 ball\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F52E\",\"char\":\"🔮\",\"name\":\"crystal ball\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1FA84\",\"char\":\"🪄\",\"name\":\"magic wand\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F9FF\",\"char\":\"🧿\",\"name\":\"nazar amulet\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F3AE\",\"char\":\"🎮\",\"name\":\"video game\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F579 FE0F\",\"char\":\"🕹️\",\"name\":\"joystick\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F579\",\"char\":\"🕹\",\"name\":\"joystick\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F3B0\",\"char\":\"🎰\",\"name\":\"slot machine\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F3B2\",\"char\":\"🎲\",\"name\":\"game die\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F9E9\",\"char\":\"🧩\",\"name\":\"puzzle piece\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F9F8\",\"char\":\"🧸\",\"name\":\"teddy bear\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1FA85\",\"char\":\"🪅\",\"name\":\"piñata\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1FA86\",\"char\":\"🪆\",\"name\":\"nesting dolls\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"2660 FE0F\",\"char\":\"♠️\",\"name\":\"spade suit\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"2660\",\"char\":\"♠\",\"name\":\"spade suit\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"2665 FE0F\",\"char\":\"♥️\",\"name\":\"heart suit\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"2665\",\"char\":\"♥\",\"name\":\"heart suit\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"2666 FE0F\",\"char\":\"♦️\",\"name\":\"diamond suit\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"2666\",\"char\":\"♦\",\"name\":\"diamond suit\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"2663 FE0F\",\"char\":\"♣️\",\"name\":\"club suit\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"2663\",\"char\":\"♣\",\"name\":\"club suit\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"265F FE0F\",\"char\":\"♟️\",\"name\":\"chess pawn\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"265F\",\"char\":\"♟\",\"name\":\"chess pawn\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F0CF\",\"char\":\"🃏\",\"name\":\"joker\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F004\",\"char\":\"🀄\",\"name\":\"mahjong red dragon\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F3B4\",\"char\":\"🎴\",\"name\":\"flower playing cards\",\"category\":\"Activities (game)\",\"group\":\"Activities\",\"subgroup\":\"game\"},{\"codes\":\"1F3AD\",\"char\":\"🎭\",\"name\":\"performing arts\",\"category\":\"Activities (arts & crafts)\",\"group\":\"Activities\",\"subgroup\":\"arts & crafts\"},{\"codes\":\"1F5BC FE0F\",\"char\":\"🖼️\",\"name\":\"framed picture\",\"category\":\"Activities (arts & crafts)\",\"group\":\"Activities\",\"subgroup\":\"arts & crafts\"},{\"codes\":\"1F5BC\",\"char\":\"🖼\",\"name\":\"framed picture\",\"category\":\"Activities (arts & crafts)\",\"group\":\"Activities\",\"subgroup\":\"arts & crafts\"},{\"codes\":\"1F3A8\",\"char\":\"🎨\",\"name\":\"artist palette\",\"category\":\"Activities (arts & crafts)\",\"group\":\"Activities\",\"subgroup\":\"arts & crafts\"},{\"codes\":\"1F9F5\",\"char\":\"🧵\",\"name\":\"thread\",\"category\":\"Activities (arts & crafts)\",\"group\":\"Activities\",\"subgroup\":\"arts & crafts\"},{\"codes\":\"1FAA1\",\"char\":\"🪡\",\"name\":\"sewing needle\",\"category\":\"Activities (arts & crafts)\",\"group\":\"Activities\",\"subgroup\":\"arts & crafts\"},{\"codes\":\"1F9F6\",\"char\":\"🧶\",\"name\":\"yarn\",\"category\":\"Activities (arts & crafts)\",\"group\":\"Activities\",\"subgroup\":\"arts & crafts\"},{\"codes\":\"1FAA2\",\"char\":\"🪢\",\"name\":\"knot\",\"category\":\"Activities (arts & crafts)\",\"group\":\"Activities\",\"subgroup\":\"arts & crafts\"},{\"codes\":\"1F453\",\"char\":\"👓\",\"name\":\"glasses\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F576 FE0F\",\"char\":\"🕶️\",\"name\":\"sunglasses\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F576\",\"char\":\"🕶\",\"name\":\"sunglasses\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F97D\",\"char\":\"🥽\",\"name\":\"goggles\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F97C\",\"char\":\"🥼\",\"name\":\"lab coat\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F9BA\",\"char\":\"🦺\",\"name\":\"safety vest\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F454\",\"char\":\"👔\",\"name\":\"necktie\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F455\",\"char\":\"👕\",\"name\":\"t-shirt\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F456\",\"char\":\"👖\",\"name\":\"jeans\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F9E3\",\"char\":\"🧣\",\"name\":\"scarf\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F9E4\",\"char\":\"🧤\",\"name\":\"gloves\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F9E5\",\"char\":\"🧥\",\"name\":\"coat\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F9E6\",\"char\":\"🧦\",\"name\":\"socks\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F457\",\"char\":\"👗\",\"name\":\"dress\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F458\",\"char\":\"👘\",\"name\":\"kimono\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F97B\",\"char\":\"🥻\",\"name\":\"sari\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1FA71\",\"char\":\"🩱\",\"name\":\"one-piece swimsuit\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1FA72\",\"char\":\"🩲\",\"name\":\"briefs\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1FA73\",\"char\":\"🩳\",\"name\":\"shorts\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F459\",\"char\":\"👙\",\"name\":\"bikini\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F45A\",\"char\":\"👚\",\"name\":\"woman’s clothes\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F45B\",\"char\":\"👛\",\"name\":\"purse\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F45C\",\"char\":\"👜\",\"name\":\"handbag\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F45D\",\"char\":\"👝\",\"name\":\"clutch bag\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F6CD FE0F\",\"char\":\"🛍️\",\"name\":\"shopping bags\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F6CD\",\"char\":\"🛍\",\"name\":\"shopping bags\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F392\",\"char\":\"🎒\",\"name\":\"backpack\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1FA74\",\"char\":\"🩴\",\"name\":\"thong sandal\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F45E\",\"char\":\"👞\",\"name\":\"man’s shoe\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F45F\",\"char\":\"👟\",\"name\":\"running shoe\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F97E\",\"char\":\"🥾\",\"name\":\"hiking boot\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F97F\",\"char\":\"🥿\",\"name\":\"flat shoe\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F460\",\"char\":\"👠\",\"name\":\"high-heeled shoe\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F461\",\"char\":\"👡\",\"name\":\"woman’s sandal\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1FA70\",\"char\":\"🩰\",\"name\":\"ballet shoes\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F462\",\"char\":\"👢\",\"name\":\"woman’s boot\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F451\",\"char\":\"👑\",\"name\":\"crown\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F452\",\"char\":\"👒\",\"name\":\"woman’s hat\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F3A9\",\"char\":\"🎩\",\"name\":\"top hat\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F393\",\"char\":\"🎓\",\"name\":\"graduation cap\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F9E2\",\"char\":\"🧢\",\"name\":\"billed cap\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1FA96\",\"char\":\"🪖\",\"name\":\"military helmet\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"26D1 FE0F\",\"char\":\"⛑️\",\"name\":\"rescue worker’s helmet\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"26D1\",\"char\":\"⛑\",\"name\":\"rescue worker’s helmet\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F4FF\",\"char\":\"📿\",\"name\":\"prayer beads\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F484\",\"char\":\"💄\",\"name\":\"lipstick\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F48D\",\"char\":\"💍\",\"name\":\"ring\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F48E\",\"char\":\"💎\",\"name\":\"gem stone\",\"category\":\"Objects (clothing)\",\"group\":\"Objects\",\"subgroup\":\"clothing\"},{\"codes\":\"1F507\",\"char\":\"🔇\",\"name\":\"muted speaker\",\"category\":\"Objects (sound)\",\"group\":\"Objects\",\"subgroup\":\"sound\"},{\"codes\":\"1F508\",\"char\":\"🔈\",\"name\":\"speaker low volume\",\"category\":\"Objects (sound)\",\"group\":\"Objects\",\"subgroup\":\"sound\"},{\"codes\":\"1F509\",\"char\":\"🔉\",\"name\":\"speaker medium volume\",\"category\":\"Objects (sound)\",\"group\":\"Objects\",\"subgroup\":\"sound\"},{\"codes\":\"1F50A\",\"char\":\"🔊\",\"name\":\"speaker high volume\",\"category\":\"Objects (sound)\",\"group\":\"Objects\",\"subgroup\":\"sound\"},{\"codes\":\"1F4E2\",\"char\":\"📢\",\"name\":\"loudspeaker\",\"category\":\"Objects (sound)\",\"group\":\"Objects\",\"subgroup\":\"sound\"},{\"codes\":\"1F4E3\",\"char\":\"📣\",\"name\":\"megaphone\",\"category\":\"Objects (sound)\",\"group\":\"Objects\",\"subgroup\":\"sound\"},{\"codes\":\"1F4EF\",\"char\":\"📯\",\"name\":\"postal horn\",\"category\":\"Objects (sound)\",\"group\":\"Objects\",\"subgroup\":\"sound\"},{\"codes\":\"1F514\",\"char\":\"🔔\",\"name\":\"bell\",\"category\":\"Objects (sound)\",\"group\":\"Objects\",\"subgroup\":\"sound\"},{\"codes\":\"1F515\",\"char\":\"🔕\",\"name\":\"bell with slash\",\"category\":\"Objects (sound)\",\"group\":\"Objects\",\"subgroup\":\"sound\"},{\"codes\":\"1F3BC\",\"char\":\"🎼\",\"name\":\"musical score\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F3B5\",\"char\":\"🎵\",\"name\":\"musical note\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F3B6\",\"char\":\"🎶\",\"name\":\"musical notes\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F399 FE0F\",\"char\":\"🎙️\",\"name\":\"studio microphone\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F399\",\"char\":\"🎙\",\"name\":\"studio microphone\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F39A FE0F\",\"char\":\"🎚️\",\"name\":\"level slider\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F39A\",\"char\":\"🎚\",\"name\":\"level slider\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F39B FE0F\",\"char\":\"🎛️\",\"name\":\"control knobs\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F39B\",\"char\":\"🎛\",\"name\":\"control knobs\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F3A4\",\"char\":\"🎤\",\"name\":\"microphone\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F3A7\",\"char\":\"🎧\",\"name\":\"headphone\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F4FB\",\"char\":\"📻\",\"name\":\"radio\",\"category\":\"Objects (music)\",\"group\":\"Objects\",\"subgroup\":\"music\"},{\"codes\":\"1F3B7\",\"char\":\"🎷\",\"name\":\"saxophone\",\"category\":\"Objects (musical-instrument)\",\"group\":\"Objects\",\"subgroup\":\"musical-instrument\"},{\"codes\":\"1FA97\",\"char\":\"🪗\",\"name\":\"accordion\",\"category\":\"Objects (musical-instrument)\",\"group\":\"Objects\",\"subgroup\":\"musical-instrument\"},{\"codes\":\"1F3B8\",\"char\":\"🎸\",\"name\":\"guitar\",\"category\":\"Objects (musical-instrument)\",\"group\":\"Objects\",\"subgroup\":\"musical-instrument\"},{\"codes\":\"1F3B9\",\"char\":\"🎹\",\"name\":\"musical keyboard\",\"category\":\"Objects (musical-instrument)\",\"group\":\"Objects\",\"subgroup\":\"musical-instrument\"},{\"codes\":\"1F3BA\",\"char\":\"🎺\",\"name\":\"trumpet\",\"category\":\"Objects (musical-instrument)\",\"group\":\"Objects\",\"subgroup\":\"musical-instrument\"},{\"codes\":\"1F3BB\",\"char\":\"🎻\",\"name\":\"violin\",\"category\":\"Objects (musical-instrument)\",\"group\":\"Objects\",\"subgroup\":\"musical-instrument\"},{\"codes\":\"1FA95\",\"char\":\"🪕\",\"name\":\"banjo\",\"category\":\"Objects (musical-instrument)\",\"group\":\"Objects\",\"subgroup\":\"musical-instrument\"},{\"codes\":\"1F941\",\"char\":\"🥁\",\"name\":\"drum\",\"category\":\"Objects (musical-instrument)\",\"group\":\"Objects\",\"subgroup\":\"musical-instrument\"},{\"codes\":\"1FA98\",\"char\":\"🪘\",\"name\":\"long drum\",\"category\":\"Objects (musical-instrument)\",\"group\":\"Objects\",\"subgroup\":\"musical-instrument\"},{\"codes\":\"1F4F1\",\"char\":\"📱\",\"name\":\"mobile phone\",\"category\":\"Objects (phone)\",\"group\":\"Objects\",\"subgroup\":\"phone\"},{\"codes\":\"1F4F2\",\"char\":\"📲\",\"name\":\"mobile phone with arrow\",\"category\":\"Objects (phone)\",\"group\":\"Objects\",\"subgroup\":\"phone\"},{\"codes\":\"260E FE0F\",\"char\":\"☎️\",\"name\":\"telephone\",\"category\":\"Objects (phone)\",\"group\":\"Objects\",\"subgroup\":\"phone\"},{\"codes\":\"260E\",\"char\":\"☎\",\"name\":\"telephone\",\"category\":\"Objects (phone)\",\"group\":\"Objects\",\"subgroup\":\"phone\"},{\"codes\":\"1F4DE\",\"char\":\"📞\",\"name\":\"telephone receiver\",\"category\":\"Objects (phone)\",\"group\":\"Objects\",\"subgroup\":\"phone\"},{\"codes\":\"1F4DF\",\"char\":\"📟\",\"name\":\"pager\",\"category\":\"Objects (phone)\",\"group\":\"Objects\",\"subgroup\":\"phone\"},{\"codes\":\"1F4E0\",\"char\":\"📠\",\"name\":\"fax machine\",\"category\":\"Objects (phone)\",\"group\":\"Objects\",\"subgroup\":\"phone\"},{\"codes\":\"1F50B\",\"char\":\"🔋\",\"name\":\"battery\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F50C\",\"char\":\"🔌\",\"name\":\"electric plug\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F4BB\",\"char\":\"💻\",\"name\":\"laptop\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F5A5 FE0F\",\"char\":\"🖥️\",\"name\":\"desktop computer\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F5A5\",\"char\":\"🖥\",\"name\":\"desktop computer\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F5A8 FE0F\",\"char\":\"🖨️\",\"name\":\"printer\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F5A8\",\"char\":\"🖨\",\"name\":\"printer\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"2328 FE0F\",\"char\":\"⌨️\",\"name\":\"keyboard\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"2328\",\"char\":\"⌨\",\"name\":\"keyboard\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F5B1 FE0F\",\"char\":\"🖱️\",\"name\":\"computer mouse\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F5B1\",\"char\":\"🖱\",\"name\":\"computer mouse\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F5B2 FE0F\",\"char\":\"🖲️\",\"name\":\"trackball\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F5B2\",\"char\":\"🖲\",\"name\":\"trackball\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F4BD\",\"char\":\"💽\",\"name\":\"computer disk\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F4BE\",\"char\":\"💾\",\"name\":\"floppy disk\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F4BF\",\"char\":\"💿\",\"name\":\"optical disk\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F4C0\",\"char\":\"📀\",\"name\":\"dvd\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F9EE\",\"char\":\"🧮\",\"name\":\"abacus\",\"category\":\"Objects (computer)\",\"group\":\"Objects\",\"subgroup\":\"computer\"},{\"codes\":\"1F3A5\",\"char\":\"🎥\",\"name\":\"movie camera\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F39E FE0F\",\"char\":\"🎞️\",\"name\":\"film frames\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F39E\",\"char\":\"🎞\",\"name\":\"film frames\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F4FD FE0F\",\"char\":\"📽️\",\"name\":\"film projector\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F4FD\",\"char\":\"📽\",\"name\":\"film projector\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F3AC\",\"char\":\"🎬\",\"name\":\"clapper board\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F4FA\",\"char\":\"📺\",\"name\":\"television\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F4F7\",\"char\":\"📷\",\"name\":\"camera\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F4F8\",\"char\":\"📸\",\"name\":\"camera with flash\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F4F9\",\"char\":\"📹\",\"name\":\"video camera\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F4FC\",\"char\":\"📼\",\"name\":\"videocassette\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F50D\",\"char\":\"🔍\",\"name\":\"magnifying glass tilted left\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F50E\",\"char\":\"🔎\",\"name\":\"magnifying glass tilted right\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F56F FE0F\",\"char\":\"🕯️\",\"name\":\"candle\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F56F\",\"char\":\"🕯\",\"name\":\"candle\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F4A1\",\"char\":\"💡\",\"name\":\"light bulb\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F526\",\"char\":\"🔦\",\"name\":\"flashlight\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F3EE\",\"char\":\"🏮\",\"name\":\"red paper lantern\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1FA94\",\"char\":\"🪔\",\"name\":\"diya lamp\",\"category\":\"Objects (light & video)\",\"group\":\"Objects\",\"subgroup\":\"light & video\"},{\"codes\":\"1F4D4\",\"char\":\"📔\",\"name\":\"notebook with decorative cover\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4D5\",\"char\":\"📕\",\"name\":\"closed book\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4D6\",\"char\":\"📖\",\"name\":\"open book\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4D7\",\"char\":\"📗\",\"name\":\"green book\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4D8\",\"char\":\"📘\",\"name\":\"blue book\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4D9\",\"char\":\"📙\",\"name\":\"orange book\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4DA\",\"char\":\"📚\",\"name\":\"books\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4D3\",\"char\":\"📓\",\"name\":\"notebook\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4D2\",\"char\":\"📒\",\"name\":\"ledger\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4C3\",\"char\":\"📃\",\"name\":\"page with curl\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4DC\",\"char\":\"📜\",\"name\":\"scroll\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4C4\",\"char\":\"📄\",\"name\":\"page facing up\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4F0\",\"char\":\"📰\",\"name\":\"newspaper\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F5DE FE0F\",\"char\":\"🗞️\",\"name\":\"rolled-up newspaper\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F5DE\",\"char\":\"🗞\",\"name\":\"rolled-up newspaper\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4D1\",\"char\":\"📑\",\"name\":\"bookmark tabs\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F516\",\"char\":\"🔖\",\"name\":\"bookmark\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F3F7 FE0F\",\"char\":\"🏷️\",\"name\":\"label\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F3F7\",\"char\":\"🏷\",\"name\":\"label\",\"category\":\"Objects (book-paper)\",\"group\":\"Objects\",\"subgroup\":\"book-paper\"},{\"codes\":\"1F4B0\",\"char\":\"💰\",\"name\":\"money bag\",\"category\":\"Objects (money)\",\"group\":\"Objects\",\"subgroup\":\"money\"},{\"codes\":\"1FA99\",\"char\":\"🪙\",\"name\":\"coin\",\"category\":\"Objects (money)\",\"group\":\"Objects\",\"subgroup\":\"money\"},{\"codes\":\"1F4B4\",\"char\":\"💴\",\"name\":\"yen banknote\",\"category\":\"Objects (money)\",\"group\":\"Objects\",\"subgroup\":\"money\"},{\"codes\":\"1F4B5\",\"char\":\"💵\",\"name\":\"dollar banknote\",\"category\":\"Objects (money)\",\"group\":\"Objects\",\"subgroup\":\"money\"},{\"codes\":\"1F4B6\",\"char\":\"💶\",\"name\":\"euro banknote\",\"category\":\"Objects (money)\",\"group\":\"Objects\",\"subgroup\":\"money\"},{\"codes\":\"1F4B7\",\"char\":\"💷\",\"name\":\"pound banknote\",\"category\":\"Objects (money)\",\"group\":\"Objects\",\"subgroup\":\"money\"},{\"codes\":\"1F4B8\",\"char\":\"💸\",\"name\":\"money with wings\",\"category\":\"Objects (money)\",\"group\":\"Objects\",\"subgroup\":\"money\"},{\"codes\":\"1F4B3\",\"char\":\"💳\",\"name\":\"credit card\",\"category\":\"Objects (money)\",\"group\":\"Objects\",\"subgroup\":\"money\"},{\"codes\":\"1F9FE\",\"char\":\"🧾\",\"name\":\"receipt\",\"category\":\"Objects (money)\",\"group\":\"Objects\",\"subgroup\":\"money\"},{\"codes\":\"1F4B9\",\"char\":\"💹\",\"name\":\"chart increasing with yen\",\"category\":\"Objects (money)\",\"group\":\"Objects\",\"subgroup\":\"money\"},{\"codes\":\"2709 FE0F\",\"char\":\"✉️\",\"name\":\"envelope\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"2709\",\"char\":\"✉\",\"name\":\"envelope\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F4E7\",\"char\":\"📧\",\"name\":\"e-mail\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F4E8\",\"char\":\"📨\",\"name\":\"incoming envelope\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F4E9\",\"char\":\"📩\",\"name\":\"envelope with arrow\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F4E4\",\"char\":\"📤\",\"name\":\"outbox tray\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F4E5\",\"char\":\"📥\",\"name\":\"inbox tray\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F4E6\",\"char\":\"📦\",\"name\":\"package\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F4EB\",\"char\":\"📫\",\"name\":\"closed mailbox with raised flag\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F4EA\",\"char\":\"📪\",\"name\":\"closed mailbox with lowered flag\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F4EC\",\"char\":\"📬\",\"name\":\"open mailbox with raised flag\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F4ED\",\"char\":\"📭\",\"name\":\"open mailbox with lowered flag\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F4EE\",\"char\":\"📮\",\"name\":\"postbox\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F5F3 FE0F\",\"char\":\"🗳️\",\"name\":\"ballot box with ballot\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"1F5F3\",\"char\":\"🗳\",\"name\":\"ballot box with ballot\",\"category\":\"Objects (mail)\",\"group\":\"Objects\",\"subgroup\":\"mail\"},{\"codes\":\"270F FE0F\",\"char\":\"✏️\",\"name\":\"pencil\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"270F\",\"char\":\"✏\",\"name\":\"pencil\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"2712 FE0F\",\"char\":\"✒️\",\"name\":\"black nib\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"2712\",\"char\":\"✒\",\"name\":\"black nib\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"1F58B FE0F\",\"char\":\"🖋️\",\"name\":\"fountain pen\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"1F58B\",\"char\":\"🖋\",\"name\":\"fountain pen\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"1F58A FE0F\",\"char\":\"🖊️\",\"name\":\"pen\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"1F58A\",\"char\":\"🖊\",\"name\":\"pen\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"1F58C FE0F\",\"char\":\"🖌️\",\"name\":\"paintbrush\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"1F58C\",\"char\":\"🖌\",\"name\":\"paintbrush\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"1F58D FE0F\",\"char\":\"🖍️\",\"name\":\"crayon\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"1F58D\",\"char\":\"🖍\",\"name\":\"crayon\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"1F4DD\",\"char\":\"📝\",\"name\":\"memo\",\"category\":\"Objects (writing)\",\"group\":\"Objects\",\"subgroup\":\"writing\"},{\"codes\":\"1F4BC\",\"char\":\"💼\",\"name\":\"briefcase\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4C1\",\"char\":\"📁\",\"name\":\"file folder\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4C2\",\"char\":\"📂\",\"name\":\"open file folder\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5C2 FE0F\",\"char\":\"🗂️\",\"name\":\"card index dividers\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5C2\",\"char\":\"🗂\",\"name\":\"card index dividers\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4C5\",\"char\":\"📅\",\"name\":\"calendar\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4C6\",\"char\":\"📆\",\"name\":\"tear-off calendar\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5D2 FE0F\",\"char\":\"🗒️\",\"name\":\"spiral notepad\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5D2\",\"char\":\"🗒\",\"name\":\"spiral notepad\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5D3 FE0F\",\"char\":\"🗓️\",\"name\":\"spiral calendar\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5D3\",\"char\":\"🗓\",\"name\":\"spiral calendar\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4C7\",\"char\":\"📇\",\"name\":\"card index\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4C8\",\"char\":\"📈\",\"name\":\"chart increasing\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4C9\",\"char\":\"📉\",\"name\":\"chart decreasing\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4CA\",\"char\":\"📊\",\"name\":\"bar chart\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4CB\",\"char\":\"📋\",\"name\":\"clipboard\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4CC\",\"char\":\"📌\",\"name\":\"pushpin\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4CD\",\"char\":\"📍\",\"name\":\"round pushpin\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4CE\",\"char\":\"📎\",\"name\":\"paperclip\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F587 FE0F\",\"char\":\"🖇️\",\"name\":\"linked paperclips\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F587\",\"char\":\"🖇\",\"name\":\"linked paperclips\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4CF\",\"char\":\"📏\",\"name\":\"straight ruler\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F4D0\",\"char\":\"📐\",\"name\":\"triangular ruler\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"2702 FE0F\",\"char\":\"✂️\",\"name\":\"scissors\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"2702\",\"char\":\"✂\",\"name\":\"scissors\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5C3 FE0F\",\"char\":\"🗃️\",\"name\":\"card file box\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5C3\",\"char\":\"🗃\",\"name\":\"card file box\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5C4 FE0F\",\"char\":\"🗄️\",\"name\":\"file cabinet\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5C4\",\"char\":\"🗄\",\"name\":\"file cabinet\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5D1 FE0F\",\"char\":\"🗑️\",\"name\":\"wastebasket\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F5D1\",\"char\":\"🗑\",\"name\":\"wastebasket\",\"category\":\"Objects (office)\",\"group\":\"Objects\",\"subgroup\":\"office\"},{\"codes\":\"1F512\",\"char\":\"🔒\",\"name\":\"locked\",\"category\":\"Objects (lock)\",\"group\":\"Objects\",\"subgroup\":\"lock\"},{\"codes\":\"1F513\",\"char\":\"🔓\",\"name\":\"unlocked\",\"category\":\"Objects (lock)\",\"group\":\"Objects\",\"subgroup\":\"lock\"},{\"codes\":\"1F50F\",\"char\":\"🔏\",\"name\":\"locked with pen\",\"category\":\"Objects (lock)\",\"group\":\"Objects\",\"subgroup\":\"lock\"},{\"codes\":\"1F510\",\"char\":\"🔐\",\"name\":\"locked with key\",\"category\":\"Objects (lock)\",\"group\":\"Objects\",\"subgroup\":\"lock\"},{\"codes\":\"1F511\",\"char\":\"🔑\",\"name\":\"key\",\"category\":\"Objects (lock)\",\"group\":\"Objects\",\"subgroup\":\"lock\"},{\"codes\":\"1F5DD FE0F\",\"char\":\"🗝️\",\"name\":\"old key\",\"category\":\"Objects (lock)\",\"group\":\"Objects\",\"subgroup\":\"lock\"},{\"codes\":\"1F5DD\",\"char\":\"🗝\",\"name\":\"old key\",\"category\":\"Objects (lock)\",\"group\":\"Objects\",\"subgroup\":\"lock\"},{\"codes\":\"1F528\",\"char\":\"🔨\",\"name\":\"hammer\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1FA93\",\"char\":\"🪓\",\"name\":\"axe\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"26CF FE0F\",\"char\":\"⛏️\",\"name\":\"pick\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"26CF\",\"char\":\"⛏\",\"name\":\"pick\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"2692 FE0F\",\"char\":\"⚒️\",\"name\":\"hammer and pick\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"2692\",\"char\":\"⚒\",\"name\":\"hammer and pick\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F6E0 FE0F\",\"char\":\"🛠️\",\"name\":\"hammer and wrench\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F6E0\",\"char\":\"🛠\",\"name\":\"hammer and wrench\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F5E1 FE0F\",\"char\":\"🗡️\",\"name\":\"dagger\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F5E1\",\"char\":\"🗡\",\"name\":\"dagger\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"2694 FE0F\",\"char\":\"⚔️\",\"name\":\"crossed swords\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"2694\",\"char\":\"⚔\",\"name\":\"crossed swords\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F52B\",\"char\":\"🔫\",\"name\":\"pistol\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1FA83\",\"char\":\"🪃\",\"name\":\"boomerang\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F3F9\",\"char\":\"🏹\",\"name\":\"bow and arrow\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F6E1 FE0F\",\"char\":\"🛡️\",\"name\":\"shield\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F6E1\",\"char\":\"🛡\",\"name\":\"shield\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1FA9A\",\"char\":\"🪚\",\"name\":\"carpentry saw\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F527\",\"char\":\"🔧\",\"name\":\"wrench\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1FA9B\",\"char\":\"🪛\",\"name\":\"screwdriver\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F529\",\"char\":\"🔩\",\"name\":\"nut and bolt\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"2699 FE0F\",\"char\":\"⚙️\",\"name\":\"gear\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"2699\",\"char\":\"⚙\",\"name\":\"gear\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F5DC FE0F\",\"char\":\"🗜️\",\"name\":\"clamp\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F5DC\",\"char\":\"🗜\",\"name\":\"clamp\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"2696 FE0F\",\"char\":\"⚖️\",\"name\":\"balance scale\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"2696\",\"char\":\"⚖\",\"name\":\"balance scale\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F9AF\",\"char\":\"🦯\",\"name\":\"white cane\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F517\",\"char\":\"🔗\",\"name\":\"link\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"26D3 FE0F\",\"char\":\"⛓️\",\"name\":\"chains\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"26D3\",\"char\":\"⛓\",\"name\":\"chains\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1FA9D\",\"char\":\"🪝\",\"name\":\"hook\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F9F0\",\"char\":\"🧰\",\"name\":\"toolbox\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1F9F2\",\"char\":\"🧲\",\"name\":\"magnet\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"1FA9C\",\"char\":\"🪜\",\"name\":\"ladder\",\"category\":\"Objects (tool)\",\"group\":\"Objects\",\"subgroup\":\"tool\"},{\"codes\":\"2697 FE0F\",\"char\":\"⚗️\",\"name\":\"alembic\",\"category\":\"Objects (science)\",\"group\":\"Objects\",\"subgroup\":\"science\"},{\"codes\":\"2697\",\"char\":\"⚗\",\"name\":\"alembic\",\"category\":\"Objects (science)\",\"group\":\"Objects\",\"subgroup\":\"science\"},{\"codes\":\"1F9EA\",\"char\":\"🧪\",\"name\":\"test tube\",\"category\":\"Objects (science)\",\"group\":\"Objects\",\"subgroup\":\"science\"},{\"codes\":\"1F9EB\",\"char\":\"🧫\",\"name\":\"petri dish\",\"category\":\"Objects (science)\",\"group\":\"Objects\",\"subgroup\":\"science\"},{\"codes\":\"1F9EC\",\"char\":\"🧬\",\"name\":\"dna\",\"category\":\"Objects (science)\",\"group\":\"Objects\",\"subgroup\":\"science\"},{\"codes\":\"1F52C\",\"char\":\"🔬\",\"name\":\"microscope\",\"category\":\"Objects (science)\",\"group\":\"Objects\",\"subgroup\":\"science\"},{\"codes\":\"1F52D\",\"char\":\"🔭\",\"name\":\"telescope\",\"category\":\"Objects (science)\",\"group\":\"Objects\",\"subgroup\":\"science\"},{\"codes\":\"1F4E1\",\"char\":\"📡\",\"name\":\"satellite antenna\",\"category\":\"Objects (science)\",\"group\":\"Objects\",\"subgroup\":\"science\"},{\"codes\":\"1F489\",\"char\":\"💉\",\"name\":\"syringe\",\"category\":\"Objects (medical)\",\"group\":\"Objects\",\"subgroup\":\"medical\"},{\"codes\":\"1FA78\",\"char\":\"🩸\",\"name\":\"drop of blood\",\"category\":\"Objects (medical)\",\"group\":\"Objects\",\"subgroup\":\"medical\"},{\"codes\":\"1F48A\",\"char\":\"💊\",\"name\":\"pill\",\"category\":\"Objects (medical)\",\"group\":\"Objects\",\"subgroup\":\"medical\"},{\"codes\":\"1FA79\",\"char\":\"🩹\",\"name\":\"adhesive bandage\",\"category\":\"Objects (medical)\",\"group\":\"Objects\",\"subgroup\":\"medical\"},{\"codes\":\"1FA7A\",\"char\":\"🩺\",\"name\":\"stethoscope\",\"category\":\"Objects (medical)\",\"group\":\"Objects\",\"subgroup\":\"medical\"},{\"codes\":\"1F6AA\",\"char\":\"🚪\",\"name\":\"door\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F6D7\",\"char\":\"🛗\",\"name\":\"elevator\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1FA9E\",\"char\":\"🪞\",\"name\":\"mirror\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1FA9F\",\"char\":\"🪟\",\"name\":\"window\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F6CF FE0F\",\"char\":\"🛏️\",\"name\":\"bed\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F6CF\",\"char\":\"🛏\",\"name\":\"bed\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F6CB FE0F\",\"char\":\"🛋️\",\"name\":\"couch and lamp\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F6CB\",\"char\":\"🛋\",\"name\":\"couch and lamp\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1FA91\",\"char\":\"🪑\",\"name\":\"chair\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F6BD\",\"char\":\"🚽\",\"name\":\"toilet\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1FAA0\",\"char\":\"🪠\",\"name\":\"plunger\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F6BF\",\"char\":\"🚿\",\"name\":\"shower\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F6C1\",\"char\":\"🛁\",\"name\":\"bathtub\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1FAA4\",\"char\":\"🪤\",\"name\":\"mouse trap\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1FA92\",\"char\":\"🪒\",\"name\":\"razor\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F9F4\",\"char\":\"🧴\",\"name\":\"lotion bottle\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F9F7\",\"char\":\"🧷\",\"name\":\"safety pin\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F9F9\",\"char\":\"🧹\",\"name\":\"broom\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F9FA\",\"char\":\"🧺\",\"name\":\"basket\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F9FB\",\"char\":\"🧻\",\"name\":\"roll of paper\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1FAA3\",\"char\":\"🪣\",\"name\":\"bucket\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F9FC\",\"char\":\"🧼\",\"name\":\"soap\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1FAA5\",\"char\":\"🪥\",\"name\":\"toothbrush\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F9FD\",\"char\":\"🧽\",\"name\":\"sponge\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F9EF\",\"char\":\"🧯\",\"name\":\"fire extinguisher\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F6D2\",\"char\":\"🛒\",\"name\":\"shopping cart\",\"category\":\"Objects (household)\",\"group\":\"Objects\",\"subgroup\":\"household\"},{\"codes\":\"1F6AC\",\"char\":\"🚬\",\"name\":\"cigarette\",\"category\":\"Objects (other-object)\",\"group\":\"Objects\",\"subgroup\":\"other-object\"},{\"codes\":\"26B0 FE0F\",\"char\":\"⚰️\",\"name\":\"coffin\",\"category\":\"Objects (other-object)\",\"group\":\"Objects\",\"subgroup\":\"other-object\"},{\"codes\":\"26B0\",\"char\":\"⚰\",\"name\":\"coffin\",\"category\":\"Objects (other-object)\",\"group\":\"Objects\",\"subgroup\":\"other-object\"},{\"codes\":\"1FAA6\",\"char\":\"🪦\",\"name\":\"headstone\",\"category\":\"Objects (other-object)\",\"group\":\"Objects\",\"subgroup\":\"other-object\"},{\"codes\":\"26B1 FE0F\",\"char\":\"⚱️\",\"name\":\"funeral urn\",\"category\":\"Objects (other-object)\",\"group\":\"Objects\",\"subgroup\":\"other-object\"},{\"codes\":\"26B1\",\"char\":\"⚱\",\"name\":\"funeral urn\",\"category\":\"Objects (other-object)\",\"group\":\"Objects\",\"subgroup\":\"other-object\"},{\"codes\":\"1F5FF\",\"char\":\"🗿\",\"name\":\"moai\",\"category\":\"Objects (other-object)\",\"group\":\"Objects\",\"subgroup\":\"other-object\"},{\"codes\":\"1FAA7\",\"char\":\"🪧\",\"name\":\"placard\",\"category\":\"Objects (other-object)\",\"group\":\"Objects\",\"subgroup\":\"other-object\"},{\"codes\":\"1F3E7\",\"char\":\"🏧\",\"name\":\"ATM sign\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"1F6AE\",\"char\":\"🚮\",\"name\":\"litter in bin sign\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"1F6B0\",\"char\":\"🚰\",\"name\":\"potable water\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"267F\",\"char\":\"♿\",\"name\":\"wheelchair symbol\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"1F6B9\",\"char\":\"🚹\",\"name\":\"men’s room\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"1F6BA\",\"char\":\"🚺\",\"name\":\"women’s room\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"1F6BB\",\"char\":\"🚻\",\"name\":\"restroom\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"1F6BC\",\"char\":\"🚼\",\"name\":\"baby symbol\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"1F6BE\",\"char\":\"🚾\",\"name\":\"water closet\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"1F6C2\",\"char\":\"🛂\",\"name\":\"passport control\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"1F6C3\",\"char\":\"🛃\",\"name\":\"customs\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"1F6C4\",\"char\":\"🛄\",\"name\":\"baggage claim\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"1F6C5\",\"char\":\"🛅\",\"name\":\"left luggage\",\"category\":\"Symbols (transport-sign)\",\"group\":\"Symbols\",\"subgroup\":\"transport-sign\"},{\"codes\":\"26A0 FE0F\",\"char\":\"⚠️\",\"name\":\"warning\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"26A0\",\"char\":\"⚠\",\"name\":\"warning\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"1F6B8\",\"char\":\"🚸\",\"name\":\"children crossing\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"26D4\",\"char\":\"⛔\",\"name\":\"no entry\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"1F6AB\",\"char\":\"🚫\",\"name\":\"prohibited\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"1F6B3\",\"char\":\"🚳\",\"name\":\"no bicycles\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"1F6AD\",\"char\":\"🚭\",\"name\":\"no smoking\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"1F6AF\",\"char\":\"🚯\",\"name\":\"no littering\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"1F6B1\",\"char\":\"🚱\",\"name\":\"non-potable water\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"1F6B7\",\"char\":\"🚷\",\"name\":\"no pedestrians\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"1F4F5\",\"char\":\"📵\",\"name\":\"no mobile phones\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"1F51E\",\"char\":\"🔞\",\"name\":\"no one under eighteen\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"2622 FE0F\",\"char\":\"☢️\",\"name\":\"radioactive\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"2622\",\"char\":\"☢\",\"name\":\"radioactive\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"2623 FE0F\",\"char\":\"☣️\",\"name\":\"biohazard\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"2623\",\"char\":\"☣\",\"name\":\"biohazard\",\"category\":\"Symbols (warning)\",\"group\":\"Symbols\",\"subgroup\":\"warning\"},{\"codes\":\"2B06 FE0F\",\"char\":\"⬆️\",\"name\":\"up arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2B06\",\"char\":\"⬆\",\"name\":\"up arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2197 FE0F\",\"char\":\"↗️\",\"name\":\"up-right arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2197\",\"char\":\"↗\",\"name\":\"up-right arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"27A1 FE0F\",\"char\":\"➡️\",\"name\":\"right arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"27A1\",\"char\":\"➡\",\"name\":\"right arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2198 FE0F\",\"char\":\"↘️\",\"name\":\"down-right arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2198\",\"char\":\"↘\",\"name\":\"down-right arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2B07 FE0F\",\"char\":\"⬇️\",\"name\":\"down arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2B07\",\"char\":\"⬇\",\"name\":\"down arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2199 FE0F\",\"char\":\"↙️\",\"name\":\"down-left arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2199\",\"char\":\"↙\",\"name\":\"down-left arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2B05 FE0F\",\"char\":\"⬅️\",\"name\":\"left arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2B05\",\"char\":\"⬅\",\"name\":\"left arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2196 FE0F\",\"char\":\"↖️\",\"name\":\"up-left arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2196\",\"char\":\"↖\",\"name\":\"up-left arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2195 FE0F\",\"char\":\"↕️\",\"name\":\"up-down arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2195\",\"char\":\"↕\",\"name\":\"up-down arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2194 FE0F\",\"char\":\"↔️\",\"name\":\"left-right arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2194\",\"char\":\"↔\",\"name\":\"left-right arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"21A9 FE0F\",\"char\":\"↩️\",\"name\":\"right arrow curving left\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"21A9\",\"char\":\"↩\",\"name\":\"right arrow curving left\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"21AA FE0F\",\"char\":\"↪️\",\"name\":\"left arrow curving right\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"21AA\",\"char\":\"↪\",\"name\":\"left arrow curving right\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2934 FE0F\",\"char\":\"⤴️\",\"name\":\"right arrow curving up\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2934\",\"char\":\"⤴\",\"name\":\"right arrow curving up\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2935 FE0F\",\"char\":\"⤵️\",\"name\":\"right arrow curving down\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"2935\",\"char\":\"⤵\",\"name\":\"right arrow curving down\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"1F503\",\"char\":\"🔃\",\"name\":\"clockwise vertical arrows\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"1F504\",\"char\":\"🔄\",\"name\":\"counterclockwise arrows button\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"1F519\",\"char\":\"🔙\",\"name\":\"BACK arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"1F51A\",\"char\":\"🔚\",\"name\":\"END arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"1F51B\",\"char\":\"🔛\",\"name\":\"ON! arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"1F51C\",\"char\":\"🔜\",\"name\":\"SOON arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"1F51D\",\"char\":\"🔝\",\"name\":\"TOP arrow\",\"category\":\"Symbols (arrow)\",\"group\":\"Symbols\",\"subgroup\":\"arrow\"},{\"codes\":\"1F6D0\",\"char\":\"🛐\",\"name\":\"place of worship\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"269B FE0F\",\"char\":\"⚛️\",\"name\":\"atom symbol\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"269B\",\"char\":\"⚛\",\"name\":\"atom symbol\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"1F549 FE0F\",\"char\":\"🕉️\",\"name\":\"om\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"1F549\",\"char\":\"🕉\",\"name\":\"om\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"2721 FE0F\",\"char\":\"✡️\",\"name\":\"star of David\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"2721\",\"char\":\"✡\",\"name\":\"star of David\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"2638 FE0F\",\"char\":\"☸️\",\"name\":\"wheel of dharma\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"2638\",\"char\":\"☸\",\"name\":\"wheel of dharma\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"262F FE0F\",\"char\":\"☯️\",\"name\":\"yin yang\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"262F\",\"char\":\"☯\",\"name\":\"yin yang\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"271D FE0F\",\"char\":\"✝️\",\"name\":\"latin cross\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"271D\",\"char\":\"✝\",\"name\":\"latin cross\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"2626 FE0F\",\"char\":\"☦️\",\"name\":\"orthodox cross\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"2626\",\"char\":\"☦\",\"name\":\"orthodox cross\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"262A FE0F\",\"char\":\"☪️\",\"name\":\"star and crescent\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"262A\",\"char\":\"☪\",\"name\":\"star and crescent\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"262E FE0F\",\"char\":\"☮️\",\"name\":\"peace symbol\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"262E\",\"char\":\"☮\",\"name\":\"peace symbol\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"1F54E\",\"char\":\"🕎\",\"name\":\"menorah\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"1F52F\",\"char\":\"🔯\",\"name\":\"dotted six-pointed star\",\"category\":\"Symbols (religion)\",\"group\":\"Symbols\",\"subgroup\":\"religion\"},{\"codes\":\"2648\",\"char\":\"♈\",\"name\":\"Aries\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"2649\",\"char\":\"♉\",\"name\":\"Taurus\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"264A\",\"char\":\"♊\",\"name\":\"Gemini\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"264B\",\"char\":\"♋\",\"name\":\"Cancer\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"264C\",\"char\":\"♌\",\"name\":\"Leo\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"264D\",\"char\":\"♍\",\"name\":\"Virgo\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"264E\",\"char\":\"♎\",\"name\":\"Libra\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"264F\",\"char\":\"♏\",\"name\":\"Scorpio\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"2650\",\"char\":\"♐\",\"name\":\"Sagittarius\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"2651\",\"char\":\"♑\",\"name\":\"Capricorn\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"2652\",\"char\":\"♒\",\"name\":\"Aquarius\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"2653\",\"char\":\"♓\",\"name\":\"Pisces\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"26CE\",\"char\":\"⛎\",\"name\":\"Ophiuchus\",\"category\":\"Symbols (zodiac)\",\"group\":\"Symbols\",\"subgroup\":\"zodiac\"},{\"codes\":\"1F500\",\"char\":\"🔀\",\"name\":\"shuffle tracks button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"1F501\",\"char\":\"🔁\",\"name\":\"repeat button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"1F502\",\"char\":\"🔂\",\"name\":\"repeat single button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"25B6 FE0F\",\"char\":\"▶️\",\"name\":\"play button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"25B6\",\"char\":\"▶\",\"name\":\"play button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23E9\",\"char\":\"⏩\",\"name\":\"fast-forward button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23ED FE0F\",\"char\":\"⏭️\",\"name\":\"next track button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23ED\",\"char\":\"⏭\",\"name\":\"next track button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23EF FE0F\",\"char\":\"⏯️\",\"name\":\"play or pause button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23EF\",\"char\":\"⏯\",\"name\":\"play or pause button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"25C0 FE0F\",\"char\":\"◀️\",\"name\":\"reverse button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"25C0\",\"char\":\"◀\",\"name\":\"reverse button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23EA\",\"char\":\"⏪\",\"name\":\"fast reverse button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23EE FE0F\",\"char\":\"⏮️\",\"name\":\"last track button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23EE\",\"char\":\"⏮\",\"name\":\"last track button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"1F53C\",\"char\":\"🔼\",\"name\":\"upwards button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23EB\",\"char\":\"⏫\",\"name\":\"fast up button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"1F53D\",\"char\":\"🔽\",\"name\":\"downwards button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23EC\",\"char\":\"⏬\",\"name\":\"fast down button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23F8 FE0F\",\"char\":\"⏸️\",\"name\":\"pause button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23F8\",\"char\":\"⏸\",\"name\":\"pause button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23F9 FE0F\",\"char\":\"⏹️\",\"name\":\"stop button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23F9\",\"char\":\"⏹\",\"name\":\"stop button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23FA FE0F\",\"char\":\"⏺️\",\"name\":\"record button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23FA\",\"char\":\"⏺\",\"name\":\"record button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23CF FE0F\",\"char\":\"⏏️\",\"name\":\"eject button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"23CF\",\"char\":\"⏏\",\"name\":\"eject button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"1F3A6\",\"char\":\"🎦\",\"name\":\"cinema\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"1F505\",\"char\":\"🔅\",\"name\":\"dim button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"1F506\",\"char\":\"🔆\",\"name\":\"bright button\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"1F4F6\",\"char\":\"📶\",\"name\":\"antenna bars\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"1F4F3\",\"char\":\"📳\",\"name\":\"vibration mode\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"1F4F4\",\"char\":\"📴\",\"name\":\"mobile phone off\",\"category\":\"Symbols (av-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"av-symbol\"},{\"codes\":\"2640 FE0F\",\"char\":\"♀️\",\"name\":\"female sign\",\"category\":\"Symbols (gender)\",\"group\":\"Symbols\",\"subgroup\":\"gender\"},{\"codes\":\"2640\",\"char\":\"♀\",\"name\":\"female sign\",\"category\":\"Symbols (gender)\",\"group\":\"Symbols\",\"subgroup\":\"gender\"},{\"codes\":\"2642 FE0F\",\"char\":\"♂️\",\"name\":\"male sign\",\"category\":\"Symbols (gender)\",\"group\":\"Symbols\",\"subgroup\":\"gender\"},{\"codes\":\"2642\",\"char\":\"♂\",\"name\":\"male sign\",\"category\":\"Symbols (gender)\",\"group\":\"Symbols\",\"subgroup\":\"gender\"},{\"codes\":\"26A7 FE0F\",\"char\":\"⚧️\",\"name\":\"transgender symbol\",\"category\":\"Symbols (gender)\",\"group\":\"Symbols\",\"subgroup\":\"gender\"},{\"codes\":\"26A7\",\"char\":\"⚧\",\"name\":\"transgender symbol\",\"category\":\"Symbols (gender)\",\"group\":\"Symbols\",\"subgroup\":\"gender\"},{\"codes\":\"2716 FE0F\",\"char\":\"✖️\",\"name\":\"multiply\",\"category\":\"Symbols (math)\",\"group\":\"Symbols\",\"subgroup\":\"math\"},{\"codes\":\"2716\",\"char\":\"✖\",\"name\":\"multiply\",\"category\":\"Symbols (math)\",\"group\":\"Symbols\",\"subgroup\":\"math\"},{\"codes\":\"2795\",\"char\":\"➕\",\"name\":\"plus\",\"category\":\"Symbols (math)\",\"group\":\"Symbols\",\"subgroup\":\"math\"},{\"codes\":\"2796\",\"char\":\"➖\",\"name\":\"minus\",\"category\":\"Symbols (math)\",\"group\":\"Symbols\",\"subgroup\":\"math\"},{\"codes\":\"2797\",\"char\":\"➗\",\"name\":\"divide\",\"category\":\"Symbols (math)\",\"group\":\"Symbols\",\"subgroup\":\"math\"},{\"codes\":\"267E FE0F\",\"char\":\"♾️\",\"name\":\"infinity\",\"category\":\"Symbols (math)\",\"group\":\"Symbols\",\"subgroup\":\"math\"},{\"codes\":\"267E\",\"char\":\"♾\",\"name\":\"infinity\",\"category\":\"Symbols (math)\",\"group\":\"Symbols\",\"subgroup\":\"math\"},{\"codes\":\"203C FE0F\",\"char\":\"‼️\",\"name\":\"double exclamation mark\",\"category\":\"Symbols (punctuation)\",\"group\":\"Symbols\",\"subgroup\":\"punctuation\"},{\"codes\":\"203C\",\"char\":\"‼\",\"name\":\"double exclamation mark\",\"category\":\"Symbols (punctuation)\",\"group\":\"Symbols\",\"subgroup\":\"punctuation\"},{\"codes\":\"2049 FE0F\",\"char\":\"⁉️\",\"name\":\"exclamation question mark\",\"category\":\"Symbols (punctuation)\",\"group\":\"Symbols\",\"subgroup\":\"punctuation\"},{\"codes\":\"2049\",\"char\":\"⁉\",\"name\":\"exclamation question mark\",\"category\":\"Symbols (punctuation)\",\"group\":\"Symbols\",\"subgroup\":\"punctuation\"},{\"codes\":\"2753\",\"char\":\"❓\",\"name\":\"question mark\",\"category\":\"Symbols (punctuation)\",\"group\":\"Symbols\",\"subgroup\":\"punctuation\"},{\"codes\":\"2754\",\"char\":\"❔\",\"name\":\"white question mark\",\"category\":\"Symbols (punctuation)\",\"group\":\"Symbols\",\"subgroup\":\"punctuation\"},{\"codes\":\"2755\",\"char\":\"❕\",\"name\":\"white exclamation mark\",\"category\":\"Symbols (punctuation)\",\"group\":\"Symbols\",\"subgroup\":\"punctuation\"},{\"codes\":\"2757\",\"char\":\"❗\",\"name\":\"exclamation mark\",\"category\":\"Symbols (punctuation)\",\"group\":\"Symbols\",\"subgroup\":\"punctuation\"},{\"codes\":\"3030 FE0F\",\"char\":\"〰️\",\"name\":\"wavy dash\",\"category\":\"Symbols (punctuation)\",\"group\":\"Symbols\",\"subgroup\":\"punctuation\"},{\"codes\":\"3030\",\"char\":\"〰\",\"name\":\"wavy dash\",\"category\":\"Symbols (punctuation)\",\"group\":\"Symbols\",\"subgroup\":\"punctuation\"},{\"codes\":\"1F4B1\",\"char\":\"💱\",\"name\":\"currency exchange\",\"category\":\"Symbols (currency)\",\"group\":\"Symbols\",\"subgroup\":\"currency\"},{\"codes\":\"1F4B2\",\"char\":\"💲\",\"name\":\"heavy dollar sign\",\"category\":\"Symbols (currency)\",\"group\":\"Symbols\",\"subgroup\":\"currency\"},{\"codes\":\"2695 FE0F\",\"char\":\"⚕️\",\"name\":\"medical symbol\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2695\",\"char\":\"⚕\",\"name\":\"medical symbol\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"267B FE0F\",\"char\":\"♻️\",\"name\":\"recycling symbol\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"267B\",\"char\":\"♻\",\"name\":\"recycling symbol\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"269C FE0F\",\"char\":\"⚜️\",\"name\":\"fleur-de-lis\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"269C\",\"char\":\"⚜\",\"name\":\"fleur-de-lis\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"1F531\",\"char\":\"🔱\",\"name\":\"trident emblem\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"1F4DB\",\"char\":\"📛\",\"name\":\"name badge\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"1F530\",\"char\":\"🔰\",\"name\":\"Japanese symbol for beginner\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2B55\",\"char\":\"⭕\",\"name\":\"hollow red circle\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2705\",\"char\":\"✅\",\"name\":\"check mark button\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2611 FE0F\",\"char\":\"☑️\",\"name\":\"check box with check\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2611\",\"char\":\"☑\",\"name\":\"check box with check\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2714 FE0F\",\"char\":\"✔️\",\"name\":\"check mark\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2714\",\"char\":\"✔\",\"name\":\"check mark\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"274C\",\"char\":\"❌\",\"name\":\"cross mark\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"274E\",\"char\":\"❎\",\"name\":\"cross mark button\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"27B0\",\"char\":\"➰\",\"name\":\"curly loop\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"27BF\",\"char\":\"➿\",\"name\":\"double curly loop\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"303D FE0F\",\"char\":\"〽️\",\"name\":\"part alternation mark\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"303D\",\"char\":\"〽\",\"name\":\"part alternation mark\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2733 FE0F\",\"char\":\"✳️\",\"name\":\"eight-spoked asterisk\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2733\",\"char\":\"✳\",\"name\":\"eight-spoked asterisk\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2734 FE0F\",\"char\":\"✴️\",\"name\":\"eight-pointed star\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2734\",\"char\":\"✴\",\"name\":\"eight-pointed star\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2747 FE0F\",\"char\":\"❇️\",\"name\":\"sparkle\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2747\",\"char\":\"❇\",\"name\":\"sparkle\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"00A9 FE0F\",\"char\":\"©️\",\"name\":\"copyright\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"00A9\",\"char\":\"©\",\"name\":\"copyright\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"00AE FE0F\",\"char\":\"®️\",\"name\":\"registered\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"00AE\",\"char\":\"®\",\"name\":\"registered\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2122 FE0F\",\"char\":\"™️\",\"name\":\"trade mark\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"2122\",\"char\":\"™\",\"name\":\"trade mark\",\"category\":\"Symbols (other-symbol)\",\"group\":\"Symbols\",\"subgroup\":\"other-symbol\"},{\"codes\":\"0023 FE0F 20E3\",\"char\":\"#️⃣\",\"name\":\"keycap: #\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0023 20E3\",\"char\":\"#⃣\",\"name\":\"keycap: #\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"002A FE0F 20E3\",\"char\":\"*️⃣\",\"name\":\"keycap: *\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"002A 20E3\",\"char\":\"*⃣\",\"name\":\"keycap: *\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0030 FE0F 20E3\",\"char\":\"0️⃣\",\"name\":\"keycap: 0\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0030 20E3\",\"char\":\"0⃣\",\"name\":\"keycap: 0\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0031 FE0F 20E3\",\"char\":\"1️⃣\",\"name\":\"keycap: 1\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0031 20E3\",\"char\":\"1⃣\",\"name\":\"keycap: 1\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0032 FE0F 20E3\",\"char\":\"2️⃣\",\"name\":\"keycap: 2\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0032 20E3\",\"char\":\"2⃣\",\"name\":\"keycap: 2\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0033 FE0F 20E3\",\"char\":\"3️⃣\",\"name\":\"keycap: 3\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0033 20E3\",\"char\":\"3⃣\",\"name\":\"keycap: 3\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0034 FE0F 20E3\",\"char\":\"4️⃣\",\"name\":\"keycap: 4\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0034 20E3\",\"char\":\"4⃣\",\"name\":\"keycap: 4\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0035 FE0F 20E3\",\"char\":\"5️⃣\",\"name\":\"keycap: 5\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0035 20E3\",\"char\":\"5⃣\",\"name\":\"keycap: 5\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0036 FE0F 20E3\",\"char\":\"6️⃣\",\"name\":\"keycap: 6\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0036 20E3\",\"char\":\"6⃣\",\"name\":\"keycap: 6\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0037 FE0F 20E3\",\"char\":\"7️⃣\",\"name\":\"keycap: 7\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0037 20E3\",\"char\":\"7⃣\",\"name\":\"keycap: 7\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0038 FE0F 20E3\",\"char\":\"8️⃣\",\"name\":\"keycap: 8\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0038 20E3\",\"char\":\"8⃣\",\"name\":\"keycap: 8\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0039 FE0F 20E3\",\"char\":\"9️⃣\",\"name\":\"keycap: 9\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"0039 20E3\",\"char\":\"9⃣\",\"name\":\"keycap: 9\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"1F51F\",\"char\":\"🔟\",\"name\":\"keycap: 10\",\"category\":\"Symbols (keycap)\",\"group\":\"Symbols\",\"subgroup\":\"keycap\"},{\"codes\":\"1F520\",\"char\":\"🔠\",\"name\":\"input latin uppercase\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F521\",\"char\":\"🔡\",\"name\":\"input latin lowercase\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F522\",\"char\":\"🔢\",\"name\":\"input numbers\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F523\",\"char\":\"🔣\",\"name\":\"input symbols\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F524\",\"char\":\"🔤\",\"name\":\"input latin letters\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F170 FE0F\",\"char\":\"🅰️\",\"name\":\"A button (blood type)\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F170\",\"char\":\"🅰\",\"name\":\"A button (blood type)\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F18E\",\"char\":\"🆎\",\"name\":\"AB button (blood type)\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F171 FE0F\",\"char\":\"🅱️\",\"name\":\"B button (blood type)\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F171\",\"char\":\"🅱\",\"name\":\"B button (blood type)\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F191\",\"char\":\"🆑\",\"name\":\"CL button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F192\",\"char\":\"🆒\",\"name\":\"COOL button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F193\",\"char\":\"🆓\",\"name\":\"FREE button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"2139 FE0F\",\"char\":\"ℹ️\",\"name\":\"information\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"2139\",\"char\":\"ℹ\",\"name\":\"information\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F194\",\"char\":\"🆔\",\"name\":\"ID button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"24C2 FE0F\",\"char\":\"Ⓜ️\",\"name\":\"circled M\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"24C2\",\"char\":\"Ⓜ\",\"name\":\"circled M\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F195\",\"char\":\"🆕\",\"name\":\"NEW button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F196\",\"char\":\"🆖\",\"name\":\"NG button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F17E FE0F\",\"char\":\"🅾️\",\"name\":\"O button (blood type)\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F17E\",\"char\":\"🅾\",\"name\":\"O button (blood type)\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F197\",\"char\":\"🆗\",\"name\":\"OK button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F17F FE0F\",\"char\":\"🅿️\",\"name\":\"P button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F17F\",\"char\":\"🅿\",\"name\":\"P button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F198\",\"char\":\"🆘\",\"name\":\"SOS button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F199\",\"char\":\"🆙\",\"name\":\"UP! button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F19A\",\"char\":\"🆚\",\"name\":\"VS button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F201\",\"char\":\"🈁\",\"name\":\"Japanese “here” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F202 FE0F\",\"char\":\"🈂️\",\"name\":\"Japanese “service charge” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F202\",\"char\":\"🈂\",\"name\":\"Japanese “service charge” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F237 FE0F\",\"char\":\"🈷️\",\"name\":\"Japanese “monthly amount” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F237\",\"char\":\"🈷\",\"name\":\"Japanese “monthly amount” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F236\",\"char\":\"🈶\",\"name\":\"Japanese “not free of charge” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F22F\",\"char\":\"🈯\",\"name\":\"Japanese “reserved” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F250\",\"char\":\"🉐\",\"name\":\"Japanese “bargain” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F239\",\"char\":\"🈹\",\"name\":\"Japanese “discount” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F21A\",\"char\":\"🈚\",\"name\":\"Japanese “free of charge” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F232\",\"char\":\"🈲\",\"name\":\"Japanese “prohibited” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F251\",\"char\":\"🉑\",\"name\":\"Japanese “acceptable” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F238\",\"char\":\"🈸\",\"name\":\"Japanese “application” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F234\",\"char\":\"🈴\",\"name\":\"Japanese “passing grade” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F233\",\"char\":\"🈳\",\"name\":\"Japanese “vacancy” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"3297 FE0F\",\"char\":\"㊗️\",\"name\":\"Japanese “congratulations” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"3297\",\"char\":\"㊗\",\"name\":\"Japanese “congratulations” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"3299 FE0F\",\"char\":\"㊙️\",\"name\":\"Japanese “secret” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"3299\",\"char\":\"㊙\",\"name\":\"Japanese “secret” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F23A\",\"char\":\"🈺\",\"name\":\"Japanese “open for business” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F235\",\"char\":\"🈵\",\"name\":\"Japanese “no vacancy” button\",\"category\":\"Symbols (alphanum)\",\"group\":\"Symbols\",\"subgroup\":\"alphanum\"},{\"codes\":\"1F534\",\"char\":\"🔴\",\"name\":\"red circle\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7E0\",\"char\":\"🟠\",\"name\":\"orange circle\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7E1\",\"char\":\"🟡\",\"name\":\"yellow circle\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7E2\",\"char\":\"🟢\",\"name\":\"green circle\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F535\",\"char\":\"🔵\",\"name\":\"blue circle\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7E3\",\"char\":\"🟣\",\"name\":\"purple circle\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7E4\",\"char\":\"🟤\",\"name\":\"brown circle\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"26AB\",\"char\":\"⚫\",\"name\":\"black circle\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"26AA\",\"char\":\"⚪\",\"name\":\"white circle\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7E5\",\"char\":\"🟥\",\"name\":\"red square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7E7\",\"char\":\"🟧\",\"name\":\"orange square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7E8\",\"char\":\"🟨\",\"name\":\"yellow square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7E9\",\"char\":\"🟩\",\"name\":\"green square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7E6\",\"char\":\"🟦\",\"name\":\"blue square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7EA\",\"char\":\"🟪\",\"name\":\"purple square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F7EB\",\"char\":\"🟫\",\"name\":\"brown square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"2B1B\",\"char\":\"⬛\",\"name\":\"black large square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"2B1C\",\"char\":\"⬜\",\"name\":\"white large square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"25FC FE0F\",\"char\":\"◼️\",\"name\":\"black medium square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"25FC\",\"char\":\"◼\",\"name\":\"black medium square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"25FB FE0F\",\"char\":\"◻️\",\"name\":\"white medium square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"25FB\",\"char\":\"◻\",\"name\":\"white medium square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"25FE\",\"char\":\"◾\",\"name\":\"black medium-small square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"25FD\",\"char\":\"◽\",\"name\":\"white medium-small square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"25AA FE0F\",\"char\":\"▪️\",\"name\":\"black small square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"25AA\",\"char\":\"▪\",\"name\":\"black small square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"25AB FE0F\",\"char\":\"▫️\",\"name\":\"white small square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"25AB\",\"char\":\"▫\",\"name\":\"white small square\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F536\",\"char\":\"🔶\",\"name\":\"large orange diamond\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F537\",\"char\":\"🔷\",\"name\":\"large blue diamond\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F538\",\"char\":\"🔸\",\"name\":\"small orange diamond\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F539\",\"char\":\"🔹\",\"name\":\"small blue diamond\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F53A\",\"char\":\"🔺\",\"name\":\"red triangle pointed up\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F53B\",\"char\":\"🔻\",\"name\":\"red triangle pointed down\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F4A0\",\"char\":\"💠\",\"name\":\"diamond with a dot\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F518\",\"char\":\"🔘\",\"name\":\"radio button\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F533\",\"char\":\"🔳\",\"name\":\"white square button\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F532\",\"char\":\"🔲\",\"name\":\"black square button\",\"category\":\"Symbols (geometric)\",\"group\":\"Symbols\",\"subgroup\":\"geometric\"},{\"codes\":\"1F3C1\",\"char\":\"🏁\",\"name\":\"chequered flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F6A9\",\"char\":\"🚩\",\"name\":\"triangular flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F38C\",\"char\":\"🎌\",\"name\":\"crossed flags\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F3F4\",\"char\":\"🏴\",\"name\":\"black flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F3F3 FE0F\",\"char\":\"🏳️\",\"name\":\"white flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F3F3\",\"char\":\"🏳\",\"name\":\"white flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F3F3 FE0F 200D 1F308\",\"char\":\"🏳️‍🌈\",\"name\":\"rainbow flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F3F3 200D 1F308\",\"char\":\"🏳‍🌈\",\"name\":\"rainbow flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F3F3 FE0F 200D 26A7 FE0F\",\"char\":\"🏳️‍⚧️\",\"name\":\"transgender flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F3F3 200D 26A7 FE0F\",\"char\":\"🏳‍⚧️\",\"name\":\"transgender flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F3F3 FE0F 200D 26A7\",\"char\":\"🏳️‍⚧\",\"name\":\"transgender flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F3F3 200D 26A7\",\"char\":\"🏳‍⚧\",\"name\":\"transgender flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F3F4 200D 2620 FE0F\",\"char\":\"🏴‍☠️\",\"name\":\"pirate flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F3F4 200D 2620\",\"char\":\"🏴‍☠\",\"name\":\"pirate flag\",\"category\":\"Flags (flag)\",\"group\":\"Flags\",\"subgroup\":\"flag\"},{\"codes\":\"1F1E6 1F1E8\",\"char\":\"🇦🇨\",\"name\":\"flag: Ascension Island\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1E9\",\"char\":\"🇦🇩\",\"name\":\"flag: Andorra\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1EA\",\"char\":\"🇦🇪\",\"name\":\"flag: United Arab Emirates\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1EB\",\"char\":\"🇦🇫\",\"name\":\"flag: Afghanistan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1EC\",\"char\":\"🇦🇬\",\"name\":\"flag: Antigua & Barbuda\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1EE\",\"char\":\"🇦🇮\",\"name\":\"flag: Anguilla\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1F1\",\"char\":\"🇦🇱\",\"name\":\"flag: Albania\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1F2\",\"char\":\"🇦🇲\",\"name\":\"flag: Armenia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1F4\",\"char\":\"🇦🇴\",\"name\":\"flag: Angola\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1F6\",\"char\":\"🇦🇶\",\"name\":\"flag: Antarctica\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1F7\",\"char\":\"🇦🇷\",\"name\":\"flag: Argentina\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1F8\",\"char\":\"🇦🇸\",\"name\":\"flag: American Samoa\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1F9\",\"char\":\"🇦🇹\",\"name\":\"flag: Austria\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1FA\",\"char\":\"🇦🇺\",\"name\":\"flag: Australia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1FC\",\"char\":\"🇦🇼\",\"name\":\"flag: Aruba\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1FD\",\"char\":\"🇦🇽\",\"name\":\"flag: Åland Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E6 1F1FF\",\"char\":\"🇦🇿\",\"name\":\"flag: Azerbaijan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1E6\",\"char\":\"🇧🇦\",\"name\":\"flag: Bosnia & Herzegovina\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1E7\",\"char\":\"🇧🇧\",\"name\":\"flag: Barbados\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1E9\",\"char\":\"🇧🇩\",\"name\":\"flag: Bangladesh\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1EA\",\"char\":\"🇧🇪\",\"name\":\"flag: Belgium\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1EB\",\"char\":\"🇧🇫\",\"name\":\"flag: Burkina Faso\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1EC\",\"char\":\"🇧🇬\",\"name\":\"flag: Bulgaria\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1ED\",\"char\":\"🇧🇭\",\"name\":\"flag: Bahrain\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1EE\",\"char\":\"🇧🇮\",\"name\":\"flag: Burundi\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1EF\",\"char\":\"🇧🇯\",\"name\":\"flag: Benin\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1F1\",\"char\":\"🇧🇱\",\"name\":\"flag: St. Barthélemy\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1F2\",\"char\":\"🇧🇲\",\"name\":\"flag: Bermuda\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1F3\",\"char\":\"🇧🇳\",\"name\":\"flag: Brunei\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1F4\",\"char\":\"🇧🇴\",\"name\":\"flag: Bolivia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1F6\",\"char\":\"🇧🇶\",\"name\":\"flag: Caribbean Netherlands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1F7\",\"char\":\"🇧🇷\",\"name\":\"flag: Brazil\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1F8\",\"char\":\"🇧🇸\",\"name\":\"flag: Bahamas\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1F9\",\"char\":\"🇧🇹\",\"name\":\"flag: Bhutan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1FB\",\"char\":\"🇧🇻\",\"name\":\"flag: Bouvet Island\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1FC\",\"char\":\"🇧🇼\",\"name\":\"flag: Botswana\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1FE\",\"char\":\"🇧🇾\",\"name\":\"flag: Belarus\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E7 1F1FF\",\"char\":\"🇧🇿\",\"name\":\"flag: Belize\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1E6\",\"char\":\"🇨🇦\",\"name\":\"flag: Canada\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1E8\",\"char\":\"🇨🇨\",\"name\":\"flag: Cocos (Keeling) Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1E9\",\"char\":\"🇨🇩\",\"name\":\"flag: Congo - Kinshasa\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1EB\",\"char\":\"🇨🇫\",\"name\":\"flag: Central African Republic\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1EC\",\"char\":\"🇨🇬\",\"name\":\"flag: Congo - Brazzaville\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1ED\",\"char\":\"🇨🇭\",\"name\":\"flag: Switzerland\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1EE\",\"char\":\"🇨🇮\",\"name\":\"flag: Côte d’Ivoire\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1F0\",\"char\":\"🇨🇰\",\"name\":\"flag: Cook Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1F1\",\"char\":\"🇨🇱\",\"name\":\"flag: Chile\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1F2\",\"char\":\"🇨🇲\",\"name\":\"flag: Cameroon\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1F3\",\"char\":\"🇨🇳\",\"name\":\"flag: China\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1F4\",\"char\":\"🇨🇴\",\"name\":\"flag: Colombia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1F5\",\"char\":\"🇨🇵\",\"name\":\"flag: Clipperton Island\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1F7\",\"char\":\"🇨🇷\",\"name\":\"flag: Costa Rica\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1FA\",\"char\":\"🇨🇺\",\"name\":\"flag: Cuba\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1FB\",\"char\":\"🇨🇻\",\"name\":\"flag: Cape Verde\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1FC\",\"char\":\"🇨🇼\",\"name\":\"flag: Curaçao\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1FD\",\"char\":\"🇨🇽\",\"name\":\"flag: Christmas Island\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1FE\",\"char\":\"🇨🇾\",\"name\":\"flag: Cyprus\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E8 1F1FF\",\"char\":\"🇨🇿\",\"name\":\"flag: Czechia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E9 1F1EA\",\"char\":\"🇩🇪\",\"name\":\"flag: Germany\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E9 1F1EC\",\"char\":\"🇩🇬\",\"name\":\"flag: Diego Garcia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E9 1F1EF\",\"char\":\"🇩🇯\",\"name\":\"flag: Djibouti\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E9 1F1F0\",\"char\":\"🇩🇰\",\"name\":\"flag: Denmark\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E9 1F1F2\",\"char\":\"🇩🇲\",\"name\":\"flag: Dominica\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E9 1F1F4\",\"char\":\"🇩🇴\",\"name\":\"flag: Dominican Republic\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1E9 1F1FF\",\"char\":\"🇩🇿\",\"name\":\"flag: Algeria\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EA 1F1E6\",\"char\":\"🇪🇦\",\"name\":\"flag: Ceuta & Melilla\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EA 1F1E8\",\"char\":\"🇪🇨\",\"name\":\"flag: Ecuador\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EA 1F1EA\",\"char\":\"🇪🇪\",\"name\":\"flag: Estonia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EA 1F1EC\",\"char\":\"🇪🇬\",\"name\":\"flag: Egypt\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EA 1F1ED\",\"char\":\"🇪🇭\",\"name\":\"flag: Western Sahara\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EA 1F1F7\",\"char\":\"🇪🇷\",\"name\":\"flag: Eritrea\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EA 1F1F8\",\"char\":\"🇪🇸\",\"name\":\"flag: Spain\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EA 1F1F9\",\"char\":\"🇪🇹\",\"name\":\"flag: Ethiopia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EA 1F1FA\",\"char\":\"🇪🇺\",\"name\":\"flag: European Union\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EB 1F1EE\",\"char\":\"🇫🇮\",\"name\":\"flag: Finland\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EB 1F1EF\",\"char\":\"🇫🇯\",\"name\":\"flag: Fiji\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EB 1F1F0\",\"char\":\"🇫🇰\",\"name\":\"flag: Falkland Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EB 1F1F2\",\"char\":\"🇫🇲\",\"name\":\"flag: Micronesia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EB 1F1F4\",\"char\":\"🇫🇴\",\"name\":\"flag: Faroe Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EB 1F1F7\",\"char\":\"🇫🇷\",\"name\":\"flag: France\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1E6\",\"char\":\"🇬🇦\",\"name\":\"flag: Gabon\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1E7\",\"char\":\"🇬🇧\",\"name\":\"flag: United Kingdom\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1E9\",\"char\":\"🇬🇩\",\"name\":\"flag: Grenada\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1EA\",\"char\":\"🇬🇪\",\"name\":\"flag: Georgia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1EB\",\"char\":\"🇬🇫\",\"name\":\"flag: French Guiana\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1EC\",\"char\":\"🇬🇬\",\"name\":\"flag: Guernsey\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1ED\",\"char\":\"🇬🇭\",\"name\":\"flag: Ghana\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1EE\",\"char\":\"🇬🇮\",\"name\":\"flag: Gibraltar\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1F1\",\"char\":\"🇬🇱\",\"name\":\"flag: Greenland\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1F2\",\"char\":\"🇬🇲\",\"name\":\"flag: Gambia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1F3\",\"char\":\"🇬🇳\",\"name\":\"flag: Guinea\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1F5\",\"char\":\"🇬🇵\",\"name\":\"flag: Guadeloupe\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1F6\",\"char\":\"🇬🇶\",\"name\":\"flag: Equatorial Guinea\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1F7\",\"char\":\"🇬🇷\",\"name\":\"flag: Greece\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1F8\",\"char\":\"🇬🇸\",\"name\":\"flag: South Georgia & South Sandwich Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1F9\",\"char\":\"🇬🇹\",\"name\":\"flag: Guatemala\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1FA\",\"char\":\"🇬🇺\",\"name\":\"flag: Guam\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1FC\",\"char\":\"🇬🇼\",\"name\":\"flag: Guinea-Bissau\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EC 1F1FE\",\"char\":\"🇬🇾\",\"name\":\"flag: Guyana\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1ED 1F1F0\",\"char\":\"🇭🇰\",\"name\":\"flag: Hong Kong SAR China\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1ED 1F1F2\",\"char\":\"🇭🇲\",\"name\":\"flag: Heard & McDonald Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1ED 1F1F3\",\"char\":\"🇭🇳\",\"name\":\"flag: Honduras\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1ED 1F1F7\",\"char\":\"🇭🇷\",\"name\":\"flag: Croatia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1ED 1F1F9\",\"char\":\"🇭🇹\",\"name\":\"flag: Haiti\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1ED 1F1FA\",\"char\":\"🇭🇺\",\"name\":\"flag: Hungary\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EE 1F1E8\",\"char\":\"🇮🇨\",\"name\":\"flag: Canary Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EE 1F1E9\",\"char\":\"🇮🇩\",\"name\":\"flag: Indonesia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EE 1F1EA\",\"char\":\"🇮🇪\",\"name\":\"flag: Ireland\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EE 1F1F1\",\"char\":\"🇮🇱\",\"name\":\"flag: Israel\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EE 1F1F2\",\"char\":\"🇮🇲\",\"name\":\"flag: Isle of Man\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EE 1F1F3\",\"char\":\"🇮🇳\",\"name\":\"flag: India\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EE 1F1F4\",\"char\":\"🇮🇴\",\"name\":\"flag: British Indian Ocean Territory\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EE 1F1F6\",\"char\":\"🇮🇶\",\"name\":\"flag: Iraq\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EE 1F1F7\",\"char\":\"🇮🇷\",\"name\":\"flag: Iran\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EE 1F1F8\",\"char\":\"🇮🇸\",\"name\":\"flag: Iceland\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EE 1F1F9\",\"char\":\"🇮🇹\",\"name\":\"flag: Italy\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EF 1F1EA\",\"char\":\"🇯🇪\",\"name\":\"flag: Jersey\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EF 1F1F2\",\"char\":\"🇯🇲\",\"name\":\"flag: Jamaica\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EF 1F1F4\",\"char\":\"🇯🇴\",\"name\":\"flag: Jordan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1EF 1F1F5\",\"char\":\"🇯🇵\",\"name\":\"flag: Japan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F0 1F1EA\",\"char\":\"🇰🇪\",\"name\":\"flag: Kenya\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F0 1F1EC\",\"char\":\"🇰🇬\",\"name\":\"flag: Kyrgyzstan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F0 1F1ED\",\"char\":\"🇰🇭\",\"name\":\"flag: Cambodia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F0 1F1EE\",\"char\":\"🇰🇮\",\"name\":\"flag: Kiribati\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F0 1F1F2\",\"char\":\"🇰🇲\",\"name\":\"flag: Comoros\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F0 1F1F3\",\"char\":\"🇰🇳\",\"name\":\"flag: St. Kitts & Nevis\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F0 1F1F5\",\"char\":\"🇰🇵\",\"name\":\"flag: North Korea\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F0 1F1F7\",\"char\":\"🇰🇷\",\"name\":\"flag: South Korea\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F0 1F1FC\",\"char\":\"🇰🇼\",\"name\":\"flag: Kuwait\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F0 1F1FE\",\"char\":\"🇰🇾\",\"name\":\"flag: Cayman Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F0 1F1FF\",\"char\":\"🇰🇿\",\"name\":\"flag: Kazakhstan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F1 1F1E6\",\"char\":\"🇱🇦\",\"name\":\"flag: Laos\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F1 1F1E7\",\"char\":\"🇱🇧\",\"name\":\"flag: Lebanon\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F1 1F1E8\",\"char\":\"🇱🇨\",\"name\":\"flag: St. Lucia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F1 1F1EE\",\"char\":\"🇱🇮\",\"name\":\"flag: Liechtenstein\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F1 1F1F0\",\"char\":\"🇱🇰\",\"name\":\"flag: Sri Lanka\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F1 1F1F7\",\"char\":\"🇱🇷\",\"name\":\"flag: Liberia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F1 1F1F8\",\"char\":\"🇱🇸\",\"name\":\"flag: Lesotho\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F1 1F1F9\",\"char\":\"🇱🇹\",\"name\":\"flag: Lithuania\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F1 1F1FA\",\"char\":\"🇱🇺\",\"name\":\"flag: Luxembourg\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F1 1F1FB\",\"char\":\"🇱🇻\",\"name\":\"flag: Latvia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F1 1F1FE\",\"char\":\"🇱🇾\",\"name\":\"flag: Libya\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1E6\",\"char\":\"🇲🇦\",\"name\":\"flag: Morocco\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1E8\",\"char\":\"🇲🇨\",\"name\":\"flag: Monaco\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1E9\",\"char\":\"🇲🇩\",\"name\":\"flag: Moldova\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1EA\",\"char\":\"🇲🇪\",\"name\":\"flag: Montenegro\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1EB\",\"char\":\"🇲🇫\",\"name\":\"flag: St. Martin\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1EC\",\"char\":\"🇲🇬\",\"name\":\"flag: Madagascar\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1ED\",\"char\":\"🇲🇭\",\"name\":\"flag: Marshall Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1F0\",\"char\":\"🇲🇰\",\"name\":\"flag: North Macedonia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1F1\",\"char\":\"🇲🇱\",\"name\":\"flag: Mali\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1F2\",\"char\":\"🇲🇲\",\"name\":\"flag: Myanmar (Burma)\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1F3\",\"char\":\"🇲🇳\",\"name\":\"flag: Mongolia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1F4\",\"char\":\"🇲🇴\",\"name\":\"flag: Macao SAR China\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1F5\",\"char\":\"🇲🇵\",\"name\":\"flag: Northern Mariana Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1F6\",\"char\":\"🇲🇶\",\"name\":\"flag: Martinique\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1F7\",\"char\":\"🇲🇷\",\"name\":\"flag: Mauritania\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1F8\",\"char\":\"🇲🇸\",\"name\":\"flag: Montserrat\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1F9\",\"char\":\"🇲🇹\",\"name\":\"flag: Malta\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1FA\",\"char\":\"🇲🇺\",\"name\":\"flag: Mauritius\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1FB\",\"char\":\"🇲🇻\",\"name\":\"flag: Maldives\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1FC\",\"char\":\"🇲🇼\",\"name\":\"flag: Malawi\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1FD\",\"char\":\"🇲🇽\",\"name\":\"flag: Mexico\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1FE\",\"char\":\"🇲🇾\",\"name\":\"flag: Malaysia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F2 1F1FF\",\"char\":\"🇲🇿\",\"name\":\"flag: Mozambique\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1E6\",\"char\":\"🇳🇦\",\"name\":\"flag: Namibia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1E8\",\"char\":\"🇳🇨\",\"name\":\"flag: New Caledonia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1EA\",\"char\":\"🇳🇪\",\"name\":\"flag: Niger\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1EB\",\"char\":\"🇳🇫\",\"name\":\"flag: Norfolk Island\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1EC\",\"char\":\"🇳🇬\",\"name\":\"flag: Nigeria\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1EE\",\"char\":\"🇳🇮\",\"name\":\"flag: Nicaragua\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1F1\",\"char\":\"🇳🇱\",\"name\":\"flag: Netherlands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1F4\",\"char\":\"🇳🇴\",\"name\":\"flag: Norway\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1F5\",\"char\":\"🇳🇵\",\"name\":\"flag: Nepal\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1F7\",\"char\":\"🇳🇷\",\"name\":\"flag: Nauru\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1FA\",\"char\":\"🇳🇺\",\"name\":\"flag: Niue\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F3 1F1FF\",\"char\":\"🇳🇿\",\"name\":\"flag: New Zealand\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F4 1F1F2\",\"char\":\"🇴🇲\",\"name\":\"flag: Oman\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1E6\",\"char\":\"🇵🇦\",\"name\":\"flag: Panama\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1EA\",\"char\":\"🇵🇪\",\"name\":\"flag: Peru\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1EB\",\"char\":\"🇵🇫\",\"name\":\"flag: French Polynesia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1EC\",\"char\":\"🇵🇬\",\"name\":\"flag: Papua New Guinea\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1ED\",\"char\":\"🇵🇭\",\"name\":\"flag: Philippines\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1F0\",\"char\":\"🇵🇰\",\"name\":\"flag: Pakistan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1F1\",\"char\":\"🇵🇱\",\"name\":\"flag: Poland\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1F2\",\"char\":\"🇵🇲\",\"name\":\"flag: St. Pierre & Miquelon\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1F3\",\"char\":\"🇵🇳\",\"name\":\"flag: Pitcairn Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1F7\",\"char\":\"🇵🇷\",\"name\":\"flag: Puerto Rico\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1F8\",\"char\":\"🇵🇸\",\"name\":\"flag: Palestinian Territories\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1F9\",\"char\":\"🇵🇹\",\"name\":\"flag: Portugal\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1FC\",\"char\":\"🇵🇼\",\"name\":\"flag: Palau\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F5 1F1FE\",\"char\":\"🇵🇾\",\"name\":\"flag: Paraguay\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F6 1F1E6\",\"char\":\"🇶🇦\",\"name\":\"flag: Qatar\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F7 1F1EA\",\"char\":\"🇷🇪\",\"name\":\"flag: Réunion\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F7 1F1F4\",\"char\":\"🇷🇴\",\"name\":\"flag: Romania\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F7 1F1F8\",\"char\":\"🇷🇸\",\"name\":\"flag: Serbia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F7 1F1FA\",\"char\":\"🇷🇺\",\"name\":\"flag: Russia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F7 1F1FC\",\"char\":\"🇷🇼\",\"name\":\"flag: Rwanda\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1E6\",\"char\":\"🇸🇦\",\"name\":\"flag: Saudi Arabia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1E7\",\"char\":\"🇸🇧\",\"name\":\"flag: Solomon Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1E8\",\"char\":\"🇸🇨\",\"name\":\"flag: Seychelles\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1E9\",\"char\":\"🇸🇩\",\"name\":\"flag: Sudan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1EA\",\"char\":\"🇸🇪\",\"name\":\"flag: Sweden\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1EC\",\"char\":\"🇸🇬\",\"name\":\"flag: Singapore\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1ED\",\"char\":\"🇸🇭\",\"name\":\"flag: St. Helena\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1EE\",\"char\":\"🇸🇮\",\"name\":\"flag: Slovenia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1EF\",\"char\":\"🇸🇯\",\"name\":\"flag: Svalbard & Jan Mayen\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1F0\",\"char\":\"🇸🇰\",\"name\":\"flag: Slovakia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1F1\",\"char\":\"🇸🇱\",\"name\":\"flag: Sierra Leone\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1F2\",\"char\":\"🇸🇲\",\"name\":\"flag: San Marino\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1F3\",\"char\":\"🇸🇳\",\"name\":\"flag: Senegal\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1F4\",\"char\":\"🇸🇴\",\"name\":\"flag: Somalia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1F7\",\"char\":\"🇸🇷\",\"name\":\"flag: Suriname\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1F8\",\"char\":\"🇸🇸\",\"name\":\"flag: South Sudan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1F9\",\"char\":\"🇸🇹\",\"name\":\"flag: São Tomé & Príncipe\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1FB\",\"char\":\"🇸🇻\",\"name\":\"flag: El Salvador\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1FD\",\"char\":\"🇸🇽\",\"name\":\"flag: Sint Maarten\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1FE\",\"char\":\"🇸🇾\",\"name\":\"flag: Syria\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F8 1F1FF\",\"char\":\"🇸🇿\",\"name\":\"flag: Eswatini\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1E6\",\"char\":\"🇹🇦\",\"name\":\"flag: Tristan da Cunha\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1E8\",\"char\":\"🇹🇨\",\"name\":\"flag: Turks & Caicos Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1E9\",\"char\":\"🇹🇩\",\"name\":\"flag: Chad\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1EB\",\"char\":\"🇹🇫\",\"name\":\"flag: French Southern Territories\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1EC\",\"char\":\"🇹🇬\",\"name\":\"flag: Togo\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1ED\",\"char\":\"🇹🇭\",\"name\":\"flag: Thailand\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1EF\",\"char\":\"🇹🇯\",\"name\":\"flag: Tajikistan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1F0\",\"char\":\"🇹🇰\",\"name\":\"flag: Tokelau\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1F1\",\"char\":\"🇹🇱\",\"name\":\"flag: Timor-Leste\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1F2\",\"char\":\"🇹🇲\",\"name\":\"flag: Turkmenistan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1F3\",\"char\":\"🇹🇳\",\"name\":\"flag: Tunisia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1F4\",\"char\":\"🇹🇴\",\"name\":\"flag: Tonga\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1F7\",\"char\":\"🇹🇷\",\"name\":\"flag: Turkey\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1F9\",\"char\":\"🇹🇹\",\"name\":\"flag: Trinidad & Tobago\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1FB\",\"char\":\"🇹🇻\",\"name\":\"flag: Tuvalu\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1FC\",\"char\":\"🇹🇼\",\"name\":\"flag: Taiwan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1F9 1F1FF\",\"char\":\"🇹🇿\",\"name\":\"flag: Tanzania\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FA 1F1E6\",\"char\":\"🇺🇦\",\"name\":\"flag: Ukraine\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FA 1F1EC\",\"char\":\"🇺🇬\",\"name\":\"flag: Uganda\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FA 1F1F2\",\"char\":\"🇺🇲\",\"name\":\"flag: U.S. Outlying Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FA 1F1F3\",\"char\":\"🇺🇳\",\"name\":\"flag: United Nations\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FA 1F1F8\",\"char\":\"🇺🇸\",\"name\":\"flag: United States\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FA 1F1FE\",\"char\":\"🇺🇾\",\"name\":\"flag: Uruguay\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FA 1F1FF\",\"char\":\"🇺🇿\",\"name\":\"flag: Uzbekistan\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FB 1F1E6\",\"char\":\"🇻🇦\",\"name\":\"flag: Vatican City\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FB 1F1E8\",\"char\":\"🇻🇨\",\"name\":\"flag: St. Vincent & Grenadines\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FB 1F1EA\",\"char\":\"🇻🇪\",\"name\":\"flag: Venezuela\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FB 1F1EC\",\"char\":\"🇻🇬\",\"name\":\"flag: British Virgin Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FB 1F1EE\",\"char\":\"🇻🇮\",\"name\":\"flag: U.S. Virgin Islands\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FB 1F1F3\",\"char\":\"🇻🇳\",\"name\":\"flag: Vietnam\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FB 1F1FA\",\"char\":\"🇻🇺\",\"name\":\"flag: Vanuatu\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FC 1F1EB\",\"char\":\"🇼🇫\",\"name\":\"flag: Wallis & Futuna\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FC 1F1F8\",\"char\":\"🇼🇸\",\"name\":\"flag: Samoa\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FD 1F1F0\",\"char\":\"🇽🇰\",\"name\":\"flag: Kosovo\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FE 1F1EA\",\"char\":\"🇾🇪\",\"name\":\"flag: Yemen\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FE 1F1F9\",\"char\":\"🇾🇹\",\"name\":\"flag: Mayotte\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FF 1F1E6\",\"char\":\"🇿🇦\",\"name\":\"flag: South Africa\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FF 1F1F2\",\"char\":\"🇿🇲\",\"name\":\"flag: Zambia\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F1FF 1F1FC\",\"char\":\"🇿🇼\",\"name\":\"flag: Zimbabwe\",\"category\":\"Flags (country-flag)\",\"group\":\"Flags\",\"subgroup\":\"country-flag\"},{\"codes\":\"1F3F4 E0067 E0062 E0065 E006E E0067 E007F\",\"char\":\"🏴󠁧󠁢󠁥󠁮󠁧󠁿\",\"name\":\"flag: England\",\"category\":\"Flags (subdivision-flag)\",\"group\":\"Flags\",\"subgroup\":\"subdivision-flag\"},{\"codes\":\"1F3F4 E0067 E0062 E0073 E0063 E0074 E007F\",\"char\":\"🏴󠁧󠁢󠁳󠁣󠁴󠁿\",\"name\":\"flag: Scotland\",\"category\":\"Flags (subdivision-flag)\",\"group\":\"Flags\",\"subgroup\":\"subdivision-flag\"},{\"codes\":\"1F3F4 E0067 E0062 E0077 E006C E0073 E007F\",\"char\":\"🏴󠁧󠁢󠁷󠁬󠁳󠁿\",\"name\":\"flag: Wales\",\"category\":\"Flags (subdivision-flag)\",\"group\":\"Flags\",\"subgroup\":\"subdivision-flag\"}]\n"
  },
  {
    "path": "Unicord.Universal/Commands/Channels/AcknowledgeChannelCommand.cs",
    "content": "﻿using Unicord.Universal.Models.Channels;\n\nnamespace Unicord.Universal.Commands.Channels\n{\n    internal class AcknowledgeChannelCommand : DiscordCommand<ChannelViewModel>\n    {\n        public AcknowledgeChannelCommand(ChannelViewModel viewModel) : base(viewModel)\n        {\n        }\n\n        public override bool CanExecute(object parameter)\n        {\n            return viewModel.Unread && viewModel.Channel.LastMessageId != null;\n        }\n\n        public override async void Execute(object parameter)\n        {\n            if (!viewModel.Unread || viewModel.Channel.LastMessageId == null) return;\n\n            await viewModel.Channel.AcknowledgeAsync(viewModel.Channel.LastMessageId.Value);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Channels/MuteChannelCommand.cs",
    "content": "﻿using Unicord.Universal.Models.Channels;\n\nnamespace Unicord.Universal.Commands.Channels\n{\n    internal class MuteChannelCommand : DiscordCommand<ChannelViewModel>\n    {\n        public MuteChannelCommand(ChannelViewModel viewModel) : base(viewModel)\n        {\n        }\n\n        public override bool CanExecute(object parameter)\n        {\n            return false;\n        }\n\n        public override void Execute(object parameter)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Channels/OpenInNewWindowCommand.cs",
    "content": "﻿using System;\r\nusing System.Windows.Input;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Unicord.Universal.Services;\r\n\r\nnamespace Unicord.Universal.Commands.Channels\r\n{\r\n    internal class OpenInNewWindowCommand : ICommand\r\n    {\r\n        private readonly ChannelViewModel channelViewModel;\r\n        private readonly bool compactOverlay;\r\n\r\n        public OpenInNewWindowCommand(ChannelViewModel channelViewModel, bool compactOverlay)\r\n        {\r\n            this.channelViewModel = channelViewModel;\r\n            this.compactOverlay = compactOverlay;\r\n        }\r\n\r\n        public event EventHandler CanExecuteChanged;\r\n\r\n        public bool CanExecute(object parameter)\r\n        {\r\n            return WindowingService.Current.IsSupported &&\r\n                   WindowingService.Current.IsMainWindow(WindowingService.Current.CurrentWindow) &&\r\n                   channelViewModel.Channel.IsText();\r\n        }\r\n\r\n        public async void Execute(object parameter)\r\n        {\r\n            if (!channelViewModel.Channel.IsText())\r\n                return;\r\n\r\n            var newHandle = await WindowingService.Current.OpenChannelWindowAsync(channelViewModel.Channel, compactOverlay, WindowingService.Current.CurrentWindow);\r\n            if (newHandle != null)\r\n            {\r\n                WindowingService.Current.SetWindowChannel(WindowingService.Current.CurrentWindow, 0);\r\n                var service = DiscordNavigationService.GetForCurrentView();\r\n                await service.NavigateAsync(null, true);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Commands/Channels/PinChannelToStartCommand.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing Microsoft.AppCenter.Analytics;\nusing Unicord.Universal.Models.Channels;\nusing Unicord.Universal.Shared;\nusing Windows.UI.StartScreen;\n\nnamespace Unicord.Universal.Commands\n{\n    public class PinChannelToStartCommand : DiscordCommand<ChannelViewModel>\n    {\n        public PinChannelToStartCommand(ChannelViewModel viewModel) : base(viewModel)\n        {\n        }\n\n        public override bool CanExecute(object parameter)\n        {\n            return !SecondaryTile.Exists($\"Channel_{viewModel.Id}\");\n        }\n\n        public override async void Execute(object parameter)\n        {\n            Analytics.TrackEvent(\"PinChannelCommand_PinChannel\");\n\n            var channel = viewModel.Channel;\n            var tile = new SecondaryTile(\n                $\"Channel_{channel.Id}\",\n                NotificationUtils.GetChannelHeaderName(channel),\n                $\"-channelId={channel.Id.ToString(CultureInfo.InvariantCulture)}\",\n                new Uri(\"ms-appx:///Assets/Store/Square150x150Logo.png\"),\n                TileSize.Square150x150);\n\n            tile.VisualElements.ShowNameOnSquare150x150Logo = true;\n            tile.VisualElements.ShowNameOnWide310x150Logo = true;\n            tile.VisualElements.ShowNameOnSquare310x310Logo = true;\n\n            if (await tile.RequestCreateAsync())\n            {\n                SecondaryTileManager.ClearTileNotifications(channel, tile);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/DiscordCommand.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing DSharpPlus;\nusing Unicord.Universal.Models;\nusing Unicord.Universal.Services;\n\nnamespace Unicord.Universal.Commands\n{\n    public abstract class DiscordCommand<T> : ICommand where T : ViewModelBase\n    {\n        protected T viewModel;\n        protected DiscordClient discord;\n\n        public event EventHandler CanExecuteChanged;\n\n        public DiscordCommand(T viewModel)\n        {\n            this.viewModel = viewModel;\n            this.discord = DiscordManager.Discord;\n        }\n\n        public virtual bool CanExecute(object parameter)\n        {\n            return true;\n        }\n\n        public abstract void Execute(object parameter);\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/EditChannelCommand.cs",
    "content": "﻿using System;\r\nusing System.Windows.Input;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing Microsoft.AppCenter.Analytics;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Unicord.Universal.Pages;\r\nusing Unicord.Universal.Pages.Management;\r\nusing Unicord.Universal.Services;\r\nusing Windows.UI.Xaml;\r\n\r\nnamespace Unicord.Universal.Commands\r\n{\r\n    class EditChannelCommand : ICommand\r\n    {\r\n#pragma warning disable 67 // the event <event> is never used\r\n        public event EventHandler CanExecuteChanged;\r\n#pragma warning restore 67\r\n\r\n        public bool CanExecute(object parameter)\r\n        {\r\n            if (parameter is DiscordChannel channel ||\r\n                (parameter is ChannelViewModel channelVM && (channel = channelVM.Channel) != null))\r\n            {\r\n                if (channel is DiscordDmChannel)\r\n                    return false;\r\n\r\n                var currentMember = channel.Guild.CurrentMember;\r\n                if (currentMember.IsOwner)\r\n                    return true;\r\n\r\n                var permissions = currentMember.PermissionsIn(channel);\r\n                if (permissions.HasFlag(Permissions.ManageChannels))\r\n                {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        public void Execute(object parameter)\r\n        {\r\n            if (parameter is DiscordChannel channel)\r\n            {\r\n                var page = Window.Current.Content.FindChild<DiscordPage>();\r\n                if (page != null)\r\n                {\r\n                    Analytics.TrackEvent(\"EditChannelCommand_Invoked\");\r\n                    OverlayService.GetForCurrentView()\r\n                        .ShowOverlayAsync<ChannelEditPage>(channel);\r\n                }\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Commands/Generic/CopyIdCommand.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Windows.Input;\nusing Microsoft.AppCenter.Analytics;\nusing Unicord.Universal.Models;\nusing Windows.ApplicationModel.DataTransfer;\n\nnamespace Unicord.Universal.Commands.Generic\n{\n    public class CopyIdCommand : ICommand\n    {\n        private readonly ISnowflake snowflake;\n\n#pragma warning disable 67 // the event <event> is never used\n        public event EventHandler CanExecuteChanged;\n#pragma warning restore 67\n\n        public CopyIdCommand(ISnowflake snowflake)\n        {\n            this.snowflake = snowflake;\n        }\n\n        public bool CanExecute(object parameter)\n        {\n            return true;\n        }\n\n        public void Execute(object parameter)\n        {\n            Analytics.TrackEvent(\"CopyIdCommand_Invoked\");\n\n            var package = new DataPackage();\n            package.SetText(snowflake.Id.ToString(CultureInfo.InvariantCulture));\n            Clipboard.SetContent(package);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Generic/CopyUrlCommand.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing Microsoft.AppCenter.Analytics;\nusing Unicord.Universal.Models;\nusing Unicord.Universal.Models.Channels;\nusing Unicord.Universal.Models.Guild;\nusing Unicord.Universal.Models.Messages;\nusing Windows.ApplicationModel.DataTransfer;\n\nnamespace Unicord.Universal.Commands.Generic\n{\n    public class CopyUrlCommand : ICommand\n    {\n        private readonly ViewModelBase viewModel;\n        public CopyUrlCommand(ViewModelBase viewModel)\n        {\n            this.viewModel = viewModel;\n        }\n\n        public event EventHandler CanExecuteChanged;\n\n        public bool CanExecute(object parameter)\n        {\n            return true;\n        }\n\n        public void Execute(object parameter)\n        {\n            var package = new DataPackage();\n\n            if (viewModel is MessageViewModel message)\n            {\n                Analytics.TrackEvent(\"CopyUrlCommand_CopyMessageLink\");\n                var serverText = message.Channel.Guild != null ? message.Channel.Guild.Id.ToString() : \"@me\";\n                var url = \"https://\" + $\"discordapp.com/channels/{serverText}/{message.Channel.Id}/{message.Id}\";\n                package.SetText(url);\n                package.SetWebLink(new Uri(url));\n            }\n\n            if (viewModel is ChannelViewModel channel)\n            {\n                Analytics.TrackEvent(\"CopyUrlCommand_CopyChannelLink\");\n                var serverText = channel.Guild != null ? channel.Guild.Id.ToString() : \"@me\";\n                var url = \"https://\" + $\"discordapp.com/channels/{serverText}/{channel.Id}\";\n                package.SetText(url);\n                package.SetWebLink(new Uri(url));\n            }\n\n            if (viewModel is GuildViewModel guild)\n            {\n                Analytics.TrackEvent(\"CopyUrlCommand_CopyGuildLink\");\n                var url = \"https://\" + $\"discordapp.com/channels/{guild.Id}\";\n                package.SetText(url);\n                package.SetWebLink(new Uri(url));\n            }\n\n            if (parameter is string str && Uri.TryCreate(str, UriKind.Absolute, out var uri))\n            {\n                package.SetText(str);\n                package.SetWebLink(uri);\n            }\n\n            Clipboard.SetContent(package);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Generic/DownloadCommand.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Windows.Input;\nusing Unicord.Universal.Models;\nusing Unicord.Universal.Utilities;\nusing Windows.ApplicationModel.Resources;\nusing Windows.Storage.Pickers;\nusing Windows.Web.Http;\n\nnamespace Unicord.Universal.Commands.Generic\n{\n    public class ProgressInfo : ViewModelBase\n    {\n        private double _progressOpacity = 0;\n        private double _iconOpacity = 1;\n        private bool _isIndeterminate = false;\n        private double _progress = 0;\n\n        public double ProgressOpacity { get => _progressOpacity; set => OnPropertySet(ref _progressOpacity, value); }\n        public double IconOpacity { get => _iconOpacity; set => OnPropertySet(ref _iconOpacity, value); }\n        public bool IsIndeterminate { get => _isIndeterminate; set => OnPropertySet(ref _isIndeterminate, value); }\n        public double Progress { get => _progress; set => OnPropertySet(ref _progress, value); }\n\n        public IProgress<HttpProgress> GetProgress()\n        {\n            return new Progress<HttpProgress>(p =>\n            {\n                IconOpacity = 0;\n                ProgressOpacity = 1;\n                if (p.TotalBytesToReceive.HasValue)\n                {\n                    IsIndeterminate = false;\n                    Progress = p.BytesReceived / (double)p.TotalBytesToReceive.Value;\n                }\n                else\n                    IsIndeterminate = true;\n            });\n        }\n\n        public void GoToProgress()\n        {\n            IconOpacity = 0;\n            ProgressOpacity = 1;\n            IsIndeterminate = true;\n        }\n\n        public void Reset()\n        {\n            IconOpacity = 1;\n            ProgressOpacity = 0;\n            IsIndeterminate = false;\n        }\n    }\n\n    public class DownloadCommand : ICommand\n    {\n        private readonly ProgressInfo _info;\n        private readonly string _url;\n        private bool _canExecute;\n\n        public DownloadCommand(string url, ProgressInfo info)\n        {\n            _url = url;\n            _info = info;\n            _canExecute = true;\n        }\n\n        public event EventHandler CanExecuteChanged;\n\n\n        public bool CanExecute(object parameter)\n        {\n            return _canExecute;\n        }\n\n        public async void Execute(object parameter)\n        {\n            _canExecute = false;\n            _info.GoToProgress();\n\n            var url = new Uri(_url);\n            var strings = ResourceLoader.GetForCurrentView(\"Controls\");\n\n            try\n            {\n                var extension = Path.GetExtension(url.AbsolutePath);\n                var extensionString = Tools.GetItemTypeFromExtension(extension, strings.GetString(\"AttachmentExtensionPlaceholder\"));\n                var picker = new FileSavePicker()\n                {\n                    SuggestedStartLocation = PickerLocationId.Downloads,\n                    SuggestedFileName = Path.GetFileNameWithoutExtension(url.AbsolutePath),\n                    DefaultFileExtension = extension\n                };\n\n                picker.FileTypeChoices.Add($\"{extensionString} (*{extension})\", new List<string>() { extension });\n\n                var file = await picker.PickSaveFileAsync();\n                if (file != null)\n                {\n                    await Tools.DownloadToFileAsync(url, file, _info.GetProgress());\n                }\n            }\n            catch (Exception ex)\n            {\n                Logger.LogError(ex);\n                await UIUtilities.ShowErrorDialogAsync(\n                    strings.GetString(\"AttachmentDownloadFailedTitle\"),\n                    strings.GetString(\"AttachmentDownloadFailedText\"));\n            }\n\n            _info.Reset();\n            _canExecute = true;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Generic/ShareCommand.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing Unicord.Universal.Utilities;\nusing Windows.ApplicationModel.DataTransfer;\nusing Windows.ApplicationModel.Resources;\nusing Windows.Storage;\n\nnamespace Unicord.Universal.Commands.Generic\n{\n    public class ShareCommand : ICommand\n    {\n        private readonly string url;\n        private readonly string fileName;\n        private readonly ProgressInfo shareProgress;\n\n        public ShareCommand(string url, string fileName, ProgressInfo shareProgress)\n        {\n            this.url = url;\n            this.fileName = fileName;\n            this.shareProgress = shareProgress;\n        }\n\n        public event EventHandler CanExecuteChanged;\n\n        public bool CanExecute(object parameter)\n        {\n            return true;\n        }\n\n        public async void Execute(object parameter)\n        {\n            var strings = ResourceLoader.GetForCurrentView(\"Controls\");\n            shareProgress.GoToProgress();\n\n            try\n            {\n                var transferManager = DataTransferManager.GetForCurrentView();\n                var shareFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName);\n                await Tools.DownloadToFileAsync(new Uri(url), shareFile, shareProgress.GetProgress());\n\n                void DataRequested(DataTransferManager sender, DataRequestedEventArgs args)\n                {\n                    var request = args.Request;\n                    request.Data.Properties.Title = string.Format(strings.GetString(\"SharingTitleFormat\"), fileName);\n                    request.Data.Properties.Description = fileName;\n\n                    request.Data.SetWebLink(new Uri(url));\n                    request.Data.SetStorageItems(new[] { shareFile });\n\n                    sender.DataRequested -= DataRequested;\n                }\n\n                transferManager.DataRequested += DataRequested;\n                DataTransferManager.ShowShareUI();\n            }\n            catch (Exception ex)\n            {\n                Logger.LogError(ex);\n                await UIUtilities.ShowErrorDialogAsync(\n                      strings.GetString(\"AttachmentDownloadFailedTitle\"),\n                      strings.GetString(\"AttachmentDownloadFailedText\"));\n            }\n\n            shareProgress.Reset();\n\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Guild/AcknowledgeGuildCommand.cs",
    "content": "﻿using Unicord.Universal.Models.Guild;\n\nnamespace Unicord.Universal.Commands.Guild\n{\n    internal class AcknowledgeGuildCommand : DiscordCommand<GuildViewModel>\n    {\n        public AcknowledgeGuildCommand(GuildViewModel viewModel) : base(viewModel)\n        {\n        }\n\n        public override bool CanExecute(object parameter)\n        {\n            return viewModel.Unread;\n        }\n\n        public override async void Execute(object parameter)\n        {\n            if (!viewModel.Unread)\n                return;\n\n            await viewModel.Guild.AcknowledgeAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Guild/MuteGuildCommand.cs",
    "content": "﻿using Unicord.Universal.Models.Guild;\n\nnamespace Unicord.Universal.Commands.Guild\n{\n    internal class MuteGuildCommand : DiscordCommand<GuildViewModel>\n    {\n        public MuteGuildCommand(GuildViewModel viewModel) : base(viewModel)\n        {\n        }\n\n        public override bool CanExecute(object parameter)\n        {\n            return false;\n        }\n\n        public override void Execute(object parameter)\n        {\n\n        }\n    }\n}"
  },
  {
    "path": "Unicord.Universal/Commands/Member/BanCommand.cs",
    "content": "﻿using System;\nusing DSharpPlus;\nusing Microsoft.AppCenter.Analytics;\nusing Unicord.Universal.Dialogs;\nusing Unicord.Universal.Models.User;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Commands.Members\n{\n    public class BanCommand : DiscordCommand<UserViewModel>\n    {\n        public BanCommand(UserViewModel viewModel)\n            : base(viewModel)\n        {\n        }\n\n        public override bool CanExecute(object parameter)\n        {\n            if (viewModel.Member == null) return false;\n            \n            var member = viewModel.Member;\n\n            if (member.Id == discord.CurrentUser.Id)\n                return false;\n\n            if (!Tools.CheckRoleHierarchy(member.Guild.CurrentMember, member))\n                return false;\n\n            return member.Guild.CurrentMember.PermissionsIn(null).HasPermission(Permissions.BanMembers);\n\n        }\n\n        public override async void Execute(object parameter)\n        {\n            Analytics.TrackEvent(\"BanCommand_Invoked\");\n\n            var banDialog = new BanDialog(viewModel.Member);\n            var result = await banDialog.ShowAsync();\n\n            if (result == ContentDialogResult.Primary)\n            {\n                Analytics.TrackEvent(\"BanCommand_BanMember\");\n                await viewModel.Member.BanAsync(banDialog.DeleteMessageDays, banDialog.BanReason);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Member/ChangeNicknameCommand.cs",
    "content": "﻿using System;\nusing DSharpPlus;\nusing Microsoft.AppCenter.Analytics;\nusing Unicord.Universal.Dialogs;\nusing Unicord.Universal.Models.User;\nusing Unicord.Universal.Services;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Commands.Members\n{\n    class ChangeNicknameCommand : DiscordCommand<UserViewModel>\n    {\n        public ChangeNicknameCommand(UserViewModel viewModel) : base(viewModel)\n        {\n        }\n\n        public override bool CanExecute(object parameter)\n        {\n            if (viewModel.Member == null) return false;\n\n            var member = viewModel.Member;\n            var permissions = member.Guild.CurrentMember.PermissionsIn(null);\n            if (member.Id == DiscordManager.Discord.CurrentUser.Id &&\n                (permissions.HasFlag(Permissions.ChangeNickname) || permissions.HasFlag(Permissions.ManageNicknames)))\n            {\n                return true;\n            }\n\n            if (permissions.HasFlag(Permissions.ManageNicknames)\n                && Tools.CheckRoleHierarchy(member.Guild.CurrentMember, member))\n            {\n                return true;\n            }\n\n            return false;\n        }\n\n        public override async void Execute(object parameter)\n        {\n            if (viewModel.Member == null) \n                return;\n\n            var member = viewModel.Member;\n            Analytics.TrackEvent(\"ChangeNicknameCommand_Invoked\");\n\n            var dialog = new ChangeNicknameDialog(member);\n            if (await dialog.ShowAsync() == ContentDialogResult.Primary)\n            {\n                Analytics.TrackEvent(\"ChangeNicknameCommand_ChangeNickname\");\n                await member.ModifyAsync(m => m.Nickname = dialog.Text);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Member/KickCommand.cs",
    "content": "﻿using System;\nusing DSharpPlus;\nusing Microsoft.AppCenter.Analytics;\nusing Unicord.Universal.Dialogs;\nusing Unicord.Universal.Services;\nusing Unicord.Universal.Models.User;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Commands.Members\n{\n    public class KickCommand : DiscordCommand<UserViewModel>\n    {\n        public KickCommand(UserViewModel viewModel) : base(viewModel)\n        {\n        }\n\n        public override bool CanExecute(object parameter)\n        {\n            var member = viewModel.Member;\n            if (member == null)\n                return false;\n\n            if (member.Id == DiscordManager.Discord.CurrentUser.Id)\n                return false;\n\n            if (!Tools.CheckRoleHierarchy(member.Guild.CurrentMember, member))\n                return false;\n\n            return member.Guild.CurrentMember.PermissionsIn(null).HasPermission(Permissions.KickMembers);\n        }\n\n        public override async void Execute(object parameter)\n        {\n            Analytics.TrackEvent(\"KickCommand_Invoked\");\n\n            var kickDialog = new KickDialog(viewModel.Member);\n            var result = await kickDialog.ShowAsync();\n\n            if (result == ContentDialogResult.Primary)\n            {\n                Analytics.TrackEvent(\"KickCommand_KickMember\");\n                await viewModel.Member.RemoveAsync(kickDialog.KickReason);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Messages/CopyMessageCommand.cs",
    "content": "﻿using System;\nusing Microsoft.AppCenter.Analytics;\nusing Unicord.Universal.Models.Messages;\nusing Windows.ApplicationModel.DataTransfer;\n\nnamespace Unicord.Universal.Commands.Messages\n{\n    public class CopyMessageCommand : DiscordCommand<MessageViewModel>\n    {\n        public CopyMessageCommand(MessageViewModel viewModel) : base(viewModel)\n        {\n        }\n\n        public override void Execute(object parameter)\n        {\n            Analytics.TrackEvent(\"CopyMessageCommand_Invoked\");\n            var message = viewModel.Message;\n\n            var package = new DataPackage();\n            package.RequestedOperation = DataPackageOperation.Copy | DataPackageOperation.Link;\n\n            var serverText = message.Channel.Guild != null ? message.Channel.GuildId.ToString() : \"@me\";\n            var uri = \"https://\" + $\"discordapp.com/channels/{serverText}/{message.ChannelId}/{message.Id}/\";\n\n            package.SetText(message.Content);\n            package.SetWebLink(new Uri(uri));\n            package.SetRtf($\"{{\\\\field{{\\\\*\\\\fldinst HYPERLINK \\\"{uri}\\\"}}{{\\fldrslt {message.Content}}}\");\n\n            Clipboard.SetContent(package);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Messages/DeleteMessageCommand.cs",
    "content": "﻿using System;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing Microsoft.AppCenter.Analytics;\nusing Unicord.Universal.Dialogs;\nusing Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Commands.Messages\n{\n    public class DeleteMessageCommand : DiscordCommand<MessageViewModel>\n    {\n        public DeleteMessageCommand(MessageViewModel viewModel) : base(viewModel) { }\n\n        public override bool CanExecute(object parameter)\n        {\n            var message = viewModel.Message;\n            if (message.Author.IsCurrent)\n            {\n                return true;\n            }\n\n            if (message.Author is DiscordMember member)\n            {\n                var currentMember = member.Guild.CurrentMember;\n\n                if (currentMember.IsOwner)\n                {\n                    return true;\n                }\n\n                if (currentMember.PermissionsIn(message.Channel).HasPermission(Permissions.ManageMessages))\n                {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        public override async void Execute(object parameter)\n        {\n            Analytics.TrackEvent(\"DeleteMessageCommand_Invoked\");\n            var message = viewModel.Message;\n\n            var dialog = new DeleteMessageDialog() { Message = message };\n            if (await dialog.ShowAsync() == ContentDialogResult.Primary)\n            {\n                Analytics.TrackEvent(\"DeleteMessageCommand_DeleteMessage\");\n                await message.DeleteAsync();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Messages/PinMessageCommand.cs",
    "content": "﻿using DSharpPlus;\nusing DSharpPlus.Entities;\nusing Microsoft.AppCenter.Analytics;\nusing System;\nusing Unicord.Universal.Dialogs;\nusing Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Commands\n{\n    public class PinMessageCommand : DiscordCommand<MessageViewModel>\n    {\n        public PinMessageCommand(MessageViewModel viewModel) : base(viewModel) { }\n\n        public override bool CanExecute(object parameter)\n        {\n            var message = viewModel.Message;\n\n            if (message.Channel is DiscordDmChannel)\n            {\n                return true;\n            }\n\n            if (message.Author is DiscordMember member)\n            {\n                var currentMember = member.Guild.CurrentMember;\n\n                if (currentMember.IsOwner)\n                {\n                    return true;\n                }\n\n                if (currentMember.PermissionsIn(message.Channel).HasFlag(Permissions.ManageMessages))\n                {\n                    return true;\n                }\n            }\n\n            return false;\n        }\n\n        public override async void Execute(object parameter)\n        {\n            Analytics.TrackEvent(\"PinMessageCommand_Invoked\");\n\n            var message = viewModel.Message;\n            var dialog = new PinMessageDialog() { Message = message };\n            if (await dialog.ShowAsync() == ContentDialogResult.Primary)\n            {\n                Analytics.TrackEvent(\"PinMessageCommand_PinMessage\");\n\n                if (message.Pinned)\n                {\n                    await message.UnpinAsync();\n                }\n                else\n                {\n                    await message.PinAsync();\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Messages/ReactCommand.cs",
    "content": "﻿using System.Linq;\nusing Unicord.Universal.Models.Emoji;\nusing Unicord.Universal.Models.Messages;\n\nnamespace Unicord.Universal.Commands.Messages\n{\n    internal class ReactCommand : DiscordCommand<MessageViewModel>\n    {\n        public ReactCommand(MessageViewModel message)\n            : base(message)\n        {\n        }\n\n        public override bool CanExecute(object parameter)\n        {\n            return parameter is EmojiViewModel;\n        }\n\n        public override async void Execute(object parameter)\n        {\n            if (parameter is not EmojiViewModel emoji || emoji.DiscordEmoji == null)\n                return;\n\n            if (viewModel.Reactions.Any(r => r.IsMe && r.Emoji == emoji))\n            {\n                await viewModel.Message.DeleteOwnReactionAsync(emoji.DiscordEmoji);\n            }\n            else\n            {\n                await viewModel.Message.CreateReactionAsync(emoji.DiscordEmoji);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Messages/ReplyCommand.cs",
    "content": "﻿using DSharpPlus;\nusing Microsoft.AppCenter.Analytics;\nusing Unicord.Universal.Extensions;\nusing Unicord.Universal.Models;\nusing Unicord.Universal.Models.Messages;\nusing Unicord.Universal.Pages;\nusing Windows.UI.Xaml;\n\nnamespace Unicord.Universal.Commands\n{\n    public class ReplyCommand : DiscordCommand<MessageViewModel>\n    {\n        public ReplyCommand(MessageViewModel viewModel) : base(viewModel)\n        {\n        }\n\n        public override bool CanExecute(object parameter)\n        {\n            return viewModel.Channel is ChannelPageViewModel &&\n                (viewModel.Type is MessageType.Default or MessageType.Reply or MessageType.ApplicationCommand);\n        }\n\n        public override void Execute(object parameter)\n        {\n            Analytics.TrackEvent(\"ReplyCommand_Invoked\");\n\n            if (viewModel.Channel is not ChannelPageViewModel pageViewModel)\n                return;\n\n            pageViewModel.ReplyTo = viewModel;\n\n            // TODO: sorta messy?\n            var channelPage = Window.Current.Content.FindChild<ChannelPage>();\n            if (channelPage == null)\n                return;\n            channelPage.FocusTextBox();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/NullCommand.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\n\nnamespace Unicord.Universal.Commands\n{\n    internal class NullCommand : ICommand\n    {\n        public static readonly ICommand Instance\n            = new NullCommand();\n\n        public event EventHandler CanExecuteChanged;\n\n        public bool CanExecute(object parameter)\n        {\n            return false;\n        }\n\n        public void Execute(object parameter)\n        {\n            // do nothing\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/SettingsCommand.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing Unicord.Universal.Services;\n\nnamespace Unicord.Universal.Commands\n{\n    class SettingsCommand : ICommand\n    {\n#pragma warning disable 67 // the event <event> is never used\n        public event EventHandler CanExecuteChanged;\n#pragma warning restore 67\n\n        public bool CanExecute(object parameter)\n        {\n            return true;\n        }\n\n        public async void Execute(object parameter)\n        {\n            var settings = SettingsService.GetForCurrentView();\n            await settings.OpenAsync(parameter is SettingsPageType t ? t : SettingsPageType.Accounts);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Users/SendMessageCommand.cs",
    "content": "﻿using System.Linq;\nusing Unicord.Universal.Models.User;\nusing Unicord.Universal.Services;\n\nnamespace Unicord.Universal.Commands.Users\n{\n    internal class SendMessageCommand : DiscordCommand<UserViewModel>\n    {\n        public SendMessageCommand(UserViewModel viewModel) : base(viewModel)\n        {\n        }\n\n        public override bool CanExecute(object parameter)\n        {\n            var channel = discord.PrivateChannels.Values\n                .Where(c => c.IsPrivate && c.Recipients.Count > 0)\n                .FirstOrDefault(c => c.Recipients[0].Id == viewModel.Id);\n\n            return channel != null;\n        }\n\n        public override async void Execute(object parameter)\n        {\n            var channel = discord.PrivateChannels.Values\n                .Where(c => c.IsPrivate && c.Recipients.Count > 0)\n                .FirstOrDefault(c => c.Recipients[0].Id == viewModel.Id);\n\n            var service = DiscordNavigationService.GetForCurrentView();\n            await service.NavigateAsync(channel);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Commands/Users/ShowUserOverlayCommand.cs",
    "content": "﻿using Unicord.Universal.Models.User;\nusing Unicord.Universal.Pages.Overlay;\nusing Unicord.Universal.Services;\n\nnamespace Unicord.Universal.Commands.Users\n{\n    public class ShowUserOverlayCommand : DiscordCommand<UserViewModel>\n    {\n        public ShowUserOverlayCommand(UserViewModel viewModel) : base(viewModel)\n        {\n        }\n\n        public override async void Execute(object parameter)\n        {\n            // TODO: will probably be reworked\n            await OverlayService.GetForCurrentView()\n                .ShowOverlayAsync<UserInfoOverlayPage>(viewModel);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Channels/ChannelIconControl.cs",
    "content": "﻿using Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Unicord.Universal.Models.Channels;\r\n\r\n// The Templated Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234235\r\n\r\nnamespace Unicord.Universal.Controls.Channels\r\n{\r\n    public sealed class ChannelIconControl : Control\r\n    {\r\n        public ChannelViewModel Channel\r\n        {\r\n            get { return (ChannelViewModel)GetValue(ChannelProperty); }\r\n            set { SetValue(ChannelProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty ChannelProperty =\r\n            DependencyProperty.Register(\"Channel\", typeof(ChannelViewModel), typeof(ChannelIconControl), new PropertyMetadata(null));\r\n\r\n        public ChannelIconControl()\r\n        {\r\n            this.DefaultStyleKey = typeof(ChannelIconControl);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Channels/ChannelListControl.cs",
    "content": "﻿using Unicord.Universal.Models.Channels;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\n// The Templated Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234235\r\n\r\nnamespace Unicord.Universal.Controls.Channels\r\n{\r\n    public sealed class ChannelListControl : Control\r\n    {\r\n        public ChannelListViewModel Channel\r\n        {\r\n            get { return (ChannelListViewModel)GetValue(ChannelProperty); }\r\n            set { SetValue(ChannelProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty ChannelProperty =\r\n            DependencyProperty.Register(\"Channel\", typeof(ChannelListViewModel), typeof(ChannelListControl), new PropertyMetadata(null, OnChannelChanged));\r\n\r\n        private static void OnChannelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            ((ChannelListControl)d).OnChannelChanged(e);\r\n        }\r\n\r\n        public ChannelListControl()\r\n        {\r\n            this.DefaultStyleKey = typeof(ChannelListControl);\r\n        }\r\n\r\n        private void OnChannelChanged(DependencyPropertyChangedEventArgs e)\r\n        {\r\n            //if (e.NewValue is DmChannelListViewModel)\r\n            //    this.GoToElementStateCore(\"DM\", false);\r\n            //else\r\n            //    this.GoToElementStateCore(\"Guild\", false);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Channels/ChannelPageHeaderControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"Unicord.Universal.Controls.Channels.ChannelPageHeaderControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Channels\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:users=\"using:Unicord.Universal.Controls.Users\" \n    xmlns:presence=\"using:Unicord.Universal.Controls.Presence\"\n    xmlns:controls=\"using:Unicord.Universal.Controls\"\n    xmlns:w1709=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 5)\"\n    mc:Ignorable=\"d\"\n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"400\"\n    DataContext=\"{x:Bind ViewModel}\"\n    Loaded=\"OnLoaded\" x:DefaultBindMode=\"OneWay\">\n\n    <UserControl.Resources>\n        <ExponentialEase x:Key=\"EaseEnter\" EasingMode=\"EaseOut\" Exponent=\"7\" />\n        <ExponentialEase x:Key=\"EaseExit\" EasingMode=\"EaseIn\" Exponent=\"4.5\" />\n        <CircleEase x:Key=\"EaseMovement\" EasingMode=\"EaseInOut\" />\n    </UserControl.Resources>\n\n    <Grid x:Name=\"TopGrid\"\n          VerticalAlignment=\"Top\"\n          Background=\"{ThemeResource ChannelPage_Header_Background}\"\n          BorderBrush=\"{ThemeResource ChannelPage_Header_BorderBrush}\"\n          BorderThickness=\"{StaticResource ChannelPage_Header_BorderThickness}\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\" />\n        </Grid.RowDefinitions>\n        <Grid>\n            <Grid x:Name=\"TitleBarDrag\" Background=\"Transparent\"/>\n\n            <Grid x:Name=\"TitleBarContent\" Padding=\"0,0,220,0\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\" />\n                    <ColumnDefinition Width=\"*\" />\n                </Grid.ColumnDefinitions>\n\n                <Grid x:Name=\"IconGrid\"\n                      Width=\"64\"\n                      Visibility=\"Collapsed\">\n                    <Image Width=\"18\"\n                           Height=\"18\"\n                           Source=\"{StaticResource DiscordClyde}\"\n                           VerticalAlignment=\"Center\"\n                           HorizontalAlignment=\"Center\">\n                    </Image>\n                </Grid>\n\n                <StackPanel Orientation=\"Horizontal\" x:Name=\"MainControls\" Grid.Column=\"1\">\n\n                    <!--  because VisualStateManager is wank  -->\n                    <Grid x:Name=\"ShowSidebarButtonContainer\" Margin=\"4,0,-4,0\">\n                        <Button x:Name=\"ShowSidebarButton\"\n                                Content=\"&#xE700;\"\n                                Command=\"{x:Bind ViewModel.LeftPaneCommand}\"\n                                Style=\"{ThemeResource IconButtonStyle}\" />\n                    </Grid>\n\n                    <users:AvatarControl x:Name=\"UserImage\"\n                                         x:Load=\"{x:Bind ViewModel.IsDM}\"\n                                         Source=\"{Binding ChannelIconUrl}\"\n                                         Grid.Column=\"1\"\n                                         Width=\"24\"\n                                         Height=\"24\"\n                                         Margin=\"12,0,0,0\"\n                                         VerticalAlignment=\"Center\"/>\n\n                    <TextBlock x:Name=\"Icon\"\n                               x:Load=\"{x:Bind ViewModel.IsNotDM}\"\n                               Grid.Column=\"1\"\n                               Foreground=\"{ThemeResource SystemControlForegroundBaseMediumBrush}\"\n                               Text=\"{x:Bind ViewModel.Channel, Converter={StaticResource ChannelSymbolConverter}}\" \n                               FontFamily=\"{StaticResource FluentSystemIcons}\"\n                               VerticalAlignment=\"Center\"\n                               Margin=\"16,0,8,0\"\n                               FontSize=\"20\"/>\n\n                    <TextBlock x:Name=\"Header\"\n                               Grid.Column=\"2\"\n                               Margin=\"8,0,8,0\"\n                               VerticalAlignment=\"Center\"\n                               FontSize=\"15\"\n                               FontWeight=\"Bold\"\n                               Foreground=\"{ThemeResource SystemControlForegroundBaseHighBrush}\"\n                               TextTrimming=\"Clip\"\n                               TextWrapping=\"NoWrap\"\n                               Text=\"{x:Bind ViewModel.DisplayName}\"/>\n\n                    <presence:StatusIndicator x:Name=\"RecipientStatusIndicator\" \n                                              x:Load=\"{x:Bind ViewModel.IsDM}\"\n                                              Grid.Column=\"3\" \n                                              Width=\"10\" \n                                              Height=\"10\" \n                                              Margin=\"-4,0,8,0\"\n                                              Presence=\"{x:Bind ViewModel.Recipient.Presence}\"/>\n\n                    <controls:MarkdownTextBlock x:Name=\"TopicText\"\n                                                Grid.Column=\"4\"\n                                                HorizontalAlignment=\"Stretch\"\n                                                VerticalAlignment=\"Center\"\n                                                Channel=\"{x:Bind ViewModel.Channel}\"\n                                                Text=\"{x:Bind ViewModel.Topic}\"\n                                                TextWrapping=\"NoWrap\" />\n                </StackPanel>\n            </Grid>\n\n            <Grid x:Name=\"TitleBarControls\">\n                <StackPanel x:Name=\"DefaultControls\"\n                            HorizontalAlignment=\"Right\"\n                            Opacity=\"1\"\n                            Padding=\"2,0\"\n                            Orientation=\"Horizontal\">\n\n                    <StackPanel.RenderTransform>\n                        <TranslateTransform x:Name=\"DefaultTranslate\" X=\"0\" />\n                    </StackPanel.RenderTransform>\n\n                    <ToggleButton x:Name=\"MuteButton\"\n                                  x:Uid=\"/ChannelPage/MuteButton\"\n                                  Content=\"&#xE74F;\"\n                                  IsChecked=\"{x:Bind ViewModel.Muted, Mode=OneWay}\"\n                                  Style=\"{ThemeResource ChannelPageHeaderToggleButtonStyle}\">\n                        <w1709:ToggleButton.KeyboardAccelerators>\n                            <w1709:KeyboardAccelerator Modifiers=\"Control\" Key=\"M\"/>\n                        </w1709:ToggleButton.KeyboardAccelerators>\n                    </ToggleButton>\n                    <Button x:Name=\"PinsButton\"\n                            x:Uid=\"/ChannelPage/PinsButton\"\n                            x:Load=\"{x:Bind ViewModel.ShowPinsButton}\"\n                            Command=\"{x:Bind ViewModel.PinsCommand}\"\n                            Content=\"&#xE718;\"\n                            Style=\"{ThemeResource ChannelPageHeaderButtonStyle}\">\n                        <w1709:Button.KeyboardAccelerators>\n                            <w1709:KeyboardAccelerator Modifiers=\"Control\" Key=\"P\"/>\n                        </w1709:Button.KeyboardAccelerators>\n                    </Button>\n                    <Button x:Name=\"UserListButton\"\n                            x:Uid=\"/ChannelPage/UserListButton\"\n                            x:Load=\"{x:Bind ViewModel.ShowUserlistButton}\"\n                            Command=\"{x:Bind ViewModel.UserListCommand}\"\n                            Content=\"&#xE716;\"\n                            Style=\"{ThemeResource ChannelPageHeaderButtonStyle}\">\n                        <w1709:Button.KeyboardAccelerators>\n                            <w1709:KeyboardAccelerator Modifiers=\"Control\" Key=\"U\"/>\n                        </w1709:Button.KeyboardAccelerators>\n                    </Button>\n                    <Button x:Name=\"SearchButton\"\n                            x:Uid=\"/ChannelPage/SearchButton\"\n                            Command=\"{x:Bind ViewModel.SearchCommand}\"\n                            Content=\"&#xE721;\"\n                            Style=\"{ThemeResource ChannelPageHeaderButtonStyle}\">\n                        <w1709:Button.KeyboardAccelerators>\n                            <w1709:KeyboardAccelerator Modifiers=\"Control\" Key=\"S\"/>\n                        </w1709:Button.KeyboardAccelerators>\n                    </Button>\n\n                    <lib:DropDownButton\n                        x:Name=\"MoreOptionsButton\"\n                        x:Uid=\"/ChannelPage/MoreOptionsButton\"\n                        x:Load=\"{x:Bind ViewModel.ShowExtendedItems}\"\n                        Content=\"&#xE712;\"\n                        Style=\"{ThemeResource ChannelPageHeaderButtonStyle}\">\n                        <lib:DropDownButton.Flyout>\n                            <lib:MenuBarItemFlyout>\n                                <MenuFlyoutItem x:Name=\"PinToStartItem\"\n                                                x:Uid=\"/ChannelPage/PinToStart\"\n                                                Icon=\"Pin\"\n                                                Visibility=\"{x:Bind ViewModel.IsPinned, Converter={StaticResource InverseBoolVisibilityConverter}}\"\n                                                Command=\"{x:Bind ViewModel.PinToStartCommand}\"/>\n\n                                <MenuFlyoutItem x:Uid=\"/ChannelPage/UnpinFromStart\"\n                                                Icon=\"Unpin\"\n                                                Visibility=\"{x:Bind ViewModel.IsPinned, Converter={StaticResource BoolVisibilityConverter}}\"/>\n                                <MenuFlyoutSeparator />\n\n                                <MenuFlyoutItem x:Uid=\"/ChannelPage/NewWindowNormal\"\n                                                Command=\"{x:Bind ViewModel.OpenInNewWindowCommand}\">\n                                    <MenuFlyoutItem.Icon>\n                                        <FontIcon Glyph=\"&#xE8A7;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                                    </MenuFlyoutItem.Icon>\n                                </MenuFlyoutItem>\n\n                                <MenuFlyoutItem x:Uid=\"/ChannelPage/NewWindowOverlay\" \n                                                Command=\"{x:Bind ViewModel.OpenInCompactOverlayWindowCommand}\">\n                                    <MenuFlyoutItem.Icon>\n                                        <FontIcon Glyph=\"&#xE78B;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                                    </MenuFlyoutItem.Icon>\n                                </MenuFlyoutItem>\n                            </lib:MenuBarItemFlyout>\n                        </lib:DropDownButton.Flyout>\n                    </lib:DropDownButton>\n                </StackPanel>\n\n                <StackPanel x:Name=\"EditingControls\"\n                            HorizontalAlignment=\"Right\"\n                            w1709:Spacing=\"2\"\n                            Opacity=\"0\"\n                            Orientation=\"Horizontal\">\n\n                    <StackPanel.RenderTransform>\n                        <TranslateTransform x:Name=\"EditingTranslate\" X=\"168\" />\n                    </StackPanel.RenderTransform>\n\n                    <Button x:Name=\"DeleteAllButton\"\n                            x:Uid=\"/ChannelPage/DeleteAllButton\"\n                            Command=\"{Binding MassDeleteCommand}\"\n                            Content=\"&#xE74D;\"\n                            Style=\"{ThemeResource ChannelPageHeaderButtonStyle}\"/>\n                    <Button x:Name=\"CloseEditButton\"\n                            x:Uid=\"/ChannelPage/CloseEditButton\"\n                            Command=\"{Binding ExitEditModeCommand}\"\n                            Content=\"&#xE711;\"\n                            Style=\"{ThemeResource ChannelPageHeaderButtonStyle}\"/>\n                </StackPanel>\n\n                <Border Margin=\"0,8,-24,8\" BorderBrush=\"{ThemeResource DividerStrokeColorDefaultBrush}\" BorderThickness=\"0,0,1,0\" />\n            </Grid>\n        </Grid>\n\n        <lib:ProgressBar x:Name=\"LoadingProgress\" \n                         x:Load=\"{x:Bind ViewModel.IsLoading}\"\n                         IsIndeterminate=\"True\"\n                         VerticalAlignment=\"Bottom\" />\n        <lib:ProgressBar x:Name=\"UploadProgress\"\n                         x:Load=\"{x:Bind ViewModel.IsUploading}\"\n                         IsIndeterminate=\"{x:Bind ViewModel.IsUploadIndeterminate}\"\n                         Value=\"{x:Bind ViewModel.UploadProgress}\"\n                         Maximum=\"1\"\n                         VerticalAlignment=\"Bottom\" />\n\n        <VisualStateManager.VisualStateGroups>\n            <VisualStateGroup>\n                <VisualState x:Name=\"VeryWideState\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"1025\" />\n                    </VisualState.StateTriggers>\n\n                    <VisualState.Setters>\n                        <Setter Target=\"ShowSidebarButton.Visibility\" Value=\"Collapsed\" />\n                    </VisualState.Setters>\n                </VisualState>\n\n                <VisualState x:Name=\"WideState\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"768\" />\n                    </VisualState.StateTriggers>\n\n                    <VisualState.Setters>\n                        <Setter Target=\"ShowSidebarButton.Visibility\" Value=\"Collapsed\" />\n                    </VisualState.Setters>\n                </VisualState>\n\n                <VisualState x:Name=\"NarrowState\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"0\" />\n                    </VisualState.StateTriggers>\n\n                    <VisualState.Setters>\n                        <Setter Target=\"ShowSidebarButton.Visibility\" Value=\"Visible\" />\n                    </VisualState.Setters>\n                </VisualState>\n            </VisualStateGroup>\n            <VisualStateGroup x:Name=\"EditModeGroup\">\n                <VisualState x:Name=\"EditMode\">\n                    <VisualState.Storyboard>\n                        <Storyboard x:Name=\"ShowEditControls\" >\n                            <DoubleAnimation\n                                        EasingFunction=\"{StaticResource EaseMovement}\"\n                                        Storyboard.TargetName=\"DefaultTranslate\"\n                                        Storyboard.TargetProperty=\"X\"\n                                        To=\"220\"\n                                        Duration=\"00:00:00.50\" />\n                            <DoubleAnimation\n                                        EasingFunction=\"{StaticResource EaseMovement}\"\n                                        Storyboard.TargetName=\"EditingTranslate\"\n                                        Storyboard.TargetProperty=\"X\"\n                                        To=\"0\"\n                                        Duration=\"00:00:00.50\" />\n                            <DoubleAnimation\n                                        EasingFunction=\"{StaticResource EaseExit}\"\n                                        Storyboard.TargetName=\"DefaultControls\"\n                                        Storyboard.TargetProperty=\"Opacity\"\n                                        To=\"0\"\n                                        Duration=\"00:00:00.33\" />\n                            <DoubleAnimation\n                                        EasingFunction=\"{StaticResource EaseEnter}\"\n                                        Storyboard.TargetName=\"EditingControls\"\n                                        Storyboard.TargetProperty=\"Opacity\"\n                                        To=\"1\"\n                                        Duration=\"00:00:00.33\" />\n                        </Storyboard>\n                    </VisualState.Storyboard>\n                    <VisualState.Setters>\n                        <Setter Target=\"EditingControls.Visibility\" Value=\"Visible\"/>\n                        <Setter Target=\"DefaultControls.Visibility\" Value=\"Collapsed\"/>\n                    </VisualState.Setters>\n                </VisualState>\n                <VisualState x:Name=\"NormalMode\">\n                    <VisualState.Storyboard>\n                        <Storyboard x:Name=\"HideEditControls\">\n                            <DoubleAnimation\n                                        EasingFunction=\"{StaticResource EaseMovement}\"\n                                        Storyboard.TargetName=\"DefaultTranslate\"\n                                        Storyboard.TargetProperty=\"X\"\n                                        To=\"0\"\n                                        Duration=\"00:00:00.50\" />\n                            <DoubleAnimation\n                                        EasingFunction=\"{StaticResource EaseMovement}\"\n                                        Storyboard.TargetName=\"EditingTranslate\"\n                                        Storyboard.TargetProperty=\"X\"\n                                        To=\"220\"\n                                        Duration=\"00:00:00.50\" />\n                            <DoubleAnimation\n                                        EasingFunction=\"{StaticResource EaseEnter}\"\n                                        Storyboard.TargetName=\"DefaultControls\"\n                                        Storyboard.TargetProperty=\"Opacity\"\n                                        To=\"1\"\n                                        Duration=\"00:00:00.33\" />\n                            <DoubleAnimation\n                                        EasingFunction=\"{StaticResource EaseExit}\"\n                                        Storyboard.TargetName=\"EditingControls\"\n                                        Storyboard.TargetProperty=\"Opacity\"\n                                        To=\"0\"\n                                        Duration=\"00:00:00.33\" />\n                        </Storyboard>\n                    </VisualState.Storyboard>\n                    <VisualState.Setters>\n                        <Setter Target=\"DefaultControls.Visibility\" Value=\"Visible\"/>\n                        <Setter Target=\"EditingControls.Visibility\" Value=\"Collapsed\"/>\n                    </VisualState.Setters>\n                </VisualState>\n            </VisualStateGroup>\n        </VisualStateManager.VisualStateGroups>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Channels/ChannelPageHeaderControl.xaml.cs",
    "content": "﻿using Unicord.Universal.Extensions;\nusing Unicord.Universal.Models.Channels;\nusing Unicord.Universal.Pages;\nusing Unicord.Universal.Services;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\n// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236\n\nnamespace Unicord.Universal.Controls.Channels\n{\n    public sealed partial class ChannelPageHeaderControl : UserControl\n    {\n        public ChannelPageViewModelBase ViewModel\n        {\n            get { return (ChannelPageViewModelBase)GetValue(ViewModelProperty); }\n            set { SetValue(ViewModelProperty, value); }\n        }\n\n        public static readonly DependencyProperty ViewModelProperty =\n            DependencyProperty.Register(\"ViewModel\", typeof(ChannelPageViewModelBase), typeof(ChannelPageHeaderControl), new PropertyMetadata(null));\n\n        public ChannelPageHeaderControl()\n        {\n            this.InitializeComponent();\n        }\n\n        private void OnLoaded(object sender, RoutedEventArgs e)\n        {\n            var windowHandle = WindowingService.Current.GetHandle(this);\n            //if (SystemPlatform.Mobile)\n            //    WindowingService.Current.HandleTitleBarForControl(TopGrid);\n\n            if (!WindowingService.Current.IsMainWindow(windowHandle))\n            {\n                IconGrid.Visibility = Visibility.Visible;\n                WindowingService.Current.HandleTitleBarForWindowControls(TopGrid, TitleBarDrag, TitleBarControls, MainControls);\n            }\n\n            ShowSidebarButtonContainer.Visibility \n                = this.FindParent<DiscordPage>() == null ? Visibility.Collapsed : Visibility.Visible;\n        }\n\n        private void ShowSidebarButton_Click(object sender, RoutedEventArgs e)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/CustomMediaTransportControls.cs",
    "content": "﻿using System;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    public sealed class CustomMediaTransportControls : MediaTransportControls\r\n    {\r\n        public CustomMediaTransportControls()\r\n        {\r\n            this.DefaultStyleKey = typeof(CustomMediaTransportControls);\r\n            //this.IsCompact = true;\r\n        }\r\n\r\n        public event EventHandler<EventArgs> FullWindowRequested;\r\n\r\n        protected override void OnApplyTemplate()\r\n        {\r\n            base.OnApplyTemplate();\r\n\r\n            if (GetTemplateChild(\"CustomFullWindowButton\") is not Button fullWindowButton) return;\r\n            fullWindowButton.Click += OnFullWindowButtonClicked;\r\n        }\r\n\r\n        private void OnFullWindowButtonClicked(object sender, RoutedEventArgs e)\r\n        {\r\n            FullWindowRequested?.Invoke(this, EventArgs.Empty);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Emoji/EmojiControl.cs",
    "content": "﻿using Unicord.Universal.Models.Emoji;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Controls.Emoji\r\n{\r\n    public sealed class EmojiControl : Control\r\n    {\r\n        public EmojiViewModel Emoji\r\n        {\r\n            get => (EmojiViewModel)GetValue(EmojiProperty);\r\n            set => SetValue(EmojiProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty EmojiProperty =\r\n            DependencyProperty.Register(\"Emoji\", typeof(EmojiViewModel), typeof(EmojiControl), new PropertyMetadata(default(EmojiViewModel)));\r\n\r\n        public double Size\r\n        {\r\n            get => (double)GetValue(SizeProperty);\r\n            set => SetValue(SizeProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty SizeProperty =\r\n            DependencyProperty.Register(\"Size\", typeof(double), typeof(EmojiControl), new PropertyMetadata(32));\r\n\r\n        public bool Animate\r\n        {\r\n            get { return (bool)GetValue(AnimateProperty); }\r\n            set { SetValue(AnimateProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty AnimateProperty =\r\n            DependencyProperty.Register(\"Animate\", typeof(bool), typeof(EmojiControl), new PropertyMetadata(false));\r\n\r\n        public EmojiControl()\r\n        {\r\n            this.DefaultStyleKey = typeof(EmojiControl);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/EmotePicker.xaml",
    "content": "﻿<UserControl\r\n    x:Class=\"Unicord.Universal.Controls.EmotePicker\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Controls\"\r\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\r\n    xmlns:b=\"using:Unicord.Universal.Behaviours\"\r\n    xmlns:entities=\"using:DSharpPlus.Entities\"\r\n    xmlns:misc=\"using:Unicord.Universal.Misc\" \r\n    xmlns:emoji=\"using:Unicord.Universal.Controls.Emoji\" xmlns:emoji1=\"using:Unicord.Universal.Models.Emoji\"\r\n    mc:Ignorable=\"d\"\r\n    d:DesignHeight=\"300\"\r\n    d:DesignWidth=\"400\"\r\n    x:DefaultBindMode=\"OneWay\"\r\n    Loaded=\"UserControl_Loaded\"\r\n    Unloaded=\"UserControl_Unloaded\">\r\n    \r\n    <UserControl.Resources>\r\n        <DataTemplate x:Key=\"GroupHeaderTemplate\" x:DataType=\"misc:EmojiGroup\">\r\n            <Grid>\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"Auto\"/>\r\n                    <ColumnDefinition Width=\"*\"/>\r\n                </Grid.ColumnDefinitions>\r\n\r\n                <Grid Width=\"24\" Height=\"24\" Margin=\"0,0,8,0\">\r\n                    <lib:PersonPicture x:Name=\"iconImage\" \r\n                                       Visibility=\"{x:Bind Key.IconCharacter, Converter={StaticResource InverseBoolVisibilityConverter}}\"\r\n                                       Width=\"24\" \r\n                                       Height=\"24\"\r\n                                       ProfilePicture=\"{x:Bind Key.IconUrl}\" \r\n                                       DisplayName=\"{x:Bind Key.Name}\" />\r\n\r\n                    <Viewbox Width=\"24\" Height=\"24\" Stretch=\"Uniform\">\r\n                        <TextBlock x:Name=\"iconText\" Visibility=\"{x:Bind Key.IconCharacter, Converter={StaticResource HideOnNullConverter}}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" FontSize=\"24\" LineHeight=\"24\" Text=\"{x:Bind Key.IconCharacter}\" />\r\n                    </Viewbox>\r\n                </Grid>\r\n\r\n                <TextBlock FontSize=\"14\" VerticalAlignment=\"Center\" Grid.Column=\"1\" Text=\"{x:Bind Key.Name}\" />\r\n            </Grid>\r\n        </DataTemplate>\r\n    </UserControl.Resources>\r\n\r\n    <SemanticZoom>\r\n        <SemanticZoom.ZoomedInView>\r\n            <GridView x:Name=\"EmojiView\" \r\n                      SelectionMode=\"None\"\r\n                      IsItemClickEnabled=\"True\"\r\n                      ShowsScrollingPlaceholders=\"True\"\r\n                      ItemClick=\"EmojiView_ItemClick\"\r\n                      ItemsSource=\"{x:Bind Source.View}\">\r\n                <GridView.Header>\r\n                    <Grid Margin=\"4\">\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"*\"/>\r\n                            <ColumnDefinition Width=\"auto\"/>\r\n                        </Grid.ColumnDefinitions>\r\n                        <TextBox x:Name=\"searchBox\" \r\n                                 x:Uid=\"/Controls/EmoteSearchBox\" \r\n                                 InputScope=\"Search\" \r\n                                 TextChanged=\"TextBox_TextChanged\" \r\n                                 VerticalAlignment=\"Center\"\r\n                                 Style=\"{ThemeResource MessageTextBoxStyle}\" />\r\n                        <Button Grid.Column=\"1\" \r\n                                Style=\"{ThemeResource IconButtonStyle}\" \r\n                                Content=\"&#xE721;\"\r\n                                Margin=\"4,0,0,0\"\r\n                                Click=\"Button_Click\" />\r\n                    </Grid>\r\n                </GridView.Header>\r\n                <GridView.ItemTemplate>\r\n                    <DataTemplate x:DataType=\"emoji1:EmojiViewModel\">\r\n                        <emoji:EmojiControl Emoji=\"{x:Bind}\" IsEnabled=\"{x:Bind IsAvailable}\" Opacity=\"{x:Bind Opacity}\"/>\r\n                    </DataTemplate>\r\n                </GridView.ItemTemplate>\r\n                <GridView.GroupStyle>\r\n                    <GroupStyle HeaderTemplate=\"{StaticResource GroupHeaderTemplate}\" />\r\n                </GridView.GroupStyle>\r\n                <GridView.ItemsPanel>\r\n                    <ItemsPanelTemplate>\r\n                        <ItemsWrapGrid Orientation=\"Horizontal\" />\r\n                    </ItemsPanelTemplate>\r\n                </GridView.ItemsPanel>\r\n            </GridView>\r\n        </SemanticZoom.ZoomedInView>\r\n        <SemanticZoom.ZoomedOutView>\r\n            <ListView ItemsSource=\"{x:Bind Source.View.CollectionGroups}\" SelectionMode=\"None\">\r\n                <ListView.ItemTemplate>\r\n                    <DataTemplate>\r\n                        <Grid>\r\n                            <Grid.ColumnDefinitions>\r\n                                <ColumnDefinition Width=\"Auto\"/>\r\n                                <ColumnDefinition Width=\"*\"/>\r\n                            </Grid.ColumnDefinitions>\r\n\r\n                                <Grid Margin=\"0,0,8,0\">\r\n                                    <lib:PersonPicture x:Name=\"iconImage\" \r\n                                                       Visibility=\"{Binding Group.Key.IconCharacter, Converter={StaticResource InverseBoolVisibilityConverter}}\" \r\n                                                       Width=\"32\" \r\n                                                       Height=\"32\"\r\n                                                       ProfilePicture=\"{Binding Group.Key.IconUrl}\" \r\n                                                       DisplayName=\"{Binding Group.Key.Name}\" />\r\n\r\n                                    <Viewbox Width=\"32\" \r\n                                             Height=\"32\" \r\n                                             Stretch=\"Uniform\"\r\n                                             Visibility=\"{Binding Group.Key.IconCharacter, Converter={StaticResource HideOnNullConverter}}\" >\r\n                                        <TextBlock x:Name=\"iconText\" \r\n                                                   VerticalAlignment=\"Center\" \r\n                                                   HorizontalAlignment=\"Center\" \r\n                                                   LineHeight=\"24\"\r\n                                                   FontSize=\"24\" \r\n                                                   Text=\"{Binding Group.Key.IconCharacter}\" />\r\n                                    </Viewbox>\r\n                            </Grid>\r\n                            <TextBlock FontSize=\"14\" VerticalAlignment=\"Center\" Grid.Column=\"1\" Text=\"{Binding Group.Key.Name}\" />\r\n                        </Grid>\r\n                    </DataTemplate>\r\n                </ListView.ItemTemplate>\r\n            </ListView>\r\n        </SemanticZoom.ZoomedOutView>\r\n    </SemanticZoom>\r\n\r\n</UserControl>\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/EmotePicker.xaml.cs",
    "content": "﻿using System;\nusing DSharpPlus.Entities;\nusing Unicord.Universal.Models.Channels;\nusing Unicord.Universal.Models.Emoji;\nusing Unicord.Universal.Utilities;\nusing Windows.UI.ViewManagement;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Controls\n{\n    public sealed partial class EmotePicker : UserControl\n    {\n        private ulong _prevChannelId;\n\n        public CollectionViewSource Source { get; } = new CollectionViewSource() { IsSourceGrouped = true };\n        public event EventHandler<EmojiViewModel> EmojiPicked;\n\n        public DiscordChannel Channel\n        {\n            get => (DiscordChannel)GetValue(ChannelProperty);\n            set => SetValue(ChannelProperty, value);\n        }\n\n        public static readonly DependencyProperty ChannelProperty =\n            DependencyProperty.Register(\"Channel\", typeof(DiscordChannel), typeof(EmotePicker), new PropertyMetadata(null));\n\n        public EmotePicker()\n        {\n            InitializeComponent();\n        }\n\n        public void Load()\n        {\n            try\n            {\n                Source.Source = EmojiUtilities.GetEmoji(new ChannelViewModel(Channel.Id, true), searchBox.Text);\n            }\n            catch { }\n        }\n\n        public void Unload()\n        {\n            // Source.Source = null;\n        }\n\n        private void EmojiView_ItemClick(object sender, ItemClickEventArgs e)\n        {\n            EmojiPicked?.Invoke(this, (EmojiViewModel)e.ClickedItem);\n        }\n\n        private void TextBox_TextChanged(object sender, TextChangedEventArgs e)\n        {\n            if (string.IsNullOrWhiteSpace(searchBox.Text) || searchBox.Text.Length > 2)\n            {\n                Load();\n            }\n        }\n\n        private void Button_Click(object sender, RoutedEventArgs e)\n        {\n            InputPane.GetForCurrentView()?.TryHide();\n\n            Load();\n        }\n\n        private void UserControl_Loaded(object sender, RoutedEventArgs e)\n        {\n            Load();\n        }\n\n        private void UserControl_Unloaded(object sender, RoutedEventArgs e)\n        {\n            Unload();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/FileViewer.cs",
    "content": "﻿using System;\r\nusing System.Diagnostics;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing Windows.Storage;\r\nusing Windows.Storage.FileProperties;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Media.Imaging;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    public sealed class FileViewer : Control\r\n    {\r\n        private SemaphoreSlim _semaphore;\r\n        private bool _appliedTemplate;\r\n\r\n        public static readonly DependencyProperty FileProperty =\r\n            DependencyProperty.Register(\"File\", typeof(StorageFile), typeof(FileViewer), new PropertyMetadata(null, PropertyChanged));\r\n\r\n        public StorageFile File { get => (StorageFile)GetValue(FileProperty); set => SetValue(FileProperty, value); }\r\n\r\n        public FileViewer()\r\n        {\r\n            DefaultStyleKey = typeof(FileViewer);\r\n            _semaphore = new SemaphoreSlim(1, 1);\r\n        }\r\n\r\n        protected override void OnApplyTemplate()\r\n        {\r\n            base.OnApplyTemplate();\r\n            _appliedTemplate = true;\r\n        }\r\n\r\n        private static async void PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            var v = d as FileViewer;\r\n\r\n            if (!v._appliedTemplate)\r\n            {\r\n                v._appliedTemplate = v.ApplyTemplate();\r\n            }\r\n\r\n            await v.OnFilePropertyChanged(e);\r\n        }\r\n\r\n        public async Task OnFilePropertyChanged(DependencyPropertyChangedEventArgs e)\r\n        {\r\n            await _semaphore.WaitAsync();\r\n\r\n            try\r\n            {\r\n                if (e.NewValue is StorageFile f && GetTemplateChild(\"image\") is Image image)\r\n                {\r\n                    if (image.Source is not BitmapImage source)\r\n                    {\r\n                        source = new BitmapImage();\r\n                        image.Source = source;\r\n                    }\r\n\r\n                    ToolTipService.SetToolTip(this, f.Name);\r\n\r\n                    using (var thumb = await f.GetThumbnailAsync(ThumbnailMode.PicturesView, 256, ThumbnailOptions.UseCurrentScale))\r\n                    {\r\n                        await source.SetSourceAsync(thumb);\r\n                    }\r\n\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Logger.LogError(ex);\r\n                Debug.WriteLine(ex);\r\n            }\r\n            finally\r\n            {\r\n                _semaphore.Release();\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/AddServerFlyout.xaml",
    "content": "﻿<UserControl\n    x:Class=\"Unicord.Universal.Controls.Flyouts.AddServerFlyout\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Flyouts\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:controls=\"using:Unicord.Universal.Controls\"\n    mc:Ignorable=\"d\"\n    MinWidth=\"250\"\n    d:DesignHeight=\"200\"\n    d:DesignWidth=\"300\">\n\n    <StackPanel>\n        <controls:IconLabelButton IsEnabled=\"False\" Icon=\"&#xE109;\">\n            <StackPanel Margin=\"4,-4\">\n                <TextBlock x:Uid=\"/Flyouts/CreateServerTitle\"/>\n                <TextBlock x:Uid=\"/Flyouts/CreateServerSubtitle\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" FontSize=\"11\"/>\n            </StackPanel>\n        </controls:IconLabelButton>\n        <controls:IconLabelButton IsEnabled=\"False\" Grid.Row=\"1\" Icon=\"&#xE71B;\">\n            <StackPanel Margin=\"4,-4\">\n                <TextBlock x:Uid=\"/Flyouts/JoinExistingServerTitle\" />\n                <TextBlock x:Uid=\"/Flyouts/JoinExistingServerSubtitle\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" FontSize=\"11\"/>\n            </StackPanel>\n        </controls:IconLabelButton>\n    </StackPanel>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/AddServerFlyout.xaml.cs",
    "content": "﻿using System;\nusing Unicord.Universal.Dialogs;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Controls.Flyouts\n{\n    public sealed partial class AddServerFlyout : UserControl\n    {\n        public AddServerFlyout()\n        {\n            InitializeComponent();\n        }\n\n        private async void CreateServerButton_Click(object sender, RoutedEventArgs e)\n        {\n            // this.FindParent<Flyout>()?.Hide();\n\n            var dialog = new CreateServerDialog();\n            await dialog.ShowAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/ChannelContextFlyout.xaml",
    "content": "﻿<MenuFlyout\n    x:Class=\"Unicord.Universal.Controls.Flyouts.ChannelContextFlyout\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Flyouts\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <MenuFlyoutItem IsEnabled=\"False\" Text=\"{Binding Name}\">\n        <MenuFlyoutItem.Icon>\n            <FontIcon Glyph=\"{Binding Converter={StaticResource ChannelSymbolConverter}}\" FontFamily=\"{StaticResource FluentSystemIcons}\"/>\n        </MenuFlyoutItem.Icon>\n    </MenuFlyoutItem>\n\n    <MenuFlyoutSeparator/>\n\n    <MenuFlyoutItem x:Uid=\"/Flyouts/MarkAsRead\" Command=\"{Binding AcknowledgeCommand}\">\n        <MenuFlyoutItem.Icon>\n            <FontIcon Glyph=\"&#xE930;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\"/>\n        </MenuFlyoutItem.Icon>\n    </MenuFlyoutItem>\n    <MenuFlyoutItem x:Uid=\"/Flyouts/Mute\" Visibility=\"{Binding Muted, Converter={StaticResource InverseBoolVisibilityConverter}}\" Text=\"Mute\" Icon=\"Mute\" Command=\"{Binding ToggleMuteCommand}\"/>\n    <MenuFlyoutItem x:Uid=\"/Flyouts/Unmute\" Visibility=\"{Binding Muted, Converter={StaticResource BoolVisibilityConverter}}\" Text=\"Unmute\" Icon=\"Volume\" Command=\"{Binding ToggleMuteCommand}\"/>\n\n    <MenuFlyoutSeparator />\n\n    <MenuFlyoutItem x:Uid=\"/Flyouts/Edit\" Icon=\"Edit\" Command=\"{Binding EditCommand}\"/>\n\n    <MenuFlyoutSeparator />\n\n    <MenuFlyoutItem x:Uid=\"/Flyouts/PinToStart\" Icon=\"Pin\" Command=\"{Binding PinToStartCommand}\" />\n    <MenuFlyoutItem x:Uid=\"/Flyouts/NewWindow\" Icon=\"NewWindow\" Command=\"{Binding OpenInNewWindowCommand}\" />\n    <MenuFlyoutItem x:Uid=\"/Flyouts/CopyLink\" Icon=\"Link\" Command=\"{Binding CopyUrlCommand}\"  />\n    <MenuFlyoutItem x:Uid=\"/Flyouts/CopyID\" Icon=\"Copy\" Command=\"{Binding CopyIdCommand}\"  />\n\n</MenuFlyout>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/ChannelContextFlyout.xaml.cs",
    "content": "﻿using Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Controls.Flyouts\n{\n    public sealed partial class ChannelContextFlyout : MenuFlyout\n    {\n        public ChannelContextFlyout()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/DirectMessageContextFlyout.xaml",
    "content": "﻿<MenuFlyout\r\n    x:Class=\"Unicord.Universal.Controls.Flyouts.DirectMessageContextFlyout\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Controls.Flyouts\"\r\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n    mc:Ignorable=\"d\">\r\n    \r\n    <MenuFlyoutItem IsEnabled=\"False\" Text=\"{Binding Name}\">\r\n        <MenuFlyoutItem.Icon>\r\n            <BitmapIcon ShowAsMonochrome=\"False\" UriSource=\"{Binding IconUrl}\"/>\r\n        </MenuFlyoutItem.Icon>\r\n    </MenuFlyoutItem>\r\n\r\n    <MenuFlyoutSeparator/>\r\n\r\n    <MenuFlyoutItem x:Uid=\"/Flyouts/MarkAsRead\" Command=\"{Binding AcknowledgeCommand}\">\r\n        <MenuFlyoutItem.Icon>\r\n            <FontIcon Glyph=\"&#xE930;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\"/>\r\n        </MenuFlyoutItem.Icon>\r\n    </MenuFlyoutItem>\r\n    <MenuFlyoutItem x:Uid=\"/Flyouts/Mute\" Visibility=\"{Binding Muted, Converter={StaticResource InverseBoolVisibilityConverter}}\" Icon=\"Mute\" Command=\"{Binding ToggleMuteCommand}\"/>\r\n    <MenuFlyoutItem x:Uid=\"/Flyouts/Unmute\" Visibility=\"{Binding Muted, Converter={StaticResource BoolVisibilityConverter}}\" Icon=\"Volume\" Command=\"{Binding ToggleMuteCommand}\"/>\r\n\r\n    <MenuFlyoutSeparator />\r\n\r\n    <MenuFlyoutItem x:Uid=\"/Flyouts/PinToStart\" Icon=\"Pin\" Command=\"{Binding PinToStartCommand}\"/>\r\n    <MenuFlyoutItem x:Uid=\"/Flyouts/NewWindow\" Icon=\"NewWindow\" Command=\"{Binding OpenInNewWindowCommand}\" />\r\n    <MenuFlyoutItem x:Uid=\"/Flyouts/CopyLink\" Icon=\"Link\" Command=\"{Binding CopyUrlCommand}\" />\r\n    <MenuFlyoutItem x:Uid=\"/Flyouts/CopyID\" Icon=\"Copy\" Command=\"{Binding CopyIdCommand}\" />\r\n\r\n</MenuFlyout>\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/DirectMessageContextFlyout.xaml.cs",
    "content": "﻿using Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Controls.Flyouts\n{\n    public sealed partial class DirectMessageContextFlyout : MenuFlyout\n    {\n        public DirectMessageContextFlyout()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/GuildContextFlyout.xaml",
    "content": "﻿<MenuFlyout\n    x:Class=\"Unicord.Universal.Controls.Flyouts.GuildContextFlyout\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Flyouts\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <MenuFlyoutItem IsEnabled=\"False\" Text=\"{Binding Name}\">\n        <MenuFlyoutItem.Icon>\n            <BitmapIcon ShowAsMonochrome=\"False\" UriSource=\"{Binding IconUrl}\"/>\n        </MenuFlyoutItem.Icon>\n    </MenuFlyoutItem>\n\n    <MenuFlyoutSeparator/>\n\n    <MenuFlyoutItem x:Uid=\"/Flyouts/MarkAsRead\" Command=\"{Binding AcknowledgeCommand}\" >\n        <MenuFlyoutItem.Icon>\n            <FontIcon Glyph=\"&#xE930;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\"/>\n        </MenuFlyoutItem.Icon>\n    </MenuFlyoutItem>\n    <MenuFlyoutItem x:Uid=\"/Flyouts/Mute\" Visibility=\"{Binding Muted, Converter={StaticResource InverseBoolVisibilityConverter}}\" Icon=\"Mute\" Command=\"{Binding ToggleMuteCommand}\"/>\n    <MenuFlyoutItem x:Uid=\"/Flyouts/Unmute\" Visibility=\"{Binding Muted, Converter={StaticResource BoolVisibilityConverter}}\" Icon=\"Volume\" Command=\"{Binding ToggleMuteCommand}\" />\n\n    <MenuFlyoutSeparator />\n\n    <MenuFlyoutItem x:Uid=\"/Flyouts/ChangeNickname\" Icon=\"Rename\" Command=\"{Binding CurrentMember.ChangeNicknameCommand}\"/>\n    <MenuFlyoutItem x:Uid=\"/Flyouts/Edit\" Icon=\"Edit\" Command=\"{Binding EditGuildCommand}\"/>\n\n    <MenuFlyoutSeparator />\n\n    <MenuFlyoutItem x:Uid=\"/Flyouts/LeaveServer\" Icon=\"LeaveChat\" Foreground=\"{ThemeResource ErrorTextForegroundBrush}\" Command=\"{Binding LeaveServerCommand}\"/>\n\n    <MenuFlyoutSeparator />\n\n    <!--<MenuFlyoutItem x:Uid=\"/Flyouts/NewWindow\" Icon=\"NewWindow\"/>-->\n    <MenuFlyoutItem x:Uid=\"/Flyouts/CopyLink\" Icon=\"Link\" Command=\"{Binding CopyUrlCommand}\"  />\n    <MenuFlyoutItem x:Uid=\"/Flyouts/CopyID\" Icon=\"Copy\" Command=\"{Binding CopyIdCommand}\"  />\n\n</MenuFlyout>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/GuildContextFlyout.xaml.cs",
    "content": "﻿using Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Controls.Flyouts\n{\n    public sealed partial class GuildContextFlyout : MenuFlyout\n    {\n        public GuildContextFlyout()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/MessageContextFlyout.xaml",
    "content": "﻿<lib:CommandBarFlyout\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    x:Class=\"Unicord.Universal.Controls.Flyouts.MessageContextFlyout\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Flyouts\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    Placement=\"Right\"\n    AlwaysExpanded=\"True\">\n\n    <AppBarButton x:Name=\"AddReactionButton\" \n                  Click=\"AddReactionButton_Click\"\n                  ToolTipService.ToolTip=\"Add Reaction\">\n        <AppBarButton.Icon>\n            <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xE899;\" />\n        </AppBarButton.Icon>\n    </AppBarButton>\n\n    <AppBarButton ToolTipService.ToolTip=\"View Profile\"\n                  Command=\"{Binding Author.OpenOverlayCommand}\"\n                  Click=\"HideOnClick\">\n        <AppBarButton.Icon>\n            <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xe7ee;\" />\n        </AppBarButton.Icon>\n    </AppBarButton>\n\n    <AppBarButton ToolTipService.ToolTip=\"Reply\"\n                  Command=\"{Binding ReplyCommand}\"\n                  Click=\"HideOnClick\">\n        <AppBarButton.Icon>\n            <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xE97A;\" />\n        </AppBarButton.Icon>\n    </AppBarButton>\n    \n    <AppBarButton ToolTipService.ToolTip=\"Copy Message\"\n                  Command=\"{Binding CopyMessageCommand}\"\n                  Click=\"HideOnClick\">\n        <AppBarButton.Icon>\n            <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xe8c8;\" />\n        </AppBarButton.Icon>\n    </AppBarButton>\n\n    <AppBarButton ToolTipService.ToolTip=\"Copy Link\"\n                  Command=\"{Binding CopyUrlCommand}\"\n                  Click=\"HideOnClick\">\n        <AppBarButton.Icon>\n            <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xe71b;\" />\n        </AppBarButton.Icon>\n    </AppBarButton>\n\n    <lib:CommandBarFlyout.SecondaryCommands>\n\n        <AppBarButton Label=\"Change Nickname\"\n                      Command=\"{Binding Author.ChangeNicknameCommand}\">\n            <AppBarButton.Icon>\n                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xe8ac;\" />\n            </AppBarButton.Icon>\n        </AppBarButton>\n\n        <AppBarSeparator Foreground=\"{ThemeResource LayerFillColorAltBrush}\"/>\n\n        <AppBarButton Label=\"Pin\"\n                      Command=\"{Binding PinCommand}\">\n            <AppBarButton.Icon>\n                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xE718;\" />\n            </AppBarButton.Icon>\n        </AppBarButton>\n\n        <AppBarButton Label=\"Edit\"\n                      Command=\"{Binding EditCommand}\"\n                      IsEnabled=\"{Binding Author.IsCurrent}\">\n            <AppBarButton.Icon>\n                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xe70f;\" />\n            </AppBarButton.Icon>\n        </AppBarButton>\n\n        <AppBarButton Label=\"Delete\"\n                      Command=\"{Binding DeleteCommand}\">\n            <AppBarButton.Icon>\n                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xe74d;\" />\n            </AppBarButton.Icon>\n        </AppBarButton>\n\n        <AppBarSeparator Foreground=\"{ThemeResource LayerFillColorAltBrush}\"/>\n\n        <AppBarButton Label=\"Kick\"\n                      Foreground=\"{ThemeResource SystemFillColorCautionBrush}\"\n                      Command=\"{Binding Author.KickCommand}\">\n            <AppBarButton.Icon>\n                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xe89b;\" />\n            </AppBarButton.Icon>\n        </AppBarButton>\n\n        <AppBarButton Label=\"Ban\"\n                      Foreground=\"{ThemeResource SystemFillColorCriticalBrush}\"                      \n                      Command=\"{Binding Author.BanCommand}\">\n            <AppBarButton.Icon>\n                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xe738;\" />\n            </AppBarButton.Icon>\n        </AppBarButton>\n\n        <AppBarSeparator Foreground=\"{ThemeResource LayerFillColorAltBrush}\"/>\n\n        <AppBarButton Label=\"Copy ID\"\n                      Command=\"{Binding CopyIdCommand}\" >\n            <AppBarButton.Icon>\n                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xec7a;\" />\n            </AppBarButton.Icon>\n        </AppBarButton>\n\n    </lib:CommandBarFlyout.SecondaryCommands>\n</lib:CommandBarFlyout>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/MessageContextFlyout.xaml.cs",
    "content": "﻿using Unicord.Universal.Controls.Messages;\nusing Unicord.Universal.Extensions;\nusing Unicord.Universal.Pages;\nusing Windows.UI.Xaml;\nusing MUXC = Microsoft.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Controls.Flyouts\n{\n    public sealed partial class MessageContextFlyout : MUXC.CommandBarFlyout\n    {\n        public MessageContextFlyout()\n        {\n            this.InitializeComponent();\n        }\n\n        // todo: is there a less shit way of doing this?\n        private void AddReactionButton_Click(object sender, RoutedEventArgs e)\n        {\n            this.Hide();\n            var control = this.Target.FindParent<MessageControl>();\n            var page = this.Target.FindParent<ChannelPage>();\n\n            page.ShowReactionPicker(control.MessageViewModel);\n        }\n\n        // HACK\n        private void HideOnClick(object sender, RoutedEventArgs e)\n        {\n            this.Hide();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/UserFlyout.xaml",
    "content": "﻿<utilities:AdaptiveFlyout\n    x:Class=\"Unicord.Universal.Controls.Flyouts.UserFlyout\"\n    xmlns:utilities=\"using:Unicord.Universal.Utilities\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:controls1=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:controls=\"using:Unicord.Universal.Controls\" \n    xmlns:user=\"using:Unicord.Universal.Controls.Users\"\n    mc:Ignorable=\"d\">\n\n    <Grid x:Name=\"Root\" Width=\"256\" Margin=\"-12\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <Grid RequestedTheme=\"Dark\" Background=\"{ThemeResource SystemControlAccentDark1AcrylicElementAccentDark1Brush}\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <user:AvatarControl Style=\"{ThemeResource HugeAvatarWithPresenceStyle}\"\n                                Width=\"128\"\n                                Height=\"128\"\n                                Margin=\"24,24,24,8\"\n                                Source=\"{Binding AvatarUrl}\"\n                                Presence=\"{Binding Presence}\"/>\n            <StackPanel Grid.Row=\"1\" RequestedTheme=\"Dark\" >\n                <controls:UsernameControl User=\"{Binding}\" FontSize=\"24\" IconSize=\"24\" HorizontalAlignment=\"Center\" Margin=\"12,0\" />\n                <TextBlock Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" TextAlignment=\"Center\" FontSize=\"16\" Margin=\"0,0,0,24\">\n                    @<Run Foreground=\"{ThemeResource ApplicationForegroundThemeBrush}\" Text=\"{Binding Username}\"/>#<Run Text=\"{Binding Discriminator}\"/>\n                </TextBlock>\n            </StackPanel>\n        </Grid>\n        \n        <!--<Grid Grid.Row=\"1\" RequestedTheme=\"Dark\" Visibility=\"{Binding Presence.Activity.Name, Converter={StaticResource HideOnNullConverter}, FallbackValue=Collapsed}\" Background=\"{ThemeResource SystemControlAccentAcrylicElementAccentMediumHighBrush}\" >\n            <controls:RichPresenceControl DataContext=\"{Binding Presence.Activity}\" Margin=\"8\" />\n        </Grid>-->\n        \n        <Grid Grid.Row=\"2\" Background=\"{ThemeResource SystemControlAcrylicElementMediumHighBrush}\">\n            <StackPanel Margin=\"12,8,12,12\" Visibility=\"{Binding Roles, Converter={StaticResource BoolVisibilityConverter}, FallbackValue=Collapsed}\">\n                <TextBlock x:Uid=\"/Dialogs/ProfileRoles\" Style=\"{ThemeResource BaseTextBlockStyle}\" Margin=\"0,0,0,8\"/>\n                <ItemsControl ItemTemplate=\"{ThemeResource RoleTemplate}\" ItemsSource=\"{Binding Roles}\">\n                    <ItemsControl.ItemsPanel>\n                        <ItemsPanelTemplate>\n                            <controls1:WrapPanel VerticalSpacing=\"4\" HorizontalSpacing=\"4\"/>\n                        </ItemsPanelTemplate>\n                    </ItemsControl.ItemsPanel>\n                </ItemsControl>\n            </StackPanel>\n        </Grid>\n\n        <StackPanel HorizontalAlignment=\"Stretch\" Grid.Row=\"3\" Background=\"{ThemeResource SystemControlAcrylicElementMediumHighBrush}\">\n            <controls:IconLabelButton Icon=\"&#xE7EE;\" Tapped=\"IconLabelButton_Tapped\" Command=\"{Binding OpenOverlayCommand}\">\n                <TextBlock TextTrimming=\"CharacterEllipsis\" x:Uid=\"/Flyouts/ShowFullProfile\"/>\n            </controls:IconLabelButton>\n            <controls:IconLabelButton Icon=\"&#xE724;\" Command=\"{Binding SendMessageCommand}\">\n                <TextBlock TextTrimming=\"CharacterEllipsis\" x:Uid=\"/Flyouts/SendMessage\"/>\n            </controls:IconLabelButton>\n        </StackPanel>\n       \n    </Grid>\n</utilities:AdaptiveFlyout>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/UserFlyout.xaml.cs",
    "content": "﻿using Unicord.Universal.Utilities;\nusing Windows.UI.Xaml.Input;\n\nnamespace Unicord.Universal.Controls.Flyouts\n{\n    public sealed partial class UserFlyout : AdaptiveFlyout\n    {\n        public UserFlyout(object param) : base(param)\n        {\n            InitializeComponent();\n        }\n\n        // i dislike this\n        private void IconLabelButton_Tapped(object sender, TappedRoutedEventArgs e)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/UserListContextFlyout.xaml",
    "content": "﻿<MenuFlyout\n    x:Name=\"self\"\n    x:Class=\"Unicord.Universal.Controls.Flyouts.UserListContextFlyout\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Flyouts\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <MenuFlyoutItem IsEnabled=\"False\" Text=\"{Binding DisplayName}\">\n        <MenuFlyoutItem.Icon>\n            <BitmapIcon ShowAsMonochrome=\"False\" UriSource=\"{Binding AvatarUrl}\"/>\n        </MenuFlyoutItem.Icon>\n    </MenuFlyoutItem>\n\n    <MenuFlyoutSeparator/>\n\n    <MenuFlyoutItem x:Uid=\"/Flyouts/Profile\" Icon=\"OtherUser\" Command=\"{Binding OpenUserOverlayCommand}\" />\n    <MenuFlyoutItem x:Uid=\"/Flyouts/Message\" Icon=\"Message\" Command=\"{Binding MessageCommand}\"/>\n    \n    <MenuFlyoutSeparator x:Name=\"managementSeparator\" />\n\n    <MenuFlyoutItem x:Uid=\"/Flyouts/Kick\" \n                    Visibility=\"{Binding KickVisibility}\"\n                    Foreground=\"{ThemeResource ErrorTextForegroundBrush}\" \n                    Command=\"{Binding KickCommand}\"\n                    Icon=\"LeaveChat\"  />\n\n    <MenuFlyoutItem x:Name=\"Ban\"\n                    x:Uid=\"/Flyouts/Ban\"\n                    Visibility=\"{Binding BanVisibility}\"\n                    Foreground=\"{ThemeResource ErrorTextForegroundBrush}\"\n                    Command=\"{Binding BanCommand}\"\n                    Icon=\"Remove\"  />\n    \n    <MenuFlyoutItem x:Name=\"changeNickname\"\n                    x:Uid=\"/Flyouts/ChangeNickname\"\n                    Command=\"{Binding ChangeNicknameCommand}\"\n                    Icon=\"Rename\"/>\n\n</MenuFlyout>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Flyouts/UserListContextFlyout.xaml.cs",
    "content": "﻿using Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Controls.Flyouts\r\n{\r\n    public sealed partial class UserListContextFlyout : MenuFlyout\r\n    {\r\n        public UserListContextFlyout()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/IconLabelButton.cs",
    "content": "﻿using Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\n// The Templated Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234235\n\nnamespace Unicord.Universal.Controls\n{\n    public sealed class IconLabelButton : Button\n    {\n        public string Icon\n        {\n            get => (string)GetValue(IconProperty);\n            set => SetValue(IconProperty, value);\n        }\n\n        public static readonly DependencyProperty IconProperty =\n            DependencyProperty.Register(nameof(Icon), typeof(string), typeof(IconLabelButton), new PropertyMetadata(null));\n\n        public IconLabelButton()\n        {\n            DefaultStyleKey = typeof(IconLabelButton);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/ImageElement.cs",
    "content": "﻿using Microsoft.Toolkit.Uwp.UI.Controls;\r\nusing System;\r\nusing System.Globalization;\r\nusing System.Web;\r\nusing Unicord.Universal.Utilities;\r\nusing WamWooWam.Core;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Input;\r\nusing Windows.UI.Xaml.Media.Imaging;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    public sealed class ImageElement : Control\r\n    {\r\n        public int ImageWidth\r\n        {\r\n            get => (int)GetValue(ImageWidthProperty);\r\n            set => SetValue(ImageWidthProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty ImageWidthProperty =\r\n            DependencyProperty.Register(\"ImageWidth\", typeof(int), typeof(ImageElement), new PropertyMetadata(0));\r\n\r\n        public int ImageHeight\r\n        {\r\n            get => (int)GetValue(ImageHeightProperty);\r\n            set => SetValue(ImageHeightProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty ImageHeightProperty =\r\n            DependencyProperty.Register(\"ImageHeight\", typeof(int), typeof(ImageElement), new PropertyMetadata(0));\r\n\r\n        public Uri ImageUri\r\n        {\r\n            get => (Uri)GetValue(ImageUriProperty);\r\n            set => SetValue(ImageUriProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty ImageUriProperty =\r\n            DependencyProperty.Register(\"ImageUri\", typeof(Uri), typeof(ImageElement), new PropertyMetadata(null, OnImageChanged));\r\n\r\n        public bool IsSpoiler\r\n        {\r\n            get => (bool)GetValue(IsSpoilerProperty);\r\n            set => SetValue(IsSpoilerProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty IsSpoilerProperty =\r\n            DependencyProperty.Register(\"IsSpoiler\", typeof(bool), typeof(ImageElement), new PropertyMetadata(false));\r\n\r\n        private bool _templated;\r\n        private BitmapImage _img;\r\n        private bool _addedEvent;\r\n\r\n        public ImageElement()\r\n        {\r\n            DefaultStyleKey = typeof(ImageElement);\r\n            Unloaded += ImageElement_Unloaded;\r\n        }\r\n\r\n        private static void OnImageChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            if (d is ImageElement element)\r\n            {\r\n                if (!element._templated)\r\n                {\r\n                    element._templated = element.ApplyTemplate();\r\n                }\r\n\r\n                LoadImage(element);\r\n            }\r\n        }\r\n\r\n        private static void LoadImage(ImageElement element)\r\n        {\r\n            var image = element.GetTemplateChild(\"image\") as ImageEx;\r\n            if (image == null || element.ImageUri == null) return;\r\n\r\n            double width = element.ImageWidth;\r\n            double height = element.ImageHeight;\r\n            Drawing.ScaleProportions(ref width, ref height, 480, 480);\r\n\r\n            var thumbUrl = new UriBuilder(element.ImageUri);\r\n            var query = HttpUtility.ParseQueryString(thumbUrl.Query);\r\n            if (WebPHelpers.ShouldUseWebP)\r\n                query[\"format\"] = \"webp\";\r\n            query[\"width\"] = ((int)width).ToString(CultureInfo.InvariantCulture);\r\n            query[\"height\"] = ((int)height).ToString(CultureInfo.InvariantCulture);\r\n            thumbUrl.Query = query.ToString();\r\n\r\n            element._img = new BitmapImage(thumbUrl.Uri)\r\n            {\r\n                DecodePixelWidth = (int)width,\r\n                DecodePixelHeight = (int)height\r\n            };\r\n\r\n            //image.Width = width;\r\n            //image.Height = height;\r\n\r\n            if (!App.RoamingSettings.Read(Constants.GIF_AUTOPLAY, true) || NetworkHelper.IsNetworkLimited)\r\n            {\r\n                element._img.AutoPlay = false;\r\n                image.PointerEntered += element.Image_PointerEntered;\r\n                image.PointerExited += element.Image_PointerExited;\r\n            }\r\n            else if (!element._addedEvent)\r\n            {\r\n                element._addedEvent = true;\r\n                Window.Current.VisibilityChanged += element.Current_VisibilityChanged;\r\n            }\r\n\r\n            image.Source = element._img;\r\n        }\r\n\r\n        protected override void OnApplyTemplate()\r\n        {\r\n            _templated = true;\r\n\r\n            if (ImageUri != null)\r\n            {\r\n                LoadImage(this);\r\n            }\r\n        }\r\n\r\n        private void Image_PointerExited(object sender, PointerRoutedEventArgs e)\r\n        {\r\n            if (sender is ImageEx i && i.Source is BitmapImage image)\r\n            {\r\n                image.Stop();\r\n            }\r\n        }\r\n\r\n        private void Image_PointerEntered(object sender, PointerRoutedEventArgs e)\r\n        {\r\n            if (sender is ImageEx i && i.Source is BitmapImage image)\r\n            {\r\n                image.Play();\r\n            }\r\n        }\r\n\r\n        private void Current_VisibilityChanged(object sender, Windows.UI.Core.VisibilityChangedEventArgs e)\r\n        {\r\n            if (_img != null)\r\n            {\r\n                if (e.Visible)\r\n                {\r\n                    _img.Play();\r\n                }\r\n                else\r\n                {\r\n                    _img.Stop();\r\n                }\r\n            }\r\n        }\r\n\r\n        private void ImageElement_Unloaded(object sender, RoutedEventArgs e)\r\n        {\r\n            _img = null;\r\n            if (_addedEvent)\r\n            {\r\n                Window.Current.VisibilityChanged -= Current_VisibilityChanged;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/About.txt",
    "content": "\r\nThis project began as an independent open source project called Universal Markdown. It was originally created by Quinn Damerell\r\nand Paul Bartrum for use in Baconit, an open source reddit UWP app.\r\n\r\nThe goal of this project was to make a universal markdown renderer control that's easy to use but is also very efficient. This \r\ncontrol is intended to be used in virtualized lists, so the performance needs to be great. Thanks to a lot of hard work from Paul,\r\nthe control supports the full markdown syntax and is very performant.\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/CodeBlockResolvingEventArgs.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing Windows.UI.Xaml.Documents;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    /// <summary>\r\n    /// Arguments for the <see cref=\"MarkdownTextBlock.CodeBlockResolving\"/> event when a Code Block is being rendered.\r\n    /// </summary>\r\n    public class CodeBlockResolvingEventArgs : EventArgs\r\n    {\r\n        internal CodeBlockResolvingEventArgs(InlineCollection inlineCollection, string text, string codeLanguage)\r\n        {\r\n            InlineCollection = inlineCollection;\r\n            Text = text;\r\n            CodeLanguage = codeLanguage;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the language of the Code Block, as specified by ```{Language} on the first line of the block,\r\n        /// e.g. <para/>\r\n        /// ```C# <para/>\r\n        /// public void Method();<para/>\r\n        /// ```<para/>\r\n        /// </summary>\r\n        public string CodeLanguage { get; }\r\n\r\n        /// <summary>\r\n        /// Gets the raw code block text\r\n        /// </summary>\r\n        public string Text { get; }\r\n\r\n        /// <summary>\r\n        /// Gets Collection to add formatted Text to.\r\n        /// </summary>\r\n        public InlineCollection InlineCollection { get; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether this event was handled successfully.\r\n        /// </summary>\r\n        public bool Handled { get; set; } = false;\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/ImageResolvingEventArgs.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Windows.Foundation;\r\nusing Windows.UI.Xaml.Media;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    /// <summary>\r\n    /// Arguments for the <see cref=\"MarkdownTextBlock.ImageResolving\"/> event which is called when a url needs to be resolved to a <see cref=\"ImageSource\"/>.\r\n    /// </summary>\r\n    public class ImageResolvingEventArgs : EventArgs\r\n    {\r\n        private readonly IList<TaskCompletionSource<object>> _deferrals;\r\n\r\n        internal ImageResolvingEventArgs(string url, string tooltip)\r\n        {\r\n            _deferrals = new List<TaskCompletionSource<object>>();\r\n            Url = url;\r\n            Tooltip = tooltip;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the url of the image in the markdown document.\r\n        /// </summary>\r\n        public string Url { get; }\r\n\r\n        /// <summary>\r\n        /// Gets the tooltip of the image in the markdown document.\r\n        /// </summary>\r\n        public string Tooltip { get; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether this event was handled successfully.\r\n        /// </summary>\r\n        public bool Handled { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the image to display in the <see cref=\"MarkdownTextBlock\"/>.\r\n        /// </summary>\r\n        public ImageSource Image { get; set; }\r\n\r\n        /// <summary>\r\n        /// Informs the <see cref=\"MarkdownTextBlock\"/> that the event handler might run asynchronously.\r\n        /// </summary>\r\n        /// <returns>Deferral</returns>\r\n        public Deferral GetDeferral()\r\n        {\r\n            var task = new TaskCompletionSource<object>();\r\n            _deferrals.Add(task);\r\n\r\n            return new Deferral(() =>\r\n            {\r\n                task.SetResult(null);\r\n            });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns a <see cref=\"Task\"/> that completes when all <see cref=\"Deferral\"/>s have completed.\r\n        /// </summary>\r\n        /// <returns>A <see cref=\"Task\"/> representing the asynchronous operation.</returns>\r\n        internal Task WaitForDeferrals()\r\n        {\r\n            return Task.WhenAll(_deferrals.Select(f => f.Task));\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/LinkClickedEventArgs.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    /// <summary>\r\n    /// Arguments for the OnLinkClicked event which is fired then the user presses a link.\r\n    /// </summary>\r\n    public class LinkClickedEventArgs : EventArgs\r\n    {\r\n        internal LinkClickedEventArgs(string link)\r\n        {\r\n            Link = link;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the link that was tapped.\r\n        /// </summary>\r\n        public string Link { get; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/MarkdownRenderedEventArgs.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing Unicord.Universal.Parsers.Markdown;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    /// <summary>\r\n    /// Arguments for the OnMarkdownRendered event which indicates when the markdown has been\r\n    /// rendered.\r\n    /// </summary>\r\n    public class MarkdownRenderedEventArgs : EventArgs\r\n    {\r\n        internal MarkdownRenderedEventArgs(Exception ex)\r\n        {\r\n            Exception = ex;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the exception if there was one. If the exception is null there was no error.\r\n        /// </summary>\r\n        public Exception Exception { get; }\r\n        public MarkdownDocument Document { get; internal set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/MarkdownTextBlock.Dimensions.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Media;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    /// <summary>\r\n    /// Measurement Properties for elements in the Markdown.\r\n    /// </summary>\r\n    public partial class MarkdownTextBlock\r\n    {\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"InlineCodePadding\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty InlineCodePaddingProperty =\r\n            DependencyProperty.Register(\r\n                nameof(InlineCodePadding),\r\n                typeof(Thickness),\r\n                typeof(MarkdownTextBlock),\r\n                new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"InlineCodeBorderThickness\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty InlineCodeBorderThicknessProperty =\r\n            DependencyProperty.Register(\r\n                nameof(InlineCodeBorderThickness),\r\n                typeof(Thickness),\r\n                typeof(MarkdownTextBlock),\r\n                new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"ImageStretch\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty ImageStretchProperty = DependencyProperty.Register(\r\n            nameof(ImageStretch),\r\n            typeof(Stretch),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(Stretch.None, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"CodeBorderThickness\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty CodeBorderThicknessProperty = DependencyProperty.Register(\r\n            nameof(CodeBorderThickness),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"CodeMargin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty CodeMarginProperty = DependencyProperty.Register(\r\n            nameof(CodeMargin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"CodePadding\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty CodePaddingProperty = DependencyProperty.Register(\r\n            nameof(CodePadding),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header1FontSize\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header1FontSizeProperty = DependencyProperty.Register(\r\n            nameof(Header1FontSize),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header1Margin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header1MarginProperty = DependencyProperty.Register(\r\n            nameof(Header1Margin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header2FontSize\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header2FontSizeProperty = DependencyProperty.Register(\r\n            nameof(Header2FontSize),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header2Margin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header2MarginProperty = DependencyProperty.Register(\r\n            nameof(Header2Margin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header3FontSize\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header3FontSizeProperty = DependencyProperty.Register(\r\n            nameof(Header3FontSize),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header3Margin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header3MarginProperty = DependencyProperty.Register(\r\n            nameof(Header3Margin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header4FontSize\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header4FontSizeProperty = DependencyProperty.Register(\r\n            nameof(Header4FontSize),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header4Margin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header4MarginProperty = DependencyProperty.Register(\r\n            nameof(Header4Margin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header5FontSize\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header5FontSizeProperty = DependencyProperty.Register(\r\n            nameof(Header5FontSize),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header5Margin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header5MarginProperty = DependencyProperty.Register(\r\n            nameof(Header5Margin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header6Margin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header6MarginProperty = DependencyProperty.Register(\r\n            nameof(Header6Margin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header6FontSize\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header6FontSizeProperty = DependencyProperty.Register(\r\n            nameof(Header6FontSize),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"HorizontalRuleMargin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty HorizontalRuleMarginProperty = DependencyProperty.Register(\r\n            nameof(HorizontalRuleMargin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"HorizontalRuleThickness\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty HorizontalRuleThicknessProperty = DependencyProperty.Register(\r\n            nameof(HorizontalRuleThickness),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"ListMargin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty ListMarginProperty = DependencyProperty.Register(\r\n            nameof(ListMargin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"ListGutterWidth\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty ListGutterWidthProperty = DependencyProperty.Register(\r\n            nameof(ListGutterWidth),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"ListBulletSpacing\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty ListBulletSpacingProperty = DependencyProperty.Register(\r\n            nameof(ListBulletSpacing),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"ParagraphMargin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty ParagraphMarginProperty = DependencyProperty.Register(\r\n            nameof(ParagraphMargin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"QuoteBorderThickness\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty QuoteBorderThicknessProperty = DependencyProperty.Register(\r\n            nameof(QuoteBorderThickness),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"QuoteMargin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty QuoteMarginProperty = DependencyProperty.Register(\r\n            nameof(QuoteMargin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"QuotePadding\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty QuotePaddingProperty = DependencyProperty.Register(\r\n            nameof(QuotePadding),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"TableBorderThickness\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty TableBorderThicknessProperty = DependencyProperty.Register(\r\n            nameof(TableBorderThickness),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"TableCellPadding\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty TableCellPaddingProperty = DependencyProperty.Register(\r\n            nameof(TableCellPadding),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"TableMargin\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty TableMarginProperty = DependencyProperty.Register(\r\n            nameof(TableMargin),\r\n            typeof(Thickness),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"TextWrapping\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty TextWrappingProperty = DependencyProperty.Register(\r\n            nameof(TextWrapping),\r\n            typeof(TextWrapping),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"ImageMaxHeight\"/>\r\n        /// </summary>\r\n        public static readonly DependencyProperty ImageMaxHeightProperty = DependencyProperty.Register(\r\n            nameof(ImageMaxHeight),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(0.0, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"ImageMaxWidth\"/>\r\n        /// </summary>\r\n        public static readonly DependencyProperty ImageMaxWidthProperty = DependencyProperty.Register(\r\n            nameof(ImageMaxWidth),\r\n            typeof(double),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(0.0, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets or sets the MaxWidth for images.\r\n        /// </summary>\r\n        public double ImageMaxWidth\r\n        {\r\n            get => (double)GetValue(ImageMaxWidthProperty);\r\n            set => SetValue(ImageMaxWidthProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the MaxHeight for images.\r\n        /// </summary>\r\n        public double ImageMaxHeight\r\n        {\r\n            get => (double)GetValue(ImageMaxHeightProperty);\r\n            set => SetValue(ImageMaxHeightProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the stretch used for images.\r\n        /// </summary>\r\n        public Stretch ImageStretch\r\n        {\r\n            get => (Stretch)GetValue(ImageStretchProperty);\r\n            set => SetValue(ImageStretchProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the thickness of the border around code blocks.\r\n        /// </summary>\r\n        public Thickness CodeBorderThickness\r\n        {\r\n            get => (Thickness)GetValue(CodeBorderThicknessProperty);\r\n            set => SetValue(CodeBorderThicknessProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the thickness of the border for inline code.\r\n        /// </summary>\r\n        public Thickness InlineCodeBorderThickness\r\n        {\r\n            get => (Thickness)GetValue(InlineCodeBorderThicknessProperty);\r\n            set => SetValue(InlineCodeBorderThicknessProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for inline code.\r\n        /// </summary>\r\n        public Thickness InlineCodePadding\r\n        {\r\n            get => (Thickness)GetValue(InlineCodePaddingProperty);\r\n            set => SetValue(InlineCodePaddingProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the space between the code border and the text.\r\n        /// </summary>\r\n        public Thickness CodeMargin\r\n        {\r\n            get => (Thickness)GetValue(CodeMarginProperty);\r\n            set => SetValue(CodeMarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets space between the code border and the text.\r\n        /// </summary>\r\n        public Thickness CodePadding\r\n        {\r\n            get => (Thickness)GetValue(CodePaddingProperty);\r\n            set => SetValue(CodePaddingProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 1 headers.\r\n        /// </summary>\r\n        public double Header1FontSize\r\n        {\r\n            get => (double)GetValue(Header1FontSizeProperty);\r\n            set => SetValue(Header1FontSizeProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 1 headers.\r\n        /// </summary>\r\n        public Thickness Header1Margin\r\n        {\r\n            get => (Thickness)GetValue(Header1MarginProperty);\r\n            set => SetValue(Header1MarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 2 headers.\r\n        /// </summary>\r\n        public double Header2FontSize\r\n        {\r\n            get => (double)GetValue(Header2FontSizeProperty);\r\n            set => SetValue(Header2FontSizeProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 2 headers.\r\n        /// </summary>\r\n        public Thickness Header2Margin\r\n        {\r\n            get => (Thickness)GetValue(Header2MarginProperty);\r\n            set => SetValue(Header2MarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 3 headers.\r\n        /// </summary>\r\n        public double Header3FontSize\r\n        {\r\n            get => (double)GetValue(Header3FontSizeProperty);\r\n            set => SetValue(Header3FontSizeProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 3 headers.\r\n        /// </summary>\r\n        public Thickness Header3Margin\r\n        {\r\n            get => (Thickness)GetValue(Header3MarginProperty);\r\n            set => SetValue(Header3MarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 4 headers.\r\n        /// </summary>\r\n        public double Header4FontSize\r\n        {\r\n            get => (double)GetValue(Header4FontSizeProperty);\r\n            set => SetValue(Header4FontSizeProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 4 headers.\r\n        /// </summary>\r\n        public Thickness Header4Margin\r\n        {\r\n            get => (Thickness)GetValue(Header4MarginProperty);\r\n            set => SetValue(Header4MarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 5 headers.\r\n        /// </summary>\r\n        public double Header5FontSize\r\n        {\r\n            get => (double)GetValue(Header5FontSizeProperty);\r\n            set => SetValue(Header5FontSizeProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 5 headers.\r\n        /// </summary>\r\n        public Thickness Header5Margin\r\n        {\r\n            get => (Thickness)GetValue(Header5MarginProperty);\r\n            set => SetValue(Header5MarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 6 headers.\r\n        /// </summary>\r\n        public double Header6FontSize\r\n        {\r\n            get => (double)GetValue(Header6FontSizeProperty);\r\n            set => SetValue(Header6FontSizeProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 6 headers.\r\n        /// </summary>\r\n        public Thickness Header6Margin\r\n        {\r\n            get => (Thickness)GetValue(Header6MarginProperty);\r\n            set => SetValue(Header6MarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin used for horizontal rules.\r\n        /// </summary>\r\n        public Thickness HorizontalRuleMargin\r\n        {\r\n            get => (Thickness)GetValue(HorizontalRuleMarginProperty);\r\n            set => SetValue(HorizontalRuleMarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the vertical thickness of the horizontal rule.\r\n        /// </summary>\r\n        public double HorizontalRuleThickness\r\n        {\r\n            get => (double)GetValue(HorizontalRuleThicknessProperty);\r\n            set => SetValue(HorizontalRuleThicknessProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin used by lists.\r\n        /// </summary>\r\n        public Thickness ListMargin\r\n        {\r\n            get => (Thickness)GetValue(ListMarginProperty);\r\n            set => SetValue(ListMarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the width of the space used by list item bullets/numbers.\r\n        /// </summary>\r\n        public double ListGutterWidth\r\n        {\r\n            get => (double)GetValue(ListGutterWidthProperty);\r\n            set => SetValue(ListGutterWidthProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the space between the list item bullets/numbers and the list item content.\r\n        /// </summary>\r\n        public double ListBulletSpacing\r\n        {\r\n            get => (double)GetValue(ListBulletSpacingProperty);\r\n            set => SetValue(ListBulletSpacingProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin used for paragraphs.\r\n        /// </summary>\r\n        public Thickness ParagraphMargin\r\n        {\r\n            get => (Thickness)GetValue(ParagraphMarginProperty);\r\n            set => SetValue(ParagraphMarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the thickness of quote borders.\r\n        /// </summary>\r\n        public Thickness QuoteBorderThickness\r\n        {\r\n            get => (Thickness)GetValue(QuoteBorderThicknessProperty);\r\n            set => SetValue(QuoteBorderThicknessProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the space outside of quote borders.\r\n        /// </summary>\r\n        public Thickness QuoteMargin\r\n        {\r\n            get => (Thickness)GetValue(QuoteMarginProperty);\r\n            set => SetValue(QuoteMarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the space between the quote border and the text.\r\n        /// </summary>\r\n        public Thickness QuotePadding\r\n        {\r\n            get => (Thickness)GetValue(QuotePaddingProperty);\r\n            set => SetValue(QuotePaddingProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the thickness of any table borders.\r\n        /// </summary>\r\n        public double TableBorderThickness\r\n        {\r\n            get => (double)GetValue(TableBorderThicknessProperty);\r\n            set => SetValue(TableBorderThicknessProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the padding inside each cell.\r\n        /// </summary>\r\n        public Thickness TableCellPadding\r\n        {\r\n            get => (Thickness)GetValue(TableCellPaddingProperty);\r\n            set => SetValue(TableCellPaddingProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin used by tables.\r\n        /// </summary>\r\n        public Thickness TableMargin\r\n        {\r\n            get => (Thickness)GetValue(TableMarginProperty);\r\n            set => SetValue(TableMarginProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the word wrapping behavior.\r\n        /// </summary>\r\n        public TextWrapping TextWrapping\r\n        {\r\n            get => (TextWrapping)GetValue(TextWrappingProperty);\r\n            set => SetValue(TextWrappingProperty, value);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/MarkdownTextBlock.Events.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Documents;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    /// <summary>\r\n    /// An efficient and extensible control that can parse and render markdown.\r\n    /// </summary>\r\n    public partial class MarkdownTextBlock\r\n    {\r\n        /// <summary>\r\n        /// Calls OnPropertyChanged.\r\n        /// </summary>\r\n        private static void OnPropertyChangedStatic(DependencyObject d, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            var instance = d as MarkdownTextBlock;\r\n\r\n            // Defer to the instance method.\r\n            instance?.OnPropertyChanged(d, e.Property);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Fired when the value of a DependencyProperty is changed.\r\n        /// </summary>\r\n        private void OnPropertyChanged(DependencyObject d, DependencyProperty prop)\r\n        {\r\n            RenderMarkdown();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Fired when a user taps one of the link elements\r\n        /// </summary>\r\n        private void Hyperlink_Click(Hyperlink sender, HyperlinkClickEventArgs args)\r\n        {\r\n            LinkHandled((string)sender.GetValue(HyperlinkUrlProperty), true);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Fired when a user taps one of the image elements\r\n        /// </summary>\r\n        private void NewImagelink_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)\r\n        {\r\n            string hyperLink = (string)(sender as Image).GetValue(HyperlinkUrlProperty);\r\n            bool isHyperLink = (bool)(sender as Image).GetValue(IsHyperlinkProperty);\r\n            LinkHandled(hyperLink, isHyperLink);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Fired when the text is done parsing and formatting. Fires each time the markdown is rendered.\r\n        /// </summary>\r\n        public event EventHandler<MarkdownRenderedEventArgs> MarkdownRendered;\r\n\r\n#pragma warning disable 67 // Event <event> is never used.\r\n\r\n        /// <summary>\r\n        /// Fired when a link element in the markdown was tapped.\r\n        /// </summary>\r\n        public event EventHandler<LinkClickedEventArgs> LinkClicked;\r\n\r\n        /// <summary>\r\n        /// Fired when an image element in the markdown was tapped.\r\n        /// </summary>\r\n        public event EventHandler<LinkClickedEventArgs> ImageClicked;\r\n\r\n#pragma warning restore 67\r\n\r\n        /// <summary>\r\n        /// Fired when an image from the markdown document needs to be resolved.\r\n        /// The default implementation is basically <code>new BitmapImage(new Uri(e.Url));</code>.\r\n        /// <para/>You must set <see cref=\"ImageResolvingEventArgs.Handled\"/> to true in order to process your changes.\r\n        /// </summary>\r\n        public event EventHandler<ImageResolvingEventArgs> ImageResolving;\r\n\r\n        /// <summary>\r\n        /// Fired when a Code Block is being Rendered.\r\n        /// The default implementation is to output the CodeBlock as Plain Text.\r\n        /// <para/>You must set <see cref=\"CodeBlockResolvingEventArgs.Handled\"/> to true in order to process your changes.\r\n        /// </summary>\r\n        public event EventHandler<CodeBlockResolvingEventArgs> CodeBlockResolving;\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/MarkdownTextBlock.Methods.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Diagnostics;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing ColorCode;\r\nusing Unicord.Universal.Parsers.Markdown;\r\nusing Unicord.Universal.Controls.Markdown.Render;\r\nusing Unicord.Universal.Services;\r\nusing Windows.System;\r\nusing Windows.UI.Core;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Documents;\r\nusing Windows.UI.Xaml.Media;\r\nusing Windows.UI.Xaml.Media.Imaging;\r\nusing Unicord.Universal.Parsers.Markdown.Blocks;\r\nusing Unicord.Universal.Parsers.Markdown.Inlines;\r\nusing static Unicord.Constants;\r\nusing UniEmoji = NeoSmart.Unicode.Emoji;\r\n\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    /// <summary>\r\n    /// An efficient and extensible control that can parse and render markdown.\r\n    /// </summary>\r\n    public partial class MarkdownTextBlock\r\n    {\r\n        /// <summary>\r\n        /// Sets the Markdown Renderer for Rendering the UI.\r\n        /// </summary>\r\n        /// <typeparam name=\"T\">The Inherited Markdown Render</typeparam>\r\n        public void SetRenderer<T>()\r\n            where T : MarkdownRenderer\r\n        {\r\n            renderertype = typeof(T);\r\n        }\r\n\r\n        private bool IsHuge(MarkdownDocument markdown)\r\n        {\r\n            if (!AllowHugeEmoji)\r\n                return false;\r\n\r\n            if (string.IsNullOrWhiteSpace(Text))\r\n                return false;\r\n\r\n            if (!App.RoamingSettings.Read(SHOW_HUGE_EMOJI, SHOW_HUGE_EMOJI_DEFAULT))\r\n                return false;\r\n\r\n            foreach (var item in markdown.Blocks)\r\n            {\r\n                if (item.Type != MarkdownBlockType.Paragraph)\r\n                {\r\n                    return false;\r\n                }\r\n\r\n                var paragraph = (ParagraphBlock)item;\r\n                for (int i = 0; i < paragraph.Inlines.Count; i++)\r\n                {\r\n                    var inline = paragraph.Inlines[i];\r\n                    if (inline.Type == MarkdownInlineType.TextRun)\r\n                    {\r\n                        var text = ((TextRunInline)inline).Text;\r\n                        if (!string.IsNullOrWhiteSpace(text) && (text.Length > 32 || !UniEmoji.IsEmoji(text)))\r\n                            return false;\r\n                    }\r\n                    else if (inline.Type == MarkdownInlineType.Discord)\r\n                    {\r\n                        if (((DiscordInline)inline).DiscordType != DiscordInline.MentionType.Emote)\r\n                            return false;\r\n                    }\r\n                    else if (inline.Type != MarkdownInlineType.Emoji)\r\n                    {\r\n                        return false;\r\n                    }\r\n                }\r\n            }\r\n\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called to preform a render of the current Markdown.\r\n        /// </summary>\r\n        private void RenderMarkdown()\r\n        {\r\n            // Leave if we don't have our root yet.\r\n            if (_rootElement == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            // Disconnect from OnClick handlers.\r\n            UnhookListeners();\r\n\r\n            var markdownRenderedArgs = new MarkdownRenderedEventArgs(null);\r\n\r\n            // Make sure we have something to parse.\r\n            if (string.IsNullOrWhiteSpace(Text))\r\n            {\r\n                _rootElement.Child = null;\r\n            }\r\n            else\r\n            {\r\n                try\r\n                {\r\n                    // Try to parse the markdown.\r\n                    var markdown = new MarkdownDocument();\r\n                    markdown.InlineOnly = InlineOnly;\r\n                    foreach (var str in SchemeList.Split(',').ToList())\r\n                    {\r\n                        if (!string.IsNullOrEmpty(str))\r\n                        {\r\n                            MarkdownDocument.KnownSchemes.Add(str);\r\n                        }\r\n                    }\r\n\r\n                    markdown.Parse(Text);\r\n                    markdownRenderedArgs.Document = markdown;\r\n\r\n\r\n                    // Now try to display it\r\n                    if (Activator.CreateInstance(renderertype, markdown, this, this, this) is not MarkdownRenderer renderer)\r\n                    {\r\n                        throw new Exception(\"Markdown Renderer was not of the correct type.\");\r\n                    }\r\n\r\n                    renderer.IsHuge = IsHuge(markdown);\r\n                    renderer.Background = Background;\r\n                    renderer.BorderBrush = BorderBrush;\r\n                    renderer.BorderThickness = BorderThickness;\r\n                    renderer.CharacterSpacing = CharacterSpacing;\r\n                    renderer.FontFamily = FontFamily;\r\n                    renderer.FontSize = renderer.IsHuge && AllowHugeEmoji ? 42 : FontSize;\r\n                    renderer.FontStretch = FontStretch;\r\n                    renderer.FontStyle = FontStyle;\r\n                    renderer.FontWeight = FontWeight;\r\n                    renderer.Foreground = Foreground;\r\n                    renderer.IsTextSelectionEnabled = IsTextSelectionEnabled;\r\n                    renderer.Padding = Padding;\r\n                    renderer.CodeBackground = CodeBackground;\r\n                    renderer.CodeBorderBrush = CodeBorderBrush;\r\n                    renderer.CodeBorderThickness = CodeBorderThickness;\r\n                    renderer.InlineCodeBorderThickness = InlineCodeBorderThickness;\r\n                    renderer.InlineCodeBackground = InlineCodeBackground;\r\n                    renderer.InlineCodeBorderBrush = InlineCodeBorderBrush;\r\n                    renderer.InlineCodePadding = InlineCodePadding;\r\n                    renderer.InlineCodeFontFamily = InlineCodeFontFamily;\r\n                    renderer.CodeForeground = CodeForeground;\r\n                    renderer.CodeFontFamily = CodeFontFamily;\r\n                    renderer.CodePadding = CodePadding;\r\n                    renderer.CodeMargin = CodeMargin;\r\n                    renderer.EmojiFontFamily = EmojiFontFamily;\r\n                    renderer.Header1FontSize = Header1FontSize;\r\n                    renderer.Header1FontWeight = Header1FontWeight;\r\n                    renderer.Header1Margin = Header1Margin;\r\n                    renderer.Header1Foreground = Header1Foreground;\r\n                    renderer.Header2FontSize = Header2FontSize;\r\n                    renderer.Header2FontWeight = Header2FontWeight;\r\n                    renderer.Header2Margin = Header2Margin;\r\n                    renderer.Header2Foreground = Header2Foreground;\r\n                    renderer.Header3FontSize = Header3FontSize;\r\n                    renderer.Header3FontWeight = Header3FontWeight;\r\n                    renderer.Header3Margin = Header3Margin;\r\n                    renderer.Header3Foreground = Header3Foreground;\r\n                    renderer.Header4FontSize = Header4FontSize;\r\n                    renderer.Header4FontWeight = Header4FontWeight;\r\n                    renderer.Header4Margin = Header4Margin;\r\n                    renderer.Header4Foreground = Header4Foreground;\r\n                    renderer.Header5FontSize = Header5FontSize;\r\n                    renderer.Header5FontWeight = Header5FontWeight;\r\n                    renderer.Header5Margin = Header5Margin;\r\n                    renderer.Header5Foreground = Header5Foreground;\r\n                    renderer.Header6FontSize = Header6FontSize;\r\n                    renderer.Header6FontWeight = Header6FontWeight;\r\n                    renderer.Header6Margin = Header6Margin;\r\n                    renderer.Header6Foreground = Header6Foreground;\r\n                    renderer.HorizontalRuleBrush = HorizontalRuleBrush;\r\n                    renderer.HorizontalRuleMargin = HorizontalRuleMargin;\r\n                    renderer.HorizontalRuleThickness = HorizontalRuleThickness;\r\n                    renderer.ListMargin = ListMargin;\r\n                    renderer.ListGutterWidth = ListGutterWidth;\r\n                    renderer.ListBulletSpacing = ListBulletSpacing;\r\n                    renderer.ParagraphMargin = ParagraphMargin;\r\n                    renderer.QuoteBackground = QuoteBackground;\r\n                    renderer.QuoteBorderBrush = QuoteBorderBrush;\r\n                    renderer.QuoteBorderThickness = QuoteBorderThickness;\r\n                    renderer.QuoteForeground = QuoteForeground;\r\n                    renderer.QuoteMargin = QuoteMargin;\r\n                    renderer.QuotePadding = QuotePadding;\r\n                    renderer.TableBorderBrush = TableBorderBrush;\r\n                    renderer.TableBorderThickness = TableBorderThickness;\r\n                    renderer.TableCellPadding = TableCellPadding;\r\n                    renderer.TableMargin = TableMargin;\r\n                    renderer.TextWrapping = TextWrapping;\r\n                    renderer.LinkForeground = LinkForeground;\r\n                    renderer.ImageStretch = ImageStretch;\r\n                    renderer.ImageMaxHeight = ImageMaxHeight;\r\n                    renderer.ImageMaxWidth = ImageMaxWidth;\r\n                    renderer.WrapCodeBlock = WrapCodeBlock;\r\n                    renderer.Channel = Channel;\r\n                    renderer.ColourBrushConverter = ColourBrushConverter;\r\n                    renderer.IsSystemMessage = IsSystemMessage;\r\n                    renderer.CodeCornerRadius = CodeCornerRadius;\r\n                    renderer.InlineCodeCornerRadius = InlineCodeCornerRadius;\r\n\r\n                    _rootElement.Child = renderer.Render();\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    Logger.LogError(ex);\r\n                    Debug.WriteLine(\"Error while parsing and rendering: \" + ex.Message);\r\n                    Debug.WriteLine(Text);\r\n\r\n                    if (Debugger.IsAttached)\r\n                    {\r\n                        //Debugger.Break();\r\n                    }\r\n\r\n                    markdownRenderedArgs = new MarkdownRenderedEventArgs(ex);\r\n                }\r\n            }\r\n\r\n            // Indicate that the parse is done.\r\n            MarkdownRendered?.Invoke(this, markdownRenderedArgs);\r\n        }\r\n\r\n        private void UnhookListeners()\r\n        {\r\n            // Clear any hyper link events if we have any\r\n            foreach (var link in _listeningHyperlinks)\r\n            {\r\n                if (link is Hyperlink hyperlink)\r\n                {\r\n                    hyperlink.Click -= Hyperlink_Click;\r\n                }\r\n                else if (link is Image image)\r\n                {\r\n                    image.Tapped -= NewImagelink_Tapped;\r\n                }\r\n            }\r\n\r\n            // Clear everything that exists.\r\n            _listeningHyperlinks.Clear();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called when the render has a link we need to listen to.\r\n        /// </summary>\r\n        public void RegisterNewHyperLink(Hyperlink newHyperlink, string linkUrl)\r\n        {\r\n            // Setup a listener for clicks.\r\n            newHyperlink.Click += Hyperlink_Click;\r\n\r\n            // Associate the URL with the hyperlink.\r\n            newHyperlink.SetValue(HyperlinkUrlProperty, linkUrl);\r\n\r\n            // Add it to our list\r\n            _listeningHyperlinks.Add(newHyperlink);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called when the render has a link we need to listen to.\r\n        /// </summary>\r\n        public void RegisterNewHyperLink(Image newImagelink, string linkUrl, bool isHyperLink)\r\n        {\r\n            // Setup a listener for clicks.\r\n            newImagelink.Tapped += NewImagelink_Tapped;\r\n\r\n            // Associate the URL with the hyperlink.\r\n            newImagelink.SetValue(HyperlinkUrlProperty, linkUrl);\r\n\r\n            // Set if the Image is HyperLink or not\r\n            newImagelink.SetValue(IsHyperlinkProperty, isHyperLink);\r\n\r\n            // Add it to our list\r\n            _listeningHyperlinks.Add(newImagelink);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called when the renderer needs to display a image.\r\n        /// </summary>\r\n        /// <returns>A <see cref=\"Task\"/> representing the asynchronous operation.</returns>\r\n        async Task<ImageSource> IImageResolver.ResolveImageAsync(string url, string tooltip)\r\n        {\r\n            if (!Uri.TryCreate(url, UriKind.Absolute, out var uri))\r\n            {\r\n                if (!string.IsNullOrEmpty(UriPrefix))\r\n                {\r\n                    url = string.Format(\"{0}{1}\", UriPrefix, url);\r\n                }\r\n            }\r\n\r\n            var eventArgs = new ImageResolvingEventArgs(url, tooltip);\r\n            ImageResolving?.Invoke(this, eventArgs);\r\n\r\n            await eventArgs.WaitForDeferrals();\r\n\r\n            try\r\n            {\r\n                return eventArgs.Handled\r\n                    ? eventArgs.Image\r\n                    : GetImageSource(new Uri(url));\r\n            }\r\n            catch (Exception)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            ImageSource GetImageSource(Uri imageUrl)\r\n            {\r\n                if (_isSvgImageSupported)\r\n                {\r\n                    if (Path.GetExtension(imageUrl.AbsolutePath)?.ToLowerInvariant() == \".svg\")\r\n                    {\r\n                        return new SvgImageSource(imageUrl);\r\n                    }\r\n                }\r\n\r\n                return new BitmapImage(imageUrl);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called when a Code Block is being rendered.\r\n        /// </summary>\r\n        /// <returns>Parsing was handled Successfully</returns>\r\n        bool ICodeBlockResolver.ParseSyntax(InlineCollection inlineCollection, string text, string codeLanguage)\r\n        {\r\n            var eventArgs = new CodeBlockResolvingEventArgs(inlineCollection, text, codeLanguage);\r\n            CodeBlockResolving?.Invoke(this, eventArgs);\r\n\r\n            try\r\n            {\r\n                var result = eventArgs.Handled;\r\n                if (UseSyntaxHighlighting && !result && codeLanguage != null)\r\n                {\r\n                    var language = Languages.FindById(codeLanguage);\r\n                    if (language != null)\r\n                    {\r\n                        RichTextBlockFormatter formatter;\r\n                        if (CodeStyling != null)\r\n                        {\r\n                            formatter = new RichTextBlockFormatter(CodeStyling);\r\n                        }\r\n                        else\r\n                        {\r\n                            var theme = themeListener.CurrentTheme == ApplicationTheme.Dark ? ElementTheme.Dark : ElementTheme.Light;\r\n                            if (RequestedTheme != ElementTheme.Default)\r\n                            {\r\n                                theme = RequestedTheme;\r\n                            }\r\n\r\n                            formatter = new RichTextBlockFormatter(theme);\r\n                        }\r\n\r\n                        formatter.FormatInlines(text, language, inlineCollection);\r\n                        return true;\r\n                    }\r\n                }\r\n\r\n                return result;\r\n            }\r\n            catch\r\n            {\r\n                return false;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called when a link needs to be handled\r\n        /// </summary>\r\n        internal async void LinkHandled(string url, bool isHyperlink)\r\n        {\r\n            // Links that are nested within superscript elements cause the Click event to fire multiple times.\r\n            // e.g. this markdown \"[^bot](http://www.reddit.com/r/youtubefactsbot/wiki/index)\"\r\n            // Therefore we detect and ignore multiple clicks.\r\n            if (multiClickDetectionTriggered)\r\n            {\r\n                return;\r\n            }\r\n\r\n            multiClickDetectionTriggered = true;\r\n            await Dispatcher.RunAsync(CoreDispatcherPriority.High, () => multiClickDetectionTriggered = false);\r\n\r\n            // Get the hyperlink URL.\r\n            if (url == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            // Fire off the event.\r\n            //var eventArgs = new LinkClickedEventArgs(url);\r\n            //if (isHyperlink)\r\n            //{\r\n            //    LinkClicked?.Invoke(this, eventArgs);\r\n            //}\r\n            //else\r\n            //{\r\n            //    ImageClicked?.Invoke(this, eventArgs);\r\n            //}\r\n\r\n            // Capture if URL links to a Discord message\r\n            var match = System.Text.RegularExpressions.Regex.Match(url, @\"https://discord\\.com/channels/(@me|\\d+)\\/(\\d+)(?:\\/(\\d+))?\");\r\n            if (match != null && match.Success)\r\n            {\r\n                ulong messageID = 0;\r\n                ulong.TryParse(match.Groups[2].Value, out var channelID);\r\n                if (match.Groups.Count > 3)\r\n                {\r\n                    ulong.TryParse(match.Groups[3].Value, out messageID);\r\n                }\r\n\r\n                var channel = await DiscordManager.Discord.GetChannelAsync(channelID);\r\n                if (channel != null)\r\n                {\r\n                    await DiscordNavigationService.GetForCurrentView().NavigateAsync(channel, false, messageID);\r\n                    return;\r\n                }\r\n            }\r\n\r\n            if (Uri.TryCreate(url, UriKind.Absolute, out var uri))\r\n            {\r\n                await Launcher.LaunchUriAsync(uri, new LauncherOptions() { TreatAsUntrusted = App.RoamingSettings.Read(Constants.WARN_UNSAFE_LINKS, true) && uri.Scheme != \"https\" });\r\n            }\r\n        }\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/MarkdownTextBlock.Properties.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing ColorCode.Styling;\r\nusing DSharpPlus.Entities;\r\nusing Microsoft.Toolkit.Uwp.UI.Helpers;\r\nusing Unicord.Universal.Controls.Markdown.Render;\r\nusing Unicord.Universal.Converters;\r\nusing Windows.UI.Text;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Media;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    /// <summary>\r\n    /// An efficient and extensible control that can parse and render markdown.\r\n    /// </summary>\r\n    public partial class MarkdownTextBlock\r\n    {\r\n        // SvgImageSource was introduced in Creators Update (15063), our target platform\r\n        private const bool _isSvgImageSupported = true;\r\n\r\n        // Used to attach the URL to hyperlinks.\r\n        private static readonly DependencyProperty HyperlinkUrlProperty =\r\n            DependencyProperty.RegisterAttached(\"HyperlinkUrl\", typeof(string), typeof(MarkdownTextBlock), new PropertyMetadata(null));\r\n\r\n        // Checkes if clicked image is a hyperlink or not.\r\n        private static readonly DependencyProperty IsHyperlinkProperty =\r\n            DependencyProperty.RegisterAttached(\"IsHyperLink\", typeof(string), typeof(MarkdownTextBlock), new PropertyMetadata(null));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"CodeStyling\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty CodeStylingProperty =\r\n            DependencyProperty.Register(\r\n                nameof(CodeStyling),\r\n                typeof(StyleDictionary),\r\n                typeof(MarkdownTextBlock),\r\n                new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"UseSyntaxHighlighting\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty UseSyntaxHighlightingProperty =\r\n            DependencyProperty.Register(\r\n                nameof(UseSyntaxHighlighting),\r\n                typeof(bool),\r\n                typeof(MarkdownTextBlock),\r\n                new PropertyMetadata(true, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"WrapCodeBlock\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty WrapCodeBlockProperty =\r\n            DependencyProperty.Register(nameof(WrapCodeBlock), typeof(bool), typeof(MarkdownTextBlock), new PropertyMetadata(false));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Text\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty TextProperty = DependencyProperty.Register(\r\n            nameof(Text),\r\n            typeof(string),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(string.Empty, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"InlineCodeBackground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty InlineCodeBackgroundProperty =\r\n            DependencyProperty.Register(\r\n                nameof(InlineCodeBackground),\r\n                typeof(Brush),\r\n                typeof(MarkdownTextBlock),\r\n                new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"InlineCodeBorderBrush\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty InlineCodeBorderBrushProperty =\r\n            DependencyProperty.Register(\r\n                nameof(InlineCodeBorderBrush),\r\n                typeof(Brush),\r\n                typeof(MarkdownTextBlock),\r\n                new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"IsTextSelectionEnabled\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty IsTextSelectionEnabledProperty = DependencyProperty.Register(\r\n            nameof(IsTextSelectionEnabled),\r\n            typeof(bool),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(true, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"LinkForeground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty LinkForegroundProperty = DependencyProperty.Register(\r\n            nameof(LinkForeground),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"CodeBackground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty CodeBackgroundProperty = DependencyProperty.Register(\r\n            nameof(CodeBackground),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"CodeBorderBrush\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty CodeBorderBrushProperty = DependencyProperty.Register(\r\n            nameof(CodeBorderBrush),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"CodeForeground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty CodeForegroundProperty = DependencyProperty.Register(\r\n            nameof(CodeForeground),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"CodeFontFamily\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty CodeFontFamilyProperty = DependencyProperty.Register(\r\n            nameof(CodeFontFamily),\r\n            typeof(FontFamily),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"InlineCodeFontFamily\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty InlineCodeFontFamilyProperty = DependencyProperty.Register(\r\n            nameof(InlineCodeFontFamily),\r\n            typeof(FontFamily),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"EmojiFontFamily\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty EmojiFontFamilyProperty = DependencyProperty.Register(\r\n            nameof(EmojiFontFamily),\r\n            typeof(FontFamily),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header1FontWeight\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header1FontWeightProperty = DependencyProperty.Register(\r\n            nameof(Header1FontWeight),\r\n            typeof(FontWeight),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header1Foreground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header1ForegroundProperty = DependencyProperty.Register(\r\n            nameof(Header1Foreground),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header2FontWeight\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header2FontWeightProperty = DependencyProperty.Register(\r\n            nameof(Header2FontWeight),\r\n            typeof(FontWeight),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header2Foreground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header2ForegroundProperty = DependencyProperty.Register(\r\n            nameof(Header2Foreground),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header3FontWeight\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header3FontWeightProperty = DependencyProperty.Register(\r\n            nameof(Header3FontWeight),\r\n            typeof(FontWeight),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header3Foreground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header3ForegroundProperty = DependencyProperty.Register(\r\n            nameof(Header3Foreground),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header4FontWeight\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header4FontWeightProperty = DependencyProperty.Register(\r\n            nameof(Header4FontWeight),\r\n            typeof(FontWeight),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header4Foreground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header4ForegroundProperty = DependencyProperty.Register(\r\n            nameof(Header4Foreground),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header5FontWeight\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header5FontWeightProperty = DependencyProperty.Register(\r\n            nameof(Header5FontWeight),\r\n            typeof(FontWeight),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header5Foreground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header5ForegroundProperty = DependencyProperty.Register(\r\n            nameof(Header5Foreground),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header6FontWeight\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header6FontWeightProperty = DependencyProperty.Register(\r\n            nameof(Header6FontWeight),\r\n            typeof(FontWeight),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"Header6Foreground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty Header6ForegroundProperty = DependencyProperty.Register(\r\n            nameof(Header6Foreground),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"HorizontalRuleBrush\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty HorizontalRuleBrushProperty = DependencyProperty.Register(\r\n            nameof(HorizontalRuleBrush),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"QuoteBackground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty QuoteBackgroundProperty = DependencyProperty.Register(\r\n            nameof(QuoteBackground),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"QuoteBorderBrush\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty QuoteBorderBrushProperty = DependencyProperty.Register(\r\n            nameof(QuoteBorderBrush),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"QuoteForeground\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty QuoteForegroundProperty = DependencyProperty.Register(\r\n            nameof(QuoteForeground),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"TableBorderBrush\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty TableBorderBrushProperty = DependencyProperty.Register(\r\n            nameof(TableBorderBrush),\r\n            typeof(Brush),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(null, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"UriPrefix\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty UriPrefixProperty = DependencyProperty.Register(\r\n            nameof(UriPrefix),\r\n            typeof(string),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(string.Empty, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"UriPrefix\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty SchemeListProperty = DependencyProperty.Register(\r\n            nameof(SchemeList),\r\n            typeof(string),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(string.Empty, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets the dependency property for <see cref=\"UriPrefix\"/>.\r\n        /// </summary>\r\n        public static readonly DependencyProperty InlineOnlyProperty = DependencyProperty.Register(\r\n            nameof(InlineOnly),\r\n            typeof(bool),\r\n            typeof(MarkdownTextBlock),\r\n            new PropertyMetadata(false, OnPropertyChangedStatic));\r\n\r\n        /// <summary>\r\n        /// Gets or sets the markdown text to display.\r\n        /// </summary>\r\n        public bool InlineOnly\r\n        {\r\n            get => (bool)GetValue(InlineOnlyProperty);\r\n            set => SetValue(InlineOnlyProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the markdown text to display.\r\n        /// </summary>\r\n        public string Text\r\n        {\r\n            get => (string)GetValue(TextProperty);\r\n            set => SetValue(TextProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether to use Syntax Highlighting on Code.\r\n        /// </summary>\r\n        public bool UseSyntaxHighlighting\r\n        {\r\n            get => (bool)GetValue(UseSyntaxHighlightingProperty);\r\n            set => SetValue(UseSyntaxHighlightingProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether to Wrap the Code Block or use a Horizontal Scroll.\r\n        /// </summary>\r\n        public bool WrapCodeBlock\r\n        {\r\n            get => (bool)GetValue(WrapCodeBlockProperty);\r\n            set => SetValue(WrapCodeBlockProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the Default Code Styling for Code Blocks.\r\n        /// </summary>\r\n        public StyleDictionary CodeStyling\r\n        {\r\n            get => (StyleDictionary)GetValue(CodeStylingProperty);\r\n            set => SetValue(CodeStylingProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether text selection is enabled.\r\n        /// </summary>\r\n        public bool IsTextSelectionEnabled\r\n        {\r\n            get => (bool)GetValue(IsTextSelectionEnabledProperty);\r\n            set => SetValue(IsTextSelectionEnabledProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render links.  If this is\r\n        /// <c>null</c>, then Foreground is used.\r\n        /// </summary>\r\n        public Brush LinkForeground\r\n        {\r\n            get => (Brush)GetValue(LinkForegroundProperty);\r\n            set => SetValue(LinkForegroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to fill the background of a code block.\r\n        /// </summary>\r\n        public Brush CodeBackground\r\n        {\r\n            get => (Brush)GetValue(CodeBackgroundProperty);\r\n            set => SetValue(CodeBackgroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render the border fill of a code block.\r\n        /// </summary>\r\n        public Brush CodeBorderBrush\r\n        {\r\n            get => (Brush)GetValue(CodeBorderBrushProperty);\r\n            set => SetValue(CodeBorderBrushProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render the text inside a code block.  If this is\r\n        /// <c>null</c>, then Foreground is used.\r\n        /// </summary>\r\n        public Brush CodeForeground\r\n        {\r\n            get => (Brush)GetValue(CodeForegroundProperty);\r\n            set => SetValue(CodeForegroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font used to display code.  If this is <c>null</c>, then\r\n        /// <see cref=\"FontFamily\"/> is used.\r\n        /// </summary>\r\n        public FontFamily CodeFontFamily\r\n        {\r\n            get => (FontFamily)GetValue(CodeFontFamilyProperty);\r\n            set => SetValue(CodeFontFamilyProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font used to display code.  If this is <c>null</c>, then\r\n        /// <see cref=\"FontFamily\"/> is used.\r\n        /// </summary>\r\n        public FontFamily InlineCodeFontFamily\r\n        {\r\n            get => (FontFamily)GetValue(InlineCodeFontFamilyProperty);\r\n            set => SetValue(InlineCodeFontFamilyProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for inline code.\r\n        /// </summary>\r\n        public Brush InlineCodeBackground\r\n        {\r\n            get => (Brush)GetValue(InlineCodeBackgroundProperty);\r\n            set => SetValue(InlineCodeBackgroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the border brush for inline code.\r\n        /// </summary>\r\n        public Brush InlineCodeBorderBrush\r\n        {\r\n            get => (Brush)GetValue(InlineCodeBorderBrushProperty);\r\n            set => SetValue(InlineCodeBorderBrushProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font used to display emojis.  If this is <c>null</c>, then\r\n        /// Segoe UI Emoji font is used.\r\n        /// </summary>\r\n        public FontFamily EmojiFontFamily\r\n        {\r\n            get => (FontFamily)GetValue(EmojiFontFamilyProperty);\r\n            set => SetValue(EmojiFontFamilyProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 1 headers.\r\n        /// </summary>\r\n        public FontWeight Header1FontWeight\r\n        {\r\n            get => (FontWeight)GetValue(Header1FontWeightProperty);\r\n            set => SetValue(Header1FontWeightProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 1 headers.\r\n        /// </summary>\r\n        public Brush Header1Foreground\r\n        {\r\n            get => (Brush)GetValue(Header1ForegroundProperty);\r\n            set => SetValue(Header1ForegroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 2 headers.\r\n        /// </summary>\r\n        public FontWeight Header2FontWeight\r\n        {\r\n            get => (FontWeight)GetValue(Header2FontWeightProperty);\r\n            set => SetValue(Header2FontWeightProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 2 headers.\r\n        /// </summary>\r\n        public Brush Header2Foreground\r\n        {\r\n            get => (Brush)GetValue(Header2ForegroundProperty);\r\n            set => SetValue(Header2ForegroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 3 headers.\r\n        /// </summary>\r\n        public FontWeight Header3FontWeight\r\n        {\r\n            get => (FontWeight)GetValue(Header3FontWeightProperty);\r\n            set => SetValue(Header3FontWeightProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 3 headers.\r\n        /// </summary>\r\n        public Brush Header3Foreground\r\n        {\r\n            get => (Brush)GetValue(Header3ForegroundProperty);\r\n            set => SetValue(Header3ForegroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 4 headers.\r\n        /// </summary>\r\n        public FontWeight Header4FontWeight\r\n        {\r\n            get => (FontWeight)GetValue(Header4FontWeightProperty);\r\n            set => SetValue(Header4FontWeightProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 4 headers.\r\n        /// </summary>\r\n        public Brush Header4Foreground\r\n        {\r\n            get => (Brush)GetValue(Header4ForegroundProperty);\r\n            set => SetValue(Header4ForegroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 5 headers.\r\n        /// </summary>\r\n        public FontWeight Header5FontWeight\r\n        {\r\n            get => (FontWeight)GetValue(Header5FontWeightProperty);\r\n            set => SetValue(Header5FontWeightProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 5 headers.\r\n        /// </summary>\r\n        public Brush Header5Foreground\r\n        {\r\n            get => (Brush)GetValue(Header5ForegroundProperty);\r\n            set => SetValue(Header5ForegroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 6 headers.\r\n        /// </summary>\r\n        public FontWeight Header6FontWeight\r\n        {\r\n            get => (FontWeight)GetValue(Header6FontWeightProperty);\r\n            set => SetValue(Header6FontWeightProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 6 headers.\r\n        /// </summary>\r\n        public Brush Header6Foreground\r\n        {\r\n            get => (Brush)GetValue(Header6ForegroundProperty);\r\n            set => SetValue(Header6ForegroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render a horizontal rule.  If this is <c>null</c>, then\r\n        /// <see cref=\"HorizontalRuleBrush\"/> is used.\r\n        /// </summary>\r\n        public Brush HorizontalRuleBrush\r\n        {\r\n            get => (Brush)GetValue(HorizontalRuleBrushProperty);\r\n            set => SetValue(HorizontalRuleBrushProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to fill the background of a quote block.\r\n        /// </summary>\r\n        public Brush QuoteBackground\r\n        {\r\n            get => (Brush)GetValue(QuoteBackgroundProperty);\r\n            set => SetValue(QuoteBackgroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render a quote border.  If this is <c>null</c>, then\r\n        /// <see cref=\"QuoteBorderBrush\"/> is used.\r\n        /// </summary>\r\n        public Brush QuoteBorderBrush\r\n        {\r\n            get => (Brush)GetValue(QuoteBorderBrushProperty);\r\n            set => SetValue(QuoteBorderBrushProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render the text inside a quote block.  If this is\r\n        /// <c>null</c>, then Foreground is used.\r\n        /// </summary>\r\n        public Brush QuoteForeground\r\n        {\r\n            get => (Brush)GetValue(QuoteForegroundProperty);\r\n            set => SetValue(QuoteForegroundProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render table borders.  If this is <c>null</c>, then\r\n        /// <see cref=\"TableBorderBrush\"/> is used.\r\n        /// </summary>\r\n        public Brush TableBorderBrush\r\n        {\r\n            get => (Brush)GetValue(TableBorderBrushProperty);\r\n            set => SetValue(TableBorderBrushProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the Prefix of Uri.\r\n        /// </summary>\r\n        public string UriPrefix\r\n        {\r\n            get => (string)GetValue(UriPrefixProperty);\r\n            set => SetValue(UriPrefixProperty, value);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the SchemeList.\r\n        /// </summary>\r\n        public string SchemeList\r\n        {\r\n            get => (string)GetValue(SchemeListProperty);\r\n            set => SetValue(SchemeListProperty, value);\r\n        }\r\n\r\n        public DiscordChannel Channel\r\n        {\r\n            get => (DiscordChannel)GetValue(ChannelProperty);\r\n            set => SetValue(ChannelProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty ChannelProperty =\r\n            DependencyProperty.Register(\"Channel\", typeof(DiscordChannel), typeof(MarkdownTextBlock), new PropertyMetadata(null));\r\n\r\n        public bool IsSystemMessage\r\n        {\r\n            get => (bool)GetValue(IsSystemMessageProperty);\r\n            set => SetValue(IsSystemMessageProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty IsSystemMessageProperty =\r\n            DependencyProperty.Register(\"IsSystemMessage\", typeof(bool), typeof(MarkdownTextBlock), new PropertyMetadata(null));\r\n\r\n\r\n        public ColourBrushConverter ColourBrushConverter\r\n        {\r\n            get { return (ColourBrushConverter)GetValue(ColourBrushConverterProperty); }\r\n            set { SetValue(ColourBrushConverterProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty ColourBrushConverterProperty =\r\n            DependencyProperty.Register(\"ColourBrushConverter\", typeof(ColourBrushConverter), typeof(MarkdownTextBlock), new PropertyMetadata(null));\r\n\r\n        public bool AllowHugeEmoji\r\n        {\r\n            get { return (bool)GetValue(AllowHugeEmojiProperty); }\r\n            set { SetValue(AllowHugeEmojiProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty AllowHugeEmojiProperty =\r\n            DependencyProperty.Register(\"AllowHugeEmoji\", typeof(bool), typeof(MarkdownTextBlock), new PropertyMetadata(false));\r\n\r\n        public CornerRadius CodeCornerRadius\r\n        {\r\n            get { return (CornerRadius)GetValue(CodeCornerRadiusProperty); }\r\n            set { SetValue(CodeCornerRadiusProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty CodeCornerRadiusProperty =\r\n            DependencyProperty.Register(\"CodeCornerRadius\", typeof(CornerRadius), typeof(MarkdownTextBlock), new PropertyMetadata(null));\r\n\r\n        public CornerRadius InlineCodeCornerRadius\r\n        {\r\n            get { return (CornerRadius)GetValue(InlineCodeCornerRadiusProperty); }\r\n            set { SetValue(InlineCodeCornerRadiusProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty InlineCodeCornerRadiusProperty =\r\n            DependencyProperty.Register(\"InlineCodeCornerRadius\", typeof(CornerRadius), typeof(MarkdownTextBlock), new PropertyMetadata(null));\r\n\r\n        /// <summary>\r\n        /// Holds a list of hyperlinks we are listening to.\r\n        /// </summary>\r\n        private readonly List<object> _listeningHyperlinks = new List<object>();\r\n\r\n        /// <summary>\r\n        /// The root element for our rendering.\r\n        /// </summary>\r\n        private Border _rootElement;\r\n\r\n        private bool multiClickDetectionTriggered;\r\n\r\n        private Type renderertype = typeof(MarkdownRenderer);\r\n\r\n        private ThemeListener themeListener;\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/MarkdownTextBlock.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Microsoft.Toolkit.Uwp.UI.Helpers;\r\nusing Unicord.Universal.Controls.Markdown.Render;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    /// <summary>\r\n    /// An efficient and extensible control that can parse and render markdown.\r\n    /// </summary>\r\n    public sealed partial class MarkdownTextBlock : Control, ILinkRegister, IImageResolver, ICodeBlockResolver\r\n    {\r\n        private long _fontSizePropertyToken;\r\n        private long _backgroundPropertyToken;\r\n        private long _borderBrushPropertyToken;\r\n        private long _borderThicknessPropertyToken;\r\n        private long _characterSpacingPropertyToken;\r\n        private long _fontFamilyPropertyToken;\r\n        private long _fontStretchPropertyToken;\r\n        private long _fontStylePropertyToken;\r\n        private long _fontWeightPropertyToken;\r\n        private long _foregroundPropertyToken;\r\n        private long _paddingPropertyToken;\r\n        private long _requestedThemePropertyToken;\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"MarkdownTextBlock\"/> class.\r\n        /// </summary>\r\n        public MarkdownTextBlock()\r\n        {\r\n            // Set our style.\r\n            DefaultStyleKey = typeof(MarkdownTextBlock);\r\n\r\n            Loaded += OnLoaded;\r\n            Unloaded += OnUnloaded;\r\n        }\r\n\r\n        private void ThemeListener_ThemeChanged(ThemeListener sender)\r\n        {\r\n            RenderMarkdown();\r\n        }\r\n\r\n        private void OnLoaded(object sender, RoutedEventArgs e)\r\n        {\r\n            RegisterThemeChangedHandler();\r\n\r\n            // Register for property callbacks that are owned by our parent class.\r\n            _fontSizePropertyToken = RegisterPropertyChangedCallback(FontSizeProperty, OnPropertyChanged);\r\n            _backgroundPropertyToken = RegisterPropertyChangedCallback(BackgroundProperty, OnPropertyChanged);\r\n            _borderBrushPropertyToken = RegisterPropertyChangedCallback(BorderBrushProperty, OnPropertyChanged);\r\n            _borderThicknessPropertyToken = RegisterPropertyChangedCallback(BorderThicknessProperty, OnPropertyChanged);\r\n            _characterSpacingPropertyToken = RegisterPropertyChangedCallback(CharacterSpacingProperty, OnPropertyChanged);\r\n            _fontFamilyPropertyToken = RegisterPropertyChangedCallback(FontFamilyProperty, OnPropertyChanged);\r\n            _fontStretchPropertyToken = RegisterPropertyChangedCallback(FontStretchProperty, OnPropertyChanged);\r\n            _fontStylePropertyToken = RegisterPropertyChangedCallback(FontStyleProperty, OnPropertyChanged);\r\n            _fontWeightPropertyToken = RegisterPropertyChangedCallback(FontWeightProperty, OnPropertyChanged);\r\n            _foregroundPropertyToken = RegisterPropertyChangedCallback(ForegroundProperty, OnPropertyChanged);\r\n            _paddingPropertyToken = RegisterPropertyChangedCallback(PaddingProperty, OnPropertyChanged);\r\n            _requestedThemePropertyToken = RegisterPropertyChangedCallback(RequestedThemeProperty, OnPropertyChanged);\r\n        }\r\n\r\n        private void OnUnloaded(object sender, RoutedEventArgs e)\r\n        {\r\n            if (themeListener != null)\r\n            {\r\n                UnhookListeners();\r\n                themeListener.ThemeChanged -= ThemeListener_ThemeChanged;\r\n                themeListener.Dispose();\r\n                themeListener = null;\r\n            }\r\n\r\n            // Register for property callbacks that are owned by our parent class.\r\n            UnregisterPropertyChangedCallback(FontSizeProperty, _fontSizePropertyToken);\r\n            UnregisterPropertyChangedCallback(BackgroundProperty, _backgroundPropertyToken);\r\n            UnregisterPropertyChangedCallback(BorderBrushProperty, _borderBrushPropertyToken);\r\n            UnregisterPropertyChangedCallback(BorderThicknessProperty, _borderThicknessPropertyToken);\r\n            UnregisterPropertyChangedCallback(CharacterSpacingProperty, _characterSpacingPropertyToken);\r\n            UnregisterPropertyChangedCallback(FontFamilyProperty, _fontFamilyPropertyToken);\r\n            UnregisterPropertyChangedCallback(FontStretchProperty, _fontStylePropertyToken);\r\n            UnregisterPropertyChangedCallback(FontWeightProperty, _fontWeightPropertyToken);\r\n            UnregisterPropertyChangedCallback(ForegroundProperty, _foregroundPropertyToken);\r\n            UnregisterPropertyChangedCallback(PaddingProperty, _paddingPropertyToken);\r\n            UnregisterPropertyChangedCallback(RequestedThemeProperty, _requestedThemePropertyToken);\r\n        }\r\n\r\n        /// <inheritdoc />\r\n        protected override void OnApplyTemplate()\r\n        {\r\n            RegisterThemeChangedHandler();\r\n\r\n            // Grab our root\r\n            _rootElement = GetTemplateChild(\"RootElement\") as Border;\r\n\r\n            // And make sure to render any markdown we have.\r\n            RenderMarkdown();\r\n        }\r\n\r\n        private void RegisterThemeChangedHandler()\r\n        {\r\n            themeListener = themeListener ?? new ThemeListener();\r\n            themeListener.ThemeChanged -= ThemeListener_ThemeChanged;\r\n            themeListener.ThemeChanged += ThemeListener_ThemeChanged;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Core/IParser.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\n\r\nnamespace Unicord.Universal.Parsers\r\n{\r\n    /// <summary>\r\n    /// Parser interface.\r\n    /// </summary>\r\n    /// <typeparam name=\"T\">Type to parse into.</typeparam>\r\n    public interface IParser<out T>\r\n        where T : SchemaBase\r\n    {\r\n        /// <summary>\r\n        /// Parse method which all classes must implement.\r\n        /// </summary>\r\n        /// <param name=\"data\">Data to parse.</param>\r\n        /// <returns>Strong typed parsed data.</returns>\r\n        IEnumerable<T> Parse(string data);\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Core/ParseHelpers.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Core\r\n{\r\n    /// <summary>\r\n    /// This class offers helpers for Parsing.\r\n    /// </summary>\r\n    public static class ParseHelpers\r\n    {\r\n        /// <summary>\r\n        /// Determines if a Markdown string is blank or comprised entirely of whitespace characters.\r\n        /// </summary>\r\n        /// <returns>true if blank or white space</returns>\r\n        public static bool IsMarkdownBlankOrWhiteSpace(string str)\r\n        {\r\n            for (int i = 0; i < str.Length; i++)\r\n            {\r\n                if (!IsMarkdownWhiteSpace(str[i]))\r\n                {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines if a character is a Markdown whitespace character.\r\n        /// </summary>\r\n        /// <returns>true if is white space</returns>\r\n        public static bool IsMarkdownWhiteSpace(char c)\r\n        {\r\n            return c == ' ' || c == '\\t' || c == '\\r' || c == '\\n';\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Core/SchemaBase.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers\r\n{\r\n    /// <summary>\r\n    /// Strong typed schema base class.\r\n    /// </summary>\r\n    public abstract class SchemaBase\r\n    {\r\n        /// <summary>\r\n        /// Gets or sets identifier for strong typed record.\r\n        /// </summary>\r\n        public string InternalID { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Core/StringValueAttribute.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\n\r\nnamespace Unicord.Universal.Parsers.Core\r\n{\r\n    /// <summary>\r\n    /// The StringValue attribute is used as a helper to decorate enum values with string representations.\r\n    /// </summary>\r\n    [AttributeUsage(AttributeTargets.Field)]\r\n    public sealed class StringValueAttribute : Attribute\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"StringValueAttribute\"/> class.\r\n        /// Constructor accepting string value.\r\n        /// </summary>\r\n        /// <param name=\"value\">String value</param>\r\n        public StringValueAttribute(string value)\r\n        {\r\n            Value = value;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets property for string value.\r\n        /// </summary>\r\n        public string Value { get; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/CodeBlock.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Text;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    /// <summary>\r\n    /// Represents a block of text that is displayed in a fixed-width font.  Inline elements and\r\n    /// escape sequences are ignored inside the code block.\r\n    /// </summary>\r\n    public class CodeBlock : MarkdownBlock\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"CodeBlock\"/> class.\r\n        /// </summary>\r\n        public CodeBlock()\r\n            : base(MarkdownBlockType.Code)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the source code to display.\r\n        /// </summary>\r\n        public string Text { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the Language specified in prefix, e.g. ```c# (Github Style Parsing).<para/>\r\n        /// This does not guarantee that the Code Block has a language, or no language, some valid code might not have been prefixed, and this will still return null. <para/>\r\n        /// To ensure all Code is Highlighted (If desired), you might have to determine the language from the provided string, such as looking for key words.\r\n        /// </summary>\r\n        public string CodeLanguage { get; set; }\r\n\r\n        /// <summary>\r\n        /// Parses a code block.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location of the first character in the block. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <param name=\"quoteDepth\"> The current nesting level for block quoting. </param>\r\n        /// <param name=\"actualEnd\"> Set to the end of the block when the return value is non-null. </param>\r\n        /// <returns> A parsed code block, or <c>null</c> if this is not a code block. </returns>\r\n        internal static CodeBlock Parse(string markdown, int start, int maxEnd, int quoteDepth, out int actualEnd)\r\n        {\r\n            StringBuilder code = null;\r\n            actualEnd = start;\r\n            bool insideCodeBlock = false;\r\n            string codeLanguage = string.Empty;\r\n\r\n            /*\r\n                Two options here:\r\n                Either every line starts with a tab character or at least 4 spaces\r\n                Or the code block starts and ends with ```\r\n            */\r\n\r\n            foreach (var lineInfo in Common.ParseLines(markdown, start, maxEnd, quoteDepth))\r\n            {\r\n                int pos = lineInfo.StartOfLine;\r\n                if (pos < maxEnd && markdown[pos] == '`')\r\n                {\r\n                    var backTickCount = 0;\r\n                    while (pos < maxEnd && backTickCount < 3)\r\n                    {\r\n                        if (markdown[pos] == '`')\r\n                        {\r\n                            backTickCount++;\r\n                        }\r\n                        else\r\n                        {\r\n                            break;\r\n                        }\r\n\r\n                        pos++;\r\n                    }\r\n\r\n                    if (backTickCount == 3)\r\n                    {\r\n                        insideCodeBlock = !insideCodeBlock;\r\n\r\n                        if (!insideCodeBlock)\r\n                        {\r\n                            actualEnd = lineInfo.StartOfNextLine;\r\n                            break;\r\n                        }\r\n                        else\r\n                        {\r\n                            // Collects the Programming Language from the end of the starting ticks.\r\n                            while (pos < lineInfo.EndOfLine && !codeLanguage.EndsWith(\" \"))\r\n                            {\r\n                                codeLanguage += markdown[pos];\r\n                                pos++;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n\r\n                //if (!insideCodeBlock)\r\n                //{\r\n                //    // Add every line that starts with a tab character or at least 4 spaces.\r\n                //    if (pos < maxEnd && markdown[pos] == '\\t')\r\n                //    {\r\n                //        pos++;\r\n                //    }\r\n                //    else\r\n                //    {\r\n                //        int spaceCount = 0;\r\n                //        while (pos < maxEnd && spaceCount < 4)\r\n                //        {\r\n                //            if (markdown[pos] == ' ')\r\n                //            {\r\n                //                spaceCount++;\r\n                //            }\r\n                //            else if (markdown[pos] == '\\t')\r\n                //            {\r\n                //                spaceCount += 4;\r\n                //            }\r\n                //            else\r\n                //            {\r\n                //                break;\r\n                //            }\r\n\r\n                //            pos++; \r\n                //        }\r\n\r\n                //        if (spaceCount < 4)\r\n                //        {\r\n                //            // We found a line that doesn't start with a tab or 4 spaces.\r\n                //            // But don't end the code block until we find a non-blank line.\r\n                //            if (lineInfo.IsLineBlank == false)\r\n                //            {\r\n                //                break;\r\n                //            }\r\n                //        }\r\n                //    }\r\n                //}\r\n\r\n                // Separate each line of the code text.\r\n                if (code == null)\r\n                {\r\n                    code = new StringBuilder();\r\n                }\r\n                else\r\n                {\r\n                    code.AppendLine();\r\n                }\r\n\r\n                if (lineInfo.IsLineBlank == false)\r\n                {\r\n                    // Append the code text, excluding the first tab/4 spaces, and convert tab characters into spaces.\r\n                    string lineText = markdown.Substring(pos, lineInfo.EndOfLine - pos);\r\n                    int startOfLinePos = code.Length;\r\n                    for (int i = 0; i < lineText.Length; i++)\r\n                    {\r\n                        char c = lineText[i];\r\n                        if (c == '\\t')\r\n                        {\r\n                            code.Append(' ', 4 - ((code.Length - startOfLinePos) % 4));\r\n                        }\r\n                        else\r\n                        {\r\n                            code.Append(c);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                // Update the end position.\r\n                actualEnd = lineInfo.StartOfNextLine;\r\n            }\r\n\r\n            if (code == null)\r\n            {\r\n                // Not a valid code block.\r\n                actualEnd = start;\r\n                return null;\r\n            }\r\n\r\n            // Blank lines should be trimmed from the start and end.\r\n            return new CodeBlock()\r\n            {\r\n                Text = code.ToString().Trim('\\r', '\\n').Trim('`'),\r\n                CodeLanguage = !string.IsNullOrWhiteSpace(codeLanguage) ? codeLanguage.Trim() : null\r\n            };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            return Text;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/HeaderBlock.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\nusing Unicord.Universal.Parsers.Markdown.Inlines;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    /// <summary>\r\n    /// Represents a heading.\r\n    /// </summary>\r\n    public class HeaderBlock : MarkdownBlock\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"HeaderBlock\"/> class.\r\n        /// </summary>\r\n        public HeaderBlock()\r\n            : base(MarkdownBlockType.Header)\r\n        {\r\n        }\r\n\r\n        private int _headerLevel;\r\n\r\n        /// <summary>\r\n        /// Gets or sets the header level (1-6).  1 is the most important header, 6 is the least important.\r\n        /// </summary>\r\n        public int HeaderLevel\r\n        {\r\n            get => _headerLevel;\r\n\r\n            set\r\n            {\r\n                if (value < 1 || value > 6)\r\n                {\r\n                    throw new ArgumentOutOfRangeException(\"HeaderLevel\", \"The header level must be between 1 and 6 (inclusive).\");\r\n                }\r\n\r\n                _headerLevel = value;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the contents of the block.\r\n        /// </summary>\r\n        public IList<MarkdownInline> Inlines { get; set; }\r\n\r\n        /// <summary>\r\n        /// Parses a header that starts with a hash.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location of the first hash character. </param>\r\n        /// <param name=\"end\"> The location of the end of the line. </param>\r\n        /// <returns> A parsed header block, or <c>null</c> if this is not a header. </returns>\r\n        internal static HeaderBlock ParseHashPrefixedHeader(string markdown, int start, int end)\r\n        {\r\n            // This type of header starts with one or more '#' characters, followed by the header\r\n            // text, optionally followed by any number of hash characters.\r\n            var result = new HeaderBlock();\r\n\r\n            // Figure out how many consecutive hash characters there are.\r\n            int pos = start;\r\n            while (pos < end && markdown[pos] == '#' && pos - start < 6)\r\n            {\r\n                pos++;\r\n            }\r\n\r\n            result.HeaderLevel = pos - start;\r\n            if (result.HeaderLevel == 0)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Ignore any hashes at the end of the line.\r\n            while (pos < end && markdown[end - 1] == '#')\r\n            {\r\n                end--;\r\n            }\r\n\r\n            // Parse the inline content.\r\n            result.Inlines = Common.ParseInlineChildren(markdown, pos, end);\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses a two-line header.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"firstLineStart\"> The location of the start of the first line. </param>\r\n        /// <param name=\"firstLineEnd\"> The location of the end of the first line. </param>\r\n        /// <param name=\"secondLineStart\"> The location of the start of the second line. </param>\r\n        /// <param name=\"secondLineEnd\"> The location of the end of the second line. </param>\r\n        /// <returns> A parsed header block, or <c>null</c> if this is not a header. </returns>\r\n        internal static HeaderBlock ParseUnderlineStyleHeader(string markdown, int firstLineStart, int firstLineEnd, int secondLineStart, int secondLineEnd)\r\n        {\r\n            // This type of header starts with some text on the first line, followed by one or more\r\n            // underline characters ('=' or '-') on the second line.\r\n            // The second line can have whitespace after the underline characters, but not before\r\n            // or between each character.\r\n\r\n            // Check the second line is valid.\r\n            if (secondLineEnd <= secondLineStart)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Figure out what the underline character is ('=' or '-').\r\n            char underlineChar = markdown[secondLineStart];\r\n            if (underlineChar != '=' && underlineChar != '-')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Read past consecutive underline characters.\r\n            int pos = secondLineStart + 1;\r\n            for (; pos < secondLineEnd; pos++)\r\n            {\r\n                char c = markdown[pos];\r\n                if (c != underlineChar)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                pos++;\r\n            }\r\n\r\n            // The rest of the line must be whitespace.\r\n            for (; pos < secondLineEnd; pos++)\r\n            {\r\n                char c = markdown[pos];\r\n                if (c != ' ' && c != '\\t')\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                pos++;\r\n            }\r\n\r\n            var result = new HeaderBlock\r\n            {\r\n                HeaderLevel = underlineChar == '=' ? 1 : 2,\r\n\r\n                // Parse the inline content.\r\n                Inlines = Common.ParseInlineChildren(markdown, firstLineStart, firstLineEnd)\r\n            };\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Inlines == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return string.Join(string.Empty, Inlines);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/HorizontalRuleBlock.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Unicord.Universal.Parsers.Core;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    /// <summary>\r\n    /// Represents a horizontal line.\r\n    /// </summary>\r\n    public class HorizontalRuleBlock : MarkdownBlock\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"HorizontalRuleBlock\"/> class.\r\n        /// </summary>\r\n        public HorizontalRuleBlock()\r\n            : base(MarkdownBlockType.HorizontalRule)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses a horizontal rule.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location of the start of the line. </param>\r\n        /// <param name=\"end\"> The location of the end of the line. </param>\r\n        /// <returns> A parsed horizontal rule block, or <c>null</c> if this is not a horizontal rule. </returns>\r\n        internal static HorizontalRuleBlock Parse(string markdown, int start, int end)\r\n        {\r\n            // A horizontal rule is a line with at least 3 stars, optionally separated by spaces\r\n            // OR a line with at least 3 dashes, optionally separated by spaces\r\n            // OR a line with at least 3 underscores, optionally separated by spaces.\r\n            char hrChar = '\\0';\r\n            int hrCharCount = 0;\r\n            int pos = start;\r\n            while (pos < end)\r\n            {\r\n                char c = markdown[pos++];\r\n                if (c == '*' || c == '-' || c == '_')\r\n                {\r\n                    // All of the non-whitespace characters on the line must match.\r\n                    if (hrCharCount > 0 && c != hrChar)\r\n                    {\r\n                        return null;\r\n                    }\r\n\r\n                    hrChar = c;\r\n                    hrCharCount++;\r\n                }\r\n                else if (c == '\\n')\r\n                {\r\n                    break;\r\n                }\r\n                else if (!ParseHelpers.IsMarkdownWhiteSpace(c))\r\n                {\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            // Hopefully there were at least 3 stars/dashes/underscores.\r\n            return hrCharCount >= 3 ? new HorizontalRuleBlock() : null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            return \"---\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/LinkReferenceBlock.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Unicord.Universal.Parsers.Core;\r\nusing Unicord.Universal.Parsers.Markdown.Inlines;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    /// <summary>\r\n    /// Represents the target of a reference ([ref][]).\r\n    /// </summary>\r\n    public class LinkReferenceBlock : MarkdownBlock\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"LinkReferenceBlock\"/> class.\r\n        /// </summary>\r\n        public LinkReferenceBlock()\r\n            : base(MarkdownBlockType.LinkReference)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the reference ID.\r\n        /// </summary>\r\n        public string Id { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the link URL.\r\n        /// </summary>\r\n        public string Url { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a tooltip to display on hover.\r\n        /// </summary>\r\n        public string Tooltip { get; set; }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a reference e.g. \"[example]: http://www.reddit.com 'title'\".\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"end\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed markdown link, or <c>null</c> if this is not a markdown link. </returns>\r\n        internal static LinkReferenceBlock Parse(string markdown, int start, int end)\r\n        {\r\n            // Expect a '[' character.\r\n            if (start >= end || markdown[start] != '[')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the ']' character\r\n            int pos = start + 1;\r\n            while (pos < end)\r\n            {\r\n                if (markdown[pos] == ']')\r\n                {\r\n                    break;\r\n                }\r\n\r\n                pos++;\r\n            }\r\n\r\n            if (pos == end)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Extract the ID.\r\n            string id = markdown.Substring(start + 1, pos - (start + 1));\r\n\r\n            // Expect the ':' character.\r\n            pos++;\r\n            if (pos == end || markdown[pos] != ':')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Skip whitespace\r\n            pos++;\r\n            while (pos < end && ParseHelpers.IsMarkdownWhiteSpace(markdown[pos]))\r\n            {\r\n                pos++;\r\n            }\r\n\r\n            if (pos == end)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Extract the URL.\r\n            int urlStart = pos;\r\n            while (pos < end && !ParseHelpers.IsMarkdownWhiteSpace(markdown[pos]))\r\n            {\r\n                pos++;\r\n            }\r\n\r\n            string url = TextRunInline.ResolveEscapeSequences(markdown, urlStart, pos);\r\n\r\n            // Ignore leading '<' and trailing '>'.\r\n            url = url.TrimStart('<').TrimEnd('>');\r\n\r\n            // Skip whitespace.\r\n            pos++;\r\n            while (pos < end && ParseHelpers.IsMarkdownWhiteSpace(markdown[pos]))\r\n            {\r\n                pos++;\r\n            }\r\n\r\n            string tooltip = null;\r\n            if (pos < end)\r\n            {\r\n                // Extract the tooltip.\r\n                char tooltipEndChar;\r\n                switch (markdown[pos])\r\n                {\r\n                    case '(':\r\n                        tooltipEndChar = ')';\r\n                        break;\r\n\r\n                    case '\"':\r\n                    case '\\'':\r\n                        tooltipEndChar = markdown[pos];\r\n                        break;\r\n\r\n                    default:\r\n                        return null;\r\n                }\r\n\r\n                pos++;\r\n                int tooltipStart = pos;\r\n                while (pos < end && markdown[pos] != tooltipEndChar)\r\n                {\r\n                    pos++;\r\n                }\r\n\r\n                if (pos == end)\r\n                {\r\n                    return null;    // No end character.\r\n                }\r\n\r\n                tooltip = markdown.Substring(tooltipStart, pos - tooltipStart);\r\n\r\n                // Check there isn't any trailing text.\r\n                pos++;\r\n                while (pos < end && ParseHelpers.IsMarkdownWhiteSpace(markdown[pos]))\r\n                {\r\n                    pos++;\r\n                }\r\n\r\n                if (pos < end)\r\n                {\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            // We found something!\r\n            var result = new LinkReferenceBlock\r\n            {\r\n                Id = id,\r\n                Url = url,\r\n                Tooltip = tooltip\r\n            };\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            return string.Format(\"[{0}]: {1} {2}\", Id, Url, Tooltip);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/List/ListItemBlock.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    /// <summary>\r\n    /// This specifies the Content of the List element.\r\n    /// </summary>\r\n    public class ListItemBlock\r\n    {\r\n        /// <summary>\r\n        /// Gets or sets the contents of the list item.\r\n        /// </summary>\r\n        public IList<MarkdownBlock> Blocks { get; set; }\r\n\r\n        internal ListItemBlock()\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/List/ListItemBuilder.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Text;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    internal class ListItemBuilder : MarkdownBlock\r\n    {\r\n        public StringBuilder Builder { get; } = new StringBuilder();\r\n\r\n        public ListItemBuilder()\r\n            : base(MarkdownBlockType.ListItemBuilder)\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/List/ListItemPreamble.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    internal class ListItemPreamble\r\n    {\r\n        public ListStyle Style { get; set; }\r\n\r\n        public int ContentStartPos { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/List/NestedListInfo.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    internal class NestedListInfo\r\n    {\r\n        public ListBlock List { get; set; }\r\n\r\n        // The number of spaces at the start of the line the list first appeared.\r\n        public int SpaceCount { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/ListBlock.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Text;\r\nusing System.Text.RegularExpressions;\r\nusing Unicord.Universal.Parsers.Core;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\n[assembly: InternalsVisibleTo(\"UnitTests, PublicKey=002400000480000094000000060200000024000052534131000400000100010041753af735ae6140c9508567666c51c6ab929806adb0d210694b30ab142a060237bc741f9682e7d8d4310364b4bba4ee89cc9d3d5ce7e5583587e8ea44dca09977996582875e71fb54fa7b170798d853d5d8010b07219633bdb761d01ac924da44576d6180cdceae537973982bb461c541541d58417a3794e34f45e6f2d129e2\")]\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    /// <summary>\r\n    /// Represents a list, with each list item proceeded by either a number or a bullet.\r\n    /// </summary>\r\n    public class ListBlock : MarkdownBlock\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"ListBlock\"/> class.\r\n        /// </summary>\r\n        public ListBlock()\r\n            : base(MarkdownBlockType.List)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the list items.\r\n        /// </summary>\r\n        public IList<ListItemBlock> Items { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the style of the list, either numbered or bulleted.\r\n        /// </summary>\r\n        public ListStyle Style { get; set; }\r\n\r\n        /// <summary>\r\n        /// Parses a list block.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location of the first character in the block. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <param name=\"quoteDepth\"> The current nesting level for block quoting. </param>\r\n        /// <param name=\"actualEnd\"> Set to the end of the block when the return value is non-null. </param>\r\n        /// <returns> A parsed list block, or <c>null</c> if this is not a list block. </returns>\r\n        internal static ListBlock Parse(string markdown, int start, int maxEnd, int quoteDepth, out int actualEnd)\r\n        {\r\n            var russianDolls = new List<NestedListInfo>();\r\n            var russianDollIndex = -1;\r\n            var previousLineWasBlank = false;\r\n            var inCodeBlock = false;\r\n            ListItemBlock currentListItem = null;\r\n            actualEnd = start;\r\n\r\n            foreach (var lineInfo in Common.ParseLines(markdown, start, maxEnd, quoteDepth))\r\n            {\r\n                // Is this line blank?\r\n                if (lineInfo.IsLineBlank)\r\n                {\r\n                    // The line is blank, which means the next line which contains text may end the list (or it may not...).\r\n                    previousLineWasBlank = true;\r\n                }\r\n                else\r\n                {\r\n                    // Does the line contain a list item?\r\n                    ListItemPreamble listItemPreamble = null;\r\n                    if (lineInfo.FirstNonWhitespaceChar - lineInfo.StartOfLine < (russianDollIndex + 2) * 4)\r\n                    {\r\n                        listItemPreamble = ParseItemPreamble(markdown, lineInfo.FirstNonWhitespaceChar, lineInfo.EndOfLine);\r\n                    }\r\n\r\n                    if (listItemPreamble != null)\r\n                    {\r\n                        // Yes, this line contains a list item.\r\n\r\n                        // Determining the nesting level is done as follows:\r\n                        // 1. If this is the first line, then the list is not nested.\r\n                        // 2. If the number of spaces at the start of the line is equal to that of\r\n                        //    an existing list, then the nesting level is the same as that list.\r\n                        // 3. Otherwise, if the number of spaces is 0-4, then the nesting level\r\n                        //    is one level deep.\r\n                        // 4. Otherwise, if the number of spaces is 5-8, then the nesting level\r\n                        //    is two levels deep (but no deeper than one level more than the\r\n                        //    previous list item).\r\n                        // 5. Etcetera.\r\n                        ListBlock listToAddTo = null;\r\n                        var spaceCount = lineInfo.FirstNonWhitespaceChar - lineInfo.StartOfLine;\r\n                        russianDollIndex = russianDolls.FindIndex(rd => rd.SpaceCount == spaceCount);\r\n                        if (russianDollIndex >= 0)\r\n                        {\r\n                            // Add the new list item to an existing list.\r\n                            listToAddTo = russianDolls[russianDollIndex].List;\r\n\r\n                            // Don't add new list items to items higher up in the list.\r\n                            russianDolls.RemoveRange(russianDollIndex + 1, russianDolls.Count - (russianDollIndex + 1));\r\n                        }\r\n                        else\r\n                        {\r\n                            russianDollIndex = Math.Max(1, 1 + ((spaceCount - 1) / 4));\r\n                            if (russianDollIndex < russianDolls.Count)\r\n                            {\r\n                                // Add the new list item to an existing list.\r\n                                listToAddTo = russianDolls[russianDollIndex].List;\r\n\r\n                                // Don't add new list items to items higher up in the list.\r\n                                russianDolls.RemoveRange(russianDollIndex + 1, russianDolls.Count - (russianDollIndex + 1));\r\n                            }\r\n                            else\r\n                            {\r\n                                // Create a new list.\r\n                                listToAddTo = new ListBlock { Style = listItemPreamble.Style, Items = new List<ListItemBlock>() };\r\n                                if (russianDolls.Count > 0)\r\n                                {\r\n                                    currentListItem.Blocks.Add(listToAddTo);\r\n                                }\r\n\r\n                                russianDollIndex = russianDolls.Count;\r\n                                russianDolls.Add(new NestedListInfo { List = listToAddTo, SpaceCount = spaceCount });\r\n                            }\r\n                        }\r\n\r\n                        // Add a new list item.\r\n                        currentListItem = new ListItemBlock() { Blocks = new List<MarkdownBlock>() };\r\n                        listToAddTo.Items.Add(currentListItem);\r\n\r\n                        // Add the rest of the line to the builder.\r\n                        AppendTextToListItem(currentListItem, markdown, listItemPreamble.ContentStartPos, lineInfo.EndOfLine);\r\n                    }\r\n                    else\r\n                    {\r\n                        // No, this line contains text.\r\n\r\n                        // Is there even a list in progress?\r\n                        if (currentListItem == null)\r\n                        {\r\n                            actualEnd = start;\r\n                            return null;\r\n                        }\r\n\r\n                        // This is the start of a new paragraph.\r\n                        var spaceCount = lineInfo.FirstNonWhitespaceChar - lineInfo.StartOfLine;\r\n                        if (spaceCount == 0)\r\n                        {\r\n                            break;\r\n                        }\r\n\r\n                        russianDollIndex = Math.Min(russianDollIndex, (spaceCount - 1) / 4);\r\n                        var linestart = Math.Min(lineInfo.FirstNonWhitespaceChar, lineInfo.StartOfLine + ((russianDollIndex + 1) * 4));\r\n\r\n                        // 0 spaces = end of the list.\r\n                        // 1-4 spaces = first level.\r\n                        // 5-8 spaces = second level, etc.\r\n                        if (previousLineWasBlank)\r\n                        {\r\n                            var listToAddTo = russianDolls[russianDollIndex].List;\r\n                            currentListItem = listToAddTo.Items[listToAddTo.Items.Count - 1];\r\n\r\n                            ListItemBuilder builder;\r\n\r\n                            // Prevents new Block creation if still in a Code Block.\r\n                            if (!inCodeBlock)\r\n                            {\r\n                                builder = new ListItemBuilder();\r\n                                currentListItem.Blocks.Add(builder);\r\n                            }\r\n                            else\r\n                            {\r\n                                // This can only ever be a ListItemBuilder, so it is not a null reference.\r\n                                builder = currentListItem.Blocks.Last() as ListItemBuilder;\r\n\r\n                                // Make up for the escaped NewLines.\r\n                                builder.Builder.AppendLine();\r\n                                builder.Builder.AppendLine();\r\n                            }\r\n\r\n                            AppendTextToListItem(currentListItem, markdown, linestart, lineInfo.EndOfLine);\r\n                        }\r\n                        else\r\n                        {\r\n                            // Inline text. Ignores the 4 spaces that are used to continue the list.\r\n                            AppendTextToListItem(currentListItem, markdown, linestart, lineInfo.EndOfLine, true);\r\n                        }\r\n                    }\r\n\r\n                    // Check for Closing Code Blocks.\r\n                    if (currentListItem.Blocks.Last() is ListItemBuilder currentBlock)\r\n                    {\r\n                        var blockmatchcount = Regex.Matches(currentBlock.Builder.ToString(), \"```\").Count;\r\n                        if (blockmatchcount > 0 && blockmatchcount % 2 != 0)\r\n                        {\r\n                            inCodeBlock = true;\r\n                        }\r\n                        else\r\n                        {\r\n                            inCodeBlock = false;\r\n                        }\r\n                    }\r\n\r\n                    // The line was not blank.\r\n                    previousLineWasBlank = false;\r\n                }\r\n\r\n                // Go to the next line.\r\n                actualEnd = lineInfo.EndOfLine;\r\n            }\r\n\r\n            var result = russianDolls[0].List;\r\n            ReplaceStringBuilders(result);\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parsing helper method.\r\n        /// </summary>\r\n        /// <returns>Returns a ListItemPreamble</returns>\r\n        private static ListItemPreamble ParseItemPreamble(string markdown, int start, int maxEnd)\r\n        {\r\n            // There are two types of lists.\r\n            // A numbered list starts with a number, then a period ('.'), then a space.\r\n            // A bulleted list starts with a star ('*'), dash ('-') or plus ('+'), then a period, then a space.\r\n            ListStyle style;\r\n            if (markdown[start] == '*' || markdown[start] == '-' || markdown[start] == '+')\r\n            {\r\n                style = ListStyle.Bulleted;\r\n                start++;\r\n            }\r\n            else if (markdown[start] >= '0' && markdown[start] <= '9')\r\n            {\r\n                style = ListStyle.Numbered;\r\n                start++;\r\n\r\n                // Skip any other digits.\r\n                while (start < maxEnd)\r\n                {\r\n                    var c = markdown[start];\r\n                    if (c < '0' || c > '9')\r\n                    {\r\n                        break;\r\n                    }\r\n\r\n                    start++;\r\n                }\r\n\r\n                // Next should be a period ('.').\r\n                if (start == maxEnd || markdown[start] != '.')\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                start++;\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Next should be a space.\r\n            if (start == maxEnd || (markdown[start] != ' ' && markdown[start] != '\\t'))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            start++;\r\n\r\n            // This is a valid list item.\r\n            return new ListItemPreamble { Style = style, ContentStartPos = start };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parsing helper method.\r\n        /// </summary>\r\n        private static void AppendTextToListItem(ListItemBlock listItem, string markdown, int start, int end, bool newLine = false)\r\n        {\r\n            ListItemBuilder listItemBuilder = null;\r\n            if (listItem.Blocks.Count > 0)\r\n            {\r\n                listItemBuilder = listItem.Blocks[listItem.Blocks.Count - 1] as ListItemBuilder;\r\n            }\r\n\r\n            if (listItemBuilder == null)\r\n            {\r\n                // Add a new block.\r\n                listItemBuilder = new ListItemBuilder();\r\n                listItem.Blocks.Add(listItemBuilder);\r\n            }\r\n\r\n            var builder = listItemBuilder.Builder;\r\n            if (builder.Length >= 2 &&\r\n                ParseHelpers.IsMarkdownWhiteSpace(builder[builder.Length - 2]) &&\r\n                ParseHelpers.IsMarkdownWhiteSpace(builder[builder.Length - 1]))\r\n            {\r\n                builder.Length -= 2;\r\n                builder.AppendLine();\r\n            }\r\n            else if (builder.Length > 0)\r\n            {\r\n                builder.Append(' ');\r\n            }\r\n\r\n            if (newLine)\r\n            {\r\n                builder.Append(Environment.NewLine);\r\n            }\r\n\r\n            builder.Append(markdown.Substring(start, end - start));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parsing helper.\r\n        /// </summary>\r\n        /// <returns> <c>true</c> if any of the list items were parsed using the block parser. </returns>\r\n        private static bool ReplaceStringBuilders(ListBlock list)\r\n        {\r\n            var usedBlockParser = false;\r\n            foreach (var listItem in list.Items)\r\n            {\r\n                // Use the inline parser if there is one paragraph, use the block parser otherwise.\r\n                var useBlockParser = listItem.Blocks.Count(block => block.Type == MarkdownBlockType.ListItemBuilder) > 1;\r\n\r\n                // Recursively replace any child lists.\r\n                foreach (var block in listItem.Blocks)\r\n                {\r\n                    if (block is ListBlock && ReplaceStringBuilders((ListBlock)block))\r\n                    {\r\n                        useBlockParser = true;\r\n                    }\r\n                }\r\n\r\n                // Parse the text content of the list items.\r\n                var newBlockList = new List<MarkdownBlock>();\r\n                foreach (var block in listItem.Blocks)\r\n                {\r\n                    if (block is ListItemBuilder)\r\n                    {\r\n                        var blockText = ((ListItemBuilder)block).Builder.ToString();\r\n                        if (useBlockParser)\r\n                        {\r\n                            // Parse the list item as a series of blocks.\r\n                            int actualEnd;\r\n                            newBlockList.AddRange(MarkdownDocument.Parse(blockText, false, 0, blockText.Length, quoteDepth: 0, actualEnd: out actualEnd));\r\n                            usedBlockParser = true;\r\n                        }\r\n                        else\r\n                        {\r\n                            // Don't allow blocks.\r\n                            var paragraph = new ParagraphBlock { Inlines = Common.ParseInlineChildren(blockText, 0, blockText.Length) };\r\n                            newBlockList.Add(paragraph);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        newBlockList.Add(block);\r\n                    }\r\n                }\r\n\r\n                listItem.Blocks = newBlockList;\r\n            }\r\n\r\n            return usedBlockParser;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Items == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            var result = new StringBuilder();\r\n            for (var i = 0; i < Items.Count; i++)\r\n            {\r\n                if (result.Length > 0)\r\n                {\r\n                    result.AppendLine();\r\n                }\r\n\r\n                switch (Style)\r\n                {\r\n                    case ListStyle.Bulleted:\r\n                        result.Append(\"* \");\r\n                        break;\r\n\r\n                    case ListStyle.Numbered:\r\n                        result.Append(i + 1);\r\n                        result.Append(\".\");\r\n                        break;\r\n                }\r\n\r\n                result.Append(\" \");\r\n                result.Append(string.Join(\"\\r\\n\", Items[i].Blocks));\r\n            }\r\n\r\n            return result.ToString();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/ParagraphBlock.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\nusing Unicord.Universal.Parsers.Markdown.Inlines;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    /// <summary>\r\n    /// Represents a block of text that is displayed as a single paragraph.\r\n    /// </summary>\r\n    public class ParagraphBlock : MarkdownBlock\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"ParagraphBlock\"/> class.\r\n        /// </summary>\r\n        public ParagraphBlock()\r\n            : base(MarkdownBlockType.Paragraph)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the contents of the block.\r\n        /// </summary>\r\n        public IList<MarkdownInline> Inlines { get; set; }\r\n\r\n        /// <summary>\r\n        /// Parses paragraph text.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <returns> A parsed paragraph. </returns>\r\n        internal static ParagraphBlock Parse(string markdown)\r\n        {\r\n            var result = new ParagraphBlock\r\n            {\r\n                Inlines = Common.ParseInlineChildren(markdown, 0, markdown.Length)\r\n            };\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Inlines == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return string.Join(string.Empty, Inlines);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/QuoteBlock.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    /// <summary>\r\n    /// Represents a block that is displayed using a quote style.  Quotes are used to indicate\r\n    /// that the text originated elsewhere (e.g. a previous comment).\r\n    /// </summary>\r\n    public class QuoteBlock : MarkdownBlock\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"QuoteBlock\"/> class.\r\n        /// </summary>\r\n        public QuoteBlock()\r\n            : base(MarkdownBlockType.Quote)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the contents of the block.\r\n        /// </summary>\r\n        public IList<MarkdownBlock> Blocks { get; set; }\r\n\r\n        /// <summary>\r\n        /// Parses a quote block.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"startOfLine\"> The location of the start of the line. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <param name=\"quoteDepth\"> The current nesting level of quotes. </param>\r\n        /// <param name=\"actualEnd\"> Set to the end of the block when the return value is non-null. </param>\r\n        /// <returns> A parsed quote block. </returns>\r\n        internal static QuoteBlock Parse(string markdown, int startOfLine, int maxEnd, int quoteDepth, out int actualEnd)\r\n        {\r\n            var result = new QuoteBlock();\r\n\r\n            // Recursively call into the markdown block parser.\r\n            result.Blocks = MarkdownDocument.Parse(markdown, false, startOfLine, maxEnd, quoteDepth: quoteDepth + 1, actualEnd: out actualEnd);\r\n\r\n            return result;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Blocks/TableBlock.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Core;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\nusing Unicord.Universal.Parsers.Markdown.Inlines;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    /// <summary>\r\n    /// Represents a block which contains tabular data.\r\n    /// </summary>\r\n    public class TableBlock : MarkdownBlock\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"TableBlock\"/> class.\r\n        /// </summary>\r\n        public TableBlock()\r\n            : base(MarkdownBlockType.Table)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the table rows.\r\n        /// </summary>\r\n        public IList<TableRow> Rows { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets describes the columns in the table.  Rows can have more or less cells than the number\r\n        /// of columns.  Rows with fewer cells should be padded with empty cells.  For rows with\r\n        /// more cells, the extra cells should be hidden.\r\n        /// </summary>\r\n        public IList<TableColumnDefinition> ColumnDefinitions { get; set; }\r\n\r\n        /// <summary>\r\n        /// Parses a table block.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location of the first character in the block. </param>\r\n        /// <param name=\"endOfFirstLine\"> The location of the end of the first line. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <param name=\"quoteDepth\"> The current nesting level for block quoting. </param>\r\n        /// <param name=\"actualEnd\"> Set to the end of the block when the return value is non-null. </param>\r\n        /// <returns> A parsed table block, or <c>null</c> if this is not a table block. </returns>\r\n        internal static TableBlock Parse(string markdown, int start, int endOfFirstLine, int maxEnd, int quoteDepth, out int actualEnd)\r\n        {\r\n            // A table is a line of text, with at least one vertical bar (|), followed by a line of\r\n            // of text that consists of alternating dashes (-) and vertical bars (|) and optionally\r\n            // vertical bars at the start and end.  The second line must have at least as many\r\n            // interior vertical bars as there are interior vertical bars on the first line.\r\n            actualEnd = start;\r\n\r\n            // First thing to do is to check if there is a vertical bar on the line.\r\n            int barOrNewLineIndex = markdown.IndexOf('|', start, endOfFirstLine - start);\r\n            if (barOrNewLineIndex < 0)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            var rows = new List<TableRow>();\r\n\r\n            // Parse the first row.\r\n            var firstRow = new TableRow();\r\n            start = firstRow.Parse(markdown, start, maxEnd, quoteDepth);\r\n            rows.Add(firstRow);\r\n\r\n            // Parse the contents of the second row.\r\n            var secondRowContents = new List<string>();\r\n            start = TableRow.ParseContents(\r\n                markdown,\r\n                start,\r\n                maxEnd,\r\n                quoteDepth,\r\n                requireVerticalBar: false,\r\n                contentParser: (start2, end2) => secondRowContents.Add(markdown.Substring(start2, end2 - start2)));\r\n\r\n            // There must be at least as many columns in the second row as in the first row.\r\n            if (secondRowContents.Count < firstRow.Cells.Count)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Check each column definition.\r\n            // Note: excess columns past firstRowColumnCount are ignored and can contain anything.\r\n            var columnDefinitions = new List<TableColumnDefinition>(firstRow.Cells.Count);\r\n            for (int i = 0; i < firstRow.Cells.Count; i++)\r\n            {\r\n                var cellContent = secondRowContents[i];\r\n                if (cellContent.Length == 0)\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                // The first and last characters can be '-' or ':'.\r\n                if (cellContent[0] != ':' && cellContent[0] != '-')\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                if (cellContent[cellContent.Length - 1] != ':' && cellContent[cellContent.Length - 1] != '-')\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                // Every other character must be '-'.\r\n                for (int j = 1; j < cellContent.Length - 1; j++)\r\n                {\r\n                    if (cellContent[j] != '-')\r\n                    {\r\n                        return null;\r\n                    }\r\n                }\r\n\r\n                // Record the alignment.\r\n                var columnDefinition = new TableColumnDefinition();\r\n                if (cellContent.Length > 1 && cellContent[0] == ':' && cellContent[cellContent.Length - 1] == ':')\r\n                {\r\n                    columnDefinition.Alignment = ColumnAlignment.Center;\r\n                }\r\n                else if (cellContent[0] == ':')\r\n                {\r\n                    columnDefinition.Alignment = ColumnAlignment.Left;\r\n                }\r\n                else if (cellContent[cellContent.Length - 1] == ':')\r\n                {\r\n                    columnDefinition.Alignment = ColumnAlignment.Right;\r\n                }\r\n\r\n                columnDefinitions.Add(columnDefinition);\r\n            }\r\n\r\n            // Parse additional rows.\r\n            while (start < maxEnd)\r\n            {\r\n                var row = new TableRow();\r\n                start = row.Parse(markdown, start, maxEnd, quoteDepth);\r\n                if (row.Cells.Count == 0)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                rows.Add(row);\r\n            }\r\n\r\n            actualEnd = start;\r\n            return new TableBlock { ColumnDefinitions = columnDefinitions, Rows = rows };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Describes a column in the markdown table.\r\n        /// </summary>\r\n        public class TableColumnDefinition\r\n        {\r\n            /// <summary>\r\n            /// Gets or sets the alignment of content in a table column.\r\n            /// </summary>\r\n            public ColumnAlignment Alignment { get; set; }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Represents a single row in the table.\r\n        /// </summary>\r\n        public class TableRow\r\n        {\r\n            /// <summary>\r\n            /// Gets or sets the table cells.\r\n            /// </summary>\r\n            public IList<TableCell> Cells { get; set; }\r\n\r\n            /// <summary>\r\n            /// Parses the contents of the row, ignoring whitespace at the beginning and end of each cell.\r\n            /// </summary>\r\n            /// <param name=\"markdown\"> The markdown text. </param>\r\n            /// <param name=\"startingPos\"> The position of the start of the row. </param>\r\n            /// <param name=\"maxEndingPos\"> The maximum position of the end of the row </param>\r\n            /// <param name=\"quoteDepth\"> The current nesting level for block quoting. </param>\r\n            /// <param name=\"requireVerticalBar\"> Indicates whether the line must contain a vertical bar. </param>\r\n            /// <param name=\"contentParser\"> Called for each cell. </param>\r\n            /// <returns> The position of the start of the next line. </returns>\r\n            internal static int ParseContents(string markdown, int startingPos, int maxEndingPos, int quoteDepth, bool requireVerticalBar, Action<int, int> contentParser)\r\n            {\r\n                // Skip quote characters.\r\n                int pos = Common.SkipQuoteCharacters(markdown, startingPos, maxEndingPos, quoteDepth);\r\n\r\n                // If the line starts with a '|' character, skip it.\r\n                bool lineHasVerticalBar = false;\r\n                if (pos < maxEndingPos && markdown[pos] == '|')\r\n                {\r\n                    lineHasVerticalBar = true;\r\n                    pos++;\r\n                }\r\n\r\n                while (pos < maxEndingPos)\r\n                {\r\n                    // Ignore any whitespace at the start of the cell (except for a newline character).\r\n                    while (pos < maxEndingPos && ParseHelpers.IsMarkdownWhiteSpace(markdown[pos]) && markdown[pos] != '\\n' && markdown[pos] != '\\r')\r\n                    {\r\n                        pos++;\r\n                    }\r\n\r\n                    int startOfCellContent = pos;\r\n\r\n                    // Find the end of the cell.\r\n                    bool endOfLineFound = true;\r\n                    while (pos < maxEndingPos)\r\n                    {\r\n                        char c = markdown[pos];\r\n                        if (c == '|')\r\n                        {\r\n                            lineHasVerticalBar = true;\r\n                            endOfLineFound = false;\r\n                            break;\r\n                        }\r\n\r\n                        if (c == '\\n')\r\n                        {\r\n                            break;\r\n                        }\r\n\r\n                        if (c == '\\r')\r\n                        {\r\n                            if (pos < maxEndingPos && markdown[pos + 1] == '\\n')\r\n                            {\r\n                                pos++; // Swallow the complete linefeed.\r\n                            }\r\n\r\n                            break;\r\n                        }\r\n\r\n                        pos++;\r\n                    }\r\n\r\n                    int endOfCell = pos;\r\n\r\n                    // If a vertical bar is required, and none was found, then exit early.\r\n                    if (endOfLineFound && !lineHasVerticalBar && requireVerticalBar)\r\n                    {\r\n                        return startingPos;\r\n                    }\r\n\r\n                    // Ignore any whitespace at the end of the cell.\r\n                    if (endOfCell > startOfCellContent)\r\n                    {\r\n                        while (ParseHelpers.IsMarkdownWhiteSpace(markdown[pos - 1]))\r\n                        {\r\n                            pos--;\r\n                        }\r\n                    }\r\n\r\n                    int endOfCellContent = pos;\r\n\r\n                    if (endOfLineFound == false || endOfCellContent > startOfCellContent)\r\n                    {\r\n                        // Parse the contents of the cell.\r\n                        contentParser(startOfCellContent, endOfCellContent);\r\n                    }\r\n\r\n                    // End of input?\r\n                    if (pos == maxEndingPos)\r\n                    {\r\n                        break;\r\n                    }\r\n\r\n                    // Move to the next cell, or the next line.\r\n                    pos = endOfCell + 1;\r\n\r\n                    // End of the line?\r\n                    if (endOfLineFound)\r\n                    {\r\n                        break;\r\n                    }\r\n                }\r\n\r\n                return pos;\r\n            }\r\n\r\n            /// <summary>\r\n            /// Called when this block type should parse out the goods. Given the markdown, a starting point, and a max ending point\r\n            /// the block should find the start of the block, find the end and parse out the middle. The end most of the time will not be\r\n            /// the max ending pos, but it sometimes can be. The function will return where it ended parsing the block in the markdown.\r\n            /// </summary>\r\n            /// <returns>the postiion parsed to</returns>\r\n            internal int Parse(string markdown, int startingPos, int maxEndingPos, int quoteDepth)\r\n            {\r\n                Cells = new List<TableCell>();\r\n                return ParseContents(\r\n                    markdown,\r\n                    startingPos,\r\n                    maxEndingPos,\r\n                    quoteDepth,\r\n                    requireVerticalBar: true,\r\n                    contentParser: (startingPos2, maxEndingPos2) =>\r\n                    {\r\n                        var cell = new TableCell\r\n                        {\r\n                            Inlines = Common.ParseInlineChildren(markdown, startingPos2, maxEndingPos2)\r\n                        };\r\n                        Cells.Add(cell);\r\n                    });\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Represents a cell in the table.\r\n        /// </summary>\r\n        public class TableCell\r\n        {\r\n            /// <summary>\r\n            /// Gets or sets the cell contents.\r\n            /// </summary>\r\n            public IList<MarkdownInline> Inlines { get; set; }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Enums/ColumnAlignment.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown\r\n{\r\n    /// <summary>\r\n    /// The alignment of content in a table column.\r\n    /// </summary>\r\n    public enum ColumnAlignment\r\n    {\r\n        /// <summary>\r\n        /// The alignment was not specified.\r\n        /// </summary>\r\n        Unspecified,\r\n\r\n        /// <summary>\r\n        /// Content should be left aligned.\r\n        /// </summary>\r\n        Left,\r\n\r\n        /// <summary>\r\n        /// Content should be right aligned.\r\n        /// </summary>\r\n        Right,\r\n\r\n        /// <summary>\r\n        /// Content should be centered.\r\n        /// </summary>\r\n        Center,\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Enums/HyperlinkType.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown\r\n{\r\n    /// <summary>\r\n    /// Specifies the type of Hyperlink that is used.\r\n    /// </summary>\r\n    public enum HyperlinkType\r\n    {\r\n        /// <summary>\r\n        /// A hyperlink surrounded by angle brackets (e.g. \"http://www.reddit.com\").\r\n        /// </summary>\r\n        BracketedUrl,\r\n\r\n        /// <summary>\r\n        /// A fully qualified hyperlink (e.g. \"http://www.reddit.com\").\r\n        /// </summary>\r\n        FullUrl,\r\n\r\n        /// <summary>\r\n        /// A URL without a scheme (e.g. \"www.reddit.com\").\r\n        /// </summary>\r\n        PartialUrl,\r\n\r\n        /// <summary>\r\n        /// An email address (e.g. \"test@reddit.com\").\r\n        /// </summary>\r\n        Email,\r\n\r\n        /// <summary>\r\n        /// A subreddit link (e.g. \"/r/news\").\r\n        /// </summary>\r\n        Subreddit,\r\n\r\n        /// <summary>\r\n        /// A user link (e.g. \"/u/quinbd\").\r\n        /// </summary>\r\n        User,\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Enums/InlineParseMethod.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown\r\n{\r\n    internal enum InlineParseMethod\r\n    {\r\n        /// <summary>\r\n        /// A Link Reference\r\n        /// </summary>\r\n        LinkReference,\r\n\r\n        /// <summary>\r\n        /// A bold element\r\n        /// </summary>\r\n        Bold,\r\n\r\n        /// <summary>\r\n        /// An bold and italic block\r\n        /// </summary>\r\n        BoldItalic,\r\n\r\n        Underline,\r\n\r\n        /// <summary>\r\n        /// A code element\r\n        /// </summary>\r\n        Code,\r\n\r\n        /// <summary>\r\n        /// An italic block\r\n        /// </summary>\r\n        Italic,\r\n\r\n        /// <summary>\r\n        /// A link block\r\n        /// </summary>\r\n        MarkdownLink,\r\n\r\n        /// <summary>\r\n        /// An angle bracket link.\r\n        /// </summary>\r\n        AngleBracketLink,\r\n\r\n        /// <summary>\r\n        /// A url block\r\n        /// </summary>\r\n        Url,\r\n\r\n        /// <summary>\r\n        /// A reddit style link\r\n        /// </summary>\r\n        RedditLink,\r\n\r\n        /// <summary>\r\n        /// An in line text link\r\n        /// </summary>\r\n        PartialLink,\r\n\r\n        /// <summary>\r\n        /// An email element\r\n        /// </summary>\r\n        Email,\r\n\r\n        /// <summary>\r\n        /// strike through element\r\n        /// </summary>\r\n        Spoiler,\r\n\r\n        /// <summary>\r\n        /// Super script element.\r\n        /// </summary>\r\n        Superscript,\r\n\r\n        /// <summary>\r\n        /// Image element.\r\n        /// </summary>\r\n        Image,\r\n\r\n        /// <summary>\r\n        /// Emoji element.\r\n        /// </summary>\r\n        Emoji,\r\n        Discord,\r\n        Strikethrough\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Enums/ListStyle.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown\r\n{\r\n    /// <summary>\r\n    /// This specifies the type of style the List will be.\r\n    /// </summary>\r\n    public enum ListStyle\r\n    {\r\n        /// <summary>\r\n        /// A list with bullets\r\n        /// </summary>\r\n        Bulleted,\r\n\r\n        /// <summary>\r\n        /// A numbered list\r\n        /// </summary>\r\n        Numbered,\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Enums/MarkdownBlockType.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown\r\n{\r\n    /// <summary>\r\n    /// Determines the type of Block the Block element is.\r\n    /// </summary>\r\n    public enum MarkdownBlockType\r\n    {\r\n        /// <summary>\r\n        /// The root element\r\n        /// </summary>\r\n        Root,\r\n\r\n        /// <summary>\r\n        /// A paragraph element.\r\n        /// </summary>\r\n        Paragraph,\r\n\r\n        /// <summary>\r\n        /// A quote block\r\n        /// </summary>\r\n        Quote,\r\n\r\n        /// <summary>\r\n        /// A code block\r\n        /// </summary>\r\n        Code,\r\n\r\n        /// <summary>\r\n        /// A header block\r\n        /// </summary>\r\n        Header,\r\n\r\n        /// <summary>\r\n        /// A list block\r\n        /// </summary>\r\n        List,\r\n\r\n        /// <summary>\r\n        /// A list item block\r\n        /// </summary>\r\n        ListItemBuilder,\r\n\r\n        /// <summary>\r\n        /// a horizontal rule block\r\n        /// </summary>\r\n        HorizontalRule,\r\n\r\n        /// <summary>\r\n        /// A table block\r\n        /// </summary>\r\n        Table,\r\n\r\n        /// <summary>\r\n        /// A link block\r\n        /// </summary>\r\n        LinkReference\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Enums/MarkdownInlineType.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown\r\n{\r\n    /// <summary>\r\n    /// Determines the type of Inline the Inline Element is.\r\n    /// </summary>\r\n    public enum MarkdownInlineType\r\n    {\r\n        /// <summary>\r\n        /// A text run\r\n        /// </summary>\r\n        TextRun,\r\n\r\n        /// <summary>\r\n        /// A bold run\r\n        /// </summary>\r\n        Bold,\r\n\r\n        /// <summary>\r\n        /// An italic run\r\n        /// </summary>\r\n        Italic,\r\n\r\n        Underline,\r\n\r\n        /// <summary>\r\n        /// A link in markdown syntax\r\n        /// </summary>\r\n        MarkdownLink,\r\n\r\n        /// <summary>\r\n        /// A raw hyper link\r\n        /// </summary>\r\n        RawHyperlink,\r\n\r\n        /// <summary>\r\n        /// A raw subreddit link\r\n        /// </summary>\r\n        RawSubreddit,\r\n\r\n        /// <summary>\r\n        /// A strike through run\r\n        /// </summary>\r\n        Spoiler,\r\n\r\n        /// <summary>\r\n        /// A superscript run\r\n        /// </summary>\r\n        Superscript,\r\n\r\n        /// <summary>\r\n        /// A code run\r\n        /// </summary>\r\n        Code,\r\n\r\n        /// <summary>\r\n        /// An image\r\n        /// </summary>\r\n        Image,\r\n\r\n        /// <summary>\r\n        /// Emoji\r\n        /// </summary>\r\n        Emoji,\r\n\r\n        /// <summary>\r\n        /// Link Reference\r\n        /// </summary>\r\n        LinkReference,\r\n        Discord,\r\n        Strikethrough\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Helpers/Common.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Unicord.Universal.Parsers.Markdown.Inlines;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Helpers\r\n{\r\n    /// <summary>\r\n    /// Helpers for Markdown.\r\n    /// </summary>\r\n    internal class Common\r\n    {\r\n        private static readonly List<InlineTripCharHelper> _triggerList = new List<InlineTripCharHelper>();\r\n        private static readonly char[] _tripCharacters;\r\n\r\n        static Common()\r\n        {\r\n            BoldItalicTextInline.AddTripChars(_triggerList);\r\n            UnderlineTextInline.AddTripChars(_triggerList);\r\n            BoldTextInline.AddTripChars(_triggerList);\r\n            ItalicTextInline.AddTripChars(_triggerList);\r\n            MarkdownLinkInline.AddTripChars(_triggerList);\r\n            HyperlinkInline.AddTripChars(_triggerList);\r\n            StrikethroughTextInline.AddTripChars(_triggerList);\r\n            CodeInline.AddTripChars(_triggerList);\r\n            ImageInline.AddTripChars(_triggerList);\r\n            EmojiInline.AddTripChars(_triggerList);\r\n            LinkAnchorInline.AddTripChars(_triggerList);\r\n            DiscordInline.AddTripChars(_triggerList);\r\n            SpoilerTextInline.AddTripChars(_triggerList);\r\n\r\n            // Create an array of characters to search against using IndexOfAny.\r\n            _tripCharacters = _triggerList.Select(trigger => trigger.FirstChar).Distinct().ToArray();\r\n        }\r\n\r\n        /// <summary>\r\n        /// This function can be called by any element parsing. Given a start and stopping point this will\r\n        /// parse all found elements out of the range.\r\n        /// </summary>\r\n        /// <returns> A list of parsed inlines. </returns>\r\n        public static List<MarkdownInline> ParseInlineChildren(string markdown, int startingPos, int maxEndingPos, bool ignoreLinks = false)\r\n        {\r\n            int currentParsePosition = startingPos;\r\n\r\n            var inlines = new List<MarkdownInline>();\r\n            while (currentParsePosition < maxEndingPos)\r\n            {\r\n                // Find the next inline element.\r\n                var parseResult = FindNextInlineElement(markdown, currentParsePosition, maxEndingPos, ignoreLinks);\r\n\r\n                // If the element we found doesn't start at the position we are looking for there\r\n                // is text between the element and the start of the parsed element. We need to wrap\r\n                // it into a text run.\r\n                if (parseResult.Start != currentParsePosition)\r\n                {\r\n                    var textRun = TextRunInline.Parse(markdown, currentParsePosition, parseResult.Start);\r\n                    inlines.Add(textRun);\r\n                }\r\n\r\n                // Add the parsed element.\r\n                inlines.Add(parseResult.ParsedElement);\r\n\r\n                // Update the current position.\r\n                currentParsePosition = parseResult.End;\r\n            }\r\n\r\n            return inlines;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds the next inline element by matching trip chars and verifying the match.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text to parse. </param>\r\n        /// <param name=\"start\"> The position to start parsing. </param>\r\n        /// <param name=\"end\"> The position to stop parsing. </param>\r\n        /// <param name=\"ignoreLinks\"> Indicates whether to parse links. </param>\r\n        /// <returns>Returns the next element</returns>\r\n        private static InlineParseResult FindNextInlineElement(string markdown, int start, int end, bool ignoreLinks)\r\n        {\r\n            // Search for the next inline sequence.\r\n            for (int pos = start; pos < end; pos++)\r\n            {\r\n                // IndexOfAny should be the fastest way to skip characters we don't care about.\r\n                pos = markdown.IndexOfAny(_tripCharacters, pos, end - pos);\r\n                if (pos < 0)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                // Find the trigger(s) that matched.\r\n                char currentChar = markdown[pos];\r\n                foreach (InlineTripCharHelper currentTripChar in _triggerList)\r\n                {\r\n                    // Check if our current char matches the suffix char.\r\n                    if (currentChar == currentTripChar.FirstChar)\r\n                    {\r\n                        // Don't match if the previous character was a backslash.\r\n                        if (pos > start && markdown[pos - 1] == '\\\\')\r\n                        {\r\n                            continue;\r\n                        }\r\n\r\n                        // If we are here we have a possible match. Call into the inline class to verify.\r\n                        InlineParseResult parseResult = null;\r\n                        switch (currentTripChar.Method)\r\n                        {\r\n                            case InlineParseMethod.BoldItalic:\r\n                                parseResult = BoldItalicTextInline.Parse(markdown, pos, end);\r\n                                break;\r\n\r\n                            case InlineParseMethod.Underline:\r\n                                parseResult = UnderlineTextInline.Parse(markdown, pos, end);\r\n                                break;\r\n\r\n                            case InlineParseMethod.LinkReference:\r\n                                parseResult = LinkAnchorInline.Parse(markdown, pos, end);\r\n                                break;\r\n\r\n                            case InlineParseMethod.Bold:\r\n                                parseResult = BoldTextInline.Parse(markdown, pos, end);\r\n                                break;\r\n\r\n                            case InlineParseMethod.Italic:\r\n                                parseResult = ItalicTextInline.Parse(markdown, pos, end);\r\n                                break;\r\n\r\n                            case InlineParseMethod.MarkdownLink:\r\n                                if (!ignoreLinks)\r\n                                {\r\n                                    parseResult = MarkdownLinkInline.Parse(markdown, pos, end);\r\n                                }\r\n\r\n                                break;\r\n\r\n                            case InlineParseMethod.AngleBracketLink:\r\n                                if (!ignoreLinks)\r\n                                {\r\n                                    parseResult = HyperlinkInline.ParseAngleBracketLink(markdown, pos, end);\r\n                                }\r\n\r\n                                break;\r\n\r\n                            case InlineParseMethod.Url:\r\n                                if (!ignoreLinks)\r\n                                {\r\n                                    parseResult = HyperlinkInline.ParseUrl(markdown, pos, end);\r\n                                }\r\n\r\n                                break;\r\n\r\n                            case InlineParseMethod.RedditLink:\r\n                                if (!ignoreLinks)\r\n                                {\r\n                                    parseResult = HyperlinkInline.ParseRedditLink(markdown, pos, end);\r\n                                }\r\n\r\n                                break;\r\n\r\n                            case InlineParseMethod.PartialLink:\r\n                                if (!ignoreLinks)\r\n                                {\r\n                                    parseResult = HyperlinkInline.ParsePartialLink(markdown, pos, end);\r\n                                }\r\n\r\n                                break;\r\n\r\n                            case InlineParseMethod.Email:\r\n                                if (!ignoreLinks)\r\n                                {\r\n                                    parseResult = HyperlinkInline.ParseEmailAddress(markdown, start, pos, end);\r\n                                }\r\n\r\n                                break;\r\n\r\n                            case InlineParseMethod.Strikethrough:\r\n                                parseResult = StrikethroughTextInline.Parse(markdown, pos, end);\r\n                                break;\r\n\r\n                            case InlineParseMethod.Spoiler:\r\n                                parseResult = SpoilerTextInline.Parse(markdown, pos, end);\r\n                                break;\r\n\r\n                            case InlineParseMethod.Code:\r\n                                parseResult = CodeInline.Parse(markdown, pos, end);\r\n                                break;\r\n\r\n                            case InlineParseMethod.Image:\r\n                                parseResult = ImageInline.Parse(markdown, pos, end);\r\n                                break;\r\n\r\n                            case InlineParseMethod.Emoji:\r\n                                parseResult = EmojiInline.Parse(markdown, pos, end);\r\n                                break;\r\n\r\n                            case InlineParseMethod.Discord:\r\n                                parseResult = DiscordInline.Parse(markdown, pos, end);\r\n                                break;\r\n                        }\r\n\r\n                        if (parseResult != null)\r\n                        {\r\n                            return parseResult;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            // If we didn't find any elements we have a normal text block.\r\n            // Let us consume the entire range.\r\n            return new InlineParseResult(TextRunInline.Parse(markdown, start, end), start, end);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the next \\n or \\r\\n in the markdown.\r\n        /// </summary>\r\n        /// <returns>the next single line</returns>\r\n        public static int FindNextSingleNewLine(string markdown, int startingPos, int endingPos, out int startOfNextLine)\r\n        {\r\n            // A line can end with CRLF (\\r\\n) or just LF (\\n).\r\n            int lineFeedPos = markdown.IndexOf('\\n', startingPos);\r\n            if (lineFeedPos == -1)\r\n            {\r\n                // Trying with /r now\r\n                lineFeedPos = markdown.IndexOf('\\r', startingPos);\r\n                if (lineFeedPos == -1)\r\n                {\r\n                    startOfNextLine = endingPos;\r\n                    return endingPos;\r\n                }\r\n            }\r\n\r\n            startOfNextLine = lineFeedPos + 1;\r\n\r\n            // Check if it was a CRLF.\r\n            if (lineFeedPos > startingPos && markdown[lineFeedPos - 1] == '\\r')\r\n            {\r\n                return lineFeedPos - 1;\r\n            }\r\n\r\n            return lineFeedPos;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Helper function for index of with a start and an ending.\r\n        /// </summary>\r\n        /// <returns>Pos of the searched for item</returns>\r\n        public static int IndexOf(string markdown, string search, int startingPos, int endingPos, bool reverseSearch = false)\r\n        {\r\n            // Check the ending isn't out of bounds.\r\n            if (endingPos > markdown.Length)\r\n            {\r\n                endingPos = markdown.Length;\r\n                DebuggingReporter.ReportCriticalError(\"IndexOf endingPos > string length\");\r\n            }\r\n\r\n            // Figure out how long to go\r\n            int count = endingPos - startingPos;\r\n            if (count < 0)\r\n            {\r\n                return -1;\r\n            }\r\n\r\n            // Make sure we don't go too far.\r\n            int remainingCount = markdown.Length - startingPos;\r\n            if (count > remainingCount)\r\n            {\r\n                DebuggingReporter.ReportCriticalError(\"IndexOf count > remaing count\");\r\n                count = remainingCount;\r\n            }\r\n\r\n            // Check the ending. Since we use inclusive ranges we need to -1 from this for\r\n            // reverses searches.\r\n            if (reverseSearch && endingPos > 0)\r\n            {\r\n                endingPos -= 1;\r\n            }\r\n\r\n            return reverseSearch ? markdown.LastIndexOf(search, endingPos, count, StringComparison.OrdinalIgnoreCase) : markdown.IndexOf(search, startingPos, count, StringComparison.OrdinalIgnoreCase);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Helper function for index of with a start and an ending.\r\n        /// </summary>\r\n        /// <returns>Pos of the searched for item</returns>\r\n        public static int IndexOf(string markdown, char search, int startingPos, int endingPos, bool reverseSearch = false)\r\n        {\r\n            // Check the ending isn't out of bounds.\r\n            if (endingPos > markdown.Length)\r\n            {\r\n                endingPos = markdown.Length;\r\n                DebuggingReporter.ReportCriticalError(\"IndexOf endingPos > string length\");\r\n            }\r\n\r\n            // Figure out how long to go\r\n            int count = endingPos - startingPos;\r\n            if (count < 0)\r\n            {\r\n                return -1;\r\n            }\r\n\r\n            // Make sure we don't go too far.\r\n            int remainingCount = markdown.Length - startingPos;\r\n            if (count > remainingCount)\r\n            {\r\n                DebuggingReporter.ReportCriticalError(\"IndexOf count > remaing count\");\r\n                count = remainingCount;\r\n            }\r\n\r\n            // Check the ending. Since we use inclusive ranges we need to -1 from this for\r\n            // reverses searches.\r\n            if (reverseSearch && endingPos > 0)\r\n            {\r\n                endingPos -= 1;\r\n            }\r\n\r\n            return reverseSearch ? markdown.LastIndexOf(search, endingPos, count) : markdown.IndexOf(search, startingPos, count);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds the next whitespace in a range.\r\n        /// </summary>\r\n        /// <returns>pos of the white space</returns>\r\n        public static int FindNextWhiteSpace(string markdown, int startingPos, int endingPos, bool ifNotFoundReturnLength)\r\n        {\r\n            int currentPos = startingPos;\r\n            while (currentPos < markdown.Length && currentPos < endingPos)\r\n            {\r\n                if (char.IsWhiteSpace(markdown[currentPos]))\r\n                {\r\n                    return currentPos;\r\n                }\r\n\r\n                currentPos++;\r\n            }\r\n\r\n            return ifNotFoundReturnLength ? endingPos : -1;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses lines.\r\n        /// </summary>\r\n        /// <returns>LineInfo</returns>\r\n        public static IEnumerable<LineInfo> ParseLines(string markdown, int start, int end, int quoteDepth)\r\n        {\r\n            int pos = start;\r\n            bool lineStartsNewParagraph = true;\r\n\r\n            while (pos < end)\r\n            {\r\n                int startOfLine = pos;\r\n                int expectedQuotesRemaining = quoteDepth;\r\n                int nonSpacePos = pos;\r\n                char nonSpaceChar = '\\0';\r\n                while (true)\r\n                {\r\n                    // Find the next non-space char.\r\n                    while (nonSpacePos < end)\r\n                    {\r\n                        char c = markdown[nonSpacePos];\r\n                        if (c == '\\r' || c == '\\n')\r\n                        {\r\n                            // The line is either entirely whitespace, or is empty.\r\n                            break;\r\n                        }\r\n\r\n                        if (c != ' ' && c != '\\t')\r\n                        {\r\n                            // The line has content.\r\n                            nonSpaceChar = c;\r\n                            break;\r\n                        }\r\n\r\n                        nonSpacePos++;\r\n                    }\r\n\r\n                    // When parsing blocks in a blockquote context, we need to count the number of\r\n                    // quote characters ('>').  If there are less than expected AND this is the\r\n                    // start of a new paragraph, then stop parsing.\r\n                    if (expectedQuotesRemaining == 0)\r\n                    {\r\n                        break;\r\n                    }\r\n\r\n                    if (nonSpaceChar == '>')\r\n                    {\r\n                        // Expected block quote characters should be ignored.\r\n                        expectedQuotesRemaining--;\r\n                        nonSpacePos++;\r\n                        nonSpaceChar = '\\0';\r\n                        startOfLine = nonSpacePos;\r\n\r\n                        // Ignore the first space after the quote character, if there is one.\r\n                        if (startOfLine < end && markdown[startOfLine] == ' ')\r\n                        {\r\n                            startOfLine++;\r\n                            nonSpacePos++;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        // There were less block quote characters than expected.\r\n                        // But it doesn't matter if this is not the start of a new paragraph.\r\n                        if (!lineStartsNewParagraph || nonSpaceChar == '\\0')\r\n                        {\r\n                            break;\r\n                        }\r\n\r\n                        // This must be the end of the blockquote.  End the current paragraph, if any.\r\n                        yield break;\r\n                    }\r\n                }\r\n\r\n                // Find the end of the current line.\r\n                int endOfLine = FindNextSingleNewLine(markdown, nonSpacePos, end, out int startOfNextLine);\r\n\r\n                // Return the line info to the caller.\r\n                yield return new LineInfo\r\n                {\r\n                    StartOfLine = startOfLine,\r\n                    FirstNonWhitespaceChar = nonSpacePos,\r\n                    EndOfLine = endOfLine,\r\n                    StartOfNextLine = startOfNextLine,\r\n                };\r\n\r\n                if (nonSpaceChar == '\\0')\r\n                {\r\n                    // The line is empty or nothing but whitespace.\r\n                    lineStartsNewParagraph = true;\r\n                }\r\n\r\n                // Repeat.\r\n                pos = startOfNextLine;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Skips a certain number of quote characters (>).\r\n        /// </summary>\r\n        /// <returns>Skip Quote Chars</returns>\r\n        public static int SkipQuoteCharacters(string markdown, int start, int end, int quoteDepth)\r\n        {\r\n            if (quoteDepth == 0)\r\n            {\r\n                return start;\r\n            }\r\n\r\n            int startOfLine = start;\r\n            int nonSpacePos = start;\r\n            char nonSpaceChar = '\\0';\r\n\r\n            while (true)\r\n            {\r\n                // Find the next non-space char.\r\n                while (nonSpacePos < end)\r\n                {\r\n                    char c = markdown[nonSpacePos];\r\n                    if (c == '\\r' || c == '\\n')\r\n                    {\r\n                        // The line is either entirely whitespace, or is empty.\r\n                        break;\r\n                    }\r\n\r\n                    if (c != ' ' && c != '\\t')\r\n                    {\r\n                        // The line has content.\r\n                        nonSpaceChar = c;\r\n                        break;\r\n                    }\r\n\r\n                    nonSpacePos++;\r\n                }\r\n\r\n                // When parsing blocks in a blockquote context, we need to count the number of\r\n                // quote characters ('>').  If there are less than expected AND this is the\r\n                // start of a new paragraph, then stop parsing.\r\n                if (quoteDepth == 0)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                if (nonSpaceChar == '>')\r\n                {\r\n                    // Expected block quote characters should be ignored.\r\n                    quoteDepth--;\r\n                    nonSpacePos++;\r\n                    nonSpaceChar = '\\0';\r\n                    startOfLine = nonSpacePos;\r\n\r\n                    // Ignore the first space after the quote character, if there is one.\r\n                    if (startOfLine < end && markdown[startOfLine] == ' ')\r\n                    {\r\n                        startOfLine++;\r\n                        nonSpacePos++;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // There were less block quote characters than expected.\r\n                    break;\r\n                }\r\n            }\r\n\r\n            return startOfLine;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Checks if the given URL is allowed in a markdown link.\r\n        /// </summary>\r\n        /// <param name=\"url\"> The URL to check. </param>\r\n        /// <returns> <c>true</c> if the URL is valid; <c>false</c> otherwise. </returns>\r\n        public static bool IsUrlValid(string url)\r\n        {\r\n            // URLs can be relative.\r\n            if (!Uri.TryCreate(url, UriKind.Absolute, out Uri result))\r\n            {\r\n                return true;\r\n            }\r\n\r\n            // Check the scheme is allowed.\r\n            foreach (var scheme in MarkdownDocument.KnownSchemes)\r\n            {\r\n                if (result.Scheme.Equals(scheme))\r\n                {\r\n                    return true;\r\n                }\r\n            }\r\n\r\n            return false;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Helpers/DebuggingReporter.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Diagnostics;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Helpers\r\n{\r\n    /// <summary>\r\n    /// Reports an error during debugging.\r\n    /// </summary>\r\n    internal class DebuggingReporter\r\n    {\r\n        /// <summary>\r\n        /// Reports a critical error.\r\n        /// </summary>\r\n        public static void ReportCriticalError(string errorText)\r\n        {\r\n            Debug.WriteLine(errorText);\r\n            if (Debugger.IsAttached)\r\n            {\r\n                Debugger.Break();\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Helpers/InlineParseResult.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Unicord.Universal.Parsers.Markdown.Inlines;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Helpers\r\n{\r\n    /// <summary>\r\n    /// Represents the result of parsing an inline element.\r\n    /// </summary>\r\n    internal class InlineParseResult\r\n    {\r\n        public InlineParseResult(MarkdownInline parsedElement, int start, int end)\r\n        {\r\n            ParsedElement = parsedElement;\r\n            Start = start;\r\n            End = end;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the element that was parsed (can be <c>null</c>).\r\n        /// </summary>\r\n        public MarkdownInline ParsedElement { get; }\r\n\r\n        /// <summary>\r\n        /// Gets the position of the first character in the parsed element.\r\n        /// </summary>\r\n        public int Start { get; }\r\n\r\n        /// <summary>\r\n        /// Gets the position of the character after the last character in the parsed element.\r\n        /// </summary>\r\n        public int End { get; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Helpers/InlineTripCharHelper.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Helpers\r\n{\r\n    /// <summary>\r\n    /// A helper class for the trip chars. This is an optimization. If we ask each class to go\r\n    /// through the rage and look for itself we end up looping through the range n times, once\r\n    /// for each inline. This class represent a character that an inline needs to have a\r\n    /// possible match. We will go through the range once and look for everyone's trip chars,\r\n    /// and if they can make a match from the trip char then we will commit to them.\r\n    /// </summary>\r\n    internal class InlineTripCharHelper\r\n    {\r\n        // Note! Everything in first char and suffix should be lower case!\r\n        public char FirstChar { get; set; }\r\n\r\n        public InlineParseMethod Method { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Helpers/LineInfo.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Helpers\r\n{\r\n    internal class LineInfo\r\n    {\r\n        public int StartOfLine { get; set; }\r\n\r\n        public int FirstNonWhitespaceChar { get; set; }\r\n\r\n        public int EndOfLine { get; set; }\r\n\r\n        public bool IsLineBlank\r\n        {\r\n            get\r\n            {\r\n                return FirstNonWhitespaceChar == EndOfLine;\r\n            }\r\n        }\r\n\r\n        public int StartOfNextLine { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/BoldItalicTextInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Core;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a span containing bold italic text.\r\n    /// </summary>\r\n    internal class BoldItalicTextInline : MarkdownInline, IInlineContainer\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"BoldItalicTextInline\"/> class.\r\n        /// </summary>\r\n        public BoldItalicTextInline()\r\n            : base(MarkdownInlineType.Bold)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the contents of the inline.\r\n        /// </summary>\r\n        public IList<MarkdownInline> Inlines { get; set; }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '*', Method = InlineParseMethod.BoldItalic });\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '_', Method = InlineParseMethod.BoldItalic });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a bold text span.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed bold text span, or <c>null</c> if this is not a bold text span. </returns>\r\n        internal static InlineParseResult Parse(string markdown, int start, int maxEnd)\r\n        {\r\n            if (start >= maxEnd - 1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            if (markdown == null || markdown.Length < 6 || start + 6 >= maxEnd)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Check the start sequence.\r\n            string startSequence = markdown.Substring(start, 3);\r\n            if (startSequence != \"***\" && startSequence != \"___\")\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the span.  The end sequence (either '***' or '___') must be the same\r\n            // as the start sequence.\r\n            var innerStart = start + 3;\r\n            int innerEnd = Common.IndexOf(markdown, startSequence, innerStart, maxEnd);\r\n            if (innerEnd == -1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The span must contain at least one character.\r\n            if (innerStart == innerEnd)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The first character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerStart]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The last character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerEnd - 1]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // We found something!\r\n            var bold = new BoldTextInline\r\n            {\r\n                Inlines = new List<MarkdownInline>\r\n                {\r\n                    new ItalicTextInline\r\n                    {\r\n                        Inlines = Common.ParseInlineChildren(markdown, innerStart, innerEnd)\r\n                    }\r\n                }\r\n            };\r\n            return new InlineParseResult(bold, start, innerEnd + 3);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Inlines == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return \"***\" + string.Join(string.Empty, Inlines) + \"***\";\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/BoldTextInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Core;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a span that contains bold text.\r\n    /// </summary>\r\n    public class BoldTextInline : MarkdownInline, IInlineContainer\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"BoldTextInline\"/> class.\r\n        /// </summary>\r\n        public BoldTextInline()\r\n            : base(MarkdownInlineType.Bold)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the contents of the inline.\r\n        /// </summary>\r\n        public IList<MarkdownInline> Inlines { get; set; }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '*', Method = InlineParseMethod.Bold });\r\n            //tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '_', Method = InlineParseMethod.Bold });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a bold text span.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed bold text span, or <c>null</c> if this is not a bold text span. </returns>\r\n        internal static InlineParseResult Parse(string markdown, int start, int maxEnd)\r\n        {\r\n            if (start >= maxEnd - 1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Check the start sequence.\r\n            string startSequence = markdown.Substring(start, 2);\r\n            if (startSequence != \"**\")\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the span.  The end sequence (either '**' or '__') must be the same\r\n            // as the start sequence.\r\n            var innerStart = start + 2;\r\n            int innerEnd = Common.IndexOf(markdown, startSequence, innerStart, maxEnd);\r\n            if (innerEnd == -1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The span must contain at least one character.\r\n            if (innerStart == innerEnd)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The first character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerStart]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The last character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerEnd - 1]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // We found something!\r\n            var result = new BoldTextInline\r\n            {\r\n                Inlines = Common.ParseInlineChildren(markdown, innerStart, innerEnd)\r\n            };\r\n            return new InlineParseResult(result, start, innerEnd + 2);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Inlines == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return \"*\" + string.Join(string.Empty, Inlines) + \"*\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/CodeInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a span containing code, or other text that is to be displayed using a\r\n    /// fixed-width font.\r\n    /// </summary>\r\n    public class CodeInline : MarkdownInline, IInlineLeaf\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"CodeInline\"/> class.\r\n        /// </summary>\r\n        public CodeInline()\r\n            : base(MarkdownInlineType.Code)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the text to display as code.\r\n        /// </summary>\r\n        public string Text { get; set; }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '`', Method = InlineParseMethod.Code });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse an inline code span.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed inline code span, or <c>null</c> if this is not an inline code span. </returns>\r\n        internal static InlineParseResult Parse(string markdown, int start, int maxEnd)\r\n        {\r\n            // Check the first char.\r\n            if (start == maxEnd || markdown[start] != '`')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // There is an alternate syntax that starts and ends with two backticks.\r\n            // e.g. ``sdf`sdf`` would be \"sdf`sdf\".\r\n            int innerStart = start + 1;\r\n            int innerEnd, end;\r\n            if (innerStart < maxEnd && markdown[innerStart] == '`')\r\n            {\r\n                // Alternate double back-tick syntax.\r\n                innerStart++;\r\n\r\n                // Find the end of the span.\r\n                innerEnd = Common.IndexOf(markdown, \"``\", innerStart, maxEnd);\r\n                if (innerEnd == -1)\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                end = innerEnd + 2;\r\n            }\r\n            else\r\n            {\r\n                // Standard single backtick syntax.\r\n\r\n                // Find the end of the span.\r\n                innerEnd = Common.IndexOf(markdown, '`', innerStart, maxEnd);\r\n                if (innerEnd == -1)\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                end = innerEnd + 1;\r\n            }\r\n\r\n            // The span must contain at least one character.\r\n            if (innerStart == innerEnd)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // We found something!\r\n            var result = new CodeInline\r\n            {\r\n                Text = markdown.Substring(innerStart, innerEnd - innerStart).Trim(' ', '\\t', '\\r', '\\n')\r\n            };\r\n            return new InlineParseResult(result, start, end);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Text == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return \"`\" + Text + \"`\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/DiscordInline.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Text;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    public class DiscordInline : MarkdownInline\r\n    {\r\n        public MentionType DiscordType { get; set; }\r\n        public string Text { get; set; }\r\n        public ulong Id { get; set; }\r\n        public bool IsAnimated { get; private set; }\r\n\r\n        public DiscordInline() : base(MarkdownInlineType.Discord)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '<', Method = InlineParseMethod.Discord });\r\n        }\r\n\r\n        internal static InlineParseResult Parse(string markdown, int start, int maxEnd)\r\n        {\r\n            if (start >= maxEnd - 1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Check the start sequence.\r\n            var startSequence = markdown[start];\r\n            if (startSequence != '<')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the span.\r\n            var innerStart = start + 1;\r\n            var innerEnd = Common.IndexOf(markdown, '>', innerStart, maxEnd);\r\n            if (innerEnd == -1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The span must contain at least one character.\r\n            if (innerStart == innerEnd || (innerEnd - innerStart) < 4)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            var text = markdown.Substring(innerStart, innerEnd - innerStart);\r\n            var builder = new StringBuilder();\r\n            var index = 0;\r\n            var type = MentionType.User;\r\n            char c;\r\n\r\n            switch (text[index])\r\n            {\r\n                case '@':\r\n                    // user or role mention\r\n\r\n                    index++;\r\n                    c = text[index];\r\n                    type = MentionType.User;\r\n                    HandleUser(text, builder, ref index, ref type, c);\r\n                    break;\r\n                case '#':\r\n                    // channel mention\r\n\r\n                    index++;\r\n                    c = text[index];\r\n                    type = MentionType.Channel;\r\n\r\n                    if (char.IsDigit(c))\r\n                    {\r\n                        ReadDigits(text, builder, ref index);\r\n                    }\r\n                    break;\r\n                case 'a':\r\n                    // animated emote\r\n                    index += 2;\r\n                    type = MentionType.Emote;\r\n                    return HandleEmote(text, builder, index, innerStart, innerEnd, true);\r\n                case ':':\r\n                    // normal emote\r\n                    index++;\r\n                    type = MentionType.Emote;\r\n                    return HandleEmote(text, builder, index, innerStart, innerEnd);\r\n                default:\r\n                    return null;\r\n            }\r\n\r\n            if (ulong.TryParse(builder.ToString(), out var id))\r\n            {\r\n                return new InlineParseResult(new DiscordInline() { Id = id, DiscordType = type }, innerStart - 1, innerEnd + 1);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        private static void HandleUser(string text, StringBuilder builder, ref int index, ref MentionType type, char c)\r\n        {\r\n            if (c == '!')\r\n            {\r\n                index++;\r\n                ReadDigits(text, builder, ref index);\r\n            }\r\n            else if (char.IsDigit(c))\r\n            {\r\n                ReadDigits(text, builder, ref index);\r\n            }\r\n            else if (c == '&')\r\n            {\r\n                index++;\r\n                ReadDigits(text, builder, ref index);\r\n                type = MentionType.Role;\r\n            }\r\n        }\r\n\r\n        private static InlineParseResult HandleEmote(string text, StringBuilder builder, int index, int innerStart, int innerEnd, bool isAnimated = false)\r\n        {\r\n            var nextIndex = text.IndexOf(':', index);\r\n            if (nextIndex == -1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            var emoteName = text.Substring(index, nextIndex - index);\r\n            nextIndex++;\r\n\r\n            ReadDigits(text, builder, ref nextIndex);\r\n            if (ulong.TryParse(builder.ToString(), out var id))\r\n            {\r\n                return new InlineParseResult(new DiscordInline() { Id = id, DiscordType = MentionType.Emote, Text = emoteName, IsAnimated = isAnimated }, innerStart - 1, innerEnd + 1);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        private static void ReadDigits(string text, StringBuilder builder, ref int index)\r\n        {\r\n            char c;\r\n            while (index < text.Length && char.IsDigit(c = text[index]))\r\n            {\r\n                builder.Append(c);\r\n                index++;\r\n            }\r\n        }\r\n\r\n        public enum MentionType\r\n        {\r\n            User, Channel, Role, Emote\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/EmojiInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing DSharpPlus.Entities;\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Core;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a span containing emoji symbol.\r\n    /// </summary>\r\n    public partial class EmojiInline : MarkdownInline, IInlineLeaf\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"EmojiInline\"/> class.\r\n        /// </summary>\r\n        public EmojiInline()\r\n            : base(MarkdownInlineType.Emoji)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = ':', Method = InlineParseMethod.Emoji });\r\n        }\r\n\r\n        internal static InlineParseResult Parse(string markdown, int start, int maxEnd)\r\n        {\r\n            if (start >= maxEnd - 1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Check the start sequence.\r\n            string startSequence = markdown.Substring(start, 1);\r\n            if (startSequence != \":\")\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the span.\r\n            var innerStart = start + 1;\r\n            int innerEnd = Common.IndexOf(markdown, startSequence, innerStart, maxEnd);\r\n            if (innerEnd == -1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The span must contain at least one character.\r\n            if (innerStart == innerEnd)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The first character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerStart]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The last character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerEnd - 1]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            var emojiName = markdown.Substring(innerStart, innerEnd - innerStart);\r\n\r\n            if (DiscordEmoji.UnicodeEmojis.TryGetValue($\":{emojiName}:\", out var emojiCode))\r\n            {\r\n                var result = new EmojiInline { Text = emojiCode, Type = MarkdownInlineType.Emoji };\r\n                return new InlineParseResult(result, start, innerEnd + 1);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <inheritdoc/>\r\n        public string Text { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/HyperlinkInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a type of hyperlink where the text and the target URL cannot be controlled\r\n    /// independently.\r\n    /// </summary>\r\n    public class HyperlinkInline : MarkdownInline, IInlineLeaf, ILinkElement\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"HyperlinkInline\"/> class.\r\n        /// </summary>\r\n        public HyperlinkInline()\r\n            : base(MarkdownInlineType.RawHyperlink)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the text to display.\r\n        /// </summary>\r\n        public string Text { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the URL to link to.\r\n        /// </summary>\r\n        public string Url { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets this type of hyperlink does not have a tooltip.\r\n        /// </summary>\r\n        string ILinkElement.Tooltip => null;\r\n\r\n        /// <summary>\r\n        /// Gets or sets the type of hyperlink.\r\n        /// </summary>\r\n        public HyperlinkType LinkType { get; set; }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '<', Method = InlineParseMethod.AngleBracketLink });\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = ':', Method = InlineParseMethod.Url });\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '/', Method = InlineParseMethod.RedditLink });\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '.', Method = InlineParseMethod.PartialLink });\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '@', Method = InlineParseMethod.Email });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a URL within angle brackets e.g. \"http://www.reddit.com\".\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed URL, or <c>null</c> if this is not a URL. </returns>\r\n        internal static InlineParseResult ParseAngleBracketLink(string markdown, int start, int maxEnd)\r\n        {\r\n            int innerStart = start + 1;\r\n\r\n            // Check for a known scheme e.g. \"https://\".\r\n            int pos = -1;\r\n            foreach (var scheme in MarkdownDocument.KnownSchemes)\r\n            {\r\n                if (maxEnd - innerStart >= scheme.Length && string.Equals(markdown.Substring(innerStart, scheme.Length), scheme, StringComparison.OrdinalIgnoreCase))\r\n                {\r\n                    // URL scheme found.\r\n                    pos = innerStart + scheme.Length;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (pos == -1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Angle bracket links should not have any whitespace.\r\n            int innerEnd = markdown.IndexOfAny(new char[] { ' ', '\\t', '\\r', '\\n', '>' }, pos, maxEnd - pos);\r\n            if (innerEnd == -1 || markdown[innerEnd] != '>')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // There should be at least one character after the http://.\r\n            if (innerEnd == pos)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            var url = markdown.Substring(innerStart, innerEnd - innerStart);\r\n            return new InlineParseResult(new HyperlinkInline { Url = url, Text = url, LinkType = HyperlinkType.BracketedUrl }, start, innerEnd + 1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a URL e.g. \"http://www.reddit.com\".\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"tripPos\"> The location of the colon character. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed URL, or <c>null</c> if this is not a URL. </returns>\r\n        internal static InlineParseResult ParseUrl(string markdown, int tripPos, int maxEnd)\r\n        {\r\n            int start = -1;\r\n\r\n            // Check for a known scheme e.g. \"https://\".\r\n            foreach (var scheme in MarkdownDocument.KnownSchemes)\r\n            {\r\n                int schemeStart = tripPos - scheme.Length;\r\n                if (schemeStart >= 0 && schemeStart <= maxEnd - scheme.Length && string.Equals(markdown.Substring(schemeStart, scheme.Length), scheme, StringComparison.OrdinalIgnoreCase))\r\n                {\r\n                    // URL scheme found.\r\n                    start = schemeStart;\r\n                    break;\r\n                }\r\n            }\r\n\r\n            if (start == -1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The previous character must be non-alphanumeric i.e. \"ahttp://t.co\" is not a valid URL.\r\n            if (start > 0 && char.IsLetter(markdown[start - 1]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The URL must have at least one character after the http:// and at least one dot.\r\n            int pos = tripPos + 3;\r\n            if (maxEnd - pos < 0)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            int dotIndex = markdown.IndexOf('.', pos, maxEnd - pos);\r\n            if (dotIndex == -1 || dotIndex == pos)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the URL.\r\n            int end = FindUrlEnd(markdown, dotIndex + 1, maxEnd);\r\n\r\n            var url = markdown.Substring(start, end - start);\r\n            return new InlineParseResult(new HyperlinkInline { Url = url, Text = url, LinkType = HyperlinkType.FullUrl }, start, end);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a subreddit link e.g. \"/r/news\" or \"r/news\".\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed subreddit or user link, or <c>null</c> if this is not a subreddit link. </returns>\r\n        internal static InlineParseResult ParseRedditLink(string markdown, int start, int maxEnd)\r\n        {\r\n            var result = ParseDoubleSlashLink(markdown, start, maxEnd);\r\n            if (result != null)\r\n            {\r\n                return result;\r\n            }\r\n\r\n            return ParseSingleSlashLink(markdown, start, maxEnd);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a link of the form \"/r/news\" or \"/u/quinbd\".\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed subreddit or user link, or <c>null</c> if this is not a subreddit link. </returns>\r\n        private static InlineParseResult ParseDoubleSlashLink(string markdown, int start, int maxEnd)\r\n        {\r\n            // The minimum length is 4 characters (\"/u/u\").\r\n            if (start > maxEnd - 4)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Determine the type of link (subreddit or user).\r\n            HyperlinkType linkType;\r\n            if (markdown[start + 1] == 'r')\r\n            {\r\n                linkType = HyperlinkType.Subreddit;\r\n            }\r\n            else if (markdown[start + 1] == 'u')\r\n            {\r\n                linkType = HyperlinkType.User;\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Check that there is another slash.\r\n            if (markdown[start + 2] != '/')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the link.\r\n            int end = FindEndOfRedditLink(markdown, start + 3, maxEnd);\r\n\r\n            // Subreddit names must be at least two characters long, users at least one.\r\n            if (end - start < (linkType == HyperlinkType.User ? 4 : 5))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // We found something!\r\n            var text = markdown.Substring(start, end - start);\r\n            return new InlineParseResult(new HyperlinkInline { Text = text, Url = text, LinkType = linkType }, start, end);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parse a link of the form \"r/news\" or \"u/quinbd\".\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed subreddit or user link, or <c>null</c> if this is not a subreddit link. </returns>\r\n        private static InlineParseResult ParseSingleSlashLink(string markdown, int start, int maxEnd)\r\n        {\r\n            // The minimum length is 3 characters (\"u/u\").\r\n            start--;\r\n            if (start < 0 || start > maxEnd - 3)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Determine the type of link (subreddit or user).\r\n            HyperlinkType linkType;\r\n            if (markdown[start] == 'r')\r\n            {\r\n                linkType = HyperlinkType.Subreddit;\r\n            }\r\n            else if (markdown[start] == 'u')\r\n            {\r\n                linkType = HyperlinkType.User;\r\n            }\r\n            else\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // If the link doesn't start with '/', then the previous character must be\r\n            // non-alphanumeric i.e. \"bear/trap\" is not a valid subreddit link.\r\n            if (start >= 1 && (char.IsLetterOrDigit(markdown[start - 1]) || markdown[start - 1] == '/'))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the link.\r\n            int end = FindEndOfRedditLink(markdown, start + 2, maxEnd);\r\n\r\n            // Subreddit names must be at least two characters long, users at least one.\r\n            if (end - start < (linkType == HyperlinkType.User ? 3 : 4))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // We found something!\r\n            var text = markdown.Substring(start, end - start);\r\n            return new InlineParseResult(new HyperlinkInline { Text = text, Url = \"/\" + text, LinkType = linkType }, start, end);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a URL without a scheme e.g. \"www.reddit.com\".\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"tripPos\"> The location of the dot character. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed URL, or <c>null</c> if this is not a URL. </returns>\r\n        internal static InlineParseResult ParsePartialLink(string markdown, int tripPos, int maxEnd)\r\n        {\r\n            int start = tripPos - 3;\r\n            if (start < 0 || markdown[start] != 'w' || markdown[start + 1] != 'w' || markdown[start + 2] != 'w')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The character before the \"www\" must be non-alphanumeric i.e. \"bwww.reddit.com\" is not a valid URL.\r\n            if (start >= 1 && (char.IsLetterOrDigit(markdown[start - 1]) || markdown[start - 1] == '<'))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The URL must have at least one character after the www.\r\n            if (start >= maxEnd - 4)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the URL.\r\n            int end = FindUrlEnd(markdown, start + 4, maxEnd);\r\n\r\n            var url = markdown.Substring(start, end - start);\r\n            return new InlineParseResult(new HyperlinkInline { Url = \"http://\" + url, Text = url, LinkType = HyperlinkType.PartialUrl }, start, end);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse an email address e.g. \"test@reddit.com\".\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"minStart\"> The minimum start position to return. </param>\r\n        /// <param name=\"tripPos\"> The location of the at character. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed URL, or <c>null</c> if this is not a URL. </returns>\r\n        internal static InlineParseResult ParseEmailAddress(string markdown, int minStart, int tripPos, int maxEnd)\r\n        {\r\n            // Search backwards until we find a character which is not a letter, digit, or one of\r\n            // these characters: '+', '-', '_', '.'.\r\n            // Note: it is intended that this code match the reddit.com markdown parser; there are\r\n            // many characters which are legal in email addresses but which aren't picked up by\r\n            // reddit (for example: '$' and '!').\r\n\r\n            // Special characters as per https://en.wikipedia.org/wiki/Email_address#Local-part allowed\r\n            char[] allowedchars = new char[] { '!', '#', '$', '%', '&', '\\'', '*', '+', '-', '/', '=', '?', '^', '_', '`', '{', '|', '}', '~' };\r\n\r\n            int start = tripPos;\r\n            while (start > minStart)\r\n            {\r\n                char c = markdown[start - 1];\r\n                if ((c < 'a' || c > 'z') &&\r\n                    (c < 'A' || c > 'Z') &&\r\n                    (c < '0' || c > '9') &&\r\n                    !allowedchars.Contains(c))\r\n                {\r\n                    break;\r\n                }\r\n\r\n                start--;\r\n            }\r\n\r\n            // There must be at least one character before the '@'.\r\n            if (start == tripPos)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Search forwards until we find a character which is not a letter, digit, or one of\r\n            // these characters: '-', '_'.\r\n            // Note: it is intended that this code match the reddit.com markdown parser;\r\n            // technically underscores ('_') aren't allowed in a host name.\r\n            int dotIndex = tripPos + 1;\r\n            while (dotIndex < maxEnd)\r\n            {\r\n                char c = markdown[dotIndex];\r\n                if ((c < 'a' || c > 'z') &&\r\n                    (c < 'A' || c > 'Z') &&\r\n                    (c < '0' || c > '9') &&\r\n                    c != '-' && c != '_')\r\n                {\r\n                    break;\r\n                }\r\n\r\n                dotIndex++;\r\n            }\r\n\r\n            // We are expecting a dot.\r\n            if (dotIndex == maxEnd || markdown[dotIndex] != '.')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Search forwards until we find a character which is not a letter, digit, or one of\r\n            // these characters: '.', '-', '_'.\r\n            // Note: it is intended that this code match the reddit.com markdown parser;\r\n            // technically underscores ('_') aren't allowed in a host name.\r\n            int end = dotIndex + 1;\r\n            while (end < maxEnd)\r\n            {\r\n                char c = markdown[end];\r\n                if ((c < 'a' || c > 'z') &&\r\n                    (c < 'A' || c > 'Z') &&\r\n                    (c < '0' || c > '9') &&\r\n                    c != '.' && c != '-' && c != '_')\r\n                {\r\n                    break;\r\n                }\r\n\r\n                end++;\r\n            }\r\n\r\n            // There must be at least one character after the dot.\r\n            if (end == dotIndex + 1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // We found an email address!\r\n            var emailAddress = markdown.Substring(start, end - start);\r\n            return new InlineParseResult(new HyperlinkInline { Url = \"mailto:\" + emailAddress, Text = emailAddress, LinkType = HyperlinkType.Email }, start, end);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Text == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return Text;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds the next character that is not a letter, digit or underscore in a range.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start searching. </param>\r\n        /// <param name=\"end\"> The location to stop searching. </param>\r\n        /// <returns> The location of the next character that is not a letter, digit or underscore. </returns>\r\n        private static int FindEndOfRedditLink(string markdown, int start, int end)\r\n        {\r\n            int pos = start;\r\n            while (pos < markdown.Length && pos < end)\r\n            {\r\n                char c = markdown[pos];\r\n                if ((c < 'a' || c > 'z') &&\r\n                    (c < 'A' || c > 'Z') &&\r\n                    (c < '0' || c > '9') &&\r\n                    c != '_' && c != '/')\r\n                {\r\n                    return pos;\r\n                }\r\n\r\n                pos++;\r\n            }\r\n\r\n            return end;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Finds the end of a URL.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start searching. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop searching. </param>\r\n        /// <returns> The location of the end of the URL. </returns>\r\n        private static int FindUrlEnd(string markdown, int start, int maxEnd)\r\n        {\r\n            // For some reason a less than character ends a URL...\r\n            int end = markdown.IndexOfAny(new char[] { ' ', '\\t', '\\r', '\\n', '<' }, start, maxEnd - start);\r\n            if (end == -1)\r\n            {\r\n                end = maxEnd;\r\n            }\r\n\r\n            // URLs can't end on a punctuation character.\r\n            while (end - 1 > start)\r\n            {\r\n                if (Array.IndexOf(new char[] { ')', '}', ']', '!', ';', '.', '?', ',' }, markdown[end - 1]) < 0)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                end--;\r\n            }\r\n\r\n            return end;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/IInlineContainer.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Initializes a new instance of the <see cref=\"IInlineContainer\"/> class.\r\n    /// </summary>\r\n    public interface IInlineContainer\r\n    {\r\n        /// <summary>\r\n        /// Gets or sets the contents of the inline.\r\n        /// </summary>\r\n        IList<MarkdownInline> Inlines { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/IInlineLeaf.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Initializes a new instance of the <see cref=\"IInlineLeaf\"/> class.\r\n    /// </summary>\r\n    public interface IInlineLeaf\r\n    {\r\n        /// <summary>\r\n        /// Gets or sets the text for this run.\r\n        /// </summary>\r\n        string Text { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/ILinkElement.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Implemented by all inline link elements.\r\n    /// </summary>\r\n    internal interface ILinkElement\r\n    {\r\n        /// <summary>\r\n        /// Gets the link URL.  This can be a relative URL, but note that subreddit links will always\r\n        /// have the leading slash (i.e. the Url will be \"/r/baconit\" even if the text is\r\n        /// \"r/baconit\").\r\n        /// </summary>\r\n        string Url { get; }\r\n\r\n        /// <summary>\r\n        /// Gets a tooltip to display on hover.  Can be <c>null</c>.\r\n        /// </summary>\r\n        string Tooltip { get; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/ImageInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Core;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents an embedded image.\r\n    /// </summary>\r\n    public class ImageInline : MarkdownInline, IInlineLeaf\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"ImageInline\"/> class.\r\n        /// </summary>\r\n        public ImageInline()\r\n            : base(MarkdownInlineType.Image)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the image URL.\r\n        /// </summary>\r\n        public string Url { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the image Render URL.\r\n        /// </summary>\r\n        public string RenderUrl { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a text to display on hover.\r\n        /// </summary>\r\n        public string Tooltip { get; set; }\r\n\r\n        /// <inheritdoc/>\r\n        public string Text { get; set; } = string.Empty;\r\n\r\n        /// <summary>\r\n        /// Gets or sets the ID of a reference, if this is a reference-style link.\r\n        /// </summary>\r\n        public string ReferenceId { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets image width\r\n        /// If value is greater than 0, ImageStretch is set to UniformToFill\r\n        /// If both ImageWidth and ImageHeight are greater than 0, ImageStretch is set to Fill\r\n        /// </summary>\r\n        public int ImageWidth { get; internal set; }\r\n\r\n        /// <summary>\r\n        /// Gets image height\r\n        /// If value is greater than 0, ImageStretch is set to UniformToFill\r\n        /// If both ImageWidth and ImageHeight are greater than 0, ImageStretch is set to Fill\r\n        /// </summary>\r\n        public int ImageHeight { get; internal set; }\r\n\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '!', Method = InlineParseMethod.Image });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse an image e.g. \"![Toolkit logo](https://raw.githubusercontent.com/Microsoft/WindowsCommunityToolkit/master/WamWooWam.Uwp.SampleApp/Assets/ToolkitLogo.png)\".\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"end\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed markdown image, or <c>null</c> if this is not a markdown image. </returns>\r\n        internal static InlineParseResult Parse(string markdown, int start, int end)\r\n        {\r\n            int refstart = 0;\r\n\r\n            // Expect a '!' character.\r\n            if (start >= end || markdown[start] != '!')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            int pos = start + 1;\r\n\r\n            // Then a '[' character\r\n            if (pos >= end || markdown[pos] != '[')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            pos++;\r\n\r\n            // Find the ']' character\r\n            while (pos < end)\r\n            {\r\n                if (markdown[pos] == ']')\r\n                {\r\n                    break;\r\n                }\r\n\r\n                pos++;\r\n            }\r\n\r\n            if (pos == end)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Extract the alt.\r\n            string tooltip = markdown.Substring(start + 2, pos - (start + 2));\r\n\r\n            // Expect the '(' character.\r\n            pos++;\r\n\r\n            string reference = string.Empty;\r\n            string url = string.Empty;\r\n            int imageWidth = 0;\r\n            int imageHeight = 0;\r\n\r\n            if (pos < end && markdown[pos] == '[')\r\n            {\r\n                refstart = pos;\r\n\r\n                // Find the reference ']' character\r\n                while (pos < end)\r\n                {\r\n                    if (markdown[pos] == ']')\r\n                    {\r\n                        break;\r\n                    }\r\n\r\n                    pos++;\r\n                }\r\n\r\n                reference = markdown.Substring(refstart + 1, pos - refstart - 1);\r\n            }\r\n            else if (pos < end && markdown[pos] == '(')\r\n            {\r\n                while (pos < end && ParseHelpers.IsMarkdownWhiteSpace(markdown[pos]))\r\n                {\r\n                    pos++;\r\n                }\r\n\r\n                // Extract the URL.\r\n                int urlStart = pos;\r\n                while (pos < end && markdown[pos] != ')')\r\n                {\r\n                    pos++;\r\n                }\r\n\r\n                var imageDimensionsPos = markdown.IndexOf(\" =\", urlStart, pos - urlStart, StringComparison.Ordinal);\r\n\r\n                url = imageDimensionsPos > 0\r\n                    ? TextRunInline.ResolveEscapeSequences(markdown, urlStart + 1, imageDimensionsPos)\r\n                    : TextRunInline.ResolveEscapeSequences(markdown, urlStart + 1, pos);\r\n\r\n                if (imageDimensionsPos > 0)\r\n                {\r\n                    // trying to find 'x' which separates image width and height\r\n                    var dimensionsSepatorPos = markdown.IndexOf(\"x\", imageDimensionsPos + 2, pos - imageDimensionsPos - 1, StringComparison.Ordinal);\r\n\r\n                    // didn't find separator, trying to parse value as imageWidth\r\n                    if (dimensionsSepatorPos == -1)\r\n                    {\r\n                        var imageWidthStr = markdown.Substring(imageDimensionsPos + 2, pos - imageDimensionsPos - 2);\r\n\r\n                        int.TryParse(imageWidthStr, out imageWidth);\r\n                    }\r\n                    else\r\n                    {\r\n                        var dimensions = markdown.Substring(imageDimensionsPos + 2, pos - imageDimensionsPos - 2).Split('x');\r\n\r\n                        // got width and height\r\n                        if (dimensions.Length == 2)\r\n                        {\r\n                            int.TryParse(dimensions[0], out imageWidth);\r\n                            int.TryParse(dimensions[1], out imageHeight);\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (pos == end)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // We found something!\r\n            var result = new ImageInline\r\n            {\r\n                Tooltip = tooltip,\r\n                RenderUrl = url,\r\n                ReferenceId = reference,\r\n                Url = url,\r\n                Text = markdown.Substring(start, pos + 1 - start),\r\n                ImageWidth = imageWidth,\r\n                ImageHeight = imageHeight\r\n            };\r\n            return new InlineParseResult(result, start, pos + 1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// If this is a reference-style link, attempts to converts it to a regular link.\r\n        /// </summary>\r\n        /// <param name=\"document\"> The document containing the list of references. </param>\r\n        internal void ResolveReference(MarkdownDocument document)\r\n        {\r\n            if (document == null)\r\n            {\r\n                throw new ArgumentNullException(\"document\");\r\n            }\r\n\r\n            if (ReferenceId == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            // Look up the reference ID.\r\n            var reference = document.LookUpReference(ReferenceId);\r\n            if (reference == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            // The reference was found. Check the URL is valid.\r\n            if (!Common.IsUrlValid(reference.Url))\r\n            {\r\n                return;\r\n            }\r\n\r\n            // Everything is cool when you're part of a team.\r\n            RenderUrl = reference.Url;\r\n            ReferenceId = null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (ImageWidth > 0 && ImageHeight > 0)\r\n            {\r\n                return string.Format(\"![{0}]: {1} (Width: {2}, Height: {3})\", Tooltip, Url, ImageWidth, ImageHeight);\r\n            }\r\n\r\n            if (ImageWidth > 0)\r\n            {\r\n                return string.Format(\"![{0}]: {1} (Width: {2})\", Tooltip, Url, ImageWidth);\r\n            }\r\n\r\n            if (ImageHeight > 0)\r\n            {\r\n                return string.Format(\"![{0}]: {1} (Height: {2})\", Tooltip, Url, ImageHeight);\r\n            }\r\n\r\n            return string.Format(\"![{0}]: {1}\", Tooltip, Url);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/ItalicTextInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Core;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a span containing italic text.\r\n    /// </summary>\r\n    public class ItalicTextInline : MarkdownInline, IInlineContainer\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"ItalicTextInline\"/> class.\r\n        /// </summary>\r\n        public ItalicTextInline()\r\n            : base(MarkdownInlineType.Italic)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the contents of the inline.\r\n        /// </summary>\r\n        public IList<MarkdownInline> Inlines { get; set; }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '*', Method = InlineParseMethod.Italic });\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '_', Method = InlineParseMethod.Italic });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a italic text span.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed italic text span, or <c>null</c> if this is not a italic text span. </returns>\r\n        internal static InlineParseResult Parse(string markdown, int start, int maxEnd)\r\n        {\r\n            // Check the first char.\r\n            char startChar = markdown[start];\r\n            if (start == maxEnd || (startChar != '*' && startChar != '_'))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the span.  The end character (either '*' or '_') must be the same as\r\n            // the start character.\r\n            var innerStart = start + 1;\r\n            int innerEnd = Common.IndexOf(markdown, startChar, start + 1, maxEnd);\r\n            if (innerEnd == -1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The span must contain at least one character.\r\n            if (innerStart == innerEnd)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The first character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerStart]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The last character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerEnd - 1]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Discord avoids italicising snake_case_for_some_reason\r\n            if (startChar == '_' && innerEnd + 1 < maxEnd && !ParseHelpers.IsMarkdownWhiteSpace(markdown[innerEnd + 1]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // We found something!\r\n            var result = new ItalicTextInline\r\n            {\r\n                Inlines = Common.ParseInlineChildren(markdown, innerStart, innerEnd)\r\n            };\r\n            return new InlineParseResult(result, start, innerEnd + 1);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Inlines == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return \"*\" + string.Join(string.Empty, Inlines) + \"*\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/LinkAnchorInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\nusing System.Xml.Linq;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a span that contains a reference for links to point to.\r\n    /// </summary>\r\n    public class LinkAnchorInline : MarkdownInline\r\n    {\r\n        internal LinkAnchorInline()\r\n            : base(MarkdownInlineType.LinkReference)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the Name of this Link Reference.\r\n        /// </summary>\r\n        public string Link { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the raw Link Reference.\r\n        /// </summary>\r\n        public string Raw { get; set; }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '<', Method = InlineParseMethod.LinkReference });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a comment span.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed bold text span, or <c>null</c> if this is not a bold text span. </returns>\r\n        internal static InlineParseResult Parse(string markdown, int start, int maxEnd)\r\n        {\r\n            if (start >= maxEnd - 1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Check the start sequence.\r\n            string startSequence = markdown.Substring(start, 2);\r\n            if (startSequence != \"<a\")\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the span.  The end sequence ('-->')\r\n            var innerStart = start + 2;\r\n            int innerEnd = Common.IndexOf(markdown, \"</a>\", innerStart, maxEnd);\r\n            int trueEnd = innerEnd + 4;\r\n            if (innerEnd == -1)\r\n            {\r\n                innerEnd = Common.IndexOf(markdown, \"/>\", innerStart, maxEnd);\r\n                trueEnd = innerEnd + 2;\r\n                if (innerEnd == -1)\r\n                {\r\n                    return null;\r\n                }\r\n            }\r\n\r\n            // This link Reference wasn't closed properly if the next link starts before a close.\r\n            var nextLink = Common.IndexOf(markdown, \"<a\", innerStart, maxEnd);\r\n            if (nextLink > -1 && nextLink < innerEnd)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            var length = trueEnd - start;\r\n            var contents = markdown.Substring(start, length);\r\n\r\n            string link = null;\r\n\r\n            try\r\n            {\r\n                var xml = XElement.Parse(contents);\r\n                var attr = xml.Attribute(\"name\");\r\n                if (attr != null)\r\n                {\r\n                    link = attr.Value;\r\n                }\r\n            }\r\n            catch\r\n            {\r\n                // Attempting to fetch link failed, ignore and continue.\r\n            }\r\n\r\n            // Remove whitespace if it exists.\r\n            if (trueEnd + 1 <= maxEnd && markdown[trueEnd] == ' ')\r\n            {\r\n                trueEnd += 1;\r\n            }\r\n\r\n            // We found something!\r\n            var result = new LinkAnchorInline\r\n            {\r\n                Raw = contents,\r\n                Link = link\r\n            };\r\n            return new InlineParseResult(result, start, trueEnd);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            return Raw;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/MarkdownLinkInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Microsoft.Toolkit;\r\nusing Unicord.Universal.Parsers.Core;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a type of hyperlink where the text can be different from the target URL.\r\n    /// </summary>\r\n    public class MarkdownLinkInline : MarkdownInline, IInlineContainer, ILinkElement\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"MarkdownLinkInline\"/> class.\r\n        /// </summary>\r\n        public MarkdownLinkInline()\r\n            : base(MarkdownInlineType.MarkdownLink)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the contents of the inline.\r\n        /// </summary>\r\n        public IList<MarkdownInline> Inlines { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the link URL.\r\n        /// </summary>\r\n        public string Url { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a tooltip to display on hover.\r\n        /// </summary>\r\n        public string Tooltip { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the ID of a reference, if this is a reference-style link.\r\n        /// </summary>\r\n        public string ReferenceId { get; set; }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '[', Method = InlineParseMethod.MarkdownLink });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a markdown link e.g. \"[](http://www.reddit.com)\".\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed markdown link, or <c>null</c> if this is not a markdown link. </returns>\r\n        internal static InlineParseResult Parse(string markdown, int start, int maxEnd)\r\n        {\r\n            // Expect a '[' character.\r\n            if (start == maxEnd || markdown[start] != '[')\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the ']' character, keeping in mind that [test [0-9]](http://www.test.com) is allowed.\r\n            int linkTextOpen = start + 1;\r\n            int pos = linkTextOpen;\r\n            int linkTextClose;\r\n            int openSquareBracketCount = 0;\r\n            while (true)\r\n            {\r\n                linkTextClose = markdown.IndexOfAny(new char[] { '[', ']' }, pos, maxEnd - pos);\r\n                if (linkTextClose == -1)\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                if (markdown[linkTextClose] == '[')\r\n                {\r\n                    openSquareBracketCount++;\r\n                }\r\n                else if (openSquareBracketCount > 0)\r\n                {\r\n                    openSquareBracketCount--;\r\n                }\r\n                else\r\n                {\r\n                    break;\r\n                }\r\n\r\n                pos = linkTextClose + 1;\r\n            }\r\n\r\n            // Skip whitespace.\r\n            pos = linkTextClose + 1;\r\n            while (pos < maxEnd && ParseHelpers.IsMarkdownWhiteSpace(markdown[pos]))\r\n            {\r\n                pos++;\r\n            }\r\n\r\n            if (pos == maxEnd)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Expect the '(' character or the '[' character.\r\n            int linkOpen = pos;\r\n            if (markdown[pos] == '(')\r\n            {\r\n                // Skip whitespace.\r\n                linkOpen++;\r\n                while (linkOpen < maxEnd && ParseHelpers.IsMarkdownWhiteSpace(markdown[linkOpen]))\r\n                {\r\n                    linkOpen++;\r\n                }\r\n\r\n                // Find the ')' character.\r\n                pos = linkOpen;\r\n                int linkClose = -1;\r\n                var openParenthesis = 0;\r\n                while (pos < maxEnd)\r\n                {\r\n                    if (markdown[pos] == ')')\r\n                    {\r\n                        if (openParenthesis == 0)\r\n                        {\r\n                            linkClose = pos;\r\n                            break;\r\n                        }\r\n                        else\r\n                        {\r\n                            openParenthesis--;\r\n                        }\r\n                    }\r\n\r\n                    if (markdown[pos] == '(')\r\n                    {\r\n                        openParenthesis++;\r\n                    }\r\n\r\n                    pos++;\r\n                }\r\n\r\n                if (pos >= maxEnd)\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                int end = linkClose + 1;\r\n\r\n                // Skip whitespace backwards.\r\n                while (linkClose > linkOpen && ParseHelpers.IsMarkdownWhiteSpace(markdown[linkClose - 1]))\r\n                {\r\n                    linkClose--;\r\n                }\r\n\r\n                // If there is no text whatsoever, then this is not a valid link.\r\n                if (linkOpen == linkClose)\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                // Check if there is tooltip text.\r\n                string url;\r\n                string tooltip = null;\r\n                bool lastUrlCharIsDoubleQuote = markdown[linkClose - 1] == '\"';\r\n                int tooltipStart = Common.IndexOf(markdown, \" \\\"\", linkOpen, linkClose - 1);\r\n                if (tooltipStart == linkOpen)\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                if (lastUrlCharIsDoubleQuote && tooltipStart != -1)\r\n                {\r\n                    // Extract the URL (resolving any escape sequences).\r\n                    url = TextRunInline.ResolveEscapeSequences(markdown, linkOpen, tooltipStart).TrimEnd(' ', '\\t', '\\r', '\\n');\r\n                    tooltip = markdown.Substring(tooltipStart + 2, (linkClose - 1) - (tooltipStart + 2));\r\n                }\r\n                else\r\n                {\r\n                    // Extract the URL (resolving any escape sequences).\r\n                    url = TextRunInline.ResolveEscapeSequences(markdown, linkOpen, linkClose);\r\n                }\r\n\r\n                // Check the URL is okay.\r\n                if (!url.IsEmail())\r\n                {\r\n                    if (!Common.IsUrlValid(url))\r\n                    {\r\n                        return null;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    tooltip = url = string.Format(\"mailto:{0}\", url);\r\n                }\r\n\r\n                // We found a regular stand-alone link.\r\n                var result = new MarkdownLinkInline\r\n                {\r\n                    Inlines = Common.ParseInlineChildren(markdown, linkTextOpen, linkTextClose, ignoreLinks: true),\r\n                    Url = url.Replace(\" \", \"%20\"),\r\n                    Tooltip = tooltip\r\n                };\r\n                return new InlineParseResult(result, start, end);\r\n            }\r\n            else if (markdown[pos] == '[')\r\n            {\r\n                // Find the ']' character.\r\n                int linkClose = Common.IndexOf(markdown, ']', pos + 1, maxEnd);\r\n                if (linkClose == -1)\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                // We found a reference-style link.\r\n                var result = new MarkdownLinkInline\r\n                {\r\n                    Inlines = Common.ParseInlineChildren(markdown, linkTextOpen, linkTextClose, ignoreLinks: true),\r\n                    ReferenceId = markdown.Substring(linkOpen + 1, linkClose - (linkOpen + 1))\r\n                };\r\n                if (result.ReferenceId == string.Empty)\r\n                {\r\n                    result.ReferenceId = markdown.Substring(linkTextOpen, linkTextClose - linkTextOpen);\r\n                }\r\n\r\n                return new InlineParseResult(result, start, linkClose + 1);\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// If this is a reference-style link, attempts to converts it to a regular link.\r\n        /// </summary>\r\n        /// <param name=\"document\"> The document containing the list of references. </param>\r\n        internal void ResolveReference(MarkdownDocument document)\r\n        {\r\n            if (document == null)\r\n            {\r\n                throw new ArgumentNullException(\"document\");\r\n            }\r\n\r\n            if (ReferenceId == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            // Look up the reference ID.\r\n            var reference = document.LookUpReference(ReferenceId);\r\n            if (reference == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            // The reference was found. Check the URL is valid.\r\n            if (!Common.IsUrlValid(reference.Url))\r\n            {\r\n                return;\r\n            }\r\n\r\n            // Everything is cool when you're part of a team.\r\n            Url = reference.Url;\r\n            Tooltip = reference.Tooltip;\r\n            ReferenceId = null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Inlines == null || Url == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            if (ReferenceId != null)\r\n            {\r\n                return string.Format(\"[{0}][{1}]\", string.Join(string.Empty, Inlines), ReferenceId);\r\n            }\r\n\r\n            return string.Format(\"[{0}]({1})\", string.Join(string.Empty, Inlines), Url);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/SpoilerTextInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a span containing strikethrough text.\r\n    /// </summary>\r\n    public class SpoilerTextInline : MarkdownInline, IInlineContainer\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"SpoilerTextInline\"/> class.\r\n        /// </summary>\r\n        public SpoilerTextInline()\r\n            : base(MarkdownInlineType.Spoiler)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets The contents of the inline.\r\n        /// </summary>\r\n        public IList<MarkdownInline> Inlines { get; set; }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '|', Method = InlineParseMethod.Spoiler });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a strikethrough text span.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed strikethrough text span, or <c>null</c> if this is not a strikethrough text span. </returns>\r\n        internal static InlineParseResult Parse(string markdown, int start, int maxEnd)\r\n        {\r\n            // Check the start sequence.\r\n            if (start >= maxEnd - 1 || markdown.Substring(start, 2) != \"||\")\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the span.\r\n            var innerStart = start + 2;\r\n            int innerEnd = Common.IndexOf(markdown, \"||\", innerStart, maxEnd);\r\n            if (innerEnd == -1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The span must contain at least one character.\r\n            if (innerStart == innerEnd)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // We found something!\r\n            var result = new SpoilerTextInline\r\n            {\r\n                Inlines = Common.ParseInlineChildren(markdown, innerStart, innerEnd)\r\n            };\r\n            return new InlineParseResult(result, start, innerEnd + 2);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Inlines == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return \"||\" + string.Join(string.Empty, Inlines) + \"||\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/StrikethroughTextInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Core;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a span containing strikethrough text.\r\n    /// </summary>\r\n    public class StrikethroughTextInline : MarkdownInline, IInlineContainer\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"StrikethroughTextInline\"/> class.\r\n        /// </summary>\r\n        public StrikethroughTextInline()\r\n            : base(MarkdownInlineType.Strikethrough)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets The contents of the inline.\r\n        /// </summary>\r\n        public IList<MarkdownInline> Inlines { get; set; }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '~', Method = InlineParseMethod.Strikethrough });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a strikethrough text span.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed strikethrough text span, or <c>null</c> if this is not a strikethrough text span. </returns>\r\n        internal static InlineParseResult Parse(string markdown, int start, int maxEnd)\r\n        {\r\n            // Check the start sequence.\r\n            if (start >= maxEnd - 1 || markdown.Substring(start, 2) != \"~~\")\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the span.\r\n            var innerStart = start + 2;\r\n            int innerEnd = Common.IndexOf(markdown, \"~~\", innerStart, maxEnd);\r\n            if (innerEnd == -1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The span must contain at least one character.\r\n            if (innerStart == innerEnd)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The first character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerStart]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The last character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerEnd - 1]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // We found something!\r\n            var result = new StrikethroughTextInline\r\n            {\r\n                Inlines = Common.ParseInlineChildren(markdown, innerStart, innerEnd)\r\n            };\r\n            return new InlineParseResult(result, start, innerEnd + 2);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Inlines == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return \"~~\" + string.Join(string.Empty, Inlines) + \"~~\";\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/TextRunInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a span containing plain text.\r\n    /// </summary>\r\n    public class TextRunInline : MarkdownInline, IInlineLeaf\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"TextRunInline\"/> class.\r\n        /// </summary>\r\n        public TextRunInline()\r\n            : base(MarkdownInlineType.TextRun)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the text for this run.\r\n        /// </summary>\r\n        public string Text { get; set; }\r\n\r\n        // A list of supported HTML entity names, along with their corresponding code points.\r\n        private static readonly Dictionary<string, int> _entities = new Dictionary<string, int>\r\n        {\r\n            { \"quot\", 0x0022 }, // \"\r\n            { \"amp\", 0x0026 }, // &\r\n            { \"apos\", 0x0027 }, // '\r\n            { \"lt\", 0x003C }, // <\r\n            { \"gt\", 0x003E }, // >\r\n            { \"nbsp\", 0x00A0 }, // <space>\r\n            { \"#160\", 0x00A0 }, // ?\r\n            { \"iexcl\", 0x00A1 }, // ¡\r\n            { \"cent\", 0x00A2 }, // ¢\r\n            { \"pound\", 0x00A3 }, // £\r\n            { \"curren\", 0x00A4 }, // ¤\r\n            { \"yen\", 0x00A5 }, // ¥\r\n            { \"brvbar\", 0x00A6 }, // ¦\r\n            { \"sect\", 0x00A7 }, // §\r\n            { \"uml\", 0x00A8 }, // ¨\r\n            { \"copy\", 0x00A9 }, // ©\r\n            { \"ordf\", 0x00AA }, // ª\r\n            { \"laquo\", 0x00AB }, // «\r\n            { \"not\", 0x00AC }, // ¬\r\n            { \"shy\", 0x00AD }, // ?\r\n            { \"reg\", 0x00AE }, // ®\r\n            { \"macr\", 0x00AF }, // ¯\r\n            { \"deg\", 0x00B0 }, // °\r\n            { \"plusmn\", 0x00B1 }, // ±\r\n            { \"sup2\", 0x00B2 }, // ²\r\n            { \"sup3\", 0x00B3 }, // ³\r\n            { \"acute\", 0x00B4 }, // ´\r\n            { \"micro\", 0x00B5 }, // µ\r\n            { \"para\", 0x00B6 }, // ¶\r\n            { \"middot\", 0x00B7 }, // ·\r\n            { \"cedil\", 0x00B8 }, // ¸\r\n            { \"sup1\", 0x00B9 }, // ¹\r\n            { \"ordm\", 0x00BA }, // º\r\n            { \"raquo\", 0x00BB }, // »\r\n            { \"frac14\", 0x00BC }, // ¼\r\n            { \"frac12\", 0x00BD }, // ½\r\n            { \"frac34\", 0x00BE }, // ¾\r\n            { \"iquest\", 0x00BF }, // ¿\r\n            { \"Agrave\", 0x00C0 }, // À\r\n            { \"Aacute\", 0x00C1 }, // Á\r\n            { \"Acirc\", 0x00C2 }, // Â\r\n            { \"Atilde\", 0x00C3 }, // Ã\r\n            { \"Auml\", 0x00C4 }, // Ä\r\n            { \"Aring\", 0x00C5 }, // Å\r\n            { \"AElig\", 0x00C6 }, // Æ\r\n            { \"Ccedil\", 0x00C7 }, // Ç\r\n            { \"Egrave\", 0x00C8 }, // È\r\n            { \"Eacute\", 0x00C9 }, // É\r\n            { \"Ecirc\", 0x00CA }, // Ê\r\n            { \"Euml\", 0x00CB }, // Ë\r\n            { \"Igrave\", 0x00CC }, // Ì\r\n            { \"Iacute\", 0x00CD }, // Í\r\n            { \"Icirc\", 0x00CE }, // Î\r\n            { \"Iuml\", 0x00CF }, // Ï\r\n            { \"ETH\", 0x00D0 }, // Ð\r\n            { \"Ntilde\", 0x00D1 }, // Ñ\r\n            { \"Ograve\", 0x00D2 }, // Ò\r\n            { \"Oacute\", 0x00D3 }, // Ó\r\n            { \"Ocirc\", 0x00D4 }, // Ô\r\n            { \"Otilde\", 0x00D5 }, // Õ\r\n            { \"Ouml\", 0x00D6 }, // Ö\r\n            { \"times\", 0x00D7 }, // ×\r\n            { \"Oslash\", 0x00D8 }, // Ø\r\n            { \"Ugrave\", 0x00D9 }, // Ù\r\n            { \"Uacute\", 0x00DA }, // Ú\r\n            { \"Ucirc\", 0x00DB }, // Û\r\n            { \"Uuml\", 0x00DC }, // Ü\r\n            { \"Yacute\", 0x00DD }, // Ý\r\n            { \"THORN\", 0x00DE }, // Þ\r\n            { \"szlig\", 0x00DF }, // ß\r\n            { \"agrave\", 0x00E0 }, // à\r\n            { \"aacute\", 0x00E1 }, // á\r\n            { \"acirc\", 0x00E2 }, // â\r\n            { \"atilde\", 0x00E3 }, // ã\r\n            { \"auml\", 0x00E4 }, // ä\r\n            { \"aring\", 0x00E5 }, // å\r\n            { \"aelig\", 0x00E6 }, // æ\r\n            { \"ccedil\", 0x00E7 }, // ç\r\n            { \"egrave\", 0x00E8 }, // è\r\n            { \"eacute\", 0x00E9 }, // é\r\n            { \"ecirc\", 0x00EA }, // ê\r\n            { \"euml\", 0x00EB }, // ë\r\n            { \"igrave\", 0x00EC }, // ì\r\n            { \"iacute\", 0x00ED }, // í\r\n            { \"icirc\", 0x00EE }, // î\r\n            { \"iuml\", 0x00EF }, // ï\r\n            { \"eth\", 0x00F0 }, // ð\r\n            { \"ntilde\", 0x00F1 }, // ñ\r\n            { \"ograve\", 0x00F2 }, // ò\r\n            { \"oacute\", 0x00F3 }, // ó\r\n            { \"ocirc\", 0x00F4 }, // ô\r\n            { \"otilde\", 0x00F5 }, // õ\r\n            { \"ouml\", 0x00F6 }, // ö\r\n            { \"divide\", 0x00F7 }, // ÷\r\n            { \"oslash\", 0x00F8 }, // ø\r\n            { \"ugrave\", 0x00F9 }, // ù\r\n            { \"uacute\", 0x00FA }, // ú\r\n            { \"ucirc\", 0x00FB }, // û\r\n            { \"uuml\", 0x00FC }, // ü\r\n            { \"yacute\", 0x00FD }, // ý\r\n            { \"thorn\", 0x00FE }, // þ\r\n            { \"yuml\", 0x00FF }, // ÿ\r\n            { \"OElig\", 0x0152 }, // Œ\r\n            { \"oelig\", 0x0153 }, // œ\r\n            { \"Scaron\", 0x0160 }, // Š\r\n            { \"scaron\", 0x0161 }, // š\r\n            { \"Yuml\", 0x0178 }, // Ÿ\r\n            { \"fnof\", 0x0192 }, // ƒ\r\n            { \"circ\", 0x02C6 }, // ˆ\r\n            { \"tilde\", 0x02DC }, // ˜\r\n            { \"Alpha\", 0x0391 }, // Α\r\n            { \"Beta\", 0x0392 }, // Β\r\n            { \"Gamma\", 0x0393 }, // Γ\r\n            { \"Delta\", 0x0394 }, // Δ\r\n            { \"Epsilon\", 0x0395 }, // Ε\r\n            { \"Zeta\", 0x0396 }, // Ζ\r\n            { \"Eta\", 0x0397 }, // Η\r\n            { \"Theta\", 0x0398 }, // Θ\r\n            { \"Iota\", 0x0399 }, // Ι\r\n            { \"Kappa\", 0x039A }, // Κ\r\n            { \"Lambda\", 0x039B }, // Λ\r\n            { \"Mu\", 0x039C }, // Μ\r\n            { \"Nu\", 0x039D }, // Ν\r\n            { \"Xi\", 0x039E }, // Ξ\r\n            { \"Omicron\", 0x039F }, // Ο\r\n            { \"Pi\", 0x03A0 }, // Π\r\n            { \"Rho\", 0x03A1 }, // Ρ\r\n            { \"Sigma\", 0x03A3 }, // Σ\r\n            { \"Tau\", 0x03A4 }, // Τ\r\n            { \"Upsilon\", 0x03A5 }, // Υ\r\n            { \"Phi\", 0x03A6 }, // Φ\r\n            { \"Chi\", 0x03A7 }, // Χ\r\n            { \"Psi\", 0x03A8 }, // Ψ\r\n            { \"Omega\", 0x03A9 }, // Ω\r\n            { \"alpha\", 0x03B1 }, // α\r\n            { \"beta\", 0x03B2 }, // β\r\n            { \"gamma\", 0x03B3 }, // γ\r\n            { \"delta\", 0x03B4 }, // δ\r\n            { \"epsilon\", 0x03B5 }, // ε\r\n            { \"zeta\", 0x03B6 }, // ζ\r\n            { \"eta\", 0x03B7 }, // η\r\n            { \"theta\", 0x03B8 }, // θ\r\n            { \"iota\", 0x03B9 }, // ι\r\n            { \"kappa\", 0x03BA }, // κ\r\n            { \"lambda\", 0x03BB }, // λ\r\n            { \"mu\", 0x03BC }, // μ\r\n            { \"nu\", 0x03BD }, // ν\r\n            { \"xi\", 0x03BE }, // ξ\r\n            { \"omicron\", 0x03BF }, // ο\r\n            { \"pi\", 0x03C0 }, // π\r\n            { \"rho\", 0x03C1 }, // ρ\r\n            { \"sigmaf\", 0x03C2 }, // ς\r\n            { \"sigma\", 0x03C3 }, // σ\r\n            { \"tau\", 0x03C4 }, // τ\r\n            { \"upsilon\", 0x03C5 }, // υ\r\n            { \"phi\", 0x03C6 }, // φ\r\n            { \"chi\", 0x03C7 }, // χ\r\n            { \"psi\", 0x03C8 }, // ψ\r\n            { \"omega\", 0x03C9 }, // ω\r\n            { \"thetasym\", 0x03D1 }, // ϑ\r\n            { \"upsih\", 0x03D2 }, // ϒ\r\n            { \"piv\", 0x03D6 }, // ϖ\r\n            { \"ensp\", 0x2002 }, //  ?\r\n            { \"emsp\", 0x2003 }, //  ?\r\n            { \"thinsp\", 0x2009 }, //  ?\r\n            { \"zwnj\", 0x200C }, //  ?\r\n            { \"zwj\", 0x200D }, //  ?\r\n            { \"lrm\", 0x200E }, //  ?\r\n            { \"rlm\", 0x200F }, //  ?\r\n            { \"ndash\", 0x2013 }, // –\r\n            { \"mdash\", 0x2014 }, // —\r\n            { \"lsquo\", 0x2018 }, // ‘\r\n            { \"rsquo\", 0x2019 }, // ’\r\n            { \"sbquo\", 0x201A }, // ‚\r\n            { \"ldquo\", 0x201C }, // “\r\n            { \"rdquo\", 0x201D }, // ”\r\n            { \"bdquo\", 0x201E }, // „\r\n            { \"dagger\", 0x2020 }, // †\r\n            { \"Dagger\", 0x2021 }, // ‡\r\n            { \"bull\", 0x2022 }, // •\r\n            { \"hellip\", 0x2026 }, // …\r\n            { \"permil\", 0x2030 }, // ‰\r\n            { \"prime\", 0x2032 }, // ′\r\n            { \"Prime\", 0x2033 }, // ″\r\n            { \"lsaquo\", 0x2039 }, // ‹\r\n            { \"rsaquo\", 0x203A }, // ›\r\n            { \"oline\", 0x203E }, // ‾\r\n            { \"frasl\", 0x2044 }, // ⁄\r\n            { \"euro\", 0x20AC }, // €\r\n            { \"image\", 0x2111 }, // ℑ\r\n            { \"weierp\", 0x2118 }, // ℘\r\n            { \"real\", 0x211C }, // ℜ\r\n            { \"trade\", 0x2122 }, // ™\r\n            { \"alefsym\", 0x2135 }, // ℵ\r\n            { \"larr\", 0x2190 }, // ←\r\n            { \"uarr\", 0x2191 }, // ↑\r\n            { \"rarr\", 0x2192 }, // →\r\n            { \"darr\", 0x2193 }, // ↓\r\n            { \"harr\", 0x2194 }, // ↔\r\n            { \"crarr\", 0x21B5 }, // ↵\r\n            { \"lArr\", 0x21D0 }, // ⇐\r\n            { \"uArr\", 0x21D1 }, // ⇑\r\n            { \"rArr\", 0x21D2 }, // ⇒\r\n            { \"dArr\", 0x21D3 }, // ⇓\r\n            { \"hArr\", 0x21D4 }, // ⇔\r\n            { \"forall\", 0x2200 }, // ∀\r\n            { \"part\", 0x2202 }, // ∂\r\n            { \"exist\", 0x2203 }, // ∃\r\n            { \"empty\", 0x2205 }, // ∅\r\n            { \"nabla\", 0x2207 }, // ∇\r\n            { \"isin\", 0x2208 }, // ∈\r\n            { \"notin\", 0x2209 }, // ∉\r\n            { \"ni\", 0x220B }, // ∋\r\n            { \"prod\", 0x220F }, // ∏\r\n            { \"sum\", 0x2211 }, // ∑\r\n            { \"minus\", 0x2212 }, // −\r\n            { \"lowast\", 0x2217 }, // ∗\r\n            { \"radic\", 0x221A }, // √\r\n            { \"prop\", 0x221D }, // ∝\r\n            { \"infin\", 0x221E }, // ∞\r\n            { \"ang\", 0x2220 }, // ∠\r\n            { \"and\", 0x2227 }, // ∧\r\n            { \"or\", 0x2228 }, // ∨\r\n            { \"cap\", 0x2229 }, // ∩\r\n            { \"cup\", 0x222A }, // ∪\r\n            { \"int\", 0x222B }, // ∫\r\n            { \"there4\", 0x2234 }, // ∴\r\n            { \"sim\", 0x223C }, // ∼\r\n            { \"cong\", 0x2245 }, // ≅\r\n            { \"asymp\", 0x2248 }, // ≈\r\n            { \"ne\", 0x2260 }, // ≠\r\n            { \"equiv\", 0x2261 }, // ≡\r\n            { \"le\", 0x2264 }, // ≤\r\n            { \"ge\", 0x2265 }, // ≥\r\n            { \"sub\", 0x2282 }, // ⊂\r\n            { \"sup\", 0x2283 }, // ⊃\r\n            { \"nsub\", 0x2284 }, // ⊄\r\n            { \"sube\", 0x2286 }, // ⊆\r\n            { \"supe\", 0x2287 }, // ⊇\r\n            { \"oplus\", 0x2295 }, // ⊕\r\n            { \"otimes\", 0x2297 }, // ⊗\r\n            { \"perp\", 0x22A5 }, // ⊥\r\n            { \"sdot\", 0x22C5 }, // ⋅\r\n            { \"lceil\", 0x2308 }, // ⌈\r\n            { \"rceil\", 0x2309 }, // ⌉\r\n            { \"lfloor\", 0x230A }, // ⌊\r\n            { \"rfloor\", 0x230B }, // ⌋\r\n            { \"lang\", 0x2329 }, // 〈\r\n            { \"rang\", 0x232A }, // 〉\r\n            { \"loz\", 0x25CA }, // ◊\r\n            { \"spades\", 0x2660 }, // ♠\r\n            { \"clubs\", 0x2663 }, // ♣\r\n            { \"hearts\", 0x2665 }, // ♥\r\n            { \"diams\", 0x2666 }, // ♦\r\n        };\r\n\r\n        // A list of characters that can be escaped.\r\n        private static readonly char[] _escapeCharacters = new char[] { '\\\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '#', '+', '-', '.', '!', '|', '~', '^', '&', ':', '<', '>', '/' };\r\n\r\n        /// <summary>\r\n        /// Parses unformatted text.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"end\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed text span. </returns>\r\n        internal static TextRunInline Parse(string markdown, int start, int end)\r\n        {\r\n            // Handle escape sequences and entities.\r\n            // Note: this code is designed to be as fast as possible in the case where there are no\r\n            // escape sequences and no entities (expected to be the common case).\r\n            StringBuilder result = null;\r\n            int textPos = start;\r\n            int searchPos = start;\r\n            while (searchPos < end)\r\n            {\r\n                // Look for the next backslash.\r\n                int sequenceStartIndex = markdown.IndexOfAny(new char[] { '\\\\', '&' }, searchPos, end - searchPos);\r\n                if (sequenceStartIndex == -1)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                searchPos = sequenceStartIndex + 1;\r\n\r\n                char decodedChar;\r\n                if (markdown[sequenceStartIndex] == '\\\\')\r\n                {\r\n                    // This is an escape sequence, with one more character expected.\r\n                    if (sequenceStartIndex >= end - 1)\r\n                    {\r\n                        break;\r\n                    }\r\n\r\n                    // Check if the character after the backslash can be escaped.\r\n                    decodedChar = markdown[sequenceStartIndex + 1];\r\n                    if (Array.IndexOf(_escapeCharacters, decodedChar) < 0)\r\n                    {\r\n                        // This character cannot be escaped.\r\n                        continue;\r\n                    }\r\n\r\n                    // This here's an escape sequence!\r\n                    if (result == null)\r\n                    {\r\n                        result = new StringBuilder(end - start);\r\n                    }\r\n\r\n                    result.Append(markdown.Substring(textPos, sequenceStartIndex - textPos));\r\n                    result.Append(decodedChar);\r\n                    searchPos = textPos = sequenceStartIndex + 2;\r\n                }\r\n                else if (markdown[sequenceStartIndex] == '&')\r\n                {\r\n                    // This is an entity e.g. \"&nbsp;\".\r\n\r\n                    // Look for the semicolon.\r\n                    int semicolonIndex = markdown.IndexOf(';', sequenceStartIndex + 1, end - (sequenceStartIndex + 1));\r\n\r\n                    // Unterminated entity.\r\n                    if (semicolonIndex == -1)\r\n                    {\r\n                        continue;\r\n                    }\r\n\r\n                    // Okay, we have an entity, but is it one we recognise?\r\n                    string entityName = markdown.Substring(sequenceStartIndex + 1, semicolonIndex - (sequenceStartIndex + 1));\r\n\r\n                    // Unrecognised entity.\r\n                    if (_entities.ContainsKey(entityName) == false)\r\n                    {\r\n                        continue;\r\n                    }\r\n\r\n                    // This here's an escape sequence!\r\n                    if (result == null)\r\n                    {\r\n                        result = new StringBuilder(end - start);\r\n                    }\r\n\r\n                    result.Append(markdown.Substring(textPos, sequenceStartIndex - textPos));\r\n                    result.Append((char)_entities[entityName]);\r\n                    searchPos = textPos = semicolonIndex + 1;\r\n                }\r\n            }\r\n\r\n            if (result != null)\r\n            {\r\n                result.Append(markdown.Substring(textPos, end - textPos));\r\n                return new TextRunInline { Text = result.ToString() };\r\n            }\r\n\r\n            return new TextRunInline { Text = markdown.Substring(start, end - start) };\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses unformatted text.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"end\"> The location to stop parsing. </param>\r\n        /// <returns> A parsed text span. </returns>\r\n        internal static string ResolveEscapeSequences(string markdown, int start, int end)\r\n        {\r\n            // Handle escape sequences only.\r\n            // Note: this code is designed to be as fast as possible in the case where there are no\r\n            // escape sequences (expected to be the common case).\r\n            StringBuilder result = null;\r\n            int textPos = start;\r\n            int searchPos = start;\r\n            while (searchPos < end)\r\n            {\r\n                // Look for the next backslash.\r\n                int sequenceStartIndex = markdown.IndexOf('\\\\', searchPos, end - searchPos);\r\n                if (sequenceStartIndex == -1)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                searchPos = sequenceStartIndex + 1;\r\n\r\n                // This is an escape sequence, with one more character expected.\r\n                if (sequenceStartIndex >= end - 1)\r\n                {\r\n                    break;\r\n                }\r\n\r\n                // Check if the character after the backslash can be escaped.\r\n                char decodedChar = markdown[sequenceStartIndex + 1];\r\n                if (Array.IndexOf(_escapeCharacters, decodedChar) < 0)\r\n                {\r\n                    // This character cannot be escaped.\r\n                    continue;\r\n                }\r\n\r\n                // This here's an escape sequence!\r\n                if (result == null)\r\n                {\r\n                    result = new StringBuilder(end - start);\r\n                }\r\n\r\n                result.Append(markdown.Substring(textPos, sequenceStartIndex - textPos));\r\n                result.Append(decodedChar);\r\n                searchPos = textPos = sequenceStartIndex + 2;\r\n            }\r\n\r\n            if (result != null)\r\n            {\r\n                result.Append(markdown.Substring(textPos, end - textPos));\r\n                return result.ToString();\r\n            }\r\n\r\n            return markdown.Substring(start, end - start);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Text == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return Text;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Inlines/UnderlineTextInline.cs",
    "content": "﻿// ******************************************************************\r\n// Copyright (c) Microsoft. All rights reserved.\r\n// This code is licensed under the MIT License (MIT).\r\n// THE CODE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,\r\n// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\r\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r\n// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH\r\n// THE CODE OR THE USE OR OTHER DEALINGS IN THE CODE.\r\n// ******************************************************************\r\n\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Core;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// Represents a span that contains Underline text.\r\n    /// </summary>\r\n    public class UnderlineTextInline : MarkdownInline, IInlineContainer\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"UnderlineTextInline\"/> class.\r\n        /// </summary>\r\n        public UnderlineTextInline()\r\n            : base(MarkdownInlineType.Underline)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the contents of the inline.\r\n        /// </summary>\r\n        public IList<MarkdownInline> Inlines { get; set; }\r\n\r\n        /// <summary>\r\n        /// Returns the chars that if found means we might have a match.\r\n        /// </summary>\r\n        internal static void AddTripChars(List<InlineTripCharHelper> tripCharHelpers)\r\n        {\r\n            tripCharHelpers.Add(new InlineTripCharHelper() { FirstChar = '_', Method = InlineParseMethod.Underline });\r\n        }\r\n\r\n        /// <summary>\r\n        /// Attempts to parse a underline text span.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The location to start parsing. </param>\r\n        /// <param name=\"maxEnd\"> The location to stop parsing. </param>\r\n        /// <returns> A underline text span, or <c>null</c> if this is not a underline text span. </returns>\r\n        internal static InlineParseResult Parse(string markdown, int start, int maxEnd)\r\n        {\r\n            if (start >= maxEnd - 1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Check the start sequence.\r\n            string startSequence = markdown.Substring(start, 2);\r\n            if (startSequence != \"__\")\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // Find the end of the span.  The end sequence (either '**' or '__') must be the same\r\n            // as the start sequence.\r\n            int innerStart = start + 2;\r\n            int innerEnd = Common.IndexOf(markdown, startSequence, innerStart, maxEnd);\r\n            if (innerEnd == -1)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The span must contain at least one character.\r\n            if (innerStart == innerEnd)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The first character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerStart]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // The last character inside the span must NOT be a space.\r\n            if (ParseHelpers.IsMarkdownWhiteSpace(markdown[innerEnd - 1]))\r\n            {\r\n                return null;\r\n            }\r\n\r\n            // We found something!\r\n            var result = new UnderlineTextInline { Inlines = Common.ParseInlineChildren(markdown, innerStart, innerEnd) };\r\n            return new InlineParseResult(result, start, innerEnd + 2);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Inlines == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return \"__\" + string.Join(string.Empty, Inlines) + \"__\";\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/MarkdownBlock.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Blocks\r\n{\r\n    /// <summary>\r\n    /// A Block Element is an element that is a container for other structures.\r\n    /// </summary>\r\n    public abstract class MarkdownBlock : MarkdownElement\r\n    {\r\n        /// <summary>\r\n        /// Gets or sets tells us what type this element is.\r\n        /// </summary>\r\n        public MarkdownBlockType Type { get; set; }\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"MarkdownBlock\"/> class.\r\n        /// </summary>\r\n        internal MarkdownBlock(MarkdownBlockType type)\r\n        {\r\n            Type = type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Determines whether the specified object is equal to the current object.\r\n        /// </summary>\r\n        /// <param name=\"obj\"> The object to compare with the current object. </param>\r\n        /// <returns> <c>true</c> if the specified object is equal to the current object; otherwise, <c>false.</c> </returns>\r\n        public override bool Equals(object obj)\r\n        {\r\n            if (!base.Equals(obj) || !(obj is MarkdownBlock))\r\n            {\r\n                return false;\r\n            }\r\n\r\n            return Type == ((MarkdownBlock)obj).Type;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Serves as the default hash function.\r\n        /// </summary>\r\n        /// <returns> A hash code for the current object. </returns>\r\n        public override int GetHashCode()\r\n        {\r\n            return base.GetHashCode() ^ Type.GetHashCode();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/MarkdownDocument.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Text;\r\nusing Unicord.Universal.Parsers.Markdown.Blocks;\r\nusing Unicord.Universal.Parsers.Markdown.Helpers;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown\r\n{\r\n    /// <summary>\r\n    /// Represents a Markdown Document. <para/>\r\n    /// Initialize an instance and call <see cref=\"Parse(string)\"/> to parse the Raw Markdown Text.\r\n    /// </summary>\r\n    public class MarkdownDocument : MarkdownBlock\r\n    {\r\n        /// <summary>\r\n        /// Gets a list of URL schemes.\r\n        /// </summary>\r\n        public static List<string> KnownSchemes { get; private set; } = new List<string>()\r\n        {\r\n            \"http\",\r\n            \"https\",\r\n            \"ftp\",\r\n            \"steam\",\r\n            \"irc\",\r\n            \"news\",\r\n            \"mumble\",\r\n            \"ssh\",\r\n            \"ms-windows-store\",\r\n            \"sip\"\r\n        };\r\n\r\n        private Dictionary<string, LinkReferenceBlock> _references;\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"MarkdownDocument\"/> class.\r\n        /// </summary>\r\n        public MarkdownDocument()\r\n            : base(MarkdownBlockType.Root)\r\n        {\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the list of block elements.\r\n        /// </summary>\r\n        public IList<MarkdownBlock> Blocks { get; set; }\r\n        public bool InlineOnly { get; internal set; }\r\n\r\n        /// <summary>\r\n        /// Parses markdown document text.\r\n        /// </summary>\r\n        /// <param name=\"markdownText\"> The markdown text. </param>\r\n        public void Parse(string markdownText)\r\n        {\r\n            if (InlineOnly)\r\n                markdownText = markdownText.Replace(\"\\n\", \" \").Replace(\"\\r\", \"\").Replace(\"\\t\", \"\");\r\n\r\n            Blocks = Parse(markdownText, InlineOnly, 0, markdownText.Length, quoteDepth: 0, actualEnd: out var actualEnd);\r\n\r\n            // Remove any references from the list of blocks, and add them to a dictionary.\r\n            for (var i = Blocks.Count - 1; i >= 0; i--)\r\n            {\r\n                if (Blocks[i].Type == MarkdownBlockType.LinkReference)\r\n                {\r\n                    var reference = (LinkReferenceBlock)Blocks[i];\r\n                    if (_references == null)\r\n                    {\r\n                        _references = new Dictionary<string, LinkReferenceBlock>(StringComparer.OrdinalIgnoreCase);\r\n                    }\r\n\r\n                    if (!_references.ContainsKey(reference.Id))\r\n                    {\r\n                        _references.Add(reference.Id, reference);\r\n                    }\r\n\r\n                    Blocks.RemoveAt(i);\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Parses a markdown document.\r\n        /// </summary>\r\n        /// <param name=\"markdown\"> The markdown text. </param>\r\n        /// <param name=\"start\"> The position to start parsing. </param>\r\n        /// <param name=\"end\"> The position to stop parsing. </param>\r\n        /// <param name=\"quoteDepth\"> The current nesting level for block quoting. </param>\r\n        /// <param name=\"actualEnd\"> Set to the position at which parsing ended.  This can be\r\n        /// different from <paramref name=\"end\"/> when the parser is being called recursively.\r\n        /// </param>\r\n        /// <returns> A list of parsed blocks. </returns>\r\n        internal static List<MarkdownBlock> Parse(string markdown, bool inlineOnly, int start, int end, int quoteDepth, out int actualEnd)\r\n        {\r\n            // We need to parse out the list of blocks.\r\n            // Some blocks need to start on a new paragraph (code, lists and tables) while other\r\n            // blocks can start on any line (headers, horizontal rules and quotes).\r\n            // Text that is outside of any other block becomes a paragraph.\r\n            var blocks = new List<MarkdownBlock>();\r\n            var startOfLine = start;\r\n            var paragraphText = new StringBuilder();\r\n\r\n            // These are needed to parse underline-style header blocks.\r\n            var previousRealtStartOfLine = start;\r\n            var previousStartOfLine = start;\r\n            var previousEndOfLine = start;\r\n            var skip = false;\r\n\r\n            // Go line by line.\r\n            while (startOfLine < end)\r\n            {\r\n                // Find the first non-whitespace character.\r\n                var nonSpacePos = startOfLine;\r\n                var nonSpaceChar = '\\0';\r\n                var realStartOfLine = startOfLine;  // i.e. including quotes.\r\n                var expectedQuotesRemaining = quoteDepth;\r\n                while (true)\r\n                {\r\n                    while (nonSpacePos < end)\r\n                    {\r\n                        var c = markdown[nonSpacePos];\r\n                        if (c == '\\r' || c == '\\n')\r\n                        {\r\n                            // The line is either entirely whitespace, or is empty.\r\n                            break;\r\n                        }\r\n\r\n                        if (c != ' ' && c != '\\t')\r\n                        {\r\n                            // The line has content.\r\n                            nonSpaceChar = c;\r\n                            break;\r\n                        }\r\n\r\n                        nonSpacePos++;\r\n                    }\r\n\r\n                    // When parsing blocks in a blockquote context, we need to count the number of\r\n                    // quote characters ('>').  If there are less than expected AND this is the\r\n                    // start of a new paragraph, then stop parsing.\r\n                    if (expectedQuotesRemaining == 0)\r\n                    {\r\n                        break;\r\n                    }\r\n\r\n                    if (nonSpaceChar == '>')\r\n                    {\r\n                        // Expected block quote characters should be ignored.\r\n                        expectedQuotesRemaining--;\r\n                        nonSpacePos++;\r\n                        nonSpaceChar = '\\0';\r\n                        startOfLine = nonSpacePos;\r\n\r\n                        // Ignore the first space after the quote character, if there is one.\r\n                        if (!(startOfLine < end && markdown[startOfLine] == ' '))\r\n                        {\r\n                            skip = true;\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        var lastIndentation = 0;\r\n                        string lastline = null;\r\n\r\n                        // Determines how many Quote levels were in the last line.\r\n                        if (realStartOfLine > 0)\r\n                        {\r\n                            lastline = markdown.Substring(previousRealtStartOfLine, previousEndOfLine - previousRealtStartOfLine);\r\n                            lastIndentation = lastline.Count(c => c == '>');\r\n                        }\r\n\r\n                        var currentEndOfLine = Common.FindNextSingleNewLine(markdown, nonSpacePos, end, out _);\r\n                        var currentline = markdown.Substring(realStartOfLine, currentEndOfLine - realStartOfLine);\r\n                        var currentIndentation = currentline.Count(c => c == '>');\r\n                        var firstChar = markdown[realStartOfLine];\r\n\r\n                        // This is a quote that doesn't start with a Quote marker, but carries on from the last line.\r\n                        if (lastIndentation == 1)\r\n                        {\r\n                            if (nonSpaceChar != '\\0' && firstChar != '>')\r\n                            {\r\n                                break;\r\n                            }\r\n                        }\r\n\r\n                        // Collapse down a level of quotes if the current indentation is greater than the last indentation.\r\n                        // Only if the last indentation is greater than 1, and the current indentation is greater than 0\r\n                        if (lastIndentation > 1 && currentIndentation > 0 && currentIndentation < lastIndentation)\r\n                        {\r\n                            break;\r\n                        }\r\n\r\n                        // This must be the end of the blockquote.  End the current paragraph, if any.\r\n                        actualEnd = realStartOfLine;\r\n\r\n                        if (paragraphText.Length > 0)\r\n                        {\r\n                            blocks.Add(ParagraphBlock.Parse(paragraphText.ToString()));\r\n                        }\r\n\r\n                        return blocks;\r\n                    }\r\n                }\r\n\r\n                // Find the end of the current line.\r\n                var endOfLine = Common.FindNextSingleNewLine(markdown, nonSpacePos, end, out var startOfNextLine);\r\n\r\n                if (nonSpaceChar == '\\0')\r\n                {\r\n                    // The line is empty or nothing but whitespace.\r\n\r\n                    // End the current paragraph.\r\n                    if (paragraphText.Length > 0)\r\n                    {\r\n                        blocks.Add(ParagraphBlock.Parse(paragraphText.ToString()));\r\n                        paragraphText.Clear();\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    // This is a header if the line starts with a hash character,\r\n                    // or if the line starts with '-' or a '=' character and has no other characters.\r\n                    // Or a quote if the line starts with a greater than character (optionally preceded by whitespace).\r\n                    // Or a horizontal rule if the line contains nothing but 3 '*', '-' or '_' characters (with optional whitespace).\r\n                    MarkdownBlock newBlockElement = null;\r\n\r\n                    if (newBlockElement == null && nonSpaceChar == '#' && nonSpacePos == startOfLine)\r\n                    {\r\n                        // Hash-prefixed header.\r\n                        newBlockElement = HeaderBlock.ParseHashPrefixedHeader(markdown, startOfLine, endOfLine);\r\n                    }\r\n\r\n\r\n                    if (newBlockElement == null)\r\n                    {\r\n                        // Some block elements must start on a new paragraph (tables, lists and code).\r\n                        var endOfBlock = startOfNextLine;\r\n\r\n                        if (newBlockElement == null && nonSpaceChar == '`' && !inlineOnly)\r\n                        {\r\n                            newBlockElement = CodeBlock.Parse(markdown, realStartOfLine, end, quoteDepth, out endOfBlock);\r\n                        }\r\n\r\n                        // This check needs to go after the code block check.\r\n                        if (newBlockElement == null && nonSpaceChar == '>' && !inlineOnly && nonSpacePos + 1 < end && markdown[nonSpacePos + 1] == ' ')\r\n                        {\r\n                            newBlockElement = QuoteBlock.Parse(markdown, realStartOfLine, startOfNextLine, quoteDepth, out endOfBlock);\r\n                        }\r\n\r\n                        if (newBlockElement != null)\r\n                        {\r\n                            startOfNextLine = endOfBlock;\r\n                        }\r\n                    }\r\n\r\n                    // Block elements start new paragraphs.\r\n                    if (newBlockElement == null)\r\n                    {\r\n                        // The line contains paragraph text.\r\n                        if (paragraphText.Length > 0)\r\n                        {\r\n                            paragraphText.Append(\"\\r\\n\");\r\n                        }\r\n\r\n                        // Add the last paragraph if we are at the end of the input text.\r\n                        if (startOfNextLine >= end)\r\n                        {\r\n                            if (paragraphText.Length == 0)\r\n                            {\r\n                                // Optimize for single line paragraphs.\r\n                                blocks.Add(ParagraphBlock.Parse(markdown.Substring(startOfLine, endOfLine - startOfLine)));\r\n                            }\r\n                            else\r\n                            {\r\n                                // Slow path.\r\n                                paragraphText.Append(markdown.Substring(startOfLine, endOfLine - startOfLine));\r\n                                blocks.Add(ParagraphBlock.Parse(paragraphText.ToString()));\r\n                            }\r\n                        }\r\n                        else\r\n                        {\r\n                            paragraphText.Append(markdown.Substring(startOfLine, endOfLine - startOfLine));\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        // The line contained a block.  End the current paragraph, if any.\r\n                        if (paragraphText.Length > 0)\r\n                        {\r\n                            blocks.Add(ParagraphBlock.Parse(paragraphText.ToString()));\r\n                            paragraphText.Clear();\r\n                        }\r\n\r\n                        blocks.Add(newBlockElement);\r\n                    }\r\n                }\r\n\r\n                // Repeat.\r\n                previousRealtStartOfLine = realStartOfLine;\r\n                previousStartOfLine = startOfLine;\r\n                previousEndOfLine = endOfLine;\r\n                startOfLine = startOfNextLine;\r\n            }\r\n\r\n            actualEnd = startOfLine;\r\n            return blocks;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Looks up a reference using the ID.\r\n        /// A reference is a line that looks like this:\r\n        /// [foo]: http://example.com/\r\n        /// </summary>\r\n        /// <param name=\"id\"> The ID of the reference (case insensitive). </param>\r\n        /// <returns> The reference details, or <c>null</c> if the reference wasn't found. </returns>\r\n        public LinkReferenceBlock LookUpReference(string id)\r\n        {\r\n            if (id == null)\r\n            {\r\n                throw new ArgumentNullException(\"id\");\r\n            }\r\n\r\n            if (_references == null)\r\n            {\r\n                return null;\r\n            }\r\n\r\n            if (_references.TryGetValue(id, out var result))\r\n            {\r\n                return result;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Converts the object into it's textual representation.\r\n        /// </summary>\r\n        /// <returns> The textual representation of this object. </returns>\r\n        public override string ToString()\r\n        {\r\n            if (Blocks == null)\r\n            {\r\n                return base.ToString();\r\n            }\r\n\r\n            return string.Join(\"\\r\\n\", Blocks);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/MarkdownElement.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown\r\n{\r\n    /// <summary>\r\n    /// This is a class used as the base class of all markdown elements.\r\n    /// </summary>\r\n    public abstract class MarkdownElement\r\n    {\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/MarkdownInline.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Inlines\r\n{\r\n    /// <summary>\r\n    /// An internal class that is the base class for all inline elements.\r\n    /// </summary>\r\n    public abstract class MarkdownInline : MarkdownElement\r\n    {\r\n        /// <summary>\r\n        /// Gets or sets this element is.\r\n        /// </summary>\r\n        public MarkdownInlineType Type { get; set; }\r\n\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"MarkdownInline\"/> class.\r\n        /// </summary>\r\n        internal MarkdownInline(MarkdownInlineType type)\r\n        {\r\n            Type = type;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Render/IRenderContext.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// Helper for holding persistent state of Renderer.\r\n    /// </summary>\r\n    public interface IRenderContext\r\n    {\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether to trim whitespace.\r\n        /// </summary>\r\n        bool TrimLeadingWhitespace { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the parent Element for this Context.\r\n        /// </summary>\r\n        object Parent { get; set; }\r\n\r\n        /// <summary>\r\n        /// Clones the Context.\r\n        /// </summary>\r\n        /// <returns>Clone</returns>\r\n        IRenderContext Clone();\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Render/MarkdownRendererBase.Blocks.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Unicord.Universal.Parsers.Markdown.Blocks;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// Block Rendering Methods.\r\n    /// </summary>\r\n    public partial class MarkdownRendererBase\r\n    {\r\n        /// <summary>\r\n        /// Renders a paragraph element.\r\n        /// </summary>\r\n        protected abstract void RenderParagraph(ParagraphBlock element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a header element.\r\n        /// </summary>\r\n        protected abstract void RenderHeader(HeaderBlock element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a list element.\r\n        /// </summary>\r\n        protected abstract void RenderListElement(ListBlock element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a horizontal rule element.\r\n        /// </summary>\r\n        protected abstract void RenderHorizontalRule(IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a quote element.\r\n        /// </summary>\r\n        protected abstract void RenderQuote(QuoteBlock element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a code element.\r\n        /// </summary>\r\n        protected abstract void RenderCode(CodeBlock element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a table element.\r\n        /// </summary>\r\n        protected abstract void RenderTable(TableBlock element, IRenderContext context);\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Render/MarkdownRendererBase.Inlines.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Unicord.Universal.Parsers.Markdown.Inlines;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// Inline Rendering Methods.\r\n    /// </summary>\r\n    public partial class MarkdownRendererBase\r\n    {\r\n        /// <summary>\r\n        /// Renders emoji element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderEmoji(EmojiInline element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a Discord element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderDiscord(DiscordInline element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a Spoiler element\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderSpoiler(SpoilerTextInline element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a text run element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderTextRun(TextRunInline element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a bold run element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderBoldRun(BoldTextInline element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders an underlined run element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderUnderlineRun(UnderlineTextInline element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a link element\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderMarkdownLink(MarkdownLinkInline element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders an image element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderImage(ImageInline element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a raw link element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderHyperlink(HyperlinkInline element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a text run element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderItalicRun(ItalicTextInline element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a strikethrough element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderStrikethroughRun(StrikethroughTextInline element, IRenderContext context);\r\n\r\n        /// <summary>\r\n        /// Renders a code element\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected abstract void RenderCodeRun(CodeInline element, IRenderContext context);\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Parsers/Markdown/Render/MarkdownRendererBase.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Unicord.Universal.Parsers.Markdown.Blocks;\r\nusing Unicord.Universal.Parsers.Markdown.Inlines;\r\n\r\nnamespace Unicord.Universal.Parsers.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// A base renderer for Rendering Markdown into Controls.\r\n    /// </summary>\r\n    public abstract partial class MarkdownRendererBase\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"MarkdownRendererBase\"/> class.\r\n        /// </summary>\r\n        /// <param name=\"document\">Markdown Document to Render</param>\r\n        public MarkdownRendererBase(MarkdownDocument document)\r\n        {\r\n            Document = document;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders all Content to the Provided Parent UI.\r\n        /// </summary>\r\n        /// <param name=\"context\">UI Context</param>\r\n        public virtual void Render(IRenderContext context)\r\n        {\r\n            RenderBlocks(Document.Blocks, context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a list of block elements.\r\n        /// </summary>\r\n        protected virtual void RenderBlocks(IEnumerable<MarkdownBlock> blockElements, IRenderContext context)\r\n        {\r\n            foreach (var element in blockElements)\r\n            {\r\n                RenderBlock(element, context);\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called to render a block element.\r\n        /// </summary>\r\n        protected void RenderBlock(MarkdownBlock element, IRenderContext context)\r\n        {\r\n            {\r\n                switch (element.Type)\r\n                {\r\n                    case MarkdownBlockType.Paragraph:\r\n                        RenderParagraph((ParagraphBlock)element, context);\r\n                        break;\r\n\r\n                    case MarkdownBlockType.Quote:\r\n                        RenderQuote((QuoteBlock)element, context);\r\n                        break;\r\n\r\n                    case MarkdownBlockType.Code:\r\n                        RenderCode((CodeBlock)element, context);\r\n                        break;\r\n\r\n                    case MarkdownBlockType.Header:\r\n                        RenderHeader((HeaderBlock)element, context);\r\n                        break;\r\n\r\n                    case MarkdownBlockType.List:\r\n                        RenderListElement((ListBlock)element, context);\r\n                        break;\r\n\r\n                    case MarkdownBlockType.HorizontalRule:\r\n                        RenderHorizontalRule(context);\r\n                        break;\r\n\r\n                    case MarkdownBlockType.Table:\r\n                        RenderTable((TableBlock)element, context);\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders all of the children for the given element.\r\n        /// </summary>\r\n        /// <param name=\"inlineElements\"> The parsed inline elements to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected void RenderInlineChildren(IList<MarkdownInline> inlineElements, IRenderContext context)\r\n        {\r\n            foreach (var element in inlineElements)\r\n            {\r\n                switch (element.Type)\r\n                {\r\n                    case MarkdownInlineType.LinkReference:\r\n                        break;\r\n\r\n                    default:\r\n                        RenderInline(element, context);\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called to render an inline element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected void RenderInline(MarkdownInline element, IRenderContext context)\r\n        {\r\n            switch (element.Type)\r\n            {\r\n                case MarkdownInlineType.TextRun:\r\n                    RenderTextRun((TextRunInline)element, context);\r\n                    break;\r\n\r\n                case MarkdownInlineType.Underline:\r\n                    RenderUnderlineRun((UnderlineTextInline)element, context);\r\n                    break;\r\n\r\n                case MarkdownInlineType.Italic:\r\n                    RenderItalicRun((ItalicTextInline)element, context);\r\n                    break;\r\n\r\n                case MarkdownInlineType.Bold:\r\n                    RenderBoldRun((BoldTextInline)element, context);\r\n                    break;\r\n\r\n                case MarkdownInlineType.MarkdownLink:\r\n                    CheckRenderMarkdownLink((MarkdownLinkInline)element, context);\r\n                    break;\r\n\r\n                case MarkdownInlineType.RawHyperlink:\r\n                    RenderHyperlink((HyperlinkInline)element, context);\r\n                    break;\r\n\r\n                case MarkdownInlineType.Strikethrough:\r\n                    RenderStrikethroughRun((StrikethroughTextInline)element, context);\r\n                    break;\r\n\r\n                case MarkdownInlineType.Spoiler:\r\n                    RenderSpoiler((SpoilerTextInline)element, context);\r\n                    break;\r\n\r\n                case MarkdownInlineType.Code:\r\n                    RenderCodeRun((CodeInline)element, context);\r\n                    break;\r\n\r\n                case MarkdownInlineType.Image:\r\n                    RenderImage((ImageInline)element, context);\r\n                    break;\r\n\r\n                case MarkdownInlineType.Emoji:\r\n                    RenderEmoji((EmojiInline)element, context);\r\n                    break;\r\n\r\n                case MarkdownInlineType.Discord:\r\n                    RenderDiscord((DiscordInline)element, context);\r\n                    break;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Removes leading whitespace, but only if this is the first run in the block.\r\n        /// </summary>\r\n        /// <returns>The corrected string</returns>\r\n        protected string CollapseWhitespace(IRenderContext context, string text)\r\n        {\r\n            var dontOutputWhitespace = context.TrimLeadingWhitespace;\r\n            StringBuilder result = null;\r\n            for (var i = 0; i < text.Length; i++)\r\n            {\r\n                var c = text[i];\r\n                if (c == ' ' || c == '\\t')\r\n                {\r\n                    if (dontOutputWhitespace)\r\n                    {\r\n                        if (result == null)\r\n                        {\r\n                            result = new StringBuilder(text.Substring(0, i), text.Length);\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        result?.Append(c);\r\n\r\n                        dontOutputWhitespace = true;\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    result?.Append(c);\r\n\r\n                    dontOutputWhitespace = false;\r\n                }\r\n            }\r\n\r\n            context.TrimLeadingWhitespace = false;\r\n            return result == null ? text : result.ToString();\r\n        }\r\n\r\n        /// <summary>\r\n        /// Verifies if the link is valid, before processing into a link, or plain text.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected void CheckRenderMarkdownLink(MarkdownLinkInline element, IRenderContext context)\r\n        {\r\n            // Avoid processing when link text is empty.\r\n            if (element.Inlines.Count == 0)\r\n            {\r\n                return;\r\n            }\r\n\r\n            // Attempt to resolve references.\r\n            element.ResolveReference(Document);\r\n            if (element.Url == null)\r\n            {\r\n                // The element couldn't be resolved, just render it as text.\r\n                RenderInlineChildren(element.Inlines, context);\r\n                return;\r\n            }\r\n\r\n            foreach (var inline in element.Inlines)\r\n            {\r\n                if (inline is ImageInline imageInline)\r\n                {\r\n                    // this is an image, create Image.\r\n                    if (!string.IsNullOrEmpty(imageInline.ReferenceId))\r\n                    {\r\n                        imageInline.ResolveReference(Document);\r\n                    }\r\n\r\n                    imageInline.Url = element.Url;\r\n                    RenderImage(imageInline, context);\r\n                    return;\r\n                }\r\n            }\r\n\r\n            RenderMarkdownLink(element, context);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets the markdown document that will be rendered.\r\n        /// </summary>\r\n        protected MarkdownDocument Document { get; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/ICodeBlockResolver.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Windows.UI.Xaml.Documents;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// A Parser to parse code strings into Syntax Highlighted text.\r\n    /// </summary>\r\n    public interface ICodeBlockResolver\r\n    {\r\n        /// <summary>\r\n        /// Parses Code Block text into Rich text.\r\n        /// </summary>\r\n        /// <param name=\"inlineCollection\">Block to add formatted Text to.</param>\r\n        /// <param name=\"text\">The raw code block text</param>\r\n        /// <param name=\"codeLanguage\">The language of the Code Block, as specified by ```{Language} on the first line of the block,\r\n        /// e.g. <para/>\r\n        /// ```C# <para/>\r\n        /// public void Method();<para/>\r\n        /// ```<para/>\r\n        /// </param>\r\n        /// <returns>Parsing was handled Successfully</returns>\r\n        bool ParseSyntax(InlineCollection inlineCollection, string text, string codeLanguage);\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/IImageResolver.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Threading.Tasks;\r\nusing Windows.UI.Xaml.Media;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// An interface used to resolve images in the markdown.\r\n    /// </summary>\r\n    public interface IImageResolver\r\n    {\r\n        /// <summary>\r\n        /// Resolves an Image from a Url.\r\n        /// </summary>\r\n        /// <param name=\"url\">Url to Resolve.</param>\r\n        /// <param name=\"tooltip\">Tooltip for Image.</param>\r\n        /// <returns>Image</returns>\r\n        Task<ImageSource> ResolveImageAsync(string url, string tooltip);\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/ILinkRegister.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Documents;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// An interface used to handle links in the markdown.\r\n    /// </summary>\r\n    public interface ILinkRegister\r\n    {\r\n        /// <summary>\r\n        /// Registers a Hyperlink with a LinkUrl.\r\n        /// </summary>\r\n        /// <param name=\"newHyperlink\">Hyperlink to Register.</param>\r\n        /// <param name=\"linkUrl\">Url to Register.</param>\r\n        void RegisterNewHyperLink(Hyperlink newHyperlink, string linkUrl);\r\n\r\n        /// <summary>\r\n        /// Registers a Hyperlink with a LinkUrl.\r\n        /// </summary>\r\n        /// <param name=\"newImagelink\">ImageLink to Register.</param>\r\n        /// <param name=\"linkUrl\">Url to Register.</param>\r\n        /// <param name=\"isHyperLink\">Is Image an IsHyperlink.</param>\r\n        void RegisterNewHyperLink(Image newImagelink, string linkUrl, bool isHyperLink);\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/InlineRenderContext.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Unicord.Universal.Parsers.Markdown.Render;\r\nusing Windows.UI.Xaml.Documents;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// The Context of the Current Document Rendering.\r\n    /// </summary>\r\n    public class InlineRenderContext : RenderContext\r\n    {\r\n        internal InlineRenderContext(InlineCollection inlineCollection, IRenderContext context)\r\n        {\r\n            InlineCollection = inlineCollection;\r\n            TrimLeadingWhitespace = context.TrimLeadingWhitespace;\r\n            Parent = context.Parent;\r\n\r\n            if (context is RenderContext localcontext)\r\n            {\r\n                Foreground = localcontext.Foreground;\r\n                OverrideForeground = localcontext.OverrideForeground;\r\n            }\r\n\r\n            if (context is InlineRenderContext inlinecontext)\r\n            {\r\n                WithinBold = inlinecontext.WithinBold;\r\n                WithinItalics = inlinecontext.WithinItalics;\r\n                WithinHyperlink = inlinecontext.WithinHyperlink;\r\n                WithinUnderline = inlinecontext.WithinUnderline;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether the Current Element is being rendered inside an Italics Run.\r\n        /// </summary>\r\n        public bool WithinUnderline { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether the Current Element is being rendered inside an Italics Run.\r\n        /// </summary>\r\n        public bool WithinItalics { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether the Current Element is being rendered inside a Bold Run.\r\n        /// </summary>\r\n        public bool WithinBold { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether the Current Element is being rendered inside a Link.\r\n        /// </summary>\r\n        public bool WithinHyperlink { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the list to add to.\r\n        /// </summary>\r\n        public InlineCollection InlineCollection { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/MarkdownRenderer.Blocks.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing Unicord.Universal.Parsers.Markdown;\r\nusing Unicord.Universal.Parsers.Markdown.Blocks;\r\nusing Unicord.Universal.Parsers.Markdown.Render;\r\nusing Windows.UI.Text;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Documents;\r\nusing Windows.UI.Xaml.Shapes;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// Block UI Methods for UWP UI Creation.\r\n    /// </summary>\r\n    public partial class MarkdownRenderer\r\n    {\r\n        /// <summary>\r\n        /// Renders a list of block elements.\r\n        /// </summary>\r\n        protected override void RenderBlocks(IEnumerable<MarkdownBlock> blockElements, IRenderContext context)\r\n        {\r\n            if (!(context is UIElementCollectionRenderContext localContext))\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var blockUIElementCollection = localContext.BlockUIElementCollection;\r\n\r\n            base.RenderBlocks(blockElements, context);\r\n\r\n            // Remove the top margin from the first block element, the bottom margin from the last block element,\r\n            // and collapse adjacent margins.\r\n            FrameworkElement previousFrameworkElement = null;\r\n            for (int i = 0; i < blockUIElementCollection.Count; i++)\r\n            {\r\n                var frameworkElement = blockUIElementCollection[i] as FrameworkElement;\r\n                if (frameworkElement != null)\r\n                {\r\n                    if (i == 0)\r\n                    {\r\n                        // Remove the top margin.\r\n                        frameworkElement.Margin = new Thickness(\r\n                            frameworkElement.Margin.Left,\r\n                            0,\r\n                            frameworkElement.Margin.Right,\r\n                            frameworkElement.Margin.Bottom);\r\n                    }\r\n                    else if (previousFrameworkElement != null)\r\n                    {\r\n                        // Remove the bottom margin.\r\n                        frameworkElement.Margin = new Thickness(\r\n                            frameworkElement.Margin.Left,\r\n                            Math.Max(frameworkElement.Margin.Top, previousFrameworkElement.Margin.Bottom),\r\n                            frameworkElement.Margin.Right,\r\n                            frameworkElement.Margin.Bottom);\r\n                        previousFrameworkElement.Margin = new Thickness(\r\n                            previousFrameworkElement.Margin.Left,\r\n                            previousFrameworkElement.Margin.Top,\r\n                            previousFrameworkElement.Margin.Right,\r\n                            0);\r\n                    }\r\n                }\r\n\r\n                previousFrameworkElement = frameworkElement;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a paragraph element.\r\n        /// </summary>\r\n        protected override void RenderParagraph(ParagraphBlock element, IRenderContext context)\r\n        {\r\n            var paragraph = new Paragraph\r\n            {\r\n                Margin = ParagraphMargin\r\n            };\r\n\r\n            var childContext = new InlineRenderContext(paragraph.Inlines, context)\r\n            {\r\n                Parent = paragraph\r\n            };\r\n\r\n            RenderInlineChildren(element.Inlines, childContext);\r\n\r\n            var textBlock = CreateOrReuseRichTextBlock(context);\r\n            textBlock.Blocks.Add(paragraph);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a header element.\r\n        /// </summary>\r\n        protected override void RenderHeader(HeaderBlock element, IRenderContext context)\r\n        {\r\n            var textBlock = CreateOrReuseRichTextBlock(context);\r\n\r\n            var paragraph = new Paragraph();\r\n            var childInlines = paragraph.Inlines;\r\n            switch (element.HeaderLevel)\r\n            {\r\n                case 1:\r\n                    paragraph.Margin = Header1Margin;\r\n                    paragraph.FontSize = Header1FontSize;\r\n                    paragraph.FontWeight = Header1FontWeight;\r\n                    paragraph.Foreground = Header1Foreground;\r\n                    break;\r\n\r\n                case 2:\r\n                    paragraph.Margin = Header2Margin;\r\n                    paragraph.FontSize = Header2FontSize;\r\n                    paragraph.FontWeight = Header2FontWeight;\r\n                    paragraph.Foreground = Header2Foreground;\r\n                    break;\r\n\r\n                case 3:\r\n                    paragraph.Margin = Header3Margin;\r\n                    paragraph.FontSize = Header3FontSize;\r\n                    paragraph.FontWeight = Header3FontWeight;\r\n                    paragraph.Foreground = Header3Foreground;\r\n                    break;\r\n\r\n                case 4:\r\n                    paragraph.Margin = Header4Margin;\r\n                    paragraph.FontSize = Header4FontSize;\r\n                    paragraph.FontWeight = Header4FontWeight;\r\n                    paragraph.Foreground = Header4Foreground;\r\n                    break;\r\n\r\n                case 5:\r\n                    paragraph.Margin = Header5Margin;\r\n                    paragraph.FontSize = Header5FontSize;\r\n                    paragraph.FontWeight = Header5FontWeight;\r\n                    paragraph.Foreground = Header5Foreground;\r\n                    break;\r\n\r\n                case 6:\r\n                    paragraph.Margin = Header6Margin;\r\n                    paragraph.FontSize = Header6FontSize;\r\n                    paragraph.FontWeight = Header6FontWeight;\r\n                    paragraph.Foreground = Header6Foreground;\r\n\r\n                    var underline = new Underline();\r\n                    childInlines = underline.Inlines;\r\n                    paragraph.Inlines.Add(underline);\r\n                    break;\r\n            }\r\n\r\n            // Render the children into the para inline.\r\n            var childContext = new InlineRenderContext(childInlines, context)\r\n            {\r\n                Parent = paragraph,\r\n                TrimLeadingWhitespace = true\r\n            };\r\n\r\n            RenderInlineChildren(element.Inlines, childContext);\r\n\r\n            // Add it to the blocks\r\n            textBlock.Blocks.Add(paragraph);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a list element.\r\n        /// </summary>\r\n        protected override void RenderListElement(ListBlock element, IRenderContext context)\r\n        {\r\n            if (!(context is UIElementCollectionRenderContext localContext))\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var blockUIElementCollection = localContext.BlockUIElementCollection;\r\n\r\n            // Create a grid with two columns.\r\n            Grid grid = new Grid\r\n            {\r\n                Margin = ListMargin\r\n            };\r\n\r\n            // The first column for the bullet (or number) and the second for the text.\r\n            grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(ListGutterWidth) });\r\n            grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(1, GridUnitType.Star) });\r\n\r\n            for (int rowIndex = 0; rowIndex < element.Items.Count; rowIndex++)\r\n            {\r\n                var listItem = element.Items[rowIndex];\r\n\r\n                // Add a row definition.\r\n                grid.RowDefinitions.Add(new RowDefinition { Height = GridLength.Auto });\r\n\r\n                // Add the bullet or number.\r\n                var bullet = CreateTextBlock(localContext);\r\n                bullet.Margin = ParagraphMargin;\r\n                switch (element.Style)\r\n                {\r\n                    case ListStyle.Bulleted:\r\n                        bullet.Text = \"•\";\r\n                        break;\r\n\r\n                    case ListStyle.Numbered:\r\n                        bullet.Text = $\"{rowIndex + 1}.\";\r\n                        break;\r\n                }\r\n\r\n                bullet.HorizontalAlignment = HorizontalAlignment.Right;\r\n                bullet.Margin = new Thickness(0, 0, ListBulletSpacing, 0);\r\n                Grid.SetRow(bullet, rowIndex);\r\n                grid.Children.Add(bullet);\r\n\r\n                // Add the list item content.\r\n                var content = new StackPanel();\r\n                var childContext = new UIElementCollectionRenderContext(content.Children, localContext);\r\n                RenderBlocks(listItem.Blocks, childContext);\r\n                Grid.SetColumn(content, 1);\r\n                Grid.SetRow(content, rowIndex);\r\n                grid.Children.Add(content);\r\n            }\r\n\r\n            blockUIElementCollection.Add(grid);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a horizontal rule element.\r\n        /// </summary>\r\n        protected override void RenderHorizontalRule(IRenderContext context)\r\n        {\r\n            if (!(context is UIElementCollectionRenderContext localContext))\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var blockUIElementCollection = localContext.BlockUIElementCollection;\r\n\r\n            var brush = localContext.Foreground;\r\n            if (HorizontalRuleBrush != null && !localContext.OverrideForeground)\r\n            {\r\n                brush = HorizontalRuleBrush;\r\n            }\r\n\r\n            var rectangle = new Rectangle\r\n            {\r\n                HorizontalAlignment = HorizontalAlignment.Stretch,\r\n                Height = HorizontalRuleThickness,\r\n                Fill = brush,\r\n                Margin = HorizontalRuleMargin\r\n            };\r\n\r\n            blockUIElementCollection.Add(rectangle);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a quote element.\r\n        /// </summary>\r\n        protected override void RenderQuote(QuoteBlock element, IRenderContext context)\r\n        {\r\n            if (context is not UIElementCollectionRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var blockUIElementCollection = localContext.BlockUIElementCollection;\r\n\r\n            var stackPanel = new StackPanel();\r\n            var childContext = new UIElementCollectionRenderContext(stackPanel.Children, context)\r\n            {\r\n                Parent = stackPanel\r\n            };\r\n\r\n            if (QuoteForeground != null && !localContext.OverrideForeground)\r\n            {\r\n                childContext.Foreground = QuoteForeground;\r\n            }\r\n\r\n            RenderBlocks(element.Blocks, childContext);\r\n\r\n            var border = new Border\r\n            {\r\n                Margin = QuoteMargin,\r\n                Background = QuoteBackground,\r\n                BorderBrush = childContext.OverrideForeground ? childContext.Foreground : QuoteBorderBrush ?? childContext.Foreground,\r\n                BorderThickness = QuoteBorderThickness,\r\n                Padding = QuotePadding,\r\n                Child = stackPanel\r\n            };\r\n\r\n            blockUIElementCollection.Add(border);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a code element.\r\n        /// </summary>\r\n        protected override void RenderCode(CodeBlock element, IRenderContext context)\r\n        {\r\n            if (!(context is UIElementCollectionRenderContext localContext))\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var blockUIElementCollection = localContext.BlockUIElementCollection;\r\n\r\n            var brush = localContext.Foreground;\r\n            if (CodeForeground != null && !localContext.OverrideForeground)\r\n            {\r\n                brush = CodeForeground;\r\n            }\r\n\r\n            var textBlock = new RichTextBlock\r\n            {\r\n                FontFamily = CodeFontFamily ?? FontFamily,\r\n                Foreground = brush,\r\n                LineHeight = FontSize * 1.4\r\n            };\r\n\r\n            textBlock.PointerWheelChanged += Preventative_PointerWheelChanged;\r\n\r\n            var paragraph = new Paragraph();\r\n            textBlock.Blocks.Add(paragraph);\r\n\r\n            // Allows external Syntax Highlighting\r\n            var hasCustomSyntax = CodeBlockResolver.ParseSyntax(paragraph.Inlines, element.Text, element.CodeLanguage);\r\n            if (!hasCustomSyntax)\r\n            {\r\n                paragraph.Inlines.Add(new Run { Text = element.Text });\r\n            }\r\n\r\n            // Ensures that Code has Horizontal Scroll and doesn't wrap.\r\n            var viewer = new ScrollViewer\r\n            {\r\n                Padding = CodePadding,\r\n                Margin = CodeMargin,\r\n                Content = textBlock\r\n            };\r\n\r\n            var border = new Border()\r\n            {\r\n                Background = CodeBackground,\r\n                BorderBrush = CodeBorderBrush,\r\n                BorderThickness = CodeBorderThickness,\r\n                CornerRadius = CodeCornerRadius,\r\n                Child = viewer\r\n            };\r\n\r\n            if (!WrapCodeBlock)\r\n            {\r\n                viewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;\r\n                viewer.HorizontalScrollMode = ScrollMode.Auto;\r\n                viewer.VerticalScrollMode = ScrollMode.Disabled;\r\n                viewer.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled;\r\n            }\r\n\r\n            // Add it to the blocks\r\n            blockUIElementCollection.Add(border);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a table element.\r\n        /// </summary>\r\n        protected override void RenderTable(TableBlock element, IRenderContext context)\r\n        {\r\n            if (!(context is UIElementCollectionRenderContext localContext))\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var blockUIElementCollection = localContext.BlockUIElementCollection;\r\n\r\n            var table = new MarkdownTable(element.ColumnDefinitions.Count, element.Rows.Count, TableBorderThickness, TableBorderBrush)\r\n            {\r\n                HorizontalAlignment = HorizontalAlignment.Left,\r\n                Margin = TableMargin\r\n            };\r\n\r\n            // Add each row.\r\n            for (int rowIndex = 0; rowIndex < element.Rows.Count; rowIndex++)\r\n            {\r\n                var row = element.Rows[rowIndex];\r\n\r\n                // Add each cell.\r\n                for (int cellIndex = 0; cellIndex < Math.Min(element.ColumnDefinitions.Count, row.Cells.Count); cellIndex++)\r\n                {\r\n                    var cell = row.Cells[cellIndex];\r\n\r\n                    // Cell content.\r\n                    var cellContent = CreateOrReuseRichTextBlock(new UIElementCollectionRenderContext(null, context));\r\n                    cellContent.Margin = TableCellPadding;\r\n                    Grid.SetRow(cellContent, rowIndex);\r\n                    Grid.SetColumn(cellContent, cellIndex);\r\n                    switch (element.ColumnDefinitions[cellIndex].Alignment)\r\n                    {\r\n                        case ColumnAlignment.Center:\r\n                            cellContent.TextAlignment = TextAlignment.Center;\r\n                            break;\r\n\r\n                        case ColumnAlignment.Right:\r\n                            cellContent.TextAlignment = TextAlignment.Right;\r\n                            break;\r\n                    }\r\n\r\n                    if (rowIndex == 0)\r\n                    {\r\n                        cellContent.FontWeight = FontWeights.Bold;\r\n                    }\r\n\r\n                    var paragraph = new Paragraph();\r\n\r\n                    var childContext = new InlineRenderContext(paragraph.Inlines, context)\r\n                    {\r\n                        Parent = paragraph,\r\n                        TrimLeadingWhitespace = true\r\n                    };\r\n\r\n                    RenderInlineChildren(cell.Inlines, childContext);\r\n\r\n                    cellContent.Blocks.Add(paragraph);\r\n                    table.Children.Add(cellContent);\r\n                }\r\n            }\r\n\r\n            blockUIElementCollection.Add(table);\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/MarkdownRenderer.Dimensions.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Windows.UI.Text;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Media;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// Measurement Properties for elements in the Markdown.\r\n    /// </summary>\r\n    public partial class MarkdownRenderer\r\n    {\r\n        /// <summary>\r\n        /// Gets or sets the distance between the border and its child object.\r\n        /// </summary>\r\n        public Thickness Padding { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the border thickness of a control.\r\n        /// </summary>\r\n        public Thickness BorderThickness { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the thickness of the border around code blocks.\r\n        /// </summary>\r\n        public Thickness CodeBorderThickness { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the thickness of the border around inline code.\r\n        /// </summary>\r\n        public Thickness InlineCodeBorderThickness { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the space outside of code blocks.\r\n        /// </summary>\r\n        public Thickness CodeMargin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the space between the code border and the text.\r\n        /// </summary>\r\n        public Thickness CodePadding { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the space between the code border and the text.\r\n        /// </summary>\r\n        public Thickness InlineCodePadding { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 1 headers.\r\n        /// </summary>\r\n        public double Header1FontSize { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 1 headers.\r\n        /// </summary>\r\n        public Thickness Header1Margin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 2 headers.\r\n        /// </summary>\r\n        public double Header2FontSize { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 2 headers.\r\n        /// </summary>\r\n        public Thickness Header2Margin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 3 headers.\r\n        /// </summary>\r\n        public double Header3FontSize { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 3 headers.\r\n        /// </summary>\r\n        public Thickness Header3Margin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 4 headers.\r\n        /// </summary>\r\n        public double Header4FontSize { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 4 headers.\r\n        /// </summary>\r\n        public Thickness Header4Margin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 5 headers.\r\n        /// </summary>\r\n        public double Header5FontSize { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 5 headers.\r\n        /// </summary>\r\n        public Thickness Header5Margin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font size for level 6 headers.\r\n        /// </summary>\r\n        public double Header6FontSize { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin for level 6 headers.\r\n        /// </summary>\r\n        public Thickness Header6Margin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin used for horizontal rules.\r\n        /// </summary>\r\n        public Thickness HorizontalRuleMargin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the vertical thickness of the horizontal rule.\r\n        /// </summary>\r\n        public double HorizontalRuleThickness { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin used by lists.\r\n        /// </summary>\r\n        public Thickness ListMargin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the width of the space used by list item bullets/numbers.\r\n        /// </summary>\r\n        public double ListGutterWidth { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the space between the list item bullets/numbers and the list item content.\r\n        /// </summary>\r\n        public double ListBulletSpacing { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin used for paragraphs.\r\n        /// </summary>\r\n        public Thickness ParagraphMargin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the thickness of quote borders.\r\n        /// </summary>\r\n        public Thickness QuoteBorderThickness { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the space outside of quote borders.\r\n        /// </summary>\r\n        public Thickness QuoteMargin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the space between the quote border and the text.\r\n        /// </summary>\r\n        public Thickness QuotePadding { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the thickness of any table borders.\r\n        /// </summary>\r\n        public double TableBorderThickness { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the padding inside each cell.\r\n        /// </summary>\r\n        public Thickness TableCellPadding { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the margin used by tables.\r\n        /// </summary>\r\n        public Thickness TableMargin { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the size of the text in this control.\r\n        /// </summary>\r\n        public double FontSize { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the uniform spacing between characters, in units of 1/1000 of an em.\r\n        /// </summary>\r\n        public int CharacterSpacing { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the word wrapping behavior.\r\n        /// </summary>\r\n        public TextWrapping TextWrapping { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the degree to which a font is condensed or expanded on the screen.\r\n        /// </summary>\r\n        public FontStretch FontStretch { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the stretch used for images.\r\n        /// </summary>\r\n        public Stretch ImageStretch { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the MaxHeight for images.\r\n        /// </summary>\r\n        public double ImageMaxHeight { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the MaxWidth for images.\r\n        /// </summary>\r\n        public double ImageMaxWidth { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether to wrap text in the Code Block, or use Horizontal Scroll.\r\n        /// </summary>\r\n        public bool WrapCodeBlock { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/MarkdownRenderer.Inlines.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing Unicord.Universal.Controls.Emoji;\r\nusing Unicord.Universal.Converters;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models.Emoji;\r\nusing Unicord.Universal.Parsers.Markdown;\r\nusing Unicord.Universal.Parsers.Markdown.Inlines;\r\nusing Unicord.Universal.Parsers.Markdown.Render;\r\nusing Windows.UI.Text;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Documents;\r\nusing Windows.UI.Xaml.Media;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// Inline UI Methods for UWP UI Creation.\r\n    /// </summary>\r\n    public partial class MarkdownRenderer\r\n    {\r\n\r\n        /// <summary>\r\n        /// Renders emoji element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected override void RenderEmoji(EmojiInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var inlineCollection = localContext.InlineCollection;\r\n\r\n            var emoji = new Run\r\n            {\r\n                FontFamily = EmojiFontFamily ?? DefaultEmojiFont,\r\n                Text = element.Text\r\n            };\r\n\r\n            inlineCollection.Add(emoji);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a text run element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected override void RenderTextRun(TextRunInline element, IRenderContext context)\r\n        {\r\n            InternalRenderTextRun(element, context);\r\n        }\r\n\r\n        private Run InternalRenderTextRun(TextRunInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var inlineCollection = localContext.InlineCollection;\r\n\r\n            // Create the text run\r\n            var textRun = new Run\r\n            {\r\n                Text = CollapseWhitespace(context, element.Text)\r\n            };\r\n\r\n            // Add it\r\n            inlineCollection.Add(textRun);\r\n            return textRun;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a bold run element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected override void RenderBoldRun(BoldTextInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            // Create the text run\r\n            var boldSpan = new Span\r\n            {\r\n                FontWeight = FontWeights.Bold\r\n            };\r\n\r\n            var childContext = new InlineRenderContext(boldSpan.Inlines, context)\r\n            {\r\n                Parent = boldSpan,\r\n                WithinBold = true\r\n            };\r\n\r\n            // Render the children into the bold inline.\r\n            RenderInlineChildren(element.Inlines, childContext);\r\n\r\n            // Add it to the current inlines\r\n            localContext.InlineCollection.Add(boldSpan);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders an underlined run element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected override void RenderUnderlineRun(UnderlineTextInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            // Create the text run\r\n            var boldSpan = new Span\r\n            {\r\n                TextDecorations = TextDecorations.Underline\r\n            };\r\n\r\n            var childContext = new InlineRenderContext(boldSpan.Inlines, context)\r\n            {\r\n                Parent = boldSpan,\r\n                WithinUnderline = true\r\n            };\r\n\r\n            // Render the children into the bold inline.\r\n            RenderInlineChildren(element.Inlines, childContext);\r\n\r\n            // Add it to the current inlines\r\n            localContext.InlineCollection.Add(boldSpan);\r\n        }\r\n\r\n\r\n        /// <summary>\r\n        /// Renders a link element\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected override void RenderMarkdownLink(MarkdownLinkInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            // Regular ol' hyperlink.\r\n            var link = new Hyperlink();\r\n\r\n            // Register the link\r\n            LinkRegister.RegisterNewHyperLink(link, element.Url);\r\n\r\n            // Render the children into the link inline.\r\n            var childContext = new InlineRenderContext(link.Inlines, context)\r\n            {\r\n                Parent = link,\r\n                WithinHyperlink = true\r\n            };\r\n\r\n            if (localContext.OverrideForeground)\r\n            {\r\n                link.Foreground = localContext.Foreground;\r\n            }\r\n            else if (LinkForeground != null)\r\n            {\r\n                link.Foreground = LinkForeground;\r\n            }\r\n\r\n            RenderInlineChildren(element.Inlines, childContext);\r\n            context.TrimLeadingWhitespace = childContext.TrimLeadingWhitespace;\r\n\r\n            ToolTipService.SetToolTip(link, element.Tooltip ?? element.Url);\r\n\r\n            // Add it to the current inlines\r\n            localContext.InlineCollection.Add(link);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a raw link element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected override void RenderHyperlink(HyperlinkInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var link = new Hyperlink();\r\n\r\n            // Register the link\r\n            LinkRegister.RegisterNewHyperLink(link, element.Url);\r\n\r\n            var brush = localContext.Foreground;\r\n            if (LinkForeground != null && !localContext.OverrideForeground)\r\n            {\r\n                brush = LinkForeground;\r\n            }\r\n\r\n            // Make a text block for the link\r\n            var linkText = new Run\r\n            {\r\n                Text = CollapseWhitespace(context, element.Text),\r\n                Foreground = brush\r\n            };\r\n\r\n            link.Inlines.Add(linkText);\r\n\r\n            // Add it to the current inlines\r\n            localContext.InlineCollection.Add(link);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders an image element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected override async void RenderImage(ImageInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var inlineCollection = localContext.InlineCollection;\r\n\r\n            var placeholder = InternalRenderTextRun(new TextRunInline { Text = element.Text, Type = MarkdownInlineType.TextRun }, context);\r\n            var resolvedImage = await ImageResolver.ResolveImageAsync(element.RenderUrl, element.Tooltip);\r\n\r\n            // if image can not be resolved we have to return\r\n            if (resolvedImage == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            var image = new Image\r\n            {\r\n                Source = resolvedImage,\r\n                HorizontalAlignment = HorizontalAlignment.Left,\r\n                VerticalAlignment = VerticalAlignment.Top,\r\n                Stretch = ImageStretch\r\n            };\r\n\r\n            var hyperlinkButton = new HyperlinkButton()\r\n            {\r\n                Content = image\r\n            };\r\n\r\n            var viewbox = new Viewbox\r\n            {\r\n                Child = hyperlinkButton,\r\n                StretchDirection = StretchDirection.DownOnly\r\n            };\r\n\r\n            viewbox.PointerWheelChanged += Preventative_PointerWheelChanged;\r\n\r\n            var scrollViewer = new ScrollViewer\r\n            {\r\n                Content = viewbox,\r\n                VerticalScrollMode = ScrollMode.Disabled,\r\n                VerticalScrollBarVisibility = ScrollBarVisibility.Disabled\r\n            };\r\n\r\n            var imageContainer = new InlineUIContainer() { Child = scrollViewer };\r\n\r\n            var ishyperlink = false;\r\n            if (element.RenderUrl != element.Url)\r\n            {\r\n                ishyperlink = true;\r\n            }\r\n\r\n            LinkRegister.RegisterNewHyperLink(image, element.Url, ishyperlink);\r\n\r\n            if (ImageMaxHeight > 0)\r\n            {\r\n                viewbox.MaxHeight = ImageMaxHeight;\r\n            }\r\n\r\n            if (ImageMaxWidth > 0)\r\n            {\r\n                viewbox.MaxWidth = ImageMaxWidth;\r\n            }\r\n\r\n            if (element.ImageWidth > 0)\r\n            {\r\n                image.Width = element.ImageWidth;\r\n                image.Stretch = Stretch.UniformToFill;\r\n            }\r\n\r\n            if (element.ImageHeight > 0)\r\n            {\r\n                if (element.ImageWidth == 0)\r\n                {\r\n                    image.Width = element.ImageHeight;\r\n                }\r\n\r\n                image.Height = element.ImageHeight;\r\n                image.Stretch = Stretch.UniformToFill;\r\n            }\r\n\r\n            if (element.ImageHeight > 0 && element.ImageWidth > 0)\r\n            {\r\n                image.Stretch = Stretch.Fill;\r\n            }\r\n\r\n            // If image size is given then scroll to view overflown part\r\n            if (element.ImageHeight > 0 || element.ImageWidth > 0)\r\n            {\r\n                scrollViewer.HorizontalScrollMode = ScrollMode.Auto;\r\n                scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Auto;\r\n            }\r\n\r\n            // Else resize the image\r\n            else\r\n            {\r\n                scrollViewer.HorizontalScrollMode = ScrollMode.Disabled;\r\n                scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;\r\n            }\r\n\r\n            ToolTipService.SetToolTip(image, element.Tooltip);\r\n\r\n            // Try to add it to the current inlines\r\n            // Could fail because some containers like Hyperlink cannot have inlined images\r\n            try\r\n            {\r\n                var placeholderIndex = inlineCollection.IndexOf(placeholder);\r\n                inlineCollection.Remove(placeholder);\r\n                inlineCollection.Insert(placeholderIndex, imageContainer);\r\n            }\r\n            catch\r\n            {\r\n                // Ignore error\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a text run element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected override void RenderItalicRun(ItalicTextInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            // Create the text run\r\n            var italicSpan = new Span\r\n            {\r\n                FontStyle = FontStyle.Italic\r\n            };\r\n\r\n            var childContext = new InlineRenderContext(italicSpan.Inlines, context)\r\n            {\r\n                Parent = italicSpan,\r\n                WithinItalics = true\r\n            };\r\n\r\n            // Render the children into the italic inline.\r\n            RenderInlineChildren(element.Inlines, childContext);\r\n\r\n            // Add it to the current inlines\r\n            localContext.InlineCollection.Add(italicSpan);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a strikethrough element.\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected override void RenderStrikethroughRun(StrikethroughTextInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var span = new Span();\r\n\r\n            if (TextDecorationsSupported)\r\n            {\r\n                span.TextDecorations = TextDecorations.Strikethrough;\r\n            }\r\n            else\r\n            {\r\n                span.FontFamily = new FontFamily(\"Consolas\");\r\n            }\r\n\r\n            var childContext = new InlineRenderContext(span.Inlines, context)\r\n            {\r\n                Parent = span\r\n            };\r\n\r\n            // Render the children into the inline.\r\n            RenderInlineChildren(element.Inlines, childContext);\r\n\r\n            if (!TextDecorationsSupported)\r\n            {\r\n                AlterChildRuns(span, (parentSpan, run) =>\r\n                {\r\n                    var text = run.Text;\r\n                    var builder = new StringBuilder(text.Length * 2);\r\n                    foreach (var c in text)\r\n                    {\r\n                        builder.Append((char)0x0336);\r\n                        builder.Append(c);\r\n                    }\r\n                    run.Text = builder.ToString();\r\n                });\r\n            }\r\n\r\n            // Add it to the current inlines\r\n            localContext.InlineCollection.Add(span);\r\n        }\r\n\r\n        /// <summary>\r\n        /// Renders a code element\r\n        /// </summary>\r\n        /// <param name=\"element\"> The parsed inline element to render. </param>\r\n        /// <param name=\"context\"> Persistent state. </param>\r\n        protected override void RenderCodeRun(CodeInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            if (localContext.Parent is Hyperlink)\r\n            {\r\n                // In case of Hyperlink, break glass (or add a run).\r\n\r\n                var text = new Run { Text = CollapseWhitespace(context, element.Text) };\r\n\r\n                if (localContext.WithinItalics)\r\n                {\r\n                    text.FontStyle = FontStyle.Italic;\r\n                }\r\n\r\n                if (localContext.WithinBold)\r\n                {\r\n                    text.FontWeight = FontWeights.Bold;\r\n                }\r\n\r\n                if (localContext.WithinUnderline)\r\n                {\r\n                    text.TextDecorations = TextDecorations.Underline;\r\n                }\r\n\r\n                localContext.InlineCollection.Add(text);\r\n            }\r\n            else\r\n            {\r\n                var text = CreateTextBlock(localContext);\r\n                text.Text = CollapseWhitespace(context, element.Text);\r\n                text.FontFamily = InlineCodeFontFamily ?? FontFamily;\r\n\r\n                if (localContext.WithinItalics)\r\n                {\r\n                    text.FontStyle = FontStyle.Italic;\r\n                }\r\n\r\n                if (localContext.WithinBold)\r\n                {\r\n                    text.FontWeight = FontWeights.Bold;\r\n                }\r\n\r\n                if (localContext.WithinUnderline)\r\n                {\r\n                    text.TextDecorations = TextDecorations.Underline;\r\n                }\r\n\r\n                var borderthickness = InlineCodeBorderThickness;\r\n                var padding = InlineCodePadding;\r\n                var spacingoffset = -(borderthickness.Bottom + padding.Bottom);\r\n\r\n                var margin = new Thickness(0, spacingoffset, 0, spacingoffset);\r\n\r\n                var border = new Border\r\n                {\r\n                    BorderThickness = borderthickness,\r\n                    BorderBrush = InlineCodeBorderBrush,\r\n                    Background = InlineCodeBackground,\r\n                    CornerRadius = InlineCodeCornerRadius,\r\n                    Child = text,\r\n                    Padding = padding,\r\n                    Margin = margin\r\n                };\r\n\r\n                // Aligns content in InlineUI, see https://social.msdn.microsoft.com/Forums/silverlight/en-US/48b5e91e-efc5-4768-8eaf-f897849fcf0b/richtextbox-inlineuicontainer-vertical-alignment-issue?forum=silverlightarchieve\r\n                border.RenderTransform = new TranslateTransform\r\n                {\r\n                    Y = 4\r\n                };\r\n\r\n                var inlineUIContainer = new InlineUIContainer\r\n                {\r\n                    Child = border,\r\n                };\r\n\r\n                RootElement.Margin = new Thickness(0, 0, 0, 4);\r\n                // Add it to the current inlines\r\n                localContext.InlineCollection.Add(inlineUIContainer);\r\n            }\r\n        }\r\n\r\n        protected override void RenderSpoiler(SpoilerTextInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            // TODO (maybe): make this shit actually work?\r\n\r\n            if (localContext.Parent is Hyperlink)\r\n            {\r\n                // In case of Hyperlink, break glass (or add a run).\r\n\r\n                var span = new Span();\r\n                var childContext = new InlineRenderContext(span.Inlines, context)\r\n                {\r\n                    Parent = span\r\n                };\r\n\r\n                // Render the children into the inline.\r\n                RenderInlineChildren(element.Inlines, childContext);\r\n\r\n                // Add it to the current inlines\r\n                localContext.InlineCollection.Add(span);\r\n            }\r\n            else\r\n            {\r\n                var text = new RichTextBlock\r\n                {\r\n                    CharacterSpacing = CharacterSpacing,\r\n                    FontFamily = FontFamily,\r\n                    FontSize = FontSize,\r\n                    FontStretch = FontStretch,\r\n                    FontStyle = FontStyle,\r\n                    FontWeight = FontWeight,\r\n                    Foreground = localContext.Foreground,\r\n                    IsTextSelectionEnabled = IsTextSelectionEnabled,\r\n                    TextWrapping = TextWrapping\r\n                };\r\n\r\n                var paragraph = new Paragraph();\r\n                var childContext = new InlineRenderContext(paragraph.Inlines, context)\r\n                {\r\n                    Parent = text\r\n                };\r\n\r\n                RenderInlineChildren(element.Inlines, childContext);\r\n\r\n                if (localContext.WithinItalics)\r\n                {\r\n                    text.FontStyle = FontStyle.Italic;\r\n                }\r\n\r\n                if (localContext.WithinBold)\r\n                {\r\n                    text.FontWeight = FontWeights.Bold;\r\n                }\r\n\r\n                if (localContext.WithinUnderline)\r\n                {\r\n                    text.TextDecorations = TextDecorations.Underline;\r\n                }\r\n\r\n                text.Blocks.Add(paragraph);\r\n\r\n                var borderthickness = InlineCodeBorderThickness;\r\n                var padding = InlineCodePadding;\r\n                var spacingoffset = -(borderthickness.Bottom + padding.Bottom);\r\n                var margin = new Thickness(0, spacingoffset, 0, spacingoffset);\r\n\r\n                var grid = new Grid\r\n                {\r\n                    BorderThickness = borderthickness,\r\n                    BorderBrush = InlineCodeBorderBrush,\r\n                    Background = InlineCodeBackground,\r\n                    Padding = padding,\r\n                    Margin = margin\r\n                };\r\n\r\n                // Aligns content in InlineUI, see https://social.msdn.microsoft.com/Forums/silverlight/en-US/48b5e91e-efc5-4768-8eaf-f897849fcf0b/richtextbox-inlineuicontainer-vertical-alignment-issue?forum=silverlightarchieve\r\n                grid.RenderTransform = new TranslateTransform\r\n                {\r\n                    Y = 4\r\n                };\r\n\r\n                grid.Children.Add(text);\r\n\r\n                if (App.RoamingSettings.Read(Constants.ENABLE_SPOILERS, true))\r\n                {\r\n                    var border = new Border()\r\n                    {\r\n                        Background = InlineCodeBackground,\r\n                        HorizontalAlignment = HorizontalAlignment.Stretch,\r\n                        VerticalAlignment = VerticalAlignment.Stretch\r\n                    };\r\n\r\n                    border.Tapped += (o, e) => { border.Opacity = 0; };\r\n\r\n                    grid.Children.Add(border);\r\n                }\r\n\r\n                var inlineUIContainer = new InlineUIContainer\r\n                {\r\n                    Child = grid,\r\n                };\r\n\r\n                RootElement.Margin = new Thickness(0, 0, 0, 4);\r\n\r\n                // Add it to the current inlines\r\n                localContext.InlineCollection.Add(inlineUIContainer);\r\n            }\r\n        }\r\n\r\n        private Brush GetDiscordBrush(DiscordColor color)\r\n        {\r\n            return color.Value == 0 ? Foreground : (Brush)ColourBrushConverter.Convert(color, typeof(Brush), null, \"\");\r\n        }\r\n\r\n        protected override void RenderDiscord(DiscordInline element, IRenderContext context)\r\n        {\r\n            if (context is not InlineRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            if (Channel != null)\r\n            {\r\n                var client = Channel.Discord as DiscordClient;\r\n                var guild = Channel.Guild;\r\n\r\n                if (element.DiscordType != DiscordInline.MentionType.Emote)\r\n                {\r\n                    var run = new Run() { FontWeight = FontWeights.Bold };\r\n\r\n                    if (element.DiscordType == DiscordInline.MentionType.User)\r\n                    {\r\n                        var user = (DiscordUser)guild?.Members.GetValueOrDefault(element.Id);\r\n                        if (user == null)\r\n                        {\r\n                            client.TryGetCachedUser(element.Id, out user);\r\n                        }\r\n\r\n                        if (user != null)\r\n                        {\r\n                            run.Text = IsSystemMessage ? user.DisplayName : $\"@{user.DisplayName}\";\r\n                            if (user is DiscordMember member)\r\n                                run.Foreground = GetDiscordBrush(member.Color);\r\n                        }\r\n                        else\r\n                        {\r\n                            run.Text = $\"@deleted-user\";\r\n                        }\r\n                    }\r\n                    else if (element.DiscordType == DiscordInline.MentionType.Role)\r\n                    {\r\n                        if (guild?.Roles.TryGetValue(element.Id, out var role) == true)\r\n                        {\r\n                            run.Text = $\"@{role.Name}\";\r\n                            run.Foreground = GetDiscordBrush(role.Color);\r\n                        }\r\n                        else\r\n                        {\r\n                            run.Text = $\"@deleted-role\";\r\n                        }\r\n                    }\r\n                    else if (element.DiscordType == DiscordInline.MentionType.Channel)\r\n                    {\r\n                        if (client.TryGetCachedChannel(element.Id, out var channel) && channel is not DiscordDmChannel)\r\n                        {\r\n                            run.Text = $\"#{channel.Name}\";\r\n                        }\r\n                        else\r\n                        {\r\n                            run.Text = $\"#deleted-channel\";\r\n                        }\r\n                    }\r\n\r\n\r\n                    localContext.InlineCollection.Add(run);\r\n                }\r\n                else\r\n                {\r\n                    var border = RootElement.FindParent<Border>();\r\n                    var uri = $\"https://cdn.discordapp.com/emojis/{element.Id}?size=128\";\r\n                    var ui = new InlineUIContainer() { FontSize = IsHuge ? 42 : 24 };\r\n                    var size = IsHuge ? 48 : 24;\r\n                    var image = new EmojiControl()\r\n                    {\r\n                        Emoji = new EmojiViewModel(element.Id, element.Text, element.IsAnimated),\r\n                        Size = size,\r\n                        MaxWidth = size * 3,\r\n                        Margin = IsHuge ? default : new Thickness(0, 0, 0, -8)\r\n                    };\r\n\r\n                    ToolTipService.SetToolTip(image, element.Text);\r\n                    ui.Child = image;\r\n\r\n                    RootElement.Margin = new Thickness(0, 0, 0, 4);\r\n                    localContext.InlineCollection.Add(ui);\r\n\r\n                    //if (!IsHuge && RootElement.RenderTransform is not TranslateTransform tt)\r\n                    //{\r\n                    //    RootElement.Margin = new Thickness(0, -8, 0, 0);\r\n                    //}\r\n                }\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/MarkdownRenderer.Properties.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System.Reflection;\r\nusing DSharpPlus.Entities;\r\nusing Unicord.Universal.Converters;\r\nusing Windows.Foundation.Metadata;\r\nusing Windows.UI.Text;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Media;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// Properties for the UWP Markdown Renderer\r\n    /// </summary>\r\n    public partial class MarkdownRenderer\r\n    {\r\n        private static bool? _textDecorationsSupported = null;\r\n\r\n        private static bool TextDecorationsSupported => (bool)(_textDecorationsSupported ??\r\n                        (_textDecorationsSupported = ApiInformation.IsTypePresent(\"Windows.UI.Text.TextDecorations\")));\r\n\r\n        /// <summary>\r\n        /// Super Hack to retain inertia and passing the Scroll data onto the Parent ScrollViewer.\r\n        /// </summary>\r\n        private static MethodInfo pointerWheelChanged = typeof(ScrollViewer).GetMethod(\"OnPointerWheelChanged\", BindingFlags.NonPublic | BindingFlags.Instance);\r\n\r\n        /// <summary>\r\n        /// Gets or sets the Root Framework Element.\r\n        /// </summary>\r\n        private FrameworkElement RootElement { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets the interface that is used to register hyperlinks.\r\n        /// </summary>\r\n        protected ILinkRegister LinkRegister { get; }\r\n\r\n        /// <summary>\r\n        /// Gets the interface that is used to resolve images.\r\n        /// </summary>\r\n        protected IImageResolver ImageResolver { get; }\r\n\r\n        /// <summary>\r\n        /// Gets the Parser to parse code strings into Syntax Highlighted text.\r\n        /// </summary>\r\n        protected ICodeBlockResolver CodeBlockResolver { get; }\r\n\r\n        /// <summary>\r\n        /// Gets the Default Emoji Font.\r\n        /// </summary>\r\n        protected FontFamily DefaultEmojiFont { get; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a brush that provides the background of the control.\r\n        /// </summary>\r\n        public Brush Background { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a brush that describes the border fill of a control.\r\n        /// </summary>\r\n        public Brush BorderBrush { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font used to display text in the control.\r\n        /// </summary>\r\n        public FontFamily FontFamily { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the style in which the text is rendered.\r\n        /// </summary>\r\n        public FontStyle FontStyle { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the thickness of the specified font.\r\n        /// </summary>\r\n        public FontWeight FontWeight { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a brush that describes the foreground color.\r\n        /// </summary>\r\n        public Brush Foreground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether text selection is enabled.\r\n        /// </summary>\r\n        public bool IsTextSelectionEnabled { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to fill the background of a code block.\r\n        /// </summary>\r\n        public Brush CodeBackground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to fill the background of inline code.\r\n        /// </summary>\r\n        public Brush InlineCodeBackground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to fill the border of inline code.\r\n        /// </summary>\r\n        public Brush InlineCodeBorderBrush { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render the border fill of a code block.\r\n        /// </summary>\r\n        public Brush CodeBorderBrush { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render the text inside a code block.  If this is\r\n        /// <c>null</c>, then <see cref=\"Foreground\"/> is used.\r\n        /// </summary>\r\n        public Brush CodeForeground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font used to display code.  If this is <c>null</c>, then\r\n        /// <see cref=\"FontFamily\"/> is used.\r\n        /// </summary>\r\n        public FontFamily CodeFontFamily { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font used to display code.  If this is <c>null</c>, then\r\n        /// <see cref=\"FontFamily\"/> is used.\r\n        /// </summary>\r\n        public FontFamily InlineCodeFontFamily { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font used to display emojis.  If this is <c>null</c>, then\r\n        /// Segoe UI Emoji font is used.\r\n        /// </summary>\r\n        public FontFamily EmojiFontFamily { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 1 headers.\r\n        /// </summary>\r\n        public FontWeight Header1FontWeight { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 1 headers.\r\n        /// </summary>\r\n        public Brush Header1Foreground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 2 headers.\r\n        /// </summary>\r\n        public FontWeight Header2FontWeight { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 2 headers.\r\n        /// </summary>\r\n        public Brush Header2Foreground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 3 headers.\r\n        /// </summary>\r\n        public FontWeight Header3FontWeight { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 3 headers.\r\n        /// </summary>\r\n        public Brush Header3Foreground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 4 headers.\r\n        /// </summary>\r\n        public FontWeight Header4FontWeight { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 4 headers.\r\n        /// </summary>\r\n        public Brush Header4Foreground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 5 headers.\r\n        /// </summary>\r\n        public FontWeight Header5FontWeight { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 5 headers.\r\n        /// </summary>\r\n        public Brush Header5Foreground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the font weight to use for level 6 headers.\r\n        /// </summary>\r\n        public FontWeight Header6FontWeight { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the foreground brush for level 6 headers.\r\n        /// </summary>\r\n        public Brush Header6Foreground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render a horizontal rule.  If this is <c>null</c>, then\r\n        /// <see cref=\"Foreground\"/> is used.\r\n        /// </summary>\r\n        public Brush HorizontalRuleBrush { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to fill the background of a quote block.\r\n        /// </summary>\r\n        public Brush QuoteBackground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render a quote border.  If this is <c>null</c>, then\r\n        /// <see cref=\"Foreground\"/> is used.\r\n        /// </summary>\r\n        public Brush QuoteBorderBrush { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render the text inside a quote block.  If this is\r\n        /// <c>null</c>, then <see cref=\"Foreground\"/> is used.\r\n        /// </summary>\r\n        public Brush QuoteForeground { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render table borders.  If this is <c>null</c>, then\r\n        /// <see cref=\"Foreground\"/> is used.\r\n        /// </summary>\r\n        public Brush TableBorderBrush { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the brush used to render links.  If this is <c>null</c>, then\r\n        /// <see cref=\"Foreground\"/> is used.\r\n        /// </summary>\r\n        public Brush LinkForeground { get; set; }\r\n\r\n        public DiscordChannel Channel { get; set; }\r\n\r\n        public bool IsSystemMessage { get; set; }\r\n\r\n        public CornerRadius CodeCornerRadius { get; set; }\r\n\r\n        public CornerRadius InlineCodeCornerRadius { get; set; }\r\n\r\n        public ColourBrushConverter ColourBrushConverter { get; set; }\r\n        public bool IsHuge { get; internal set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/MarkdownRenderer.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Parsers.Markdown;\r\nusing Unicord.Universal.Parsers.Markdown.Render;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Documents;\r\nusing Windows.UI.Xaml.Media;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// Generates Framework Elements for the UWP Markdown Textblock.\r\n    /// </summary>\r\n    public partial class MarkdownRenderer : MarkdownRendererBase\r\n    {\r\n        /// <summary>\r\n        /// Initializes a new instance of the <see cref=\"MarkdownRenderer\"/> class.\r\n        /// </summary>\r\n        /// <param name=\"document\">The Document to Render.</param>\r\n        /// <param name=\"linkRegister\">The LinkRegister, <see cref=\"MarkdownTextBlock\"/> will use itself.</param>\r\n        /// <param name=\"imageResolver\">The Image Resolver, <see cref=\"MarkdownTextBlock\"/> will use itself.</param>\r\n        /// <param name=\"codeBlockResolver\">The Code Block Resolver, <see cref=\"MarkdownTextBlock\"/> will use itself.</param>\r\n        public MarkdownRenderer(MarkdownDocument document, ILinkRegister linkRegister, IImageResolver imageResolver, ICodeBlockResolver codeBlockResolver)\r\n            : base(document)\r\n        {\r\n            LinkRegister = linkRegister;\r\n            ImageResolver = imageResolver;\r\n            CodeBlockResolver = codeBlockResolver;\r\n            DefaultEmojiFont = new FontFamily(\"Segoe UI Emoji\");\r\n        }\r\n\r\n        /// <summary>\r\n        /// Called externally to render markdown to a text block.\r\n        /// </summary>\r\n        /// <returns> A XAML UI element. </returns>\r\n        public UIElement Render()\r\n        {\r\n            var stackPanel = new StackPanel();\r\n            RootElement = stackPanel;\r\n            Render(new UIElementCollectionRenderContext(stackPanel.Children) { Foreground = Foreground });\r\n\r\n            // Set background and border properties.\r\n            stackPanel.Background = Background;\r\n            stackPanel.BorderBrush = BorderBrush;\r\n            stackPanel.BorderThickness = BorderThickness;\r\n            stackPanel.Padding = Padding;\r\n\r\n            return stackPanel;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new RichTextBlock, if the last element of the provided collection isn't already a RichTextBlock.\r\n        /// </summary>\r\n        /// <returns>The rich text block</returns>\r\n        protected RichTextBlock CreateOrReuseRichTextBlock(IRenderContext context)\r\n        {\r\n            if (context is not UIElementCollectionRenderContext localContext)\r\n            {\r\n                throw new RenderContextIncorrectException();\r\n            }\r\n\r\n            var blockUIElementCollection = localContext.BlockUIElementCollection;\r\n\r\n            // Reuse the last RichTextBlock, if possible.\r\n            if (blockUIElementCollection != null && blockUIElementCollection.Count > 0 && blockUIElementCollection[blockUIElementCollection.Count - 1] is RichTextBlock)\r\n            {\r\n                return (RichTextBlock)blockUIElementCollection[blockUIElementCollection.Count - 1];\r\n            }\r\n\r\n            var result = new RichTextBlock\r\n            {\r\n                CharacterSpacing = CharacterSpacing,\r\n                FontFamily = FontFamily,\r\n                FontSize = FontSize,\r\n                FontStretch = FontStretch,\r\n                FontStyle = FontStyle,\r\n                FontWeight = FontWeight,\r\n                Foreground = localContext.Foreground,\r\n                IsTextSelectionEnabled = IsTextSelectionEnabled,\r\n                TextWrapping = TextWrapping\r\n            };\r\n            localContext.BlockUIElementCollection?.Add(result);\r\n\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Creates a new TextBlock, with default settings.\r\n        /// </summary>\r\n        /// <returns>The created TextBlock</returns>\r\n        protected TextBlock CreateTextBlock(RenderContext context)\r\n        {\r\n            var result = new TextBlock\r\n            {\r\n                CharacterSpacing = CharacterSpacing,\r\n                FontFamily = FontFamily,\r\n                FontSize = FontSize,\r\n                FontStretch = FontStretch,\r\n                FontStyle = FontStyle,\r\n                FontWeight = FontWeight,\r\n                Foreground = context.Foreground,\r\n                IsTextSelectionEnabled = IsTextSelectionEnabled,\r\n                TextWrapping = TextWrapping\r\n            };\r\n            return result;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Performs an action against any runs that occur within the given span.\r\n        /// </summary>\r\n        protected void AlterChildRuns(Span parentSpan, Action<Span, Run> action)\r\n        {\r\n            foreach (var inlineElement in parentSpan.Inlines)\r\n            {\r\n                if (inlineElement is Span span)\r\n                {\r\n                    AlterChildRuns(span, action);\r\n                }\r\n                else if (inlineElement is Run)\r\n                {\r\n                    action(parentSpan, (Run)inlineElement);\r\n                }\r\n            }\r\n        }\r\n\r\n        private void Preventative_PointerWheelChanged(object sender, Windows.UI.Xaml.Input.PointerRoutedEventArgs e)\r\n        {\r\n            var pointerPoint = e.GetCurrentPoint((UIElement)sender);\r\n\r\n            if (pointerPoint.Properties.IsHorizontalMouseWheel)\r\n            {\r\n                e.Handled = false;\r\n                return;\r\n            }\r\n\r\n            var rootViewer = RootElement.FindParent<ScrollViewer>();\r\n            if (rootViewer != null)\r\n            {\r\n                pointerWheelChanged?.Invoke(rootViewer, new object[] { e });\r\n                e.Handled = true;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/MarkdownTable.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing Windows.Foundation;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Media;\r\nusing Windows.UI.Xaml.Shapes;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// A custom panel control that arranges elements similar to how an HTML table would.\r\n    /// </summary>\r\n    internal class MarkdownTable : Panel\r\n    {\r\n        private readonly int _columnCount;\r\n        private readonly int _rowCount;\r\n        private readonly double _borderThickness;\r\n        private double[] _columnWidths;\r\n        private double[] _rowHeights;\r\n\r\n        public MarkdownTable(int columnCount, int rowCount, double borderThickness, Brush borderBrush)\r\n        {\r\n            _columnCount = columnCount;\r\n            _rowCount = rowCount;\r\n            _borderThickness = borderThickness;\r\n            for (int col = 0; col < columnCount + 1; col++)\r\n            {\r\n                Children.Add(new Rectangle { Fill = borderBrush });\r\n            }\r\n\r\n            for (int row = 0; row < rowCount + 1; row++)\r\n            {\r\n                Children.Add(new Rectangle { Fill = borderBrush });\r\n            }\r\n        }\r\n\r\n        // Helper method to enumerate FrameworkElements instead of UIElements.\r\n        private IEnumerable<FrameworkElement> ContentChildren\r\n        {\r\n            get\r\n            {\r\n                for (int i = _columnCount + _rowCount + 2; i < Children.Count; i++)\r\n                {\r\n                    yield return (FrameworkElement)Children[i];\r\n                }\r\n            }\r\n        }\r\n\r\n        // Helper method to get table vertical edges.\r\n        private IEnumerable<Rectangle> VerticalLines\r\n        {\r\n            get\r\n            {\r\n                for (int i = 0; i < _columnCount + 1; i++)\r\n                {\r\n                    yield return (Rectangle)Children[i];\r\n                }\r\n            }\r\n        }\r\n\r\n        // Helper method to get table horizontal edges.\r\n        private IEnumerable<Rectangle> HorizontalLines\r\n        {\r\n            get\r\n            {\r\n                for (int i = _columnCount + 1; i < _columnCount + _rowCount + 2; i++)\r\n                {\r\n                    yield return (Rectangle)Children[i];\r\n                }\r\n            }\r\n        }\r\n\r\n        protected override Size MeasureOverride(Size availableSize)\r\n        {\r\n            // Measure the width of each column, with no horizontal width restrictions.\r\n            var naturalColumnWidths = new double[_columnCount];\r\n            foreach (var child in ContentChildren)\r\n            {\r\n                var columnIndex = Grid.GetColumn(child);\r\n                child.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\r\n                naturalColumnWidths[columnIndex] = Math.Max(naturalColumnWidths[columnIndex], child.DesiredSize.Width);\r\n            }\r\n\r\n            // Now figure out the actual column widths.\r\n            var remainingContentWidth = availableSize.Width - ((_columnCount + 1) * _borderThickness);\r\n            _columnWidths = new double[_columnCount];\r\n            int remainingColumnCount = _columnCount;\r\n            while (remainingColumnCount > 0)\r\n            {\r\n                // Calculate the fair width of all columns.\r\n                double fairWidth = Math.Max(0, remainingContentWidth / remainingColumnCount);\r\n\r\n                // Are there any columns less than that?  If so, they get what they are asking for.\r\n                bool recalculationNeeded = false;\r\n                for (int i = 0; i < _columnCount; i++)\r\n                {\r\n                    if (_columnWidths[i] == 0 && naturalColumnWidths[i] < fairWidth)\r\n                    {\r\n                        _columnWidths[i] = naturalColumnWidths[i];\r\n                        remainingColumnCount--;\r\n                        remainingContentWidth -= _columnWidths[i];\r\n                        recalculationNeeded = true;\r\n                    }\r\n                }\r\n\r\n                // If there are no columns less than the fair width, every remaining column gets that width.\r\n                if (recalculationNeeded == false)\r\n                {\r\n                    for (int i = 0; i < _columnCount; i++)\r\n                    {\r\n                        if (_columnWidths[i] == 0)\r\n                        {\r\n                            _columnWidths[i] = fairWidth;\r\n                        }\r\n                    }\r\n\r\n                    break;\r\n                }\r\n            }\r\n\r\n            // TODO: we can skip this step if none of the column widths changed, and just re-use\r\n            // the row heights we obtained earlier.\r\n\r\n            // Now measure row heights.\r\n            _rowHeights = new double[_rowCount];\r\n            foreach (var child in ContentChildren)\r\n            {\r\n                var columnIndex = Grid.GetColumn(child);\r\n                var rowIndex = Grid.GetRow(child);\r\n                child.Measure(new Size(_columnWidths[columnIndex], double.PositiveInfinity));\r\n                _rowHeights[rowIndex] = Math.Max(_rowHeights[rowIndex], child.DesiredSize.Height);\r\n            }\r\n\r\n            return new Size(\r\n                _columnWidths.Sum() + (_borderThickness * (_columnCount + 1)),\r\n                _rowHeights.Sum() + ((_rowCount + 1) * _borderThickness));\r\n        }\r\n\r\n        protected override Size ArrangeOverride(Size finalSize)\r\n        {\r\n            if (_columnWidths == null || _rowHeights == null)\r\n            {\r\n                throw new InvalidOperationException(\"Expected Measure to be called first.\");\r\n            }\r\n\r\n            // Arrange content.\r\n            foreach (var child in ContentChildren)\r\n            {\r\n                var columnIndex = Grid.GetColumn(child);\r\n                var rowIndex = Grid.GetRow(child);\r\n\r\n                var rect = new Rect(0, 0, 0, 0)\r\n                {\r\n                    X = _borderThickness\r\n                };\r\n\r\n                for (int col = 0; col < columnIndex; col++)\r\n                {\r\n                    rect.X += _borderThickness + _columnWidths[col];\r\n                }\r\n\r\n                rect.Y = _borderThickness;\r\n                for (int row = 0; row < rowIndex; row++)\r\n                {\r\n                    rect.Y += _borderThickness + _rowHeights[row];\r\n                }\r\n\r\n                rect.Width = _columnWidths[columnIndex];\r\n                rect.Height = _rowHeights[rowIndex];\r\n                child.Arrange(rect);\r\n            }\r\n\r\n            // Arrange vertical border elements.\r\n            {\r\n                int colIndex = 0;\r\n                double x = 0;\r\n                foreach (var borderLine in VerticalLines)\r\n                {\r\n                    borderLine.Arrange(new Rect(x, 0, _borderThickness, finalSize.Height));\r\n                    if (colIndex >= _columnWidths.Length)\r\n                    {\r\n                        break;\r\n                    }\r\n\r\n                    x += _borderThickness + _columnWidths[colIndex];\r\n                    colIndex++;\r\n                }\r\n            }\r\n\r\n            // Arrange horizontal border elements.\r\n            {\r\n                int rowIndex = 0;\r\n                double y = 0;\r\n                foreach (var borderLine in HorizontalLines)\r\n                {\r\n                    borderLine.Arrange(new Rect(0, y, finalSize.Width, _borderThickness));\r\n                    if (rowIndex >= _rowHeights.Length)\r\n                    {\r\n                        break;\r\n                    }\r\n\r\n                    y += _borderThickness + _rowHeights[rowIndex];\r\n                    rowIndex++;\r\n                }\r\n            }\r\n\r\n            return finalSize;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/RenderContext.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Unicord.Universal.Parsers.Markdown.Render;\r\nusing Windows.UI.Xaml.Media;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// The Context of the Current Position\r\n    /// </summary>\r\n    public abstract class RenderContext : IRenderContext\r\n    {\r\n        /// <summary>\r\n        /// Gets or sets the Foreground of the Current Context.\r\n        /// </summary>\r\n        public Brush Foreground { get; set; }\r\n\r\n        /// <inheritdoc/>\r\n        public bool TrimLeadingWhitespace { get; set; }\r\n\r\n        /// <inheritdoc/>\r\n        public object Parent { get; set; }\r\n\r\n        /// <summary>\r\n        /// Gets or sets a value indicating whether to override the Foreground Property.\r\n        /// </summary>\r\n        public bool OverrideForeground { get; set; }\r\n\r\n        /// <inheritdoc/>\r\n        public IRenderContext Clone()\r\n        {\r\n            return (IRenderContext)MemberwiseClone();\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/RenderContextIncorrectException.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing System;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// An Exception that occurs when the Render Context is Incorrect.\r\n    /// </summary>\r\n    public class RenderContextIncorrectException : Exception\r\n    {\r\n        internal RenderContextIncorrectException()\r\n            : base(\"Markdown Render Context missing or incorrect.\")\r\n        {\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/Markdown/Render/UIElementCollectionRenderContext.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\r\n// The .NET Foundation licenses this file to you under the MIT license.\r\n// See the LICENSE file in the project root for more information.\r\n\r\nusing Unicord.Universal.Parsers.Markdown.Render;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Controls.Markdown.Render\r\n{\r\n    /// <summary>\r\n    /// The Context of the Current Document Rendering.\r\n    /// </summary>\r\n    public class UIElementCollectionRenderContext : RenderContext\r\n    {\r\n        internal UIElementCollectionRenderContext(UIElementCollection blockUIElementCollection)\r\n        {\r\n            BlockUIElementCollection = blockUIElementCollection;\r\n        }\r\n\r\n        internal UIElementCollectionRenderContext(UIElementCollection blockUIElementCollection, IRenderContext context)\r\n            : this(blockUIElementCollection)\r\n        {\r\n            TrimLeadingWhitespace = context.TrimLeadingWhitespace;\r\n            Parent = context.Parent;\r\n\r\n            if (context is RenderContext localcontext)\r\n            {\r\n                Foreground = localcontext.Foreground;\r\n                OverrideForeground = localcontext.OverrideForeground;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// Gets or sets the list to add to.\r\n        /// </summary>\r\n        public UIElementCollection BlockUIElementCollection { get; set; }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Controls/MessageTextBox.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing Unicord.Universal.Extensions;\nusing Unicord.Universal.Models.Emoji;\nusing WamWooWam.Core;\nusing Windows.System;\nusing Windows.UI.Core;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Input;\n\nnamespace Unicord.Universal.Controls\n{\n    public class DiscordEntityTemplateSelector : DataTemplateSelector\n    {\n        public DataTemplate UserTemplate { get; set; }\n        public DataTemplate RoleTemplate { get; set; }\n        public DataTemplate ChannelTemplate { get; set; }\n        public DataTemplate EmojiTemplate { get; set; }\n        public DataTemplate EmoteTemplate { get; set; }\n\n        protected override DataTemplate SelectTemplateCore(object item)\n        {\n            switch (item)\n            {\n                case DiscordUser user:\n                    return UserTemplate;\n                case DiscordRole role:\n                    return RoleTemplate;\n                case DiscordChannel channel:\n                    return ChannelTemplate;\n                case DiscordEmoji emoji:\n                    if (emoji.Id != 0)\n                        return EmoteTemplate;\n                    else\n                        return EmojiTemplate;\n                default:\n                    return null;\n            }\n        }\n    }\n\n    public sealed class MessageTextBox : Control\n    {\n        private CoreWindow _coreWindow;\n        private AutoSuggestBox _suggestBox;\n        private TextBox _textBox;\n        private ToggleButton _emoteButton;\n        private Button _sendButton;\n        private Button _submitButton;\n        private Button _cancelButton;\n        private Flyout _emoteFlyout;\n        private EmotePicker _emotePicker;\n        private List<DiscordEmoji> _emoji;\n        private bool _shouldFixSelection;\n        private int _index = -1;\n        private int _length = -1;\n\n        #region Depdendency Properties\n\n        public string Text\n        {\n            get => (string)GetValue(TextProperty);\n            set => SetValue(TextProperty, value);\n        }\n\n        public static readonly DependencyProperty TextProperty =\n            DependencyProperty.Register(\"Text\", typeof(string), typeof(MessageTextBox), new PropertyMetadata(null, OnTextChanged));\n\n        public string PlaceholderText\n        {\n            get => (string)GetValue(PlaceholderTextProperty);\n            set => SetValue(PlaceholderTextProperty, value);\n        }\n\n        public static readonly DependencyProperty PlaceholderTextProperty =\n            DependencyProperty.Register(\"PlaceholderText\", typeof(string), typeof(MessageTextBox), new PropertyMetadata(\"\"));\n\n        public DiscordChannel Channel\n        {\n            get => (DiscordChannel)GetValue(ChannelProperty);\n            set => SetValue(ChannelProperty, value);\n        }\n\n        public static readonly DependencyProperty ChannelProperty =\n            DependencyProperty.Register(\"Channel\", typeof(DiscordChannel), typeof(MessageTextBox), new PropertyMetadata(null));\n\n        public DiscordUser CurrentUser\n        {\n            get => (DiscordUser)GetValue(CurrentUserProperty);\n            set => SetValue(CurrentUserProperty, value);\n        }\n\n        public static readonly DependencyProperty CurrentUserProperty =\n            DependencyProperty.Register(\"CurrentUser\", typeof(DiscordUser), typeof(MessageTextBox), new PropertyMetadata(null));\n\n        public bool SendButtonEnabled\n        {\n            get => (bool)GetValue(SendButtonEnabledProperty);\n            set => SetValue(SendButtonEnabledProperty, value);\n        }\n\n        public static readonly DependencyProperty SendButtonEnabledProperty =\n            DependencyProperty.Register(\"SendButtonEnabled\", typeof(bool), typeof(MessageTextBox), new PropertyMetadata(true));\n\n        public Visibility SendButtonVisibility\n        {\n            get => (Visibility)GetValue(SendButtonVisibilityProperty);\n            set => SetValue(SendButtonVisibilityProperty, value);\n        }\n        public static readonly DependencyProperty SendButtonVisibilityProperty =\n            DependencyProperty.Register(\"SendButtonVisibility\", typeof(Visibility), typeof(MessageTextBox), new PropertyMetadata(Visibility.Visible));\n\n        public bool SubmitButtonEnabled\n        {\n            get => (bool)GetValue(SubmitButtonEnabledProperty);\n            set => SetValue(SubmitButtonEnabledProperty, value);\n        }\n\n        public static readonly DependencyProperty SubmitButtonEnabledProperty =\n            DependencyProperty.Register(\"SubmitButtonEnabled\", typeof(bool), typeof(MessageTextBox), new PropertyMetadata(true));\n\n        public Visibility SubmitButtonVisibility\n        {\n            get => (Visibility)GetValue(SubmitButtonVisibilityProperty);\n            set => SetValue(SubmitButtonVisibilityProperty, value);\n        }\n        public static readonly DependencyProperty SubmitButtonVisibilityProperty =\n            DependencyProperty.Register(\"SubmitButtonVisibility\", typeof(Visibility), typeof(MessageTextBox), new PropertyMetadata(Visibility.Collapsed));\n\n        public bool CancelButtonEnabled\n        {\n            get => (bool)GetValue(CancelButtonEnabledProperty);\n            set => SetValue(CancelButtonEnabledProperty, value);\n        }\n\n        public static readonly DependencyProperty CancelButtonEnabledProperty =\n            DependencyProperty.Register(\"CancelButtonEnabled\", typeof(bool), typeof(MessageTextBox), new PropertyMetadata(true));\n\n        public Visibility CancelButtonVisibility\n        {\n            get => (Visibility)GetValue(CancelButtonVisibilityProperty);\n            set => SetValue(CancelButtonVisibilityProperty, value);\n        }\n        public static readonly DependencyProperty CancelButtonVisibilityProperty =\n            DependencyProperty.Register(\"CancelButtonVisibility\", typeof(Visibility), typeof(MessageTextBox), new PropertyMetadata(Visibility.Collapsed));\n\n        private bool _hasLoaded = false;\n\n        #endregion\n\n        public event EventHandler<string> SendInvoked;\n        public event EventHandler<string> SubmitInvoked;\n        public event EventHandler CancelInvoked;\n        public event EventHandler EditInvoked;\n        public event EventHandler ShouldSendTyping;\n\n        public event TextControlPasteEventHandler Paste;\n\n        public MessageTextBox()\n        {\n            this.DefaultStyleKey = typeof(MessageTextBox);\n            this.Loaded += OnLoaded;\n        }\n\n        public void AppendText(string text, bool focus = true)\n        {\n            _shouldFixSelection = true;\n            Text = AppendText(Text, text);\n\n            if (focus)\n            {\n                Focus(FocusState.Programmatic);\n            }\n        }\n\n        public void AppendObject(object item, bool focus = true)\n        {\n            _shouldFixSelection = true;\n            Text = AppendObject(Text, item);\n\n            if (focus)\n            {\n                Focus(FocusState.Programmatic);\n            }\n        }\n\n        public new void Focus(FocusState state = FocusState.Keyboard)\n        {\n            if (_textBox != null)\n            {\n                _textBox.Focus(state);\n                _textBox.SelectionStart = Text.Length;\n            }\n        }\n\n        public void Clear()\n        {\n            if (_suggestBox != null)\n            {\n                _suggestBox.Text = \"\";\n                _suggestBox.ItemsSource = null;\n            }\n\n            Text = \"\";\n        }\n\n        protected override void OnApplyTemplate()\n        {\n            _coreWindow = Window.Current.CoreWindow;\n        }\n\n        //\n        // the fact i have to do this is fucking sickening microsoft\n        //\n        private void OnLoaded(object sender, RoutedEventArgs e)\n        {\n            if (_hasLoaded)\n                return;\n\n            _hasLoaded = true;\n\n            _emoji = null;\n\n            _suggestBox = this.FindChild<AutoSuggestBox>(\"PART_TextBox\");\n            _suggestBox.TextChanged += OnSuggestionBoxTextChanged;\n            _suggestBox.SuggestionChosen += OnSuggestBoxSuggestionChosen;\n            _suggestBox.QuerySubmitted += OnSuggestBoxQuerySubmitted;\n            _suggestBox.ItemsSource = null;\n            _suggestBox.Text = Text ?? \"\"; // ffs\n\n            _textBox = _suggestBox.FindChild<TextBox>();\n            _textBox.Paste += OnTextBoxPaste;\n            _textBox.KeyDown += OnTextBoxKeyDown;\n            _textBox.TextChanged += OnTextChanged;\n\n            _sendButton = this.FindChild<Button>(\"PART_SendButton\");\n            _sendButton.Click += OnSendButtonClick;\n\n            _submitButton = this.FindChild<Button>(\"PART_SubmitButton\");\n            _submitButton.Click += OnSubmitButtonClick;\n\n            _cancelButton = this.FindChild<Button>(\"PART_CancelButton\");\n            _cancelButton.Click += OnCancelButtonClick;\n\n            _emoteButton = this.FindChild<ToggleButton>(\"PART_EmoteButton\");\n            _emoteButton.Checked += OnShowEmotePicker;\n        }\n\n        private void OnTextChanged(object sender, TextChangedEventArgs e)\n        {\n            if (_shouldFixSelection)\n            {\n                _textBox.SelectionStart = _textBox.Text.Length;\n                _shouldFixSelection = false;\n            }\n        }\n\n        private void OnSendButtonClick(object sender, RoutedEventArgs e)\n        {\n            SendInvoked?.Invoke(this, _suggestBox.Text);\n            Focus();\n        }\n\n        private void OnSubmitButtonClick(object sender, RoutedEventArgs e)\n        {\n            SubmitInvoked?.Invoke(this, _suggestBox.Text);\n        }\n\n        private void OnCancelButtonClick(object sender, RoutedEventArgs e)\n        {\n            CancelInvoked?.Invoke(this, null);\n        }\n\n        private void OnTextBoxPaste(object sender, TextControlPasteEventArgs e)\n        {\n            Paste?.Invoke(sender, e);\n        }\n\n        private static void OnTextChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            if ((d as MessageTextBox)._suggestBox is AutoSuggestBox box)\n                box.Text = e.NewValue as string;\n        }\n\n        private void OnShowEmotePicker(object sender, RoutedEventArgs e)\n        {\n            if (_emoteFlyout == null || _emotePicker == null)\n            {\n                _emoteFlyout = FlyoutBase.GetAttachedFlyout(_emoteButton) as Flyout;\n                _emoteFlyout.Closed += OnEmoteFlyoutClosed;\n\n                _emotePicker = _emoteFlyout.Content as EmotePicker;\n                _emotePicker.EmojiPicked += OnEmotePicked;\n            }\n\n            FlyoutBase.ShowAttachedFlyout(_emoteButton);\n        }\n\n        private void OnEmoteFlyoutClosed(object sender, object e)\n        {\n            _emoteButton.IsChecked = false;\n            Focus();\n        }\n\n        private void OnEmotePicked(object sender, EmojiViewModel e)\n        {\n            if (e.IsValid)\n            {\n                AppendText(e.ToString());\n            }\n        }\n\n        private void OnTextBoxKeyDown(object sender, KeyRoutedEventArgs e)\n        {\n            if (e.Key == VirtualKey.Up && string.IsNullOrWhiteSpace(_suggestBox.Text))\n            {\n                EditInvoked?.Invoke(this, null);\n            }\n        }\n\n        private void OnSuggestionBoxTextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs e)\n        {\n            if (e.Reason != AutoSuggestionBoxTextChangeReason.UserInput)\n                return;\n\n            Text = _suggestBox.Text; // fuck you\n\n            if (!string.IsNullOrWhiteSpace(_suggestBox.Text))\n            {\n                ShouldSendTyping?.Invoke(this, null);\n            }\n\n            UpdateAutoSuggestBoxSource(sender);\n        }\n\n        public void OnSuggestBoxSuggestionChosen(AutoSuggestBox sender, AutoSuggestBoxSuggestionChosenEventArgs args)\n        {\n            //sender.Text = Text;\n        }\n\n        private void OnSuggestBoxQuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)\n        {\n            // Text = _suggestBox.Text; // fuck you 2\n\n            if (args.ChosenSuggestion != null)\n            {\n                if (_index != -1 && _length != -1)\n                {\n                    Text = Text.Remove(_index, _length);\n\n                    _index = -1;\n                    _length = -1;\n                }\n\n                AppendObject(args.ChosenSuggestion);\n                return;\n            }\n\n            var shift = _coreWindow.GetKeyState(VirtualKey.Shift);\n            if (shift.HasFlag(CoreVirtualKeyStates.Down))\n            {\n                var start = _textBox.SelectionStart.Clamp(0, Text.Length);\n                _shouldFixSelection = true;\n                Text = Text.Insert(start, \"\\r\\n\");\n            }\n            else\n            {\n                Text = args.QueryText;\n                SendInvoked?.Invoke(this, args.QueryText);\n            }\n        }\n\n        private void UpdateAutoSuggestBoxSource(AutoSuggestBox sender)\n        {\n            // don't ya just love off by one?\n            var position = _textBox.SelectionStart.Clamp(0, Text.Length - 1);\n            var i = position;\n            for (; i >= 0; i--)\n            {\n                if (char.IsWhiteSpace(Text[i]))\n                {\n                    break; // return the last \"word\"\n                }\n            }\n\n            // i understand this code is probably overly verbose but i want it to like, actualy work\n            // and be somewhat understandable if it ever turns out to not work\n\n            _index = i + 1;\n            _length = position - i;\n            if (_length == 0)\n            {\n                sender.ItemsSource = null;\n                return;\n            }\n\n            var text = Text.Substring(_index, _length)\n                           .Trim(':', '@', '#')\n                           .ToLowerInvariant();\n\n            var cult = CultureInfo.InvariantCulture.CompareInfo;\n\n            // LINQ Fuckery: The Movie: The Video Game: The Novelisation\n            // TODO: Commands?\n\n            if (Text[_index] == '@')\n            {\n                UpdateSourceForUserRoleMentions(sender, text, cult);\n                return;\n            }\n\n            if (Text[_index] == '#' && Channel.Guild != null)\n            {\n                UpdateSourceForChannelMentions(sender, text, cult);\n                return;\n            }\n\n            if (Text[_index] == ':' && _length > 2)\n            {\n                UpdateSourceForEmojiMentions(sender, text, cult);\n                return;\n            }\n\n            sender.ItemsSource = null;\n            _index = -1;\n            _length = -1;\n        }\n\n        private void UpdateSourceForUserRoleMentions(AutoSuggestBox sender, string text, CompareInfo cult)\n        {\n            var users = (Channel is DiscordDmChannel dm) ? dm.Recipients : Channel.Users.Cast<DiscordUser>();\n            var roles = Channel.Guild?.Roles.Values.Where(r => r.IsMentionable) ?? Enumerable.Empty<DiscordRole>();\n\n            var filteredUsers = users.Where(u => u != null && !string.IsNullOrWhiteSpace(u.Username) && !string.IsNullOrWhiteSpace(u.Discriminator))\n                                     .Select(u => (user: u, index: cult.IndexOf($\"{u.Username}#{u.Discriminator}\", text, CompareOptions.IgnoreCase)))\n                                     .Where(x => x.index != -1)\n                                     .OrderBy(x => x.user.Username)\n                                     .ThenByDescending(x => x.index)\n                                     .Select(x => x.user)\n                                     .Cast<object>();\n\n            var filteredRoles = roles.Where(r => r != null && !string.IsNullOrWhiteSpace(r.Name))\n                                     .Where(r => cult.IndexOf(r.Name, text, CompareOptions.IgnoreCase) != -1)\n                                     .Cast<object>();\n\n            sender.ItemsSource = filteredUsers.Concat(filteredRoles);\n        }\n\n        private void UpdateSourceForChannelMentions(AutoSuggestBox sender, string text, CompareInfo cult)\n        {\n            var channels = Channel.Guild.Channels.Values;\n            sender.ItemsSource = channels.Where(c => c != null && c.Type != ChannelType.Voice && c.Type != ChannelType.Category && !string.IsNullOrWhiteSpace(c.Name))\n                                         .Where(c => c.CurrentPermissions.HasPermission(Permissions.AccessChannels))\n                                         .Select(c => (channel: c, index: cult.IndexOf(c.Name, text, CompareOptions.IgnoreCase)))\n                                         .Where(x => x.index != -1)\n                                         .OrderByDescending(x => x.index)\n                                         .Select(x => x.channel);\n        }\n\n        private void UpdateSourceForEmojiMentions(AutoSuggestBox sender, string text, CompareInfo cult)\n        {\n            //if (_emoji == null)\n            //{\n            //    _emoji = Tools.GetEmoji(Channel);\n            //}\n\n            //sender.ItemsSource = _emoji.Select(e => (emoji: e, index: cult.IndexOf(e.SearchName, text, CompareOptions.IgnoreCase)))\n            //                           .Where(x => x.index != -1)\n            //                           .OrderBy(x => x.index)\n            //                           .Select(x => x.emoji);\n        }\n\n        private string AppendText(string target, string text)\n        {\n            if (target.Length > 0 && !char.IsWhiteSpace(target[target.Length - 1]))\n            {\n                target += \" \";\n            }\n\n            target += $\"{text} \";\n\n            return target;\n        }\n\n        private string AppendObject(string target, object item)\n        {\n            switch (item)\n            {\n                case DiscordUser user:\n                    //return AppendText(target, $\"@{user.Username}#{user.Discriminator}\");\n                    return AppendText(target, user.Mention);\n                case DiscordChannel channel:\n                    //return AppendText(target, $\"#{channel.Name}\");\n                    return AppendText(target, channel.Mention);\n                case DiscordRole role:\n                    //return AppendText(target, $\"@{role.Name}\");\n                    return AppendText(target, role.Mention);\n                case DiscordEmoji emoji:\n                    //return AppendText(target, emoji.RequiresColons ? emoji.Name : $\":{emoji.Name}:\");\n                    return AppendText(target, emoji.ToString());\n                default:\n                    return AppendText(target, item.ToString());\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/AttachmentControl.cs",
    "content": "﻿using Unicord.Universal.Models.Messages;\nusing Unicord.Universal.Pages.Overlay;\nusing Unicord.Universal.Services;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Input;\n\nnamespace Unicord.Universal.Controls.Messages\n{\n    public sealed class AttachmentControl : Control\n    {\n        public AttachmentViewModel ViewModel\n        {\n            get { return (AttachmentViewModel)GetValue(ViewModelProperty); }\n            set { SetValue(ViewModelProperty, value); }\n        }\n\n        public static readonly DependencyProperty ViewModelProperty =\n            DependencyProperty.Register(\"ViewModel\", typeof(AttachmentViewModel), typeof(AttachmentControl), new PropertyMetadata(null));\n\n        public AttachmentControl()\n        {\n            this.DefaultStyleKey = typeof(AttachmentControl);\n            this.Tapped += OnTapped;\n        }\n\n        private async void OnTapped(object sender, TappedRoutedEventArgs e)\n        {\n            if (ViewModel == null || ViewModel.Type != AttachmentType.Image)\n                return;\n\n            await OverlayService.GetForCurrentView()\n                                .ShowOverlayAsync<AttachmentOverlayPage>(ViewModel);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/AttachmentMediaControl.cs",
    "content": "﻿using System;\r\nusing System.ComponentModel;\r\nusing Unicord.Universal.Models.Messages;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\n// The Templated Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234235\r\n\r\nnamespace Unicord.Universal.Controls.Messages\r\n{\r\n    [Obsolete]\r\n    public sealed class AttachmentMediaControl : Control, INotifyPropertyChanged\r\n    {\r\n        private MediaPlayerElement _mediaPlayerElement;\r\n        private Border _mediaPlayerBorder;\r\n\r\n        public AttachmentViewModel ViewModel\r\n        {\r\n            get { return (AttachmentViewModel)GetValue(ViewModelProperty); }\r\n            set { SetValue(ViewModelProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty ViewModelProperty =\r\n            DependencyProperty.Register(\"ViewModel\", typeof(AttachmentViewModel), typeof(AttachmentMediaControl), new PropertyMetadata(null, OnAttachmentChange));\r\n\r\n        public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n        private static void OnAttachmentChange(DependencyObject d, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            ((AttachmentMediaControl)d).OnAttachmentChanged(e);\r\n        }\r\n\r\n        public AttachmentMediaControl()\r\n        {\r\n            this.DefaultStyleKey = typeof(AttachmentMediaControl);\r\n        }\r\n\r\n        protected override void OnApplyTemplate()\r\n        {\r\n            base.OnApplyTemplate();\r\n\r\n            if (GetTemplateChild(\"MediaPlayer\") is not MediaPlayerElement mediaPlayerElement)\r\n                return;\r\n\r\n            _mediaPlayerElement = mediaPlayerElement;\r\n\r\n            if (GetTemplateChild(\"MediaPlayerBorder\") is not Border mediaPlayerBorder)\r\n                return;\r\n\r\n            _mediaPlayerBorder = mediaPlayerBorder;\r\n\r\n            if (mediaPlayerElement.TransportControls is not CustomMediaTransportControls transportControls)\r\n                return;\r\n        }\r\n\r\n        private void OnAttachmentChanged(DependencyPropertyChangedEventArgs e)\r\n        {\r\n            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ViewModel)));\r\n\r\n            if (e.NewValue != null && e.NewValue is AttachmentViewModel vm)\r\n            {\r\n                if (!ApplyTemplate()) return;\r\n\r\n                //if (vm.Type == AttachmentType.Audio)\r\n                //{\r\n                //    GoToElementStateCore(\"Audio\", false);\r\n                //}\r\n                //else if(vm.Type == AttachmentType.Video)\r\n                //{\r\n                //    GoToElementStateCore(\"Video\", false);\r\n                //}\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/Embeds/EmbedControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"Unicord.Universal.Controls.Messages.EmbedControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Messages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:wam=\"using:Unicord.Universal.Controls\" \n    xmlns:messages=\"using:Unicord.Universal.Models.Messages\"\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    mc:Ignorable=\"d\"\n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"400\">\n\n    <ContentControl Content=\"{x:Bind ViewModel}\" ContentTemplate=\"{StaticResource RichEmbedTemplate}\"/>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/Embeds/EmbedControl.xaml.cs",
    "content": "﻿using Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\n// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236\n\nnamespace Unicord.Universal.Controls.Messages\n{\n\n    public sealed partial class EmbedControl : UserControl\n    {\n        public EmbedViewModel ViewModel\n        {\n            get { return (EmbedViewModel)GetValue(ViewModelProperty); }\n            set { SetValue(ViewModelProperty, value); }\n        }\n\n        public static readonly DependencyProperty ViewModelProperty =\n            DependencyProperty.Register(\"ViewModel\", typeof(EmbedViewModel), typeof(EmbedControl), new PropertyMetadata(null));\n\n        public EmbedControl()\n        {\n            this.InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/Embeds/EmbedFieldsView.cs",
    "content": "﻿using Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\n// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236\n\nnamespace Unicord.Universal.Controls.Messages\n{\n    public sealed class EmbedFieldsView : ItemsControl\n    {\n        protected override void PrepareContainerForItemOverride(DependencyObject element, object item)\n        {\n            base.PrepareContainerForItemOverride(element, item);\n\n            if (item is EmbedFieldViewModel field)\n                Grid.SetColumnSpan((FrameworkElement)element, field.ColumnSpan);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/Embeds/ImageEmbedControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"Unicord.Universal.Controls.Messages.ImageEmbedControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Messages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:controls=\"using:Unicord.Universal.Controls\"\n    xmlns:w1809=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)\"\n    mc:Ignorable=\"d\"\n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"400\">\n\n    <Border BorderBrush=\"{ThemeResource ImageEmbed_BorderBrush}\"\n            Background=\"{ThemeResource ImageEmbed_Background}\"\n            BorderThickness=\"{ThemeResource ImageEmbed_BorderThickness}\"\n            CornerRadius=\"{ThemeResource ImageEmbed_CornerRadius}\">\n        <controls:ScaledContentControl TargetWidth=\"{x:Bind ViewModel.NaturalWidth}\" TargetHeight=\"{x:Bind ViewModel.NaturalHeight}\">\n            <controls:ImageElement x:Name=\"Image\"\n                                   Tapped=\"Image_Tapped\"\n                                   ImageWidth=\"{x:Bind ViewModel.NaturalWidth}\" \n                                   ImageHeight=\"{x:Bind ViewModel.NaturalHeight}\" \n                                   ImageUri=\"{x:Bind ViewModel.Source}\" />\n        </controls:ScaledContentControl>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/Embeds/ImageEmbedControl.xaml.cs",
    "content": "﻿using Unicord.Universal.Models.Messages;\nusing Unicord.Universal.Pages.Overlay;\nusing Unicord.Universal.Services;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Input;\n\n// The User Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234236\n\nnamespace Unicord.Universal.Controls.Messages\n{\n    public sealed partial class ImageEmbedControl : UserControl\n    {\n        public EmbedImageViewModel ViewModel\n        {\n            get { return (EmbedImageViewModel)GetValue(ViewModelProperty); }\n            set { SetValue(ViewModelProperty, value); }\n        }\n\n        public static readonly DependencyProperty ViewModelProperty =\n            DependencyProperty.Register(\"ViewModel\", typeof(EmbedImageViewModel), typeof(ImageEmbedControl), new PropertyMetadata(null));\n\n        public ImageEmbedControl()\n        {\n            this.InitializeComponent();\n        }\n\n        private async void Image_Tapped(object sender, TappedRoutedEventArgs e)\n        {\n            if (ViewModel != null)\n            {\n                await OverlayService.GetForCurrentView()\n                                    .ShowOverlayAsync<AttachmentOverlayPage>(ViewModel);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/Embeds/VideoEmbedControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"Unicord.Universal.Controls.Messages.VideoEmbedControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Messages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\" \n    xmlns:ui=\"using:Microsoft.Toolkit.Uwp.UI\"\n    xmlns:w1809=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)\"\n    mc:Ignorable=\"d\"\n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"400\">\n\n    <UserControl.Resources>\n        <ui:AttachedDropShadow x:Key=\"PlayButtonShadow\" CastTo=\"{x:Bind posterImage}\" BlurRadius=\"16\" Opacity=\"1\" Color=\"Black\"/>\n    </UserControl.Resources>\n    <Border BorderBrush=\"{ThemeResource ImageEmbed_BorderBrush}\"\n            Background=\"{ThemeResource ImageEmbed_Background}\"\n            BorderThickness=\"{ThemeResource ImageEmbed_BorderThickness}\"\n            CornerRadius=\"{ThemeResource ImageEmbed_CornerRadius}\">\n        <Grid x:Name=\"content\">\n            <Grid x:Name=\"posterContainer\" Tapped=\"Canvas_Tapped\">\n                <controls:ImageEx x:Name=\"posterImage\" \n                              IsCacheEnabled=\"True\" \n                              Source=\"{x:Bind ViewModel.Thumbnail.Source}\" \n                              VerticalContentAlignment=\"Center\"\n                              HorizontalContentAlignment=\"Center\"\n                              Stretch=\"UniformToFill\"/>\n                <TextBlock ui:Effects.Shadow=\"{StaticResource PlayButtonShadow}\" \n                       FontFamily=\"{StaticResource SymbolThemeFontFamily}\" \n                       Foreground=\"White\" \n                       FontSize=\"64\"\n                       HorizontalAlignment=\"Center\"\n                       VerticalAlignment=\"Center\">&#xE768;</TextBlock>\n            </Grid>\n        </Grid>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/Embeds/VideoEmbedControl.xaml.cs",
    "content": "﻿using System;\nusing System.Web;\nusing KWebView2;\nusing Unicord.Universal.Extensions;\nusing Unicord.Universal.Models.Messages;\nusing Windows.Foundation;\nusing Windows.Media.Core;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Input;\n\nnamespace Unicord.Universal.Controls.Messages\n{\n    public sealed partial class VideoEmbedControl : UserControl\n    {\n        public EmbedVideoViewModel ViewModel\n        {\n            get { return (EmbedVideoViewModel)GetValue(ViewModelProperty); }\n            set { SetValue(ViewModelProperty, value); }\n        }\n\n        public static readonly DependencyProperty ViewModelProperty =\n            DependencyProperty.Register(\"ViewModel\", typeof(EmbedVideoViewModel), typeof(VideoEmbedControl), new PropertyMetadata(null));\n\n        public VideoEmbedControl()\n        {\n            this.InitializeComponent();\n            this.Unloaded += OnUnloaded;\n        }\n\n        private void OnUnloaded(object sender, RoutedEventArgs e)\n        {\n            var mediaPlayerElement = this.FindChild<MediaPlayerElement>();\n            if (mediaPlayerElement != null)\n            {\n                var mediaPlayer = mediaPlayerElement.MediaPlayer;\n                var source = mediaPlayerElement.Source;\n\n                if (mediaPlayer.PlaybackSession.CanPause)\n                {\n                    mediaPlayer.Pause();\n                }\n\n                mediaPlayerElement.Source = null;\n                mediaPlayerElement.SetMediaPlayer(null);\n\n                if (source is MediaSource mediaSource)\n                {\n                    mediaSource.Dispose();\n                }\n                mediaPlayer.Dispose();\n            }\n\n            var webView = this.FindChild<WebView2>();\n            if (webView != null && webView.CoreWebView2 != null) \n            {\n                webView.CoreWebView2.Stop();\n                webView.CoreWebView2.IsMuted = true;\n                _ = webView.CoreWebView2.TrySuspendAsync();\n            }\n        }\n\n        // TODO: handle situations where we should be using MediaPlayerElement (including giphy)\n        private void Canvas_Tapped(object sender, TappedRoutedEventArgs e)\n        {\n            var uri = ViewModel.Url;\n            var provider = ViewModel.Provider;\n\n            if (ViewModel.Type == \"gifv\" || ViewModel.Url.Host == \"cdn.discordapp.com\")\n            {\n                if (provider == \"giphy\")\n                {\n                    uri = new UriBuilder(uri) { Host = \"i.giphy.com\" }.Uri;\n                }\n\n                var mediaPlayerElement = new MediaPlayerElement()\n                {\n                    TransportControls = new CustomMediaTransportControls(),\n                    AreTransportControlsEnabled = ViewModel.Type != \"gifv\",\n                    Source = MediaSource.CreateFromUri(uri),\n                    AutoPlay = true,\n                };\n\n                mediaPlayerElement.MediaPlayer.IsMuted = true;\n                content.Children.Add(mediaPlayerElement);\n            }\n            else\n            {\n                if (provider == \"youtube\")\n                {\n                    var embedBuilder = new UriBuilder(uri);\n                    var query = HttpUtility.ParseQueryString(embedBuilder.Query ?? \"\");\n                    query.Add(\"autoplay\", \"1\");\n                    embedBuilder.Query = query.ToString();\n\n                    uri = embedBuilder.Uri;\n                }\n\n                var browser = new UniversalWebView()\n                {\n                    Source = uri,\n                    VerticalAlignment = VerticalAlignment.Stretch,\n                    HorizontalAlignment = HorizontalAlignment.Stretch\n                };\n\n                content.Children.Add(browser);\n            }\n\n            posterContainer.Opacity = 0;\n        }\n\n        protected override Size MeasureOverride(Size constraint)\n        {\n            double width = ViewModel.NaturalWidth;\n            double height = ViewModel.NaturalHeight;\n\n            WamWooWam.Core.Drawing.ScaleProportions(ref width, ref height, 480, 480);\n            WamWooWam.Core.Drawing.ScaleProportions(ref width, ref height, double.IsInfinity(constraint.Width) ? 480 : (int)constraint.Width, double.IsInfinity(constraint.Height) ? 480 : (int)constraint.Height);\n\n            return new Size(width, height);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/MessageControl.cs",
    "content": "﻿using System;\nusing Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Media.Imaging;\nusing Windows.UI.Xaml.Shapes;\n\nnamespace Unicord.Universal.Controls.Messages\n{\n    public class MessageControl : Control\n    {\n        private ImageBrush _imageBrush;\n\n        #region Dependency Properties\n\n        public MessageViewModel MessageViewModel\n        {\n            get { return (MessageViewModel)GetValue(MessageViewModelProperty); }\n            set { SetValue(MessageViewModelProperty, value); }\n        }\n\n        public static readonly DependencyProperty MessageViewModelProperty =\n            DependencyProperty.Register(\"MessageViewModel\", typeof(MessageViewModel), typeof(MessageControl), new PropertyMetadata(null, OnPropertyChanged));\n\n        private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            if (d is MessageControl control && e.Property == MessageViewModelProperty)\n            {\n                control.OnMessageChanged(e);\n            }\n        }\n\n        #endregion\n\n        public MessageControl()\n        {\n            this.DefaultStyleKey = typeof(MessageControl);\n        }\n\n        protected override void OnApplyTemplate()\n        {\n            //this.UpdateCollapsedState();\n        }\n\n        protected virtual void OnMessageChanged(DependencyPropertyChangedEventArgs e)\n        {\n            this.ApplyTemplate();\n\n            if (e.NewValue is MessageViewModel message)\n            {\n                this.UpdateProfileImage(message);\n            }\n            else\n            {\n                this.ClearProfileImage();\n            }\n        }\n\n        private void ClearProfileImage()\n        {\n            if (_imageBrush == null)\n            {\n                var container = (Ellipse)this.GetTemplateChild(\"ImageContainer\");\n                if (container == null || container.Fill == null)\n                    return;\n\n                _imageBrush = (ImageBrush)container.Fill;\n            }\n\n            _imageBrush.ImageSource = null;\n        }\n\n        private void UpdateProfileImage(MessageViewModel message)\n        {\n            this.ClearProfileImage();\n\n            if (_imageBrush == null || message.Author == null || message.Author.AvatarUrl == null)\n                return;\n\n            _imageBrush.ImageSource = new BitmapImage\n            {\n                UriSource = new Uri(message.Author.AvatarUrl),\n                DecodePixelHeight = 64,\n                DecodePixelWidth = 64,\n                DecodePixelType = DecodePixelType.Physical\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/MessageEditTools.cs",
    "content": "﻿using Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\n// The Templated Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234235\n\nnamespace Unicord.Universal.Controls.Messages\n{\n    public sealed class MessageEditTools : Control\n    {\n        public MessageEditViewModel ViewModel\n        {\n            get { return (MessageEditViewModel)GetValue(ViewModelProperty); }\n            set { SetValue(ViewModelProperty, value); }\n        }\n\n        public static readonly DependencyProperty ViewModelProperty =\n            DependencyProperty.Register(\"ViewModel\", typeof(MessageEditViewModel), typeof(MessageEditTools), new PropertyMetadata(null));\n\n        public MessageEditTools()\n        {\n            this.DefaultStyleKey = typeof(MessageEditTools);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/StickerControl.cs",
    "content": "﻿using System;\r\nusing DSharpPlus.Entities;\r\nusing Microsoft.Toolkit.Uwp.UI.Lottie;\r\nusing Microsoft.UI.Xaml.Controls;\r\nusing Unicord.Universal.Models.Messages;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\n// The Templated Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234235\r\n\r\nnamespace Unicord.Universal.Controls.Messages\r\n{\r\n    public sealed class StickerControl : Control\r\n    {\r\n        private bool _templateApplied = false;\r\n\r\n        public StickerViewModel Sticker\r\n        {\r\n            get => (StickerViewModel)GetValue(StickerProperty);\r\n            set => SetValue(StickerProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty StickerProperty =\r\n            DependencyProperty.Register(\"Sticker\", typeof(StickerViewModel), typeof(StickerControl), new PropertyMetadata(null, OnStickerChanged));\r\n\r\n        public StickerControl()\r\n        {\r\n            this.DefaultStyleKey = typeof(StickerControl);\r\n        }\r\n\r\n        protected override void OnApplyTemplate()\r\n        {\r\n            base.OnApplyTemplate();\r\n            _templateApplied = true;\r\n        }\r\n\r\n        private static void OnStickerChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            if (e.NewValue is StickerViewModel s && d is StickerControl c)\r\n            {\r\n                c.UpdateSticker(s);\r\n            }\r\n        }\r\n\r\n        private void UpdateSticker(StickerViewModel s)\r\n        {\r\n            if (!_templateApplied)\r\n                _templateApplied = this.ApplyTemplate();\r\n\r\n            var root = (Border)this.GetTemplateChild(\"Root\");\r\n            switch (s.Format)\r\n            {\r\n                case StickerFormat.PNG:\r\n                case StickerFormat.APNG:\r\n                    root.Child = new ImageElement() { ImageUri = new Uri(s.StickerUrl), ImageWidth = 150, ImageHeight = 150, IsSpoiler = false };\r\n                    break;\r\n                case StickerFormat.LOTTIE:\r\n                    {\r\n                        var player = new AnimatedVisualPlayer\r\n                        {\r\n                            AutoPlay = true,\r\n                            Width = 150,\r\n                            Height = 150\r\n                        };\r\n\r\n                        var source = new LottieVisualSource();\r\n                        source.UriSource = new Uri(s.StickerUrl);\r\n                        player.Source = source;\r\n                        root.Child = player;\r\n                    }\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Messages/SystemMessageControl.cs",
    "content": "﻿// The Templated Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234235\n\nnamespace Unicord.Universal.Controls.Messages\n{\n    public sealed class SystemMessageControl : MessageControl\n    {\n        public SystemMessageControl()\n        {\n            this.DefaultStyleKey = typeof(SystemMessageControl);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Presence/InlinePresenceControl.xaml",
    "content": "﻿<UserControl\r\n    x:Name=\"Self\"\r\n    x:Class=\"Unicord.Universal.Controls.Presence.InlinePresenceControl\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Controls.Presence\"\r\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \r\n    xmlns:emoji=\"using:Unicord.Universal.Controls.Emoji\"\r\n    mc:Ignorable=\"d\"\r\n    d:DesignHeight=\"300\"\r\n    d:DesignWidth=\"400\">\r\n\r\n    <Grid x:Name=\"Root\" x:Load=\"{x:Bind Presence.HasActivity, Mode=OneWay}\">\r\n        <Grid.ColumnDefinitions>\r\n            <ColumnDefinition Width=\"Auto\"/>\r\n            <ColumnDefinition Width=\"*\"/>\r\n        </Grid.ColumnDefinitions>\r\n\r\n        <emoji:EmojiControl x:Name=\"Emoji\"\r\n                            x:Load=\"{x:Bind Presence.Emoji.IsValid, Mode=OneWay}\" \r\n                            Emoji=\"{x:Bind Presence.Emoji, Mode=OneWay}\" \r\n                            Animate=\"False\" \r\n                            Size=\"14\" \r\n                            VerticalAlignment=\"Top\" \r\n                            Margin=\"0,2,4,0\" />\r\n        \r\n        <TextBlock Grid.Column=\"1\" FontSize=\"12\" TextWrapping=\"{x:Bind TextWrapping}\" MaxLines=\"2\">\r\n            <Run Text=\"{x:Bind Presence.CondensedTitle, Mode=OneWay}\" /> <Run Text=\"{x:Bind Presence.CondensedText, Mode=OneWay}\" FontWeight=\"SemiBold\" />\r\n        </TextBlock>\r\n    </Grid>\r\n</UserControl>\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Presence/InlinePresenceControl.xaml.cs",
    "content": "﻿using Unicord.Universal.Models.User;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Controls.Presence\r\n{\r\n    public sealed partial class InlinePresenceControl : UserControl\r\n    {\r\n        public PresenceViewModel Presence\r\n        {\r\n            get => (PresenceViewModel)GetValue(PresenceProperty);\r\n            set => SetValue(PresenceProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty PresenceProperty =\r\n            DependencyProperty.Register(\"Presence\", typeof(PresenceViewModel), typeof(InlinePresenceControl), new PropertyMetadata(null, OnPresenceUpdated));\r\n\r\n        private static void OnPresenceUpdated(DependencyObject d, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            if (d is not InlinePresenceControl control) return;\r\n            control.Bindings.Update();\r\n        }\r\n\r\n        public TextWrapping TextWrapping\r\n        {\r\n            get => (TextWrapping)GetValue(TextWrappingProperty);\r\n            set => SetValue(TextWrappingProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty TextWrappingProperty =\r\n            DependencyProperty.Register(\"TextWrapping\", typeof(TextWrapping), typeof(InlinePresenceControl), new PropertyMetadata(TextWrapping.NoWrap));\r\n\r\n        public InlinePresenceControl()\r\n        {\r\n            this.InitializeComponent();\r\n        }\r\n\r\n        public bool Not(bool b)\r\n            => !b;\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Presence/PresenceControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"Unicord.Universal.Controls.Presence.PresenceControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Presence\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"400\">\n\n    <Grid>\n\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Presence/PresenceControl.xaml.cs",
    "content": "﻿using Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Controls.Presence\r\n{\r\n    public sealed partial class PresenceControl : UserControl\r\n    {\r\n        public PresenceControl()\r\n        {\r\n            this.InitializeComponent();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Presence/StatusIndicator.cs",
    "content": "﻿using Unicord.Universal.Models.User;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Controls.Presence\r\n{\r\n    public sealed class StatusIndicator : Control\r\n    {\r\n        public PresenceViewModel Presence\r\n        {\r\n            get { return (PresenceViewModel)GetValue(PresenceProperty); }\r\n            set { SetValue(PresenceProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty PresenceProperty =\r\n            DependencyProperty.Register(\"Presence\", typeof(PresenceViewModel), typeof(StatusIndicator), new PropertyMetadata(null));\r\n\r\n        public StatusIndicator()\r\n        {\r\n            this.DefaultStyleKey = typeof(StatusIndicator);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/PreviewPaneAuroraControl.xaml",
    "content": "﻿<UserControl x:Class=\"System.Windows.Shell.Aurora.PreviewPaneAuroraControl\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n             xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \n             xmlns:local=\"clr-namespace:System.Windows.Shell.Aurora\"\n             mc:Ignorable=\"d\"  Background=\"White\"\n             d:DesignHeight=\"160\" d:DesignWidth=\"800\">\n    <!--\n        Windows PreviewPane Aurora for Beta2 of the WinFX Runtime Components\n        Converted from Zoronax's extracted XAML by Blackice and Obliteron\n    -->\n    <Viewbox HorizontalAlignment=\"Right\"\n             VerticalAlignment=\"Bottom\"\n             Stretch=\"UniformToFill\">\n        <Canvas Width=\"1080\" Height=\"160\" Name=\"BackgroundLayer\" Background=\"#FF5A6B7D\">\n            <Canvas.Clip>\n                <RectangleGeometry Rect=\"0 0 1080 160\"/>\n            </Canvas.Clip>\n            <Canvas Name=\"Lights3_Still\">\n\n                <Path Data=\"M 0 0 L 149.6 0 L 149.6 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119\" X=\"-74.8\" />\n                            <RotateTransform CenterX=\"0\" CenterY=\"0\" Angle=\"8.6\" />\n                            <TranslateTransform Y=\"119.4\" X=\"74.8\" />\n                            <TranslateTransform Y=\"-33\" X=\"512\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0.03\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.46\" Color=\"#BB8599B4\" />\n                                    <GradientStop Offset=\"0.59\" Color=\"#938599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 48.77 0 L 48.77 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-24\" />\n                            <TranslateTransform Y=\"119.4\" X=\"24\" />\n                            <TranslateTransform Y=\"-39.9\" X=\"646\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.12\" Color=\"#118599B4\" />\n                                    <GradientStop Offset=\"0.41\" Color=\"#DD8599B4\" />\n                                    <GradientStop Offset=\"0.61\" Color=\"#998599B4\" />\n                                    <GradientStop Offset=\"0.86\" Color=\"#128599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 32.7 0 L 32.7 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-40.3\" X=\"710.5\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.1\" Color=\"#338599B4\" />\n                                    <GradientStop Offset=\"0.5\" Color=\"#668599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n            </Canvas>\n\n\n            <Canvas Name=\"Lights2_Still\">\n                <Canvas.RenderTransform>\n                    <TransformGroup>\n                        <TranslateTransform x:Name=\"BL1\" />\n                    </TransformGroup>\n                </Canvas.RenderTransform>\n\n                <Canvas.Triggers>\n                    <EventTrigger RoutedEvent=\"Canvas.Loaded\">\n                        <EventTrigger.Actions>\n                            <BeginStoryboard>\n                                <Storyboard>\n                                    <DoubleAnimation Storyboard.TargetName=\"BL1\" Storyboard.TargetProperty=\"X\" From=\"0\" To=\"-500\" AutoReverse=\"True\" RepeatBehavior=\"Forever\" Duration=\"0:1:0\" />\n                                </Storyboard>\n                            </BeginStoryboard>\n                        </EventTrigger.Actions>\n                    </EventTrigger>\n                </Canvas.Triggers>\n\n                <Path Data=\"M 0 0 L 19.98 0 L 19.98 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-39.9\" X=\"723.8\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.53\" Color=\"#668599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 32.95 0 L 32.95 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-40.25\" X=\"789.87\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.5\" Color=\"#558599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 41.67 0 L 41.67 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-40.49\" X=\"805.86\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.5\" Color=\"#798599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 36.43 0 L 36.43 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-40.35\" X=\"855.86\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.35\" Color=\"#498599B4\" />\n                                    <GradientStop Offset=\"0.74\" Color=\"#3D8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 73.89 0 L 73.89 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-36.94\" />\n                            <RotateTransform Angle=\"8.43\" />\n                            <TranslateTransform Y=\"119.4\" X=\"36.94\" />\n                            <TranslateTransform Y=\"-38.06\" X=\"422.34\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.5\" Color=\"#4C8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 127.56 0 L 127.56 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-63.78\" />\n                            <RotateTransform Angle=\"-7.6\" />\n                            <TranslateTransform Y=\"119.4\" X=\"63.78\" />\n                            <TranslateTransform Y=\"-36.76\" X=\"599\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.12\" Color=\"#118599B4\" />\n                                    <GradientStop Offset=\"0.51\" Color=\"#5F8599B4\" />\n                                    <GradientStop Offset=\"0.67\" Color=\"#EE8599B4\" />\n                                    <GradientStop Offset=\"0.86\" Color=\"#128599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 40.94 0 L 40.94 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-20.47\" />\n                            <RotateTransform Angle=\"-3\" />\n                            <TranslateTransform Y=\"119.4\" X=\"20.47\" />\n                            <TranslateTransform Y=\"-40.31\" X=\"832\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.19\" Color=\"#118599B4\" />\n                                    <GradientStop Offset=\"0.36\" Color=\"#6A8599B4\" />\n                                    <GradientStop Offset=\"0.56\" Color=\"#5F8599B4\" />\n                                    <GradientStop Offset=\"0.86\" Color=\"#128599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n            </Canvas>\n\n            <Canvas Name=\"Lights2\">\n                <Path Data=\"M 0 0 L 19.98 0 L 19.98 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-39.9\" X=\"723.8\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.53\" Color=\"#508599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 32.95 0 L 32.95 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-40.25\" X=\"789.87\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.5\" Color=\"#418599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 41.67 0 L 41.67 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-40.49\" X=\"805.86\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.5\" Color=\"#798599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 36.43 0 L 36.43 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-40.35\" X=\"855.86\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.35\" Color=\"#498599B4\" />\n                                    <GradientStop Offset=\"0.74\" Color=\"#3D8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 73.89 0 L 73.89 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-36.94\" />\n                            <RotateTransform Angle=\"8.43\" />\n                            <TranslateTransform Y=\"119.4\" X=\"36.94\" />\n                            <TranslateTransform Y=\"-38.06\" X=\"422.34\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.5\" Color=\"#4C8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 127.56 0 L 127.56 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-63.78\" />\n                            <RotateTransform Angle=\"-7.6\" />\n                            <TranslateTransform Y=\"119.4\" X=\"63.78\" />\n                            <TranslateTransform Y=\"-36.76\" X=\"599\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.12\" Color=\"#118599B4\" />\n                                    <GradientStop Offset=\"0.51\" Color=\"#5F8599B4\" />\n                                    <GradientStop Offset=\"0.67\" Color=\"#5B8599B4\" />\n                                    <GradientStop Offset=\"0.86\" Color=\"#128599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 40.94 0 L 40.94 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-20.47\" />\n                            <RotateTransform Angle=\"-3\" />\n                            <TranslateTransform Y=\"119.4\" X=\"20.47\" />\n                            <TranslateTransform Y=\"-40.31\" X=\"832\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.19\" Color=\"#118599B4\" />\n                                    <GradientStop Offset=\"0.36\" Color=\"#6A8599B4\" />\n                                    <GradientStop Offset=\"0.56\" Color=\"#5F8599B4\" />\n                                    <GradientStop Offset=\"0.86\" Color=\"#128599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n            </Canvas>\n\n\n            <Canvas Name=\"Lights1_Still\">\n                <Canvas.RenderTransform>\n                    <TranslateTransform Y=\"-10\" X=\"48\" />\n                </Canvas.RenderTransform>\n\n\n                <Path Data=\"M 0 0 L 48.77 0 L 48.77 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-24.38\" />\n                            <RotateTransform Angle=\"-3\" />\n                            <TranslateTransform Y=\"119.4\" X=\"24.38\" />\n                            <TranslateTransform Y=\"-39.9\" X=\"678.48\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.4\" Color=\"#368599B4\" />\n                                    <GradientStop Offset=\"0.63\" Color=\"#1C8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 63.31 0 L 63.31 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-31.65\" />\n                            <RotateTransform Angle=\"-3\" />\n                            <TranslateTransform Y=\"119.4\" X=\"31.65\" />\n                            <TranslateTransform Y=\"-40.29\" X=\"716.47\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.12\" Color=\"#118599B4\" />\n                                    <GradientStop Offset=\"0.53\" Color=\"#418599B4\" />\n                                    <GradientStop Offset=\"0.86\" Color=\"#128599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 100.5 0 L 100.5 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-50.25\" />\n                            <RotateTransform Angle=\"-3\" />\n                            <TranslateTransform Y=\"119.4\" X=\"50.25\" />\n                            <TranslateTransform Y=\"-42.1\" X=\"809.73\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.5\" Color=\"#3A8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 85.34 0 L 85.34 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-42.67\" />\n                            <RotateTransform Angle=\"8.4\" />\n                            <TranslateTransform Y=\"119.4\" X=\"42.67\" />\n                            <TranslateTransform Y=\"-37.22\" X=\"428.28\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.12\" Color=\"#118599B4\" />\n                                    <GradientStop Offset=\"0.413\" Color=\"#4C8599B4\" />\n                                    <GradientStop Offset=\"0.58\" Color=\"#418599B4\" />\n                                    <GradientStop Offset=\"0.86\" Color=\"#128599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 85.34 0 L 85.34 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-42.67\" />\n                            <RotateTransform Angle=\"12.5\" />\n                            <TranslateTransform Y=\"119.4\" X=\"42.67\" />\n                            <TranslateTransform Y=\"-50.22\" X=\"317.28\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#188599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 85.34 0 L 85.34 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-42.67\" />\n                            <RotateTransform Angle=\"-2.6\" />\n                            <TranslateTransform Y=\"119.4\" X=\"42.67\" />\n                            <TranslateTransform Y=\"-37.22\" X=\"263.28\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#1C8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 118.43 0 L 118.43 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-59.2\" />\n                            <RotateTransform Angle=\"8.43\" />\n                            <TranslateTransform Y=\"119.4\" X=\"59\" />\n                            <TranslateTransform Y=\"-38\" X=\"184.45\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.52\" Color=\"#638599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 95.27 0 L 95.27 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.408859\" X=\"-47.635498\" />\n                            <ScaleTransform CenterX=\"0\" CenterY=\"0\" ScaleX=\"1.00002646\" ScaleY=\"0.999997139\" />\n                            <SkewTransform AngleX=\"0\" AngleY=\"0.00240422646\" />\n                            <RotateTransform Angle=\"-3.6980257\" />\n                            <TranslateTransform Y=\"119.408859\" X=\"47.635498\" />\n                            <TranslateTransform Y=\"-38.2194977\" X=\"134.034119\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.413580239\" Color=\"#548599B4\" />\n                                    <GradientStop Offset=\"0.598765433\" Color=\"#278599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n            </Canvas>\n\n\n            <Canvas Name=\"Lights1\">\n                <Canvas.RenderTransform>\n                    <TranslateTransform Y=\"-10\" X=\"48\" x:Name=\"BL2\" />\n                </Canvas.RenderTransform>\n\n                <Canvas.Triggers>\n                    <EventTrigger RoutedEvent=\"Canvas.Loaded\">\n                        <EventTrigger.Actions>\n                            <BeginStoryboard>\n                                <Storyboard>\n                                    <DoubleAnimation Storyboard.TargetName=\"BL2\" Storyboard.TargetProperty=\"X\" From=\"48\" To=\"400\" AutoReverse=\"True\" RepeatBehavior=\"Forever\" Duration=\"0:0:20\" />\n                                </Storyboard>\n                            </BeginStoryboard>\n                        </EventTrigger.Actions>\n                    </EventTrigger>\n                </Canvas.Triggers>\n\n                <Path Data=\"M 0 0 L 48.77 0 L 48.77 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-24.38\" />\n                            <RotateTransform Angle=\"-3\" />\n                            <TranslateTransform Y=\"119.4\" X=\"24.38\" />\n                            <TranslateTransform Y=\"-39.9\" X=\"678.48\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.4\" Color=\"#368599B4\" />\n                                    <GradientStop Offset=\"0.63\" Color=\"#1C8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 63.31 0 L 63.31 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-31.65\" />\n                            <RotateTransform Angle=\"-3\" />\n                            <TranslateTransform Y=\"119.4\" X=\"31.65\" />\n                            <TranslateTransform Y=\"-40.29\" X=\"716.47\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.12\" Color=\"#118599B4\" />\n                                    <GradientStop Offset=\"0.53\" Color=\"#418599B4\" />\n                                    <GradientStop Offset=\"0.86\" Color=\"#128599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 100.5 0 L 100.5 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-50.25\" />\n                            <RotateTransform Angle=\"-3\" />\n                            <TranslateTransform Y=\"119.4\" X=\"50.25\" />\n                            <TranslateTransform Y=\"-42.1\" X=\"809.73\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.5\" Color=\"#3A8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 85.34 0 L 85.34 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-42.67\" />\n                            <RotateTransform Angle=\"8.4\" />\n                            <TranslateTransform Y=\"119.4\" X=\"42.67\" />\n                            <TranslateTransform Y=\"-37.22\" X=\"428.28\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.12\" Color=\"#118599B4\" />\n                                    <GradientStop Offset=\"0.413\" Color=\"#4C8599B4\" />\n                                    <GradientStop Offset=\"0.58\" Color=\"#418599B4\" />\n                                    <GradientStop Offset=\"0.86\" Color=\"#128599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 85.34 0 L 85.34 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-42.67\" />\n                            <RotateTransform Angle=\"12.5\" />\n                            <TranslateTransform Y=\"119.4\" X=\"42.67\" />\n                            <TranslateTransform Y=\"-50.22\" X=\"317.28\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#188599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 85.34 0 L 85.34 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-42.67\" />\n                            <RotateTransform Angle=\"-2.6\" />\n                            <TranslateTransform Y=\"119.4\" X=\"42.67\" />\n                            <TranslateTransform Y=\"-37.22\" X=\"263.28\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#1C8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 118.43 0 L 118.43 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-59.2\" />\n                            <RotateTransform Angle=\"8.43\" />\n                            <TranslateTransform Y=\"119.4\" X=\"59\" />\n                            <TranslateTransform Y=\"-38\" X=\"184.45\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.52\" Color=\"#638599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 95.27 0 L 95.27 238.8 L 0 238.8 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.408859\" X=\"-47.635498\" />\n                            <ScaleTransform CenterX=\"0\" CenterY=\"0\" ScaleX=\"1.00002646\" ScaleY=\"0.999997139\" />\n                            <SkewTransform AngleX=\"0\" AngleY=\"0.00240422646\" />\n                            <RotateTransform Angle=\"-3.6980257\" />\n                            <TranslateTransform Y=\"119.408859\" X=\"47.635498\" />\n                            <TranslateTransform Y=\"-38.2194977\" X=\"134.034119\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.413580239\" Color=\"#548599B4\" />\n                                    <GradientStop Offset=\"0.598765433\" Color=\"#278599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n            </Canvas>\n\n\n            <Canvas Name=\"RightCurtains2\">\n                <Canvas.RenderTransform>\n                    <TranslateTransform Y=\"0\" X=\"44\" />\n                </Canvas.RenderTransform>\n\n                <Path Data=\"M 0 0 C 8.48 75.87 9.53 153.54 3.57 232.9\" x:Name=\"BL3\">\n                    <Path.RenderTransform>\n                        <TranslateTransform Y=\"-60.82\" X=\"977\" x:Name=\"BL4\" />\n                    </Path.RenderTransform>\n\n                    <Path.Triggers>\n                        <EventTrigger RoutedEvent=\"Path.Loaded\">\n                            <EventTrigger.Actions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimation Storyboard.TargetName=\"BL4\" Storyboard.TargetProperty=\"X\" From=\"970\" To=\"980\" AutoReverse=\"False\" RepeatBehavior=\"Forever\" Duration=\"0:0:8\" />\n                                        <DoubleAnimation Storyboard.TargetName=\"BL3\" Storyboard.TargetProperty=\"Opacity\" From=\"0\" To=\"1\" AutoReverse=\"True\" RepeatBehavior=\"Forever\" Duration=\"0:0:4\" />\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </EventTrigger.Actions>\n                        </EventTrigger>\n                    </Path.Triggers>\n\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.74\" Color=\"#6A8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#8F8599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 C 12.35 65.81 13.89 133.16 5.2 201.98\" x:Name=\"BL5\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <ScaleTransform ScaleX=\"1.5\" ScaleY=\"1.2\" />\n                            <TranslateTransform Y=\"-60.82\" X=\"977\" x:Name=\"BL6\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Triggers>\n                        <EventTrigger RoutedEvent=\"Path.Loaded\">\n                            <EventTrigger.Actions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimation Storyboard.TargetName=\"BL6\" Storyboard.TargetProperty=\"X\" From=\"935\" To=\"950\" AutoReverse=\"False\" RepeatBehavior=\"Forever\" Duration=\"0:0:6\" />\n                                        <DoubleAnimation Storyboard.TargetName=\"BL5\" Storyboard.TargetProperty=\"Opacity\" From=\"0\" To=\"1\" AutoReverse=\"True\" RepeatBehavior=\"Forever\" Duration=\"0:0:3\" />\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </EventTrigger.Actions>\n                        </EventTrigger>\n                    </Path.Triggers>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0.3\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.7\" Color=\"#7D8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#AAFFFFFF\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 16.86 0 C 22.66 63.35 21.98 121.89 16.86 175 L 0 175 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <RotateTransform Angle=\"-177\" />\n                            <TranslateTransform Y=\"-5.74\" X=\"910\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0.15\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.43\" Color=\"#638599B4\" />\n                                    <GradientStop Offset=\"0.74\" Color=\"#6E8599B4\" />\n                                    <GradientStop Offset=\"0.93\" Color=\"#4CFFFFFF\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 16.86 0 C 22.66 63.35 21.98 121.89 16.86 175 L 0 175 Z\">\n                    <Path.RenderTransform>\n                        <TranslateTransform Y=\"-5.74\" X=\"950\" />\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0.15\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.43\" Color=\"#338599B4\" />\n                                    <GradientStop Offset=\"0.74\" Color=\"#338599B4\" />\n                                    <GradientStop Offset=\"0.93\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 C 29.26 69.48 32.9 140.59 12.33 213.25\" x:Name=\"BL7\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-106.62\" X=\"-12.67\" />\n                            <RotateTransform Angle=\"183.38\" />\n                            <TranslateTransform Y=\"106.629211\" X=\"12.67\" />\n                            <TranslateTransform Y=\"-45.16\" X=\"882.92\" x:Name=\"BL8\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Triggers>\n                        <EventTrigger RoutedEvent=\"Path.Loaded\">\n                            <EventTrigger.Actions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimation Storyboard.TargetName=\"BL8\" Storyboard.TargetProperty=\"X\" From=\"870\" To=\"880\" AutoReverse=\"False\" RepeatBehavior=\"Forever\" Duration=\"0:0:6\" />\n                                        <DoubleAnimation Storyboard.TargetName=\"BL7\" Storyboard.TargetProperty=\"Opacity\" From=\"0\" To=\"1\" AutoReverse=\"True\" RepeatBehavior=\"Forever\" Duration=\"0:0:3\" />\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </EventTrigger.Actions>\n                        </EventTrigger>\n                    </Path.Triggers>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0.32\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.77\" Color=\"#BC8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#E1FFFFFF\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 12 0 L 12 191 L 0 191 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <RotateTransform Angle=\"6\" />\n                            <TranslateTransform Y=\"-20\" X=\"882\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#2FFFFFFF\" />\n                                    <GradientStop Offset=\"0.27\" Color=\"#588599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n            </Canvas>\n\n            <Canvas Name=\"RightCurtains1\">\n                <Canvas.RenderTransform>\n                    <TranslateTransform Y=\"0\" X=\"44\" />\n                </Canvas.RenderTransform>\n\n\n                <Path Data=\"M 0 0 C 21.44 80.89 24.11 163.69 9.04 248.28\" x:Name=\"BL9\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-124.14\" X=\"-9.28\" />\n                            <RotateTransform Angle=\"-173\" />\n                            <TranslateTransform Y=\"124.14\" X=\"9.28\" />\n                            <TranslateTransform Y=\"-45.47\" X=\"892\" x:Name=\"BL10\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n\n                    <Path.Triggers>\n                        <EventTrigger RoutedEvent=\"Path.Loaded\">\n                            <EventTrigger.Actions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimation Storyboard.TargetName=\"BL10\" Storyboard.TargetProperty=\"X\" From=\"880\" To=\"900\" AutoReverse=\"False\" RepeatBehavior=\"Forever\" Duration=\"0:0:6\" />\n                                        <DoubleAnimation Storyboard.TargetName=\"BL9\" Storyboard.TargetProperty=\"Opacity\" From=\"0\" To=\"1\" AutoReverse=\"True\" RepeatBehavior=\"Forever\" Duration=\"0:0:3\" />\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </EventTrigger.Actions>\n                        </EventTrigger>\n                    </Path.Triggers>\n\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0.37\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.64\" Color=\"#BC8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#F0FFFFFF\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 12.75 0 C 14.20 81.08 13.58 150.04 1.73559380201027E-08 216.11\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-108.05\" X=\"-6.64\" />\n                            <RotateTransform Angle=\"4\" />\n                            <TranslateTransform Y=\"108.05\" X=\"6.64\" />\n                            <TranslateTransform Y=\"-16.17\" X=\"893.79\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0.32\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.64\" Color=\"#8C8599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#8FFFFFFF\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 12 0 L 12 191 L 0 191 Z\">\n                    <Path.RenderTransform>\n                        <TranslateTransform Y=\"-15.11\" X=\"881.11\" />\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#75FFFFFF\" />\n                                    <GradientStop Offset=\"0.27\" Color=\"#B18599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 L 21.8 0 L 21.8 191 L 0 191 Z\">\n                    <Path.RenderTransform>\n                        <TranslateTransform Y=\"-15\" X=\"898\" />\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#41FFFFFF\" />\n                                    <GradientStop Offset=\"0.27\" Color=\"#458599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 C 17.9 69.48 20.13 140.59 7.54 213.25\" x:Name=\"BL11\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-106.62\" X=\"-7.75\" />\n                            <RotateTransform Angle=\"-176\" />\n                            <TranslateTransform Y=\"106.62\" X=\"7.75\" />\n                            <TranslateTransform Y=\"-45.45\" X=\"827\" x:Name=\"BL12\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Triggers>\n                        <EventTrigger RoutedEvent=\"Path.Loaded\">\n                            <EventTrigger.Actions>\n                                <BeginStoryboard>\n                                    <Storyboard>\n                                        <DoubleAnimation Storyboard.TargetName=\"BL12\" Storyboard.TargetProperty=\"X\" From=\"827\" To=\"857\" AutoReverse=\"False\" RepeatBehavior=\"Forever\" Duration=\"0:0:8\" />\n                                        <DoubleAnimation Storyboard.TargetName=\"BL11\" Storyboard.TargetProperty=\"Opacity\" From=\"0\" To=\"1\" AutoReverse=\"True\" RepeatBehavior=\"Forever\" Duration=\"0:0:4\" />\n                                    </Storyboard>\n                                </BeginStoryboard>\n                            </EventTrigger.Actions>\n                        </EventTrigger>\n                    </Path.Triggers>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0.32\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.77\" Color=\"#338599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#BB8599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n            </Canvas>\n\n\n            <Canvas Name=\"LeftCurtains1\">\n\n\n                <Path Data=\"M 0 0 C 16 69 18 140.59 6. 213\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-106.62\" X=\"-7.17\" />\n                            <RotateTransform Angle=\"-185\" />\n                            <TranslateTransform Y=\"106.62\" X=\"7.17\" />\n                            <TranslateTransform Y=\"-3.44\" X=\"21.32\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.Transform>\n                                <TransformGroup>\n                                    <ScaleTransform CenterX=\"0\" CenterY=\"0\" ScaleX=\"1.3\" ScaleY=\"1.3\" />\n                                    <TranslateTransform Y=\"8\" X=\"0\" />\n                                </TransformGroup>\n                            </LinearGradientBrush.Transform>\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0.2\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.6\" Color=\"#448599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#77FFFFFF\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n\n                <Path Data=\"M 0 0 C 6.77 83.18 25.15 141.47 56 173\">\n                    <Path.RenderTransform>\n                        <TranslateTransform Y=\"-5\" X=\"50\" />\n                    </Path.RenderTransform>\n                    <Path.Stroke>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.Transform>\n                                <TransformGroup>\n                                    <RotateTransform Angle=\"90\" />\n                                </TransformGroup>\n                            </LinearGradientBrush.Transform>\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#558599B4\" />\n                                    <GradientStop Offset=\"0.56\" Color=\"#998599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Stroke>\n                </Path>\n\n                <Path Data=\"M 1.44 0 C -3.44 55.57 4.19 111.95 22.44 169\">\n                    <Path.RenderTransform>\n                        <TranslateTransform Y=\"-3\" X=\"115.95\" />\n                    </Path.RenderTransform>\n                    <Path.Stroke>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.Transform>\n                                <TransformGroup>\n                                    <ScaleTransform CenterX=\"0\" CenterY=\"0\" ScaleX=\"1.32\" ScaleY=\"1.32\" />\n                                    <RotateTransform Angle=\"90\" />\n                                </TransformGroup>\n                            </LinearGradientBrush.Transform>\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#338599B4\" />\n                                    <GradientStop Offset=\"0.56\" Color=\"#668599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Stroke>\n\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.Transform>\n                                <TransformGroup>\n                                    <ScaleTransform CenterX=\"0\" CenterY=\"0\" ScaleX=\"1.32\" ScaleY=\"1.32\" />\n                                </TransformGroup>\n                            </LinearGradientBrush.Transform>\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#338599B4\" />\n                                    <GradientStop Offset=\"0.5\" Color=\"#008599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n            </Canvas>\n\n\n            <Canvas Name=\"LeftCurtains2\">\n\n\n                <Path Data=\"M 0 0 L 32 0 L 32 166 L 15 166 C -0.53 120.05 0.33 64.88 0 0\">\n                    <Path.RenderTransform>\n                        <TranslateTransform Y=\"-3.12\" X=\"15\" />\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.5\" Color=\"#118599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 31.95 0 C 20.57 83.5 19.42 163.5 31.95 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-15.97\" />\n                            <RotateTransform Angle=\"-5.9\" />\n                            <TranslateTransform Y=\"119.4\" X=\"15.97\" />\n                            <TranslateTransform Y=\"-50.36\" X=\"117.29\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0.44\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.77\" Color=\"#228599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#448599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n\n                <Path Data=\"M 0 0 L 31.95 0 C 41.28 61.96 41.03 141.02 31.95 238.81 L 0 238.81 Z\">\n                    <Path.RenderTransform>\n                        <TransformGroup>\n                            <TranslateTransform Y=\"-119.4\" X=\"-19.43\" />\n                            <RotateTransform Angle=\"3.7\" />\n                            <TranslateTransform Y=\"119.4\" X=\"19.43\" />\n                            <TranslateTransform Y=\"-13.71\" X=\"113.27\" />\n                        </TransformGroup>\n                    </Path.RenderTransform>\n                    <Path.Fill>\n                        <LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n                            <LinearGradientBrush.GradientStops>\n                                <GradientStopCollection>\n                                    <GradientStop Offset=\"0\" Color=\"#008599B4\" />\n                                    <GradientStop Offset=\"0.87\" Color=\"#158599B4\" />\n                                    <GradientStop Offset=\"1\" Color=\"#668599B4\" />\n                                </GradientStopCollection>\n                            </LinearGradientBrush.GradientStops>\n                        </LinearGradientBrush>\n                    </Path.Fill>\n                </Path>\n            </Canvas>\n        </Canvas>\n    </Viewbox>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/PreviewPaneAuroraControl.xaml.cs",
    "content": "﻿using Windows.UI;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Media.Animation;\nusing Windows.UI.Xaml.Shapes;\n\nnamespace System.Windows.Shell.Aurora\n{\n    /// <summary>\n    /// Interaction logic for PreviewPaneAuroraControl.xaml\n    /// </summary>\n    public partial class PreviewPaneAuroraControl : UserControl\n    {\n        private record ColorSet(Color Aurora, Color Background);\n\n        private ColorSet[] _colorSets = new[]\n        {\n            new ColorSet(Color.FromArgb(255, 0x85, 0x99, 0xB4), Color.FromArgb(255, 0x5A, 0x6B, 0x7D)), // Default\n            new ColorSet(Color.FromArgb(255, 0x51, 0x90, 0xDA), Color.FromArgb(255, 0x24, 0x43, 0x8E)), // Documents\n            new ColorSet(Color.FromArgb(255, 0xF2, 0xA4, 0x7B), Color.FromArgb(255, 0xD2, 0x64, 0x2A)), // Contacts\n            new ColorSet(Color.FromArgb(255, 0xDA, 0x51, 0x51), Color.FromArgb(255, 0x74, 0x14, 0x14)), // Music\n            new ColorSet(Color.FromArgb(255, 0x9E, 0xCA, 0x4E), Color.FromArgb(255, 0x6E, 0x97, 0x24)), // Games\n            new ColorSet(Color.FromArgb(255, 0x6F, 0x49, 0x70), Color.FromArgb(255, 0x26, 0x08, 0x27)), // Photos\n        };\n\n        private int _i = 0;\n        private Color _color = Color.FromArgb(255, 0x85, 0x99, 0xB4);\n        private TimeSpan _duration = TimeSpan.FromSeconds(0.5);\n\n        public PreviewPaneAuroraControl()\n        {\n            InitializeComponent();\n            BackgroundLayer.Tapped += BackgroundLayer_Tapped;\n\n            this._AnimateAurora(_colorSets[_i].Aurora, _colorSets[_i].Background);\n            _i = (_i + 1) % _colorSets.Length;\n        }\n\n        private void BackgroundLayer_Tapped(object sender, TappedRoutedEventArgs e)\n        {\n            this._AnimateAurora(_colorSets[_i].Aurora, _colorSets[_i].Background);\n            _i = (_i + 1) % _colorSets.Length;\n        }\n\n        private void _AnimateAurora(Color colorAurora, Color colorBackground)\n        {\n            var colorOld = _color;\n            var storyboard = new Storyboard();\n            if (BackgroundLayer.Background is not SolidColorBrush backgroundBrush)\n                backgroundBrush = new SolidColorBrush();\n\n            // RegisterName(\"BackgroundLayerBrush\", backgroundBrush);\n\n            var backgroundAnim = new ColorAnimation();\n            backgroundAnim.From = backgroundBrush.Color;\n            backgroundAnim.To = colorBackground;\n            backgroundAnim.Duration = new Duration(_duration);\n\n            Storyboard.SetTarget(backgroundAnim, backgroundBrush);\n            Storyboard.SetTargetProperty(backgroundAnim, \"Color\");\n            storyboard.Children.Add(backgroundAnim);\n\n            this._AdjustAurora(storyboard, colorOld, colorAurora, BackgroundLayer);\n\n            storyboard.Begin();\n\n            _color = colorAurora;\n        }\n\n        private void _AdjustAurora(Storyboard sb, Color colorOld, Color colorNew, UIElement pe)\n        {\n            if (pe is Shape shape)\n            {\n                if (shape.Fill is GradientBrush fill)\n                {\n                    Color colorNew1 = colorNew;\n                    Color colorOld1 = colorOld;\n                    this._AdjustedLinearGradient(sb, fill, colorOld1, colorNew1);\n                }\n                if (shape.Stroke is GradientBrush stroke)\n                {\n                    Color colorNew2 = colorNew;\n                    Color colorOld2 = colorOld;\n                    this._AdjustedLinearGradient(sb, stroke, colorOld2, colorNew2);\n                }\n            }\n\n\n            for (int i = 0; i < VisualTreeHelper.GetChildrenCount(pe); i++)\n            {\n                var child = VisualTreeHelper.GetChild(pe, i);\n                if (child is not UIElement element) continue;\n\n                Color colorNew3 = colorNew;\n                this._AdjustAurora(sb, colorOld, colorNew3, element);\n            }\n        }\n\n        private void _AdjustedLinearGradient(\n            Storyboard sb,\n            GradientBrush pLinearGradient,\n            Color colorOld,\n            Color colorNew)\n        {\n            GradientStopCollection gradientStops = pLinearGradient.GradientStops;\n            for (int i = 0; i < gradientStops.Count; i++)\n            {\n                GradientStop gradientStop = gradientStops[i];\n                Color color1 = gradientStop.Color;\n                Color color2 = gradientStop.Color;\n                Color color1_1 = Color.FromArgb(255, gradientStop.Color.R, color2.G, color1.B);\n                Color color2_1 = colorOld;\n                Color color4 = !AreClose(color1_1, color2_1) ?\n                    gradientStop.Color :\n                    Color.FromArgb(gradientStop.Color.A, colorNew.R, colorNew.G, colorNew.B);\n\n\n                var colorAnimation = new ColorAnimation();\n                colorAnimation.From = color1;\n                colorAnimation.To = color4;\n                colorAnimation.Duration = new Duration(_duration);\n                colorAnimation.EnableDependentAnimation = true;\n\n                Storyboard.SetTarget(colorAnimation, gradientStop);\n                Storyboard.SetTargetProperty(colorAnimation, \"Color\");\n\n                sb.Children.Add(colorAnimation);\n            }\n        }\n\n        private bool AreClose(Color color1, Color color2)\n        {\n            return AreClose(color1.R, color2.R) && AreClose(color1.G, color2.G) && AreClose(color1.B, color2.B) && AreClose(color1.A, color2.A);\n        }\n\n        internal static float FLT_EPSILON = 1.1920929E-07f;\n\n        public static bool AreClose(float a, float b)\n        {\n            if (a == b)\n            {\n                return true;\n            }\n\n            float num = (Math.Abs(a) + Math.Abs(b) + 10f) * FLT_EPSILON;\n            float num2 = a - b;\n            if (0f - num < num2)\n            {\n                return num > num2;\n            }\n\n            return false;\n        }\n\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/RangeSelector/RangeChangedEventArgs.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n// See the LICENSE file in the project root for more information.\n\nusing System;\n\nnamespace Unicord.Universal.Controls\n{\n    /// <summary>\n    /// Event args for a value changing event\n    /// </summary>\n    public class RangeChangedEventArgs : EventArgs\n    {\n        /// <summary>\n        /// Gets the old value.\n        /// </summary>\n        public double OldValue { get; private set; }\n\n        /// <summary>\n        /// Gets the new value.\n        /// </summary>\n        public double NewValue { get; private set; }\n\n        /// <summary>\n        /// Gets the range property that triggered the event\n        /// </summary>\n        public RangeSelectorProperty ChangedRangeProperty { get; private set; }\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"RangeChangedEventArgs\"/> class.\n        /// </summary>\n        /// <param name=\"oldValue\">The old value</param>\n        /// <param name=\"newValue\">The new value</param>\n        /// <param name=\"changedRangeProperty\">The changed range property</param>\n        public RangeChangedEventArgs(double oldValue, double newValue, RangeSelectorProperty changedRangeProperty)\n        {\n            OldValue = oldValue;\n            NewValue = newValue;\n            ChangedRangeProperty = changedRangeProperty;\n        }\n    }\n\n    /// <summary>\n    /// Enumeration used to determine what value triggered ValueChanged event on the\n    /// RangeSelector\n    /// </summary>\n    public enum RangeSelectorProperty\n    {\n        /// <summary>\n        /// Minimum value was changed\n        /// </summary>\n        MinimumValue,\n\n        /// <summary>\n        /// Maximum value was changed\n        /// </summary>\n        MaximumValue\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/RangeSelector/RangeSelector.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n// See the LICENSE file in the project root for more information.\n\nusing System;\nusing WamWooWam.Core;\nusing Windows.Foundation;\nusing Windows.System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Shapes;\n\nnamespace Unicord.Universal.Controls\n{\n    /// <summary>\n    /// RangeSelector is a \"double slider\" control for range values.\n    /// </summary>\n    [TemplateVisualState(Name = \"Normal\", GroupName = \"CommonStates\")]\n    [TemplateVisualState(Name = \"MinPressed\", GroupName = \"CommonStates\")]\n    [TemplateVisualState(Name = \"MaxPressed\", GroupName = \"CommonStates\")]\n    [TemplateVisualState(Name = \"Disabled\", GroupName = \"CommonStates\")]\n    [TemplatePart(Name = \"OutOfRangeContentContainer\", Type = typeof(Border))]\n    [TemplatePart(Name = \"ActiveRectangle\", Type = typeof(Rectangle))]\n    [TemplatePart(Name = \"MinThumb\", Type = typeof(Thumb))]\n    [TemplatePart(Name = \"MaxThumb\", Type = typeof(Thumb))]\n    [TemplatePart(Name = \"CurrentThumb\", Type = typeof(Thumb))]\n    [TemplatePart(Name = \"ContainerCanvas\", Type = typeof(Canvas))]\n    [TemplatePart(Name = \"ControlGrid\", Type = typeof(Grid))]\n\n    public partial class RangeSelector : Control\n    {\n        private const double Epsilon = 0.01;\n        private const double DefaultMinimum = 0.0;\n        private const double DefaultMaximum = 1.0;\n        private const double DefaultStepFrequency = 1;\n\n        /// <summary>\n        /// Identifies the Minimum dependency property.\n        /// </summary>\n        public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register(nameof(Minimum), typeof(double), typeof(RangeSelector), new PropertyMetadata(DefaultMinimum, MinimumChangedCallback));\n\n        /// <summary>\n        /// Identifies the Maximum dependency property.\n        /// </summary>\n        public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register(nameof(Maximum), typeof(double), typeof(RangeSelector), new PropertyMetadata(DefaultMaximum, MaximumChangedCallback));\n\n        /// <summary>\n        /// Identifies the RangeMin dependency property.\n        /// </summary>\n        public static readonly DependencyProperty RangeMinProperty = DependencyProperty.Register(nameof(RangeMin), typeof(double), typeof(RangeSelector), new PropertyMetadata(DefaultMinimum, RangeMinChangedCallback));\n\n        /// <summary>\n        /// Identifies the RangeMax dependency property.\n        /// </summary>\n        public static readonly DependencyProperty RangeMaxProperty = DependencyProperty.Register(nameof(RangeMax), typeof(double), typeof(RangeSelector), new PropertyMetadata(DefaultMaximum, RangeMaxChangedCallback));\n\n\n\n        public double Value\n        {\n            get => (double)GetValue(ValueProperty);\n            set => SetValue(ValueProperty, value);\n        }\n\n        private bool _pointerManipulatingValue;\n\n        // Using a DependencyProperty as the backing store for Value.  This enables animation, styling, binding, etc...\n        public static readonly DependencyProperty ValueProperty =\n            DependencyProperty.Register(\"Value\", typeof(double), typeof(RangeSelector), new PropertyMetadata(DefaultMinimum, ValueChangedCallback));\n\n\n\n        /// <summary>\n        /// Identifies the StepFrequency dependency property.\n        /// </summary>\n        public static readonly DependencyProperty StepFrequencyProperty = DependencyProperty.Register(nameof(StepFrequency), typeof(double), typeof(RangeSelector), new PropertyMetadata(DefaultStepFrequency));\n\n        private Border _outOfRangeContentContainer;\n        private Rectangle _activeRectangle;\n        private Thumb _minThumb;\n        private Thumb _maxThumb;\n        private Thumb _currentThumb;\n        private Canvas _containerCanvas;\n        private Grid _controlGrid;\n        private double _oldValue;\n        private bool _valuesAssigned;\n        private bool _minSet;\n        private bool _maxSet;\n        private bool _valueSet;\n        private bool _pointerManipulatingMin;\n        private bool _pointerManipulatingMax;\n        private double _absolutePosition;\n\n        /// <summary>\n        /// Event raised when lower or upper range values are changed.\n        /// </summary>\n        public event EventHandler<RangeChangedEventArgs> RangeChanged;\n\n        /// <summary>\n        /// Event raised when lower or upper range values are changed.\n        /// </summary>\n        public event EventHandler<double> ValueChanged;\n\n        /// <summary>\n        /// Event raised when lower or upper range thumbs start being dragged.\n        /// </summary>\n        public event DragStartedEventHandler ThumbDragStarted;\n\n        /// <summary>\n        /// Event raised when lower or upper range thumbs end being dragged.\n        /// </summary>\n        public event DragCompletedEventHandler ThumbDragCompleted;\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"RangeSelector\"/> class.\n        /// Create a default range selector control.\n        /// </summary>\n        public RangeSelector()\n        {\n            DefaultStyleKey = typeof(RangeSelector);\n        }\n\n        /// <summary>\n        /// Update the visual state of the control when its template is changed.\n        /// </summary>\n        protected override void OnApplyTemplate()\n        {\n            if (_minThumb != null)\n            {\n                _minThumb.DragCompleted -= Thumb_DragCompleted;\n                _minThumb.DragDelta -= MinThumb_DragDelta;\n                _minThumb.DragStarted -= MinThumb_DragStarted;\n                _minThumb.KeyDown -= MinThumb_KeyDown;\n            }\n\n            if (_currentThumb != null)\n            {\n                _currentThumb.DragCompleted -= Thumb_DragCompleted;\n                _currentThumb.DragDelta -= CurrentThumb_DragDelta;\n                _currentThumb.DragStarted -= CurrentThumb_DragStarted;\n                _currentThumb.KeyDown -= CurrentThumb_KeyDown;\n            }\n\n            if (_maxThumb != null)\n            {\n                _maxThumb.DragCompleted -= Thumb_DragCompleted;\n                _maxThumb.DragDelta -= MaxThumb_DragDelta;\n                _maxThumb.DragStarted -= MaxThumb_DragStarted;\n                _maxThumb.KeyDown -= MaxThumb_KeyDown;\n            }\n\n            if (_containerCanvas != null)\n            {\n                _containerCanvas.SizeChanged -= ContainerCanvas_SizeChanged;\n                _containerCanvas.PointerPressed -= ContainerCanvas_PointerPressed;\n                _containerCanvas.PointerMoved -= ContainerCanvas_PointerMoved;\n                _containerCanvas.PointerReleased -= ContainerCanvas_PointerReleased;\n                _containerCanvas.PointerExited -= ContainerCanvas_PointerExited;\n            }\n\n            IsEnabledChanged -= RangeSelector_IsEnabledChanged;\n\n            // Need to make sure the values can be set in XAML and don't overwrite each other\n            VerifyValues();\n            _valuesAssigned = true;\n\n            _outOfRangeContentContainer = GetTemplateChild(\"OutOfRangeContentContainer\") as Border;\n            _activeRectangle = GetTemplateChild(\"ActiveRectangle\") as Rectangle;\n            _minThumb = GetTemplateChild(\"MinThumb\") as Thumb;\n            _maxThumb = GetTemplateChild(\"MaxThumb\") as Thumb;\n            _currentThumb = GetTemplateChild(\"CurrentThumb\") as Thumb;\n            _containerCanvas = GetTemplateChild(\"ContainerCanvas\") as Canvas;\n            _controlGrid = GetTemplateChild(\"ControlGrid\") as Grid;\n\n            if (_minThumb != null)\n            {\n                _minThumb.DragCompleted += Thumb_DragCompleted;\n                _minThumb.DragDelta += MinThumb_DragDelta;\n                _minThumb.DragStarted += MinThumb_DragStarted;\n                _minThumb.KeyDown += MinThumb_KeyDown;\n            }\n\n            if (_currentThumb != null)\n            {\n                _currentThumb.DragCompleted += Thumb_DragCompleted;\n                _currentThumb.DragDelta += CurrentThumb_DragDelta;\n                _currentThumb.DragStarted += CurrentThumb_DragStarted;\n                _currentThumb.KeyDown += CurrentThumb_KeyDown;\n            }\n\n            if (_maxThumb != null)\n            {\n                _maxThumb.DragCompleted += Thumb_DragCompleted;\n                _maxThumb.DragDelta += MaxThumb_DragDelta;\n                _maxThumb.DragStarted += MaxThumb_DragStarted;\n                _maxThumb.KeyDown += MaxThumb_KeyDown;\n            }\n\n            if (_containerCanvas != null)\n            {\n                _containerCanvas.SizeChanged += ContainerCanvas_SizeChanged;\n                _containerCanvas.PointerEntered += ContainerCanvas_PointerEntered;\n                _containerCanvas.PointerPressed += ContainerCanvas_PointerPressed;\n                _containerCanvas.PointerMoved += ContainerCanvas_PointerMoved;\n                _containerCanvas.PointerReleased += ContainerCanvas_PointerReleased;\n                _containerCanvas.PointerExited += ContainerCanvas_PointerExited;\n            }\n\n            VisualStateManager.GoToState(this, IsEnabled ? \"Normal\" : \"Disabled\", false);\n\n            IsEnabledChanged += RangeSelector_IsEnabledChanged;\n\n            // Measure our min/max text longest value so we can avoid the length of the scrolling reason shifting in size during use.\n            var tb = new TextBlock { Text = Maximum.ToString() };\n            tb.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));\n\n            base.OnApplyTemplate();\n        }\n\n        private void CurrentThumb_KeyDown(object sender, KeyRoutedEventArgs e)\n        {\n            switch (e.Key)\n            {\n                case VirtualKey.Left:\n                    Value -= StepFrequency;\n                    SyncThumbs();\n                    e.Handled = true;\n                    break;\n                case VirtualKey.Right:\n                    Value += StepFrequency;\n                    SyncThumbs();\n                    e.Handled = true;\n                    break;\n            }\n        }\n\n        private void MinThumb_KeyDown(object sender, KeyRoutedEventArgs e)\n        {\n            switch (e.Key)\n            {\n                case VirtualKey.Left:\n                    RangeMin -= StepFrequency;\n                    SyncThumbs();\n                    e.Handled = true;\n                    break;\n                case VirtualKey.Right:\n                    RangeMin += StepFrequency;\n                    SyncThumbs();\n                    e.Handled = true;\n                    break;\n            }\n        }\n\n        private void MaxThumb_KeyDown(object sender, KeyRoutedEventArgs e)\n        {\n            switch (e.Key)\n            {\n                case VirtualKey.Left:\n                    RangeMax -= StepFrequency;\n                    SyncThumbs();\n                    e.Handled = true;\n                    break;\n                case VirtualKey.Right:\n                    RangeMax += StepFrequency;\n                    SyncThumbs();\n                    e.Handled = true;\n                    break;\n            }\n        }\n\n        private void ContainerCanvas_PointerEntered(object sender, PointerRoutedEventArgs e)\n        {\n            VisualStateManager.GoToState(this, \"PointerOver\", false);\n        }\n\n        private void ContainerCanvas_PointerExited(object sender, PointerRoutedEventArgs e)\n        {\n            var position = e.GetCurrentPoint(_containerCanvas).Position.X;\n            var normalizedPosition = ((position / DragWidth()) * (Maximum - Minimum)) + Minimum;\n\n            if (_pointerManipulatingMin)\n            {\n                _pointerManipulatingMin = false;\n                _containerCanvas.IsHitTestVisible = true;\n                RangeChanged?.Invoke(this, new RangeChangedEventArgs(RangeMin, normalizedPosition, RangeSelectorProperty.MinimumValue));\n            }\n            else if (_pointerManipulatingMax)\n            {\n                _pointerManipulatingMax = false;\n                _containerCanvas.IsHitTestVisible = true;\n                RangeChanged?.Invoke(this, new RangeChangedEventArgs(RangeMax, normalizedPosition, RangeSelectorProperty.MaximumValue));\n            }\n            else if (_pointerManipulatingValue)\n            {\n                ValueChanged.Invoke(this, Value);\n            }\n\n            VisualStateManager.GoToState(this, \"Normal\", false);\n        }\n\n        private void ContainerCanvas_PointerReleased(object sender, PointerRoutedEventArgs e)\n        {\n            var position = e.GetCurrentPoint(_containerCanvas).Position.X;\n            var normalizedPosition = ((position / DragWidth()) * (Maximum - Minimum)) + Minimum;\n\n            if (_pointerManipulatingMin)\n            {\n                _pointerManipulatingMin = false;\n                _containerCanvas.IsHitTestVisible = true;\n                RangeChanged?.Invoke(this, new RangeChangedEventArgs(RangeMin, normalizedPosition, RangeSelectorProperty.MinimumValue));\n            }\n            else if (_pointerManipulatingMax)\n            {\n                _pointerManipulatingMax = false;\n                _containerCanvas.IsHitTestVisible = true;\n                RangeChanged?.Invoke(this, new RangeChangedEventArgs(RangeMax, normalizedPosition, RangeSelectorProperty.MaximumValue));\n            }\n            else if (_pointerManipulatingValue)\n            {\n                _pointerManipulatingValue = false;\n                _containerCanvas.IsHitTestVisible = true;\n                ValueChanged.Invoke(this, Value);\n            }\n\n            SyncThumbs();\n        }\n\n        private void ContainerCanvas_PointerMoved(object sender, PointerRoutedEventArgs e)\n        {\n            var position = e.GetCurrentPoint(_containerCanvas).Position.X;\n            var normalizedPosition = ((position / DragWidth()) * (Maximum - Minimum)) + Minimum;\n\n            if (_pointerManipulatingMin && normalizedPosition < RangeMax)\n            {\n                RangeMin = DragThumb(_minThumb, 0, Canvas.GetLeft(_maxThumb), position);\n                RangeChanged?.Invoke(this, new RangeChangedEventArgs(0, RangeMin, RangeSelectorProperty.MinimumValue));\n            }\n            else if (_pointerManipulatingMax && normalizedPosition > RangeMin)\n            {\n                RangeMax = DragThumb(_maxThumb, Canvas.GetLeft(_minThumb), DragWidth(), position);\n                RangeChanged?.Invoke(this, new RangeChangedEventArgs(0, RangeMax, RangeSelectorProperty.MaximumValue));\n            }\n            else if (_pointerManipulatingValue && normalizedPosition > RangeMin && normalizedPosition < RangeMax)\n            {\n                Value = DragThumb(_currentThumb, Canvas.GetLeft(_minThumb), Canvas.GetLeft(_maxThumb), position);\n                ValueChanged?.Invoke(this, Value);\n            }\n        }\n\n        private void ContainerCanvas_PointerPressed(object sender, PointerRoutedEventArgs e)\n        {\n            var position = e.GetCurrentPoint(_containerCanvas).Position.X;\n            var normalizedPosition = position * Math.Abs(Maximum - Minimum) / DragWidth();\n            var upperValueDiff = Math.Abs(RangeMax - normalizedPosition);\n            var lowerValueDiff = Math.Abs(RangeMin - normalizedPosition);\n\n            if (upperValueDiff < lowerValueDiff)\n            {\n                RangeMax = normalizedPosition;\n                _pointerManipulatingMax = true;\n                Thumb_DragStarted(_maxThumb);\n            }\n            else\n            {\n                RangeMin = normalizedPosition;\n                _pointerManipulatingMin = true;\n                Thumb_DragStarted(_minThumb);\n            }\n\n            SyncThumbs();\n        }\n\n        private void ContainerCanvas_SizeChanged(object sender, SizeChangedEventArgs e)\n        {\n            SyncThumbs();\n        }\n\n        private void VerifyValues()\n        {\n            if (Minimum > Maximum)\n            {\n                Minimum = Maximum;\n                Maximum = Maximum;\n            }\n\n            if (Minimum == Maximum)\n            {\n                Maximum += Epsilon;\n            }\n\n            if (!_maxSet)\n            {\n                RangeMax = Maximum;\n            }\n\n            if (!_valueSet)\n            {\n                Value = Minimum;\n            }\n\n            if (!_minSet)\n            {\n                RangeMin = Minimum;\n            }\n\n            Minimum = Minimum.Clamp(Minimum, RangeMax);\n            Maximum = Maximum.Clamp(RangeMin, Maximum);\n            Value = Value.Clamp(RangeMin, RangeMax);\n        }\n\n        /// <summary>\n        /// Gets or sets the minimum value of the range.\n        /// </summary>\n        /// <value>\n        /// The minimum.\n        /// </value>\n        public double Minimum\n        {\n            get => (double)GetValue(MinimumProperty);\n\n            set => SetValue(MinimumProperty, value);\n        }\n\n        private static void MinimumChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n\n            if (!(d is RangeSelector rangeSelector) || !rangeSelector._valuesAssigned)\n            {\n                return;\n            }\n\n            var newValue = (double)e.NewValue;\n            var oldValue = (double)e.OldValue;\n\n            if (rangeSelector.Maximum < newValue)\n            {\n                rangeSelector.Maximum = newValue + Epsilon;\n            }\n\n            if (rangeSelector.RangeMin < newValue)\n            {\n                rangeSelector.RangeMin = newValue;\n            }\n\n            if (rangeSelector.RangeMax < newValue)\n            {\n                rangeSelector.RangeMax = newValue;\n            }\n\n            if (rangeSelector.Value < newValue)\n            {\n                rangeSelector.Value = newValue;\n            }\n\n            if (newValue != oldValue)\n            {\n                rangeSelector.SyncThumbs();\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the maximum value of the range.\n        /// </summary>\n        /// <value>\n        /// The maximum.\n        /// </value>\n        public double Maximum\n        {\n            get => (double)GetValue(MaximumProperty);\n\n            set => SetValue(MaximumProperty, value);\n        }\n\n        private static void MaximumChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n\n            if (!(d is RangeSelector rangeSelector) || !rangeSelector._valuesAssigned)\n            {\n                return;\n            }\n\n            var newValue = (double)e.NewValue;\n            var oldValue = (double)e.OldValue;\n\n            if (rangeSelector.Minimum > newValue)\n            {\n                rangeSelector.Minimum = newValue - Epsilon;\n            }\n\n            if (rangeSelector.RangeMax > newValue)\n            {\n                rangeSelector.RangeMax = newValue;\n            }\n\n            if (rangeSelector.RangeMin > newValue)\n            {\n                rangeSelector.RangeMin = newValue;\n            }\n\n            if (rangeSelector.Value > newValue)\n            {\n                rangeSelector.Value = newValue;\n            }\n\n            if (newValue != oldValue)\n            {\n                rangeSelector.SyncThumbs();\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the current lower limit value of the range.\n        /// </summary>\n        /// <value>\n        /// The current lower limit.\n        /// </value>\n        public double RangeMin\n        {\n            get => (double)GetValue(RangeMinProperty);\n\n            set => SetValue(RangeMinProperty, value);\n        }\n\n        private static void RangeMinChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n\n            if (!(d is RangeSelector rangeSelector))\n            {\n                return;\n            }\n\n            rangeSelector._minSet = true;\n\n            if (!rangeSelector._valuesAssigned)\n            {\n                return;\n            }\n\n            var newValue = (double)e.NewValue;\n            rangeSelector.RangeMinToStepFrequency();\n\n            if (rangeSelector._valuesAssigned)\n            {\n                if (newValue < rangeSelector.Minimum)\n                {\n                    rangeSelector.RangeMin = rangeSelector.Minimum;\n                }\n                else if (newValue > rangeSelector.Maximum)\n                {\n                    rangeSelector.RangeMin = rangeSelector.Maximum;\n                }\n\n                rangeSelector.SyncActiveRectangle();\n\n                // If the new value is greater than the old max, move the max also\n                if (newValue > rangeSelector.RangeMax)\n                {\n                    rangeSelector.RangeMax = newValue;\n                }\n                if (newValue > rangeSelector.Value)\n                {\n                    rangeSelector.Value = newValue;\n                }\n            }\n\n            rangeSelector.SyncThumbs();\n        }\n\n        /// <summary>\n        /// Gets or sets the current upper limit value of the range.\n        /// </summary>\n        /// <value>\n        /// The current upper limit.\n        /// </value>\n        public double RangeMax\n        {\n            get => (double)GetValue(RangeMaxProperty);\n\n            set => SetValue(RangeMaxProperty, value);\n        }\n\n        private static void ValueChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n\n            if (!(d is RangeSelector rangeSelector))\n            {\n                return;\n            }\n\n            rangeSelector._valueSet = true;\n\n            if (!rangeSelector._valuesAssigned)\n            {\n                return;\n            }\n\n            var newValue = (double)e.NewValue;\n\n            if (rangeSelector._valuesAssigned)\n            {\n                if (newValue < rangeSelector.Minimum)\n                {\n                    rangeSelector.Value = rangeSelector.Minimum;\n                }\n                else if (newValue > rangeSelector.Maximum)\n                {\n                    rangeSelector.Value = rangeSelector.Maximum;\n                }\n\n                rangeSelector.SyncActiveRectangle();\n            }\n\n            rangeSelector.SyncThumbs();\n        }\n\n        private static void RangeMaxChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n\n            if (!(d is RangeSelector rangeSelector))\n            {\n                return;\n            }\n\n            rangeSelector._maxSet = true;\n\n            if (!rangeSelector._valuesAssigned)\n            {\n                return;\n            }\n\n            var newValue = (double)e.NewValue;\n            rangeSelector.RangeMaxToStepFrequency();\n\n            if (rangeSelector._valuesAssigned)\n            {\n                if (newValue < rangeSelector.Minimum)\n                {\n                    rangeSelector.RangeMax = rangeSelector.Minimum;\n                }\n                else if (newValue > rangeSelector.Maximum)\n                {\n                    rangeSelector.RangeMax = rangeSelector.Maximum;\n                }\n\n                rangeSelector.SyncActiveRectangle();\n\n                // If the new max is less than the old minimum then move the minimum\n                if (newValue < rangeSelector.RangeMin)\n                {\n                    rangeSelector.RangeMin = newValue;\n                }\n\n                if (newValue < rangeSelector.Value)\n                {\n                    rangeSelector.Value = newValue;\n                }\n            }\n\n            rangeSelector.SyncThumbs();\n        }\n\n        /// <summary>\n        /// Gets or sets the value part of a value range that steps should be created for.\n        /// </summary>\n        /// <value>\n        /// The value part of a value range that steps should be created for.\n        /// </value>\n        public double StepFrequency\n        {\n            get => (double)GetValue(StepFrequencyProperty);\n\n            set => SetValue(StepFrequencyProperty, value);\n        }\n\n        private void RangeMinToStepFrequency()\n        {\n            RangeMin = MoveToStepFrequency(RangeMin);\n        }\n\n        private void RangeMaxToStepFrequency()\n        {\n            RangeMax = MoveToStepFrequency(RangeMax);\n        }\n\n        private double MoveToStepFrequency(double rangeValue)\n        {\n            var newValue = Minimum + (((int)Math.Round((rangeValue - Minimum) / StepFrequency)) * StepFrequency);\n\n            if (newValue < Minimum)\n            {\n                return Minimum;\n            }\n            else if (newValue > Maximum || Maximum - newValue < StepFrequency)\n            {\n                return Maximum;\n            }\n            else\n            {\n                return newValue;\n            }\n        }\n\n        private void SyncThumbs()\n        {\n            if (_containerCanvas == null)\n            {\n                return;\n            }\n\n            var relativeLeft = ((RangeMin - Minimum) / (Maximum - Minimum)) * DragWidth();\n            var relativeRight = ((RangeMax - Minimum) / (Maximum - Minimum)) * DragWidth();\n            var relativeValue = ((Value) / (Maximum - Minimum)) * DragWidth();\n\n            Canvas.SetLeft(_minThumb, relativeLeft);\n            Canvas.SetLeft(_currentThumb, relativeValue);\n            Canvas.SetLeft(_maxThumb, relativeRight);\n\n            SyncActiveRectangle();\n        }\n\n        private void SyncActiveRectangle()\n        {\n            if (_containerCanvas == null)\n            {\n                return;\n            }\n\n            if (_minThumb == null)\n            {\n                return;\n            }\n\n            if (_maxThumb == null)\n            {\n                return;\n            }\n\n            var relativeLeft = Canvas.GetLeft(_minThumb);\n            Canvas.SetLeft(_activeRectangle, relativeLeft);\n            Canvas.SetTop(_activeRectangle, (_containerCanvas.ActualHeight - _activeRectangle.ActualHeight) / 2);\n            _activeRectangle.Width = Math.Max(0, Canvas.GetLeft(_maxThumb) - Canvas.GetLeft(_minThumb));\n        }\n\n        private double DragWidth()\n        {\n            return _containerCanvas.ActualWidth - _maxThumb.Width;\n        }\n\n        private void CurrentThumb_DragDelta(object sender, DragDeltaEventArgs e)\n        {\n            _absolutePosition += e.HorizontalChange;\n\n            Value = DragThumb(_currentThumb, Canvas.GetLeft(_minThumb), Canvas.GetLeft(_maxThumb), _absolutePosition);\n            ValueChanged?.Invoke(this, Value);\n        }\n\n        private void MinThumb_DragDelta(object sender, DragDeltaEventArgs e)\n        {\n            _absolutePosition += e.HorizontalChange;\n\n            RangeMin = DragThumb(_minThumb, 0, Canvas.GetLeft(_maxThumb), _absolutePosition);\n            RangeChanged?.Invoke(this, new RangeChangedEventArgs(0, RangeMin, RangeSelectorProperty.MinimumValue));\n\n        }\n\n        private void MaxThumb_DragDelta(object sender, DragDeltaEventArgs e)\n        {\n            _absolutePosition += e.HorizontalChange;\n\n            RangeMax = DragThumb(_maxThumb, Canvas.GetLeft(_minThumb), DragWidth(), _absolutePosition);\n            RangeChanged?.Invoke(this, new RangeChangedEventArgs(0, RangeMax, RangeSelectorProperty.MaximumValue));\n        }\n\n        private double DragThumb(Thumb thumb, double min, double max, double nextPos)\n        {\n            nextPos = Math.Max(min, nextPos);\n            nextPos = Math.Min(max, nextPos);\n\n            Canvas.SetLeft(thumb, nextPos);\n\n            return Minimum + ((nextPos / DragWidth()) * (Maximum - Minimum));\n        }\n\n        private void Thumb_DragStarted(Thumb thumb)\n        {\n            _absolutePosition = Canvas.GetLeft(thumb);\n            Canvas.SetZIndex(thumb, 10);\n\n            if (thumb == _minThumb)\n            {\n                VisualStateManager.GoToState(this, \"MinPressed\", true);\n                Canvas.SetZIndex(_maxThumb, 0);\n                Canvas.SetZIndex(_currentThumb, 5);\n            }\n            else if (thumb == _maxThumb)\n            {\n                VisualStateManager.GoToState(this, \"MaxPressed\", true);\n                Canvas.SetZIndex(_minThumb, 0);\n                Canvas.SetZIndex(_currentThumb, 5);\n            }\n            else\n            {\n                VisualStateManager.GoToState(this, \"CurrentPressed\", true);\n                Canvas.SetZIndex(_minThumb, 0);\n                Canvas.SetZIndex(_maxThumb, 5);\n            }\n\n            _oldValue = RangeMin;\n        }\n\n        private void MinThumb_DragStarted(object sender, DragStartedEventArgs e)\n        {\n            ThumbDragStarted?.Invoke(this, e);\n            Thumb_DragStarted(_minThumb);\n        }\n\n        private void MaxThumb_DragStarted(object sender, DragStartedEventArgs e)\n        {\n            ThumbDragStarted?.Invoke(this, e);\n            Thumb_DragStarted(_maxThumb);\n        }\n\n        private void CurrentThumb_DragStarted(object sender, DragStartedEventArgs e)\n        {\n            ThumbDragStarted?.Invoke(this, e);\n            Thumb_DragStarted(_currentThumb);\n        }\n\n        private void Thumb_DragCompleted(object sender, DragCompletedEventArgs e)\n        {\n            ThumbDragCompleted?.Invoke(this, e);\n\n            if (sender != _currentThumb)\n            {\n                RangeChanged?.Invoke(this, sender.Equals(_minThumb) ? new RangeChangedEventArgs(_oldValue, RangeMin, RangeSelectorProperty.MinimumValue) : new RangeChangedEventArgs(_oldValue, RangeMax, RangeSelectorProperty.MaximumValue));\n            }\n            else\n            {\n                ValueChanged?.Invoke(this, Value);\n            }\n\n            SyncThumbs();\n\n            VisualStateManager.GoToState(this, \"Normal\", true);\n        }\n\n        private void RangeSelector_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)\n        {\n            VisualStateManager.GoToState(this, IsEnabled ? \"Normal\" : \"Disabled\", true);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/RichPresenceControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"Unicord.Universal.Controls.RichPresenceControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"400\">\n\n    <Grid>\n        <Grid Visibility=\"{Binding RichPresence, Converter={StaticResource HideOnNullConverter}, FallbackValue=Collapsed}\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <Grid Visibility=\"{Binding RichPresence.LargeImage, Converter={StaticResource HideOnNullConverter}}\" Width=\"80\" Height=\"80\" Margin=\"0,0,8,0\">\n                    <Image Source=\"{Binding RichPresence.LargeImage.Url}\" />\n                    <Image Width=\"24\" Height=\"24\" HorizontalAlignment=\"Right\" VerticalAlignment=\"Bottom\" Source=\"{Binding RichPresence.SmallImage.Url}\" Margin=\"4\" />\n                </Grid>\n                <StackPanel VerticalAlignment=\"Center\" Grid.Column=\"1\">\n                    <TextBlock Style=\"{ThemeResource BaseTextBlockStyle}\" TextWrapping=\"Wrap\">\n                    <Run Text=\"{Binding Converter={StaticResource PresenceTextConverter}}\"/>\n                    </TextBlock>\n                    <TextBlock Visibility=\"{Binding RichPresence.Details, Converter={StaticResource HideOnNullConverter}}\" Text=\"{Binding RichPresence.Details}\" TextWrapping=\"Wrap\"/>\n                    <TextBlock Visibility=\"{Binding RichPresence.State, Converter={StaticResource HideOnNullConverter}}\" Text=\"{Binding RichPresence.State}\" TextWrapping=\"Wrap\"/>\n                </StackPanel>\n            </Grid>\n        </Grid>\n\n        <Grid Visibility=\"{Binding CustomStatus, Converter={StaticResource HideOnNullConverter}, FallbackValue=Collapsed}\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <Grid Width=\"24\" Height=\"24\" DataContext=\"{Binding CustomStatus.Emoji}\" Visibility=\"{Binding CustomStatus.Emoji, Converter={StaticResource HideOnNullConverter}, FallbackValue=Collapsed}\">\n                <Image x:Name=\"emoteImage\" \n                       Visibility=\"{Binding Url, Converter={StaticResource BoolVisibilityConverter}}\" \n                       MaxWidth=\"24\" \n                       MaxHeight=\"24\" \n                       Stretch=\"None\" \n                       ToolTipService.ToolTip=\"{Binding Name}\">\n                    <Image.Source>\n                        <BitmapImage UriSource=\"{Binding Url}\" />\n                    </Image.Source>\n                </Image>\n                \n                <TextBlock x:Name=\"emojiText\" \n                           Visibility=\"{Binding Unicode, Converter={StaticResource BoolVisibilityConverter}}\" \n                           Text=\"{Binding Unicode}\" \n                           VerticalAlignment=\"Center\" \n                           HorizontalAlignment=\"Center\" \n                           FontSize=\"16\"/>\n            </Grid>\n\n            <TextBlock Grid.Column=\"1\" Text=\"{Binding CustomStatus.Name}\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/RichPresenceControl.xaml.cs",
    "content": "﻿using System;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    [Obsolete]\r\n    public sealed partial class RichPresenceControl : UserControl\r\n    {\r\n        public RichPresenceControl()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/ScaledContentControl.cs",
    "content": "﻿using System;\r\nusing WamWooWam.Core;\r\nusing Windows.Foundation;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    public sealed class ScaledContentControl : ContentControl\r\n    {\r\n        public double TargetWidth\r\n        {\r\n            get => (double)GetValue(TargetWidthProperty);\r\n            set => SetValue(TargetWidthProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty TargetWidthProperty =\r\n            DependencyProperty.Register(\"TargetWidth\", typeof(double), typeof(ScaledContentControl), new PropertyMetadata(double.NaN, OnWidthHeightPropertyChanged));\r\n\r\n        public double TargetHeight\r\n        {\r\n            get => (double)GetValue(TargetHeightProperty);\r\n            set => SetValue(TargetHeightProperty, value);\r\n        }\r\n\r\n        public static readonly DependencyProperty TargetHeightProperty =\r\n            DependencyProperty.Register(\"TargetHeight\", typeof(double), typeof(ScaledContentControl), new PropertyMetadata(double.NaN, OnWidthHeightPropertyChanged));\r\n\r\n        public bool ForceSize\r\n        {\r\n            get { return (bool)GetValue(ForceSizeProperty); }\r\n            set { SetValue(ForceSizeProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty ForceSizeProperty =\r\n            DependencyProperty.Register(\"ForceSize\", typeof(bool), typeof(ScaledContentControl), new PropertyMetadata(false, OnWidthHeightPropertyChanged));\r\n\r\n        private static void OnWidthHeightPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            var control = (ScaledContentControl)d;\r\n            control.InvalidateMeasure();\r\n            control.InvalidateArrange();\r\n            control.UpdateLayout();\r\n        }\r\n\r\n        private Window root;\r\n\r\n        public ScaledContentControl()\r\n        {\r\n            DefaultStyleKey = typeof(ScaledContentControl);\r\n        }\r\n\r\n        protected override Size MeasureOverride(Size constraint)\r\n        {\r\n            if (root == null)\r\n                root = Window.Current;\r\n\r\n            double width = TargetWidth;\r\n            double height = TargetHeight;\r\n\r\n            if (double.IsNaN(width) || double.IsNaN(height))\r\n                return base.MeasureOverride(constraint);\r\n\r\n            var maxWidth = Math.Min(root.Bounds.Width, Math.Min(MaxWidth, constraint.Width));\r\n            var maxHeight = Math.Min(root.Bounds.Height - 32, Math.Min(MaxHeight, constraint.Height));\r\n\r\n            Drawing.ScaleProportions(ref width, ref height, maxWidth, maxHeight);\r\n            Drawing.ScaleProportions(ref width, ref height, Math.Min(constraint.Width, maxWidth), Math.Min(constraint.Height, maxHeight));\r\n\r\n            if (ForceSize && Content is FrameworkElement element)\r\n            {\r\n                element.Width = width;\r\n                element.Height = height;\r\n            }\r\n\r\n            return new Size(width, height);\r\n        }\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Settings/Converters.cs",
    "content": "using System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Data;\n\n#nullable enable\n\nnamespace SettingsControl\n{\n    /// <summary>\n    /// The generic base implementation of a value converter.\n    /// </summary>\n    /// <typeparam name=\"TSource\">The source type.</typeparam>\n    /// <typeparam name=\"TTarget\">The target type.</typeparam>\n    public abstract class ValueConverter<TSource, TTarget>\n        : IValueConverter\n    {\n        /// <summary>\n        /// Converts a source value to the target type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <returns></returns>\n        public TTarget? Convert(TSource? value)\n        {\n            return Convert(value, null, null);\n        }\n\n        /// <summary>\n        /// Converts a target value back to the source type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <returns></returns>\n        public TSource? ConvertBack(TTarget? value)\n        {\n            return ConvertBack(value, null, null);\n        }\n\n        /// <summary>\n        /// Modifies the source data before passing it to the target for display in the UI.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"targetType\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        public object? Convert(object? value, Type? targetType, object? parameter, string? language)\n        {\n            // CastExceptions will occur when invalid value, or target type provided.\n            return Convert((TSource?)value, parameter, language);\n        }\n\n        /// <summary>\n        /// Modifies the target data before passing it to the source object. This method is called only in TwoWay bindings.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"targetType\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        public object? ConvertBack(object? value, Type? targetType, object? parameter, string? language)\n        {\n            // CastExceptions will occur when invalid value, or target type provided.\n            return ConvertBack((TTarget?)value, parameter, language);\n        }\n\n        /// <summary>\n        /// Converts a source value to the target type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        protected virtual TTarget? Convert(TSource? value, object? parameter, string? language)\n        {\n            throw new NotSupportedException();\n        }\n\n        /// <summary>\n        /// Converts a target value back to the source type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        protected virtual TSource? ConvertBack(TTarget? value, object? parameter, string? language)\n        {\n            throw new NotSupportedException();\n        }\n    }\n\n    /// <summary>\n    /// The base class for converting instances of type T to object and vice versa.\n    /// </summary>\n    public abstract class ToObjectConverter<T>\n        : ValueConverter<T?, object?>\n    {\n        /// <summary>\n        /// Converts a source value to the target type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        protected override object? Convert(T? value, object? parameter, string? language)\n        {\n            return value;\n        }\n\n        /// <summary>\n        /// Converts a target value back to the source type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        protected override T? ConvertBack(object? value, object? parameter, string? language)\n        {\n            return (T?)value;\n        }\n    }\n\n    /// <summary>\n    /// Converts a boolean to and from a visibility value.\n    /// </summary>\n    public class InverseBooleanConverter\n        : ValueConverter<bool, bool>\n    {\n        /// <summary>\n        /// Converts a source value to the target type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        protected override bool Convert(bool value, object? parameter, string? language)\n        {\n            return !value;\n        }\n\n        /// <summary>\n        /// Converts a target value back to the source type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        protected override bool ConvertBack(bool value, object? parameter, string? language)\n        {\n            return !value;\n        }\n    }\n\n    public class NullToTrueConverter\n        : ValueConverter<object?, bool>\n    {\n        /// <summary>\n        /// Determines whether an inverse conversion should take place.\n        /// </summary>\n        /// <remarks>If set, the value True results in <see cref=\"Visibility.Collapsed\"/>, and false in <see cref=\"Visibility.Visible\"/>.</remarks>\n        public bool Inverse { get; set; }\n\n        /// <summary>\n        /// Converts a source value to the target type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        protected override bool Convert(object? value, object? parameter, string? language)\n        {\n            return Inverse ? value != null : value == null;\n        }\n\n        /// <summary>\n        /// Converts a target value back to the source type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        protected override object? ConvertBack(bool value, object? parameter, string? language)\n        {\n            return null;\n        }\n    }\n\n    public class StringNullOrWhiteSpaceToTrueConverter\n        : ValueConverter<string, bool>\n    {\n        /// <summary>\n        /// Determines whether an inverse conversion should take place.\n        /// </summary>\n        /// <remarks>If set, the value True results in <see cref=\"Visibility.Collapsed\"/>, and false in <see cref=\"Visibility.Visible\"/>.</remarks>\n        public bool Inverse { get; set; }\n\n        /// <summary>\n        /// Converts a source value to the target type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        protected override bool Convert(string? value, object? parameter, string? language)\n        {\n            return Inverse ? !string.IsNullOrWhiteSpace(value) : string.IsNullOrWhiteSpace(value);\n        }\n\n        /// <summary>\n        /// Converts a target value back to the source type.\n        /// </summary>\n        /// <param name=\"value\"></param>\n        /// <param name=\"parameter\"></param>\n        /// <param name=\"language\"></param>\n        /// <returns></returns>\n        protected override string ConvertBack(bool value, object? parameter, string? language)\n        {\n            return string.Empty;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Settings/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2021 Gustave Monce\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "Unicord.Universal/Controls/Settings/SettingsBlockControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"SettingsControl.SettingsBlockControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:SettingsControl\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:muxc=\"using:Microsoft.UI.Xaml.Controls\"\n    mc:Ignorable=\"d\"\n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"400\">\n\n    <UserControl.Resources>\n        <local:InverseBooleanConverter x:Key=\"InverseBooleanConverter\" />\n        <local:NullToTrueConverter x:Key=\"NullToFalseConverter\" Inverse=\"True\" />\n        <local:NullToTrueConverter x:Key=\"NullToTrueConverter\" Inverse=\"False\" />\n        <local:StringNullOrWhiteSpaceToTrueConverter x:Key=\"StringNullOrWhiteSpaceToFalseConverter\" Inverse=\"True\" />\n        <local:StringNullOrWhiteSpaceToTrueConverter x:Key=\"StringNullOrWhiteSpaceToTrueConverter\" Inverse=\"False\" />\n\n        <Style x:Key=\"TextBlockGroupHeaderStyle\" TargetType=\"TextBlock\">\n            <Setter Property=\"Margin\" Value=\"0,8,0,4\" />\n            <Setter Property=\"FontSize\" Value=\"16\" />\n            <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n            <Setter Property=\"FontWeight\" Value=\"Bold\" />\n        </Style>\n\n        <Style x:Key=\"GridSettingsBlockStyle\" TargetType=\"Grid\">\n            <Setter Property=\"Background\" Value=\"{ThemeResource ExpanderHeaderBackground}\" />\n            <Setter Property=\"BorderBrush\" Value=\"{ThemeResource ExpanderHeaderBorderBrush}\" />\n            <Setter Property=\"BorderThickness\" Value=\"{ThemeResource ExpanderHeaderBorderThickness}\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"MinHeight\" Value=\"{StaticResource ExpanderMinHeight}\" />\n            <Setter Property=\"Padding\" Value=\"{StaticResource ExpanderContentPadding}\" />\n            <Setter Property=\"CornerRadius\" Value=\"{ThemeResource ControlCornerRadius}\" />\n        </Style>\n\n        <Style x:Key=\"ButtonSettingsBlockStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource DefaultButtonStyle}\">\n            <Setter Property=\"Background\" Value=\"{ThemeResource ExpanderHeaderBackground}\" />\n            <Setter Property=\"BorderBrush\" Value=\"{ThemeResource ExpanderHeaderBorderBrush}\" />\n            <Setter Property=\"BorderThickness\" Value=\"{ThemeResource ExpanderHeaderBorderThickness}\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n            <Setter Property=\"Padding\" Value=\"{StaticResource ExpanderContentPadding}\" />\n            <Setter Property=\"MinHeight\" Value=\"{StaticResource ExpanderMinHeight}\" />\n        </Style>\n    </UserControl.Resources>\n\n    <Grid Margin=\"0,0,0,4\" Opacity=\"{x:Bind IsEnabled, Mode=OneWay, Converter={StaticResource BoolOpacityConverter}}\">\n        <!-- Expander -->\n        <Grid x:Name=\"ExpanderPreGrid\" x:Load=\"{x:Bind ExpandableContent, Mode=OneWay, Converter={StaticResource NullToFalseConverter}}\">\n            <Grid x:Name=\"ExpanderGrid\" x:Load=\"{x:Bind IsClickable, Mode=OneWay, Converter={StaticResource InverseBooleanConverter}}\">\n                <muxc:Expander HorizontalAlignment=\"Stretch\" HorizontalContentAlignment=\"Stretch\" Expanding=\"Expander_Expanding\" Collapsed=\"Expander_Collapsed\" IsExpanded=\"{x:Bind IsExpanded, Mode=TwoWay}\">\n                    <muxc:Expander.Header>\n                        <local:SettingsDisplayControl Icon=\"{x:Bind Icon, Mode=OneWay}\" \n                                                      Margin=\"0,16\"\n                                                      AdditionalDescriptionContent=\"{x:Bind AdditionalDescriptionContent, Mode=OneWay}\" \n                                                      Title=\"{x:Bind Title, Mode=OneWay}\" \n                                                      Description=\"{x:Bind Description, Mode=OneWay}\" \n                                                      SettingsActionableElement=\"{x:Bind SettingsActionableElement, Mode=OneWay}\"/>\n                    </muxc:Expander.Header>\n\n                    <ContentPresenter Margin=\"0\" HorizontalAlignment=\"Stretch\" Content=\"{x:Bind ExpandableContent, Mode=OneWay}\" />\n                </muxc:Expander>\n            </Grid>\n        </Grid>\n        <!-- Button -->\n        <Grid x:Name=\"ButtonPreGrid\" x:Load=\"{x:Bind ExpandableContent, Mode=OneWay, Converter={StaticResource NullToTrueConverter}}\">\n            <Grid x:Name=\"ButtonGrid\" x:Load=\"{x:Bind IsClickable, Mode=OneWay}\">\n                <Button x:Name=\"ActionableButton\" Style=\"{StaticResource ButtonSettingsBlockStyle}\" Click=\"ActionableButton_Click\">\n                    <local:SettingsDisplayControl Icon=\"{x:Bind Icon, Mode=OneWay}\" \n                                                  AdditionalDescriptionContent=\"{x:Bind AdditionalDescriptionContent, Mode=OneWay}\" \n                                                  Title=\"{x:Bind Title, Mode=OneWay}\" \n                                                  Description=\"{x:Bind Description, Mode=OneWay}\" \n                                                  SettingsActionableElement=\"{x:Bind SettingsActionableElement, Mode=OneWay}\"/>\n                </Button>\n            </Grid>\n        </Grid>\n        <!-- Grid -->\n        <Grid x:Name=\"StaticPreGrid\" x:Load=\"{x:Bind ExpandableContent, Mode=OneWay, Converter={StaticResource NullToTrueConverter}}\">\n            <Grid x:Name=\"StaticGrid\" x:Load=\"{x:Bind IsClickable, Mode=OneWay, Converter={StaticResource InverseBooleanConverter}}\" Style=\"{StaticResource GridSettingsBlockStyle}\">\n                <local:SettingsDisplayControl Icon=\"{x:Bind Icon, Mode=OneWay}\" \n                                              AdditionalDescriptionContent=\"{x:Bind AdditionalDescriptionContent, Mode=OneWay}\" \n                                              Title=\"{x:Bind Title, Mode=OneWay}\" \n                                              Description=\"{x:Bind Description, Mode=OneWay}\" \n                                              SettingsActionableElement=\"{x:Bind SettingsActionableElement, Mode=OneWay}\"/>\n            </Grid>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Settings/SettingsBlockControl.xaml.cs",
    "content": "﻿using Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Markup;\n\nnamespace SettingsControl\n{\n    [ContentProperty(Name = nameof(SettingsActionableElement))]\n    public sealed partial class SettingsBlockControl : UserControl\n    {\n        public FrameworkElement SettingsActionableElement { get; set; }\n\n        public static readonly DependencyProperty ExpandableContentProperty = DependencyProperty.Register(\n          \"ExpandableContent\",\n          typeof(FrameworkElement),\n          typeof(SettingsBlockControl),\n          new PropertyMetadata(null)\n        );\n        \n        public FrameworkElement ExpandableContent\n        {\n            get => (FrameworkElement)GetValue(ExpandableContentProperty);\n            set => SetValue(ExpandableContentProperty, value);\n        }\n\n        public static readonly DependencyProperty AdditionalDescriptionContentProperty = DependencyProperty.Register(\n          \"AdditionalDescriptionContent\",\n          typeof(FrameworkElement),\n          typeof(SettingsBlockControl),\n          new PropertyMetadata(null)\n        );\n\n        public FrameworkElement AdditionalDescriptionContent\n        {\n            get => (FrameworkElement)GetValue(AdditionalDescriptionContentProperty);\n            set => SetValue(AdditionalDescriptionContentProperty, value);\n        }\n\n        public static readonly DependencyProperty TitleProperty = DependencyProperty.Register(\n          \"Title\",\n          typeof(string),\n          typeof(SettingsBlockControl),\n          new PropertyMetadata(null)\n        );\n\n        public string Title\n        {\n            get => (string)GetValue(TitleProperty);\n            set => SetValue(TitleProperty, value);\n        }\n\n        public static readonly DependencyProperty DescriptionProperty = DependencyProperty.Register(\n          \"Description\",\n          typeof(string),\n          typeof(SettingsBlockControl),\n          new PropertyMetadata(null)\n        );\n\n        public string Description\n        {\n            get => (string)GetValue(DescriptionProperty);\n            set => SetValue(DescriptionProperty, value);\n        }\n\n        public static readonly DependencyProperty IconProperty = DependencyProperty.Register(\n          \"Icon\",\n          typeof(IconElement),\n          typeof(SettingsBlockControl),\n          new PropertyMetadata(null)\n        );\n\n        public IconElement Icon\n        {\n            get => (IconElement)GetValue(IconProperty);\n            set => SetValue(IconProperty, value);\n        }\n\n        public static readonly DependencyProperty IsClickableProperty = DependencyProperty.Register(\n          \"IsClickable\",\n          typeof(bool),\n          typeof(SettingsBlockControl),\n          new PropertyMetadata(false)\n        );\n\n        public bool IsClickable\n        {\n            get => (bool)GetValue(IsClickableProperty);\n            set => SetValue(IsClickableProperty, value);\n        }\n\n        public static readonly DependencyProperty IsExpandedProperty = DependencyProperty.Register(\n          \"IsExpanded\",\n          typeof(bool),\n          typeof(SettingsBlockControl),\n          new PropertyMetadata(false)\n        );\n\n        public bool IsExpanded\n        {\n            get => (bool)GetValue(IsExpandedProperty);\n            set => SetValue(IsExpandedProperty, value);\n        }\n\n        //\n        // Summary:\n        //     Occurs when a button control is clicked.\n        public event RoutedEventHandler Click;\n\n        public SettingsBlockControl()\n        {\n            this.InitializeComponent();\n        }\n\n        private void ActionableButton_Click(object sender, RoutedEventArgs e)\n        {\n            Click?.Invoke(this, e);\n        }\n\n        private void Expander_Expanding(Microsoft.UI.Xaml.Controls.Expander sender, Microsoft.UI.Xaml.Controls.ExpanderExpandingEventArgs args)\n        {\n            Click?.Invoke(this, new RoutedEventArgs());\n        }\n\n        private void Expander_Collapsed(Microsoft.UI.Xaml.Controls.Expander sender, Microsoft.UI.Xaml.Controls.ExpanderCollapsedEventArgs args)\n        {\n            Click?.Invoke(this, new RoutedEventArgs());\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Settings/SettingsDisplayControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"SettingsControl.SettingsDisplayControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:SettingsControl\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    SizeChanged=\"MainPanel_SizeChanged\"\n    mc:Ignorable=\"d\"\n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"400\">\n\n    <UserControl.Resources>\n        <local:InverseBooleanConverter x:Key=\"InverseBooleanConverter\" />\n        <local:NullToTrueConverter x:Key=\"NullToFalseConverter\" Inverse=\"True\" />\n        <local:NullToTrueConverter x:Key=\"NullToTrueConverter\" Inverse=\"False\" />\n        <local:StringNullOrWhiteSpaceToTrueConverter x:Key=\"StringNullOrWhiteSpaceToFalseConverter\" Inverse=\"True\" />\n        <local:StringNullOrWhiteSpaceToTrueConverter x:Key=\"StringNullOrWhiteSpaceToTrueConverter\" Inverse=\"False\" />\n\n        <Style x:Key=\"TextBlockSettingDescriptionStyle\" TargetType=\"TextBlock\">\n            <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\n            <Setter Property=\"FontSize\" Value=\"12\" />\n            <Setter Property=\"Opacity\" Value=\"0.75\" />\n        </Style>\n    </UserControl.Resources>\n\n    <Grid x:Name=\"MainPanel\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Center\">\n        <VisualStateManager.VisualStateGroups>\n            <VisualStateGroup>\n                <VisualState x:Name=\"NormalState\">\n                    <VisualState.Setters>\n                        <Setter Target=\"ActionableElement.(Grid.Row)\" Value=\"0\" />\n                        <Setter Target=\"ActionableElement.(Grid.Column)\" Value=\"2\" />\n                        <Setter Target=\"ActionableElement.Margin\" Value=\"24,0,0,0\" />\n                    </VisualState.Setters>\n                </VisualState>\n                <VisualState x:Name=\"CompactState\">\n                    <VisualState.Setters>\n                        <Setter Target=\"ActionableElement.(Grid.Row)\" Value=\"1\" />\n                        <Setter Target=\"ActionableElement.(Grid.Column)\" Value=\"1\" />\n                        <Setter Target=\"ActionableElement.Margin\" Value=\"0,4,0,0\" />\n                    </VisualState.Setters>\n                </VisualState>\n            </VisualStateGroup>\n        </VisualStateManager.VisualStateGroups>\n\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"*\"/>\n            <ColumnDefinition Width=\"Auto\"/>\n        </Grid.ColumnDefinitions>\n\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <ContentPresenter x:Name=\"SettingsIconElement\"\n                          x:Load=\"{x:Bind Icon, Mode=OneWay, Converter={StaticResource NullToFalseConverter}}\"\n                          Content=\"{x:Bind Icon, Mode=OneWay}\"\n                          Margin=\"2,0,20,0\"/>\n\n        <Grid x:Name=\"DescriptionPanel\"\n              Grid.Column=\"1\"\n              VerticalAlignment=\"Center\"\n              HorizontalAlignment=\"Left\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <TextBlock x:Name=\"TitleBlock\"\n                       x:Load=\"{x:Bind Title, Mode=OneWay, Converter={StaticResource StringNullOrWhiteSpaceToFalseConverter}}\"\n                       Text=\"{x:Bind Title, Mode=OneWay}\"\n                       TextWrapping=\"Wrap\"/>\n\n            <StackPanel Grid.Row=\"1\" Orientation=\"Vertical\">\n                <TextBlock x:Name=\"DescriptionBlock\"\n                           x:Load=\"{x:Bind Description, Mode=OneWay, Converter={StaticResource StringNullOrWhiteSpaceToFalseConverter}}\"\n                           Style=\"{StaticResource TextBlockSettingDescriptionStyle}\"\n                           Text=\"{x:Bind Description, Mode=OneWay}\"/>\n\n                <ContentPresenter x:Name=\"AdditionalContentPanel\"\n                                  x:Load=\"{x:Bind AdditionalDescriptionContent, Mode=OneWay, Converter={StaticResource NullToFalseConverter}}\"\n                                  Margin=\"0,2,0,0\"\n                                  HorizontalAlignment=\"Left\"\n                                  Content=\"{x:Bind AdditionalDescriptionContent, Mode=OneWay}\"/>\n            </StackPanel>\n        </Grid>\n\n        <ContentPresenter x:Name=\"ActionableElement\"\n                          x:Load=\"{x:Bind SettingsActionableElement, Mode=OneWay, Converter={StaticResource NullToFalseConverter}}\"\n                          Grid.Column=\"2\"\n                          Margin=\"24,0,0,0\"\n                          HorizontalAlignment=\"Left\"\n                          VerticalAlignment=\"Center\"\n                          Content=\"{x:Bind SettingsActionableElement, Mode=OneWay}\" />\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Settings/SettingsDisplayControl.xaml.cs",
    "content": "﻿using Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Markup;\n\nnamespace SettingsControl\n{\n    [ContentProperty(Name = nameof(SettingsActionableElement))]\n    public sealed partial class SettingsDisplayControl : UserControl\n    {\n        public FrameworkElement SettingsActionableElement { get; set; }\n\n        public static readonly DependencyProperty AdditionalDescriptionContentProperty = DependencyProperty.Register(\n          \"AdditionalDescriptionContent\",\n          typeof(FrameworkElement),\n          typeof(SettingsDisplayControl),\n          new PropertyMetadata(null)\n        );\n\n        public FrameworkElement AdditionalDescriptionContent\n        {\n            get => (FrameworkElement)GetValue(AdditionalDescriptionContentProperty);\n            set => SetValue(AdditionalDescriptionContentProperty, value);\n        }\n\n        public static readonly DependencyProperty TitleProperty = DependencyProperty.Register(\n          \"Title\",\n          typeof(string),\n          typeof(SettingsDisplayControl),\n          new PropertyMetadata(null)\n        );\n\n        public string Title\n        {\n            get => (string)GetValue(TitleProperty);\n            set => SetValue(TitleProperty, value);\n        }\n\n        public static readonly DependencyProperty DescriptionProperty = DependencyProperty.Register(\n          \"Description\",\n          typeof(string),\n          typeof(SettingsDisplayControl),\n          new PropertyMetadata(null)\n        );\n\n        public string Description\n        {\n            get => (string)GetValue(DescriptionProperty);\n            set => SetValue(DescriptionProperty, value);\n        }\n\n        public static readonly DependencyProperty IconProperty = DependencyProperty.Register(\n          \"Icon\",\n          typeof(IconElement),\n          typeof(SettingsDisplayControl),\n          new PropertyMetadata(null)\n        );\n\n        public IconElement Icon\n        {\n            get => (IconElement)GetValue(IconProperty);\n            set => SetValue(IconProperty, value);\n        }\n\n        public SettingsDisplayControl()\n        {\n            this.InitializeComponent();\n            VisualStateManager.GoToState(this, \"NormalState\", false);\n        }\n\n        private void MainPanel_SizeChanged(object sender, SizeChangedEventArgs e)\n        {\n            if (e.NewSize.Width == e.PreviousSize.Width || ActionableElement == null)\n                return;\n\n            if (ActionableElement.ActualWidth > e.NewSize.Width / 3)\n            {\n                VisualStateManager.GoToState(this, \"CompactState\", false);\n            }\n            else\n            {\n                VisualStateManager.GoToState(this, \"NormalState\", false);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/SidebarSearchBox.cs",
    "content": "﻿using Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Controls\n{\n    public sealed class SidebarSearchBox : Control\n    {\n        public SidebarSearchBox()\n        {\n            this.DefaultStyleKey = typeof(SidebarSearchBox);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/UniformGrid/TakenSpotsReferenceHolder.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n// See the LICENSE file in the project root for more information.\n\nusing System.Collections;\nusing System.Drawing;\n\nnamespace Unicord.Universal.Controls\n{\n    /// <summary>\n    /// Referencable class object we can use to have a reference shared between\n    /// our <see cref=\"UniformGrid.MeasureOverride\"/> and\n    /// <see cref=\"UniformGrid.GetFreeSpot\"/> iterator.\n    /// This is used so we can better isolate our logic and make it easier to test.\n    /// </summary>\n    internal sealed class TakenSpotsReferenceHolder\n    {\n        /// <summary>\n        /// The <see cref=\"BitArray\"/> instance used to efficiently track empty spots.\n        /// </summary>\n        private readonly BitArray spotsTaken;\n\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"TakenSpotsReferenceHolder\"/> class.\n        /// </summary>\n        /// <param name=\"rows\">The number of rows to track.</param>\n        /// <param name=\"columns\">The number of columns to track.</param>\n        public TakenSpotsReferenceHolder(int rows, int columns)\n        {\n            Height = rows;\n            Width = columns;\n\n            this.spotsTaken = new BitArray(rows * columns);\n        }\n\n        /// <summary>\n        /// Gets the height of the grid to monitor.\n        /// </summary>\n        public int Height { get; }\n\n        /// <summary>\n        /// Gets the width of the grid to monitor.\n        /// </summary>\n        public int Width { get; }\n\n        /// <summary>\n        /// Gets or sets the value of a specified grid cell.\n        /// </summary>\n        /// <param name=\"i\">The vertical offset.</param>\n        /// <param name=\"j\">The horizontal offset.</param>\n        public bool this[int i, int j]\n        {\n            get => this.spotsTaken[(i * Width) + j];\n            set => this.spotsTaken[(i * Width) + j] = value;\n        }\n\n        /// <summary>\n        /// Fills the specified area in the current grid with a given value.\n        /// If invalid coordinates are given, they will simply be ignored and no exception will be thrown.\n        /// </summary>\n        /// <param name=\"value\">The value to fill the target area with.</param>\n        /// <param name=\"row\">The row to start on (inclusive, 0-based index).</param>\n        /// <param name=\"column\">The column to start on (inclusive, 0-based index).</param>\n        /// <param name=\"width\">The positive width of area to fill.</param>\n        /// <param name=\"height\">The positive height of area to fill.</param>\n        public void Fill(bool value, int row, int column, int width, int height)\n        {\n            Rectangle bounds = new Rectangle(0, 0, Width, Height);\n\n            // Precompute bounds to skip branching in main loop\n            bounds.Intersect(new Rectangle(column, row, width, height));\n\n            for (int i = bounds.Top; i < bounds.Bottom; i++)\n            {\n                for (int j = bounds.Left; j < bounds.Right; j++)\n                {\n                    this[i, j] = value;\n                }\n            }\n        }\n\n        /// <summary>\n        /// Resets the current reference holder.\n        /// </summary>\n        public void Reset()\n        {\n            this.spotsTaken.SetAll(false);\n        }\n    }\n}"
  },
  {
    "path": "Unicord.Universal/Controls/UniformGrid/UniformGrid.Helpers.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n// See the LICENSE file in the project root for more information.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Controls\n{\n    /// <summary>\n    /// The UniformGrid control presents information within a Grid with even spacing.\n    /// </summary>\n    public partial class UniformGrid : Grid\n    {\n        // Provides the next spot in the boolean array with a 'false' value.\n        internal static IEnumerable<(int row, int column)> GetFreeSpot(TakenSpotsReferenceHolder arrayref, int firstcolumn, bool topdown)\n        {\n            if (topdown)\n            {\n                var rows = arrayref.Height;\n\n                // Layout spots from Top-Bottom, Left-Right (right-left handled automatically by Grid with Flow-Direction).\n                // Effectively transpose the Grid Layout.\n                for (int c = 0; c < arrayref.Width; c++)\n                {\n                    int start = (c == 0 && firstcolumn > 0 && firstcolumn < rows) ? firstcolumn : 0;\n                    for (int r = start; r < rows; r++)\n                    {\n                        if (!arrayref[r, c])\n                        {\n                            yield return (r, c);\n                        }\n                    }\n                }\n            }\n            else\n            {\n                var columns = arrayref.Width;\n\n                // Layout spots as normal from Left-Right.\n                // (right-left handled automatically by Grid with Flow-Direction\n                // during its layout, internal model is always left-right).\n                for (int r = 0; r < arrayref.Height; r++)\n                {\n                    int start = (r == 0 && firstcolumn > 0 && firstcolumn < columns) ? firstcolumn : 0;\n                    for (int c = start; c < columns; c++)\n                    {\n                        if (!arrayref[r, c])\n                        {\n                            yield return (r, c);\n                        }\n                    }\n                }\n            }\n        }\n\n        // Based on the number of visible children,\n        // returns the dimensions of the\n        // grid we need to hold all elements.\n        internal static (int rows, int columns) GetDimensions(FrameworkElement[] visible, int rows, int cols, int firstColumn)\n        {\n            // If a dimension isn't specified, we need to figure out the other one (or both).\n            if (rows == 0 || cols == 0)\n            {\n                // Calculate the size & area of all objects in the grid to know how much space we need.\n                var count = Math.Max(1, visible.Sum(item => GetRowSpan(item) * GetColumnSpan(item)));\n\n                if (rows == 0)\n                {\n                    if (cols > 0)\n                    {\n                        // Bound check\n                        var first = (firstColumn >= cols || firstColumn < 0) ? 0 : firstColumn;\n\n                        // If we have columns but no rows, calculate rows based on column offset and number of children.\n                        rows = (count + first + (cols - 1)) / cols;\n                        return (rows, cols);\n                    }\n                    else\n                    {\n                        // Otherwise, determine square layout if both are zero.\n                        var size = (int)Math.Ceiling(Math.Sqrt(count));\n\n                        // Figure out if firstColumn is in bounds\n                        var first = (firstColumn >= size || firstColumn < 0) ? 0 : firstColumn;\n\n                        rows = (int)Math.Ceiling(Math.Sqrt(count + first));\n                        return (rows, rows);\n                    }\n                }\n                else if (cols == 0)\n                {\n                    // If we have rows and no columns, then calculate columns needed based on rows\n                    cols = (count + (rows - 1)) / rows;\n\n                    // Now that we know a rough size of our shape, see if the FirstColumn effects that:\n                    var first = (firstColumn >= cols || firstColumn < 0) ? 0 : firstColumn;\n\n                    cols = (count + first + (rows - 1)) / rows;\n                }\n            }\n\n            return (rows, cols);\n        }\n\n        // Used to interleave specified row dimensions with automatic rows added to use\n        // underlying Grid layout for main arrange of UniformGrid.\n        internal void SetupRowDefinitions(int rows)\n        {\n            // Mark initial definitions so we don't erase them.\n            foreach (var rd in RowDefinitions)\n            {\n                if (GetAutoLayout(rd) == null)\n                {\n                    SetAutoLayout(rd, false);\n                }\n            }\n\n            // Remove non-autolayout rows we've added and then add them in the right spots.\n            if (rows != RowDefinitions.Count)\n            {\n                for (int r = RowDefinitions.Count - 1; r >= 0; r--)\n                {\n                    if (GetAutoLayout(RowDefinitions[r]) == true)\n                    {\n                        RowDefinitions.RemoveAt(r);\n                    }\n                }\n\n                for (int r = this.RowDefinitions.Count; r < rows; r++)\n                {\n                    var rd = new RowDefinition() { Height = new GridLength(1, GridUnitType.Auto) };\n                    SetAutoLayout(rd, true);\n                    this.RowDefinitions.Insert(r, rd);\n                }\n            }\n        }\n\n        // Used to interleave specified column dimensions with automatic columns added to use\n        // underlying Grid layout for main arrange of UniformGrid.\n        internal void SetupColumnDefinitions(int columns)\n        {\n            // Mark initial definitions so we don't erase them.\n            foreach (var cd in ColumnDefinitions)\n            {\n                if (GetAutoLayout(cd) == null)\n                {\n                    SetAutoLayout(cd, false);\n                }\n            }\n\n            // Remove non-autolayout columns we've added and then add them in the right spots.\n            if (columns != ColumnDefinitions.Count)\n            {\n                for (int c = ColumnDefinitions.Count - 1; c >= 0; c--)\n                {\n                    if (GetAutoLayout(ColumnDefinitions[c]) == true)\n                    {\n                        this.ColumnDefinitions.RemoveAt(c);\n                    }\n                }\n\n                for (int c = ColumnDefinitions.Count; c < columns; c++)\n                {\n                    var cd = new ColumnDefinition();\n                    SetAutoLayout(cd, true);\n                    ColumnDefinitions.Insert(c, cd);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "Unicord.Universal/Controls/UniformGrid/UniformGrid.Properties.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n// See the LICENSE file in the project root for more information.\n\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Controls\n{\n    /// <summary>\n    /// The UniformGrid spaces items evenly.\n    /// </summary>\n    public partial class UniformGrid\n    {\n        /// <summary>\n        /// Determines if this element in the grid participates in the auto-layout algorithm.\n        /// </summary>\n        public static readonly DependencyProperty AutoLayoutProperty =\n            DependencyProperty.RegisterAttached(\n              \"AutoLayout\",\n              typeof(bool?),\n              typeof(UniformGrid),\n              new PropertyMetadata(null));\n\n        /// <summary>\n        /// Sets the AutoLayout Attached Property Value. Used internally to track items which need to be arranged vs. fixed in place.\n        /// Though it its required to use this property to force an element to the 0, 0 position.\n        /// </summary>\n        /// <param name=\"element\"><see cref=\"FrameworkElement\"/></param>\n        /// <param name=\"value\">A true value indicates this item should be automatically arranged.</param>\n        public static void SetAutoLayout(FrameworkElement element, bool? value)\n        {\n            element.SetValue(AutoLayoutProperty, value);\n        }\n\n        /// <summary>\n        /// Gets the AutoLayout Attached Property Value. Used internally to track items which need to be arranged vs. fixed in place.\n        /// </summary>\n        /// <param name=\"element\"><see cref=\"FrameworkElement\"/></param>\n        /// <returns>A true value indicates this item should be automatically arranged.</returns>\n        public static bool? GetAutoLayout(FrameworkElement element)\n        {\n            return (bool?)element.GetValue(AutoLayoutProperty);\n        }\n\n        /// <summary>\n        /// Sets the AutoLayout Attached Property Value. Used internally to track items which need to be arranged vs. fixed in place.\n        /// </summary>\n        /// <param name=\"element\"><see cref=\"ColumnDefinition\"/></param>\n        /// <param name=\"value\">A true value indicates this item should be automatically arranged.</param>\n        internal static void SetAutoLayout(ColumnDefinition element, bool? value)\n        {\n            element.SetValue(AutoLayoutProperty, value);\n        }\n\n        /// <summary>\n        /// Gets the AutoLayout Attached Property Value. Used internally to track items which need to be arranged vs. fixed in place.\n        /// </summary>\n        /// <param name=\"element\"><see cref=\"ColumnDefinition\"/></param>\n        /// <returns>A true value indicates this item should be automatically arranged.</returns>\n        internal static bool? GetAutoLayout(ColumnDefinition element)\n        {\n            return (bool?)element.GetValue(AutoLayoutProperty);\n        }\n\n        /// <summary>\n        /// Sets the AutoLayout Attached Property Value. Used internally to track items which need to be arranged vs. fixed in place.\n        /// </summary>\n        /// <param name=\"element\"><see cref=\"RowDefinition\"/></param>\n        /// <param name=\"value\">A true value indicates this item should be automatically arranged.</param>\n        internal static void SetAutoLayout(RowDefinition element, bool? value)\n        {\n            element.SetValue(AutoLayoutProperty, value);\n        }\n\n        /// <summary>\n        /// Gets the AutoLayout Attached Property Value. Used internally to track items which need to be arranged vs. fixed in place.\n        /// </summary>\n        /// <param name=\"element\"><see cref=\"RowDefinition\"/></param>\n        /// <returns>A true value indicates this item should be automatically arranged.</returns>\n        internal static bool? GetAutoLayout(RowDefinition element)\n        {\n            return (bool?)element.GetValue(AutoLayoutProperty);\n        }\n\n        /// <summary>\n        /// Identifies the <see cref=\"Columns\"/> dependency property.\n        /// </summary>\n        public static readonly DependencyProperty ColumnsProperty =\n            DependencyProperty.Register(nameof(Columns), typeof(int), typeof(UniformGrid), new PropertyMetadata(0, OnPropertyChanged));\n\n        /// <summary>\n        /// Identifies the <see cref=\"FirstColumn\"/> dependency property.\n        /// </summary>\n        public static readonly DependencyProperty FirstColumnProperty =\n            DependencyProperty.Register(nameof(FirstColumn), typeof(int), typeof(UniformGrid), new PropertyMetadata(0, OnPropertyChanged));\n\n        /// <summary>\n        /// Identifies the <see cref=\"Orientation\"/> dependency property.\n        /// </summary>\n        public static readonly DependencyProperty OrientationProperty =\n            DependencyProperty.Register(nameof(Orientation), typeof(Orientation), typeof(UniformGrid), new PropertyMetadata(Orientation.Horizontal, OnPropertyChanged));\n\n        /// <summary>\n        /// Identifies the <see cref=\"Rows\"/> dependency property.\n        /// </summary>\n        public static readonly DependencyProperty RowsProperty =\n            DependencyProperty.Register(nameof(Rows), typeof(int), typeof(UniformGrid), new PropertyMetadata(0, OnPropertyChanged));\n\n        private static void OnPropertyChanged(DependencyObject d, object newValue)\n        {\n            var self = d as UniformGrid;\n\n            if (self != null)\n            {\n                self.InvalidateMeasure();\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the number of columns in the UniformGrid.\n        /// </summary>\n        public int Columns\n        {\n            get { return (int)GetValue(ColumnsProperty); }\n            set { SetValue(ColumnsProperty, value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the starting column offset for the first row of the UniformGrid.\n        /// </summary>\n        public int FirstColumn\n        {\n            get { return (int)GetValue(FirstColumnProperty); }\n            set { SetValue(FirstColumnProperty, value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the orientation of the grid. When <see cref=\"Orientation.Vertical\"/>,\n        /// will transpose the layout of automatically arranged items such that they start from\n        /// top to bottom then based on <see cref=\"FlowDirection\"/>.\n        /// Defaults to <see cref=\"Orientation.Horizontal\"/>.\n        /// </summary>\n        public Orientation Orientation\n        {\n            get { return (Orientation)GetValue(OrientationProperty); }\n            set { SetValue(OrientationProperty, value); }\n        }\n\n        /// <summary>\n        /// Gets or sets the number of rows in the UniformGrid.\n        /// </summary>\n        public int Rows\n        {\n            get { return (int)GetValue(RowsProperty); }\n            set { SetValue(RowsProperty, value); }\n        }\n    }\n}"
  },
  {
    "path": "Unicord.Universal/Controls/UniformGrid/UniformGrid.cs",
    "content": "// Licensed to the .NET Foundation under one or more agreements.\n// The .NET Foundation licenses this file to you under the MIT license.\n// See the LICENSE file in the project root for more information.\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.Foundation;\n\nnamespace Unicord.Universal.Controls\n{\n    /// <summary>\n    /// The UniformGrid control presents information within a Grid with even spacing.\n    /// </summary>\n    public partial class UniformGrid : Grid\n    {\n        // Internal list we use to keep track of items that we don't have space to layout.\n        private List<UIElement> _overflow = new List<UIElement>();\n\n        /// <summary>\n        /// The <see cref=\"TakenSpotsReferenceHolder\"/> instance in use, if any.\n        /// </summary>\n        private TakenSpotsReferenceHolder _spotref;\n\n        /// <inheritdoc/>\n        protected override Size MeasureOverride(Size availableSize)\n        {\n            // Get all Visible FrameworkElement Children\n            var visible = Children.Where(item => item.Visibility != Visibility.Collapsed && item is FrameworkElement).Select(item => item as FrameworkElement).ToArray();\n\n#pragma warning disable SA1008 // Opening parenthesis must be spaced correctly\n            var (rows, columns) = GetDimensions(visible, Rows, Columns, FirstColumn);\n#pragma warning restore SA1008 // Opening parenthesis must be spaced correctly\n\n            // Now that we know size, setup automatic rows/columns\n            // to utilize Grid for UniformGrid behavior.\n            // We also interleave any specified rows/columns with fixed sizes.\n            SetupRowDefinitions(rows);\n            SetupColumnDefinitions(columns);\n\n            TakenSpotsReferenceHolder spotref;\n\n            // If the last spot holder matches the size currently in use, just reset\n            // that instance and reuse it to avoid allocating a new bit array.\n            if (_spotref != null && _spotref.Height == rows && _spotref.Width == columns)\n            {\n                spotref = _spotref;\n\n                spotref.Reset();\n            }\n            else\n            {\n                spotref = _spotref = new TakenSpotsReferenceHolder(rows, columns);\n            }\n\n            // Figure out which children we should automatically layout and where available openings are.\n            foreach (var child in visible)\n            {\n                var row = GetRow(child);\n                var col = GetColumn(child);\n                var rowspan = GetRowSpan(child);\n                var colspan = GetColumnSpan(child);\n\n                // If an element needs to be forced in the 0, 0 position,\n                // they should manually set UniformGrid.AutoLayout to False for that element.\n                if ((row == 0 && col == 0 && GetAutoLayout(child) == null) ||\n                    GetAutoLayout(child) == true)\n                {\n                    SetAutoLayout(child, true);\n                }\n                else\n                {\n                    SetAutoLayout(child, false);\n\n                    spotref.Fill(true, row, col, colspan, rowspan);\n                }\n            }\n\n            // Setup available size with our known dimensions now.\n            // UniformGrid expands size based on largest singular item.\n            double columnSpacingSize = 0;\n            double rowSpacingSize = 0;\n\n            columnSpacingSize = 0 * (columns - 1);\n            rowSpacingSize = 0 * (rows - 1);\n\n            Size childSize = new Size(\n                (availableSize.Width - columnSpacingSize) / columns,\n                (availableSize.Height - rowSpacingSize) / rows);\n\n            double maxWidth = 0.0;\n            double maxHeight = 0.0;\n\n            var currentRow = -1;\n            var currentHeight = 0.0;\n\n            // Set Grid Row/Col for every child with autolayout = true\n            // Backwards with FlowDirection\n            var freespots = GetFreeSpot(spotref, FirstColumn, Orientation == Orientation.Vertical).GetEnumerator();\n            foreach (var child in visible)\n            {\n                // Set location if we're in charge\n                if (GetAutoLayout(child) == true)\n                {\n                    if (freespots.MoveNext())\n                    {\n                        var (row, column) = freespots.Current;\n                        SetRow(child, row);\n                        SetColumn(child, column);\n\n                        var rowspan = GetRowSpan(child);\n                        var colspan = GetColumnSpan(child);\n\n                        if (rowspan > 1 || colspan > 1)\n                        {\n                            // TODO: Need to tie this into iterator\n                            spotref.Fill(true, row, column, colspan, rowspan);\n                        }\n                    }\n                    else\n                    {\n                        // We've run out of spots as the developer has\n                        // most likely given us a fixed size and too many elements\n                        // Therefore, tell this element it has no size and move on.\n                        child.Measure(Size.Empty);\n\n                        _overflow.Add(child);\n\n                        continue;\n                    }\n                }\n                else if (GetRow(child) < 0 || GetRow(child) >= rows ||\n                         GetColumn(child) < 0 || GetColumn(child) >= columns)\n                {\n                    // A child is specifying a location, but that location is outside\n                    // of our grid space, so we should hide it instead.\n                    child.Measure(Size.Empty);\n\n                    _overflow.Add(child);\n\n                    continue;\n                }\n\n                // Get measurement for max child\n                child.Measure(childSize);\n\n                maxWidth = Math.Max(child.DesiredSize.Width, maxWidth);\n\n                var childRow = GetRow(child);\n                if (currentRow != childRow)\n                {\n                    maxHeight += currentHeight;\n                    currentHeight = 0;\n                    currentRow = childRow;\n                }\n\n                currentHeight = Math.Max(child.DesiredSize.Height, currentHeight);\n            }\n\n            // Return our desired size based on the largest child we found, our dimensions, and spacing.\n            var desiredSize = new Size((maxWidth * columns) + columnSpacingSize, maxHeight + currentHeight + rowSpacingSize);\n            var measuredSize = base.MeasureOverride(desiredSize);\n            return new Size(desiredSize.Width, measuredSize.Height);\n        }\n\n        /// <inheritdoc/>\n        protected override Size ArrangeOverride(Size finalSize)\n        {\n            // Have grid to the bulk of our heavy lifting.\n            var size = base.ArrangeOverride(finalSize);\n\n            // Make sure all overflown elements have no size.\n            foreach (var child in _overflow)\n            {\n                child.Arrange(default);\n            }\n\n            _overflow = new List<UIElement>(); // Reset for next time.\n\n            return size;\n        }\n    }\n}"
  },
  {
    "path": "Unicord.Universal/Controls/UniversalWebView.cs",
    "content": "﻿#define HAS_WEBVIEW_2\r\n\r\nusing System;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Unicord.Universal.Services;\r\nusing Unicord.Universal.Extensions;\r\n\r\n\r\n\r\n#if HAS_WEBVIEW_2\r\nusing KWebView2;\r\nusing Microsoft.Web.WebView2.Core;\r\nusing Windows.System;\r\n#endif\r\n\r\n#pragma warning disable CS8305 // Type is for evaluation purposes only and is subject to change or removal in future updates.\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    /// <summary>\r\n    /// Provides a lightweight wrapper around WebView or WebView2, whichever is available.\r\n    /// </summary>\r\n    public class UniversalWebView : Control\r\n    {\r\n        private bool _isLoaded;\r\n        private Border _root;\r\n        private WebView _webView;\r\n\r\n#if HAS_WEBVIEW_2\r\n        private WebView2 _webView2;\r\n        private static Lazy<bool> IsWebView2Available = new Lazy<bool>(() =>\r\n        {\r\n            try { return !string.IsNullOrWhiteSpace(CoreWebView2Environment.GetAvailableBrowserVersionString()); } catch { return false; }\r\n        });\r\n#endif\r\n\r\n        public Uri Source { get => (Uri)GetValue(SourceProperty); set => SetValue(SourceProperty, value); }\r\n        public static readonly DependencyProperty SourceProperty =\r\n            DependencyProperty.Register(\"Source\", typeof(Uri), typeof(UniversalWebView), new PropertyMetadata(null, OnSourceChanged));\r\n\r\n        private static void OnSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            if (d is not UniversalWebView view)\r\n                return;\r\n\r\n#if HAS_WEBVIEW_2\r\n            if (view._webView2 != null)\r\n                view._webView2.Source = (Uri)e.NewValue;\r\n#endif\r\n            if (view._webView != null)\r\n                view._webView.Source = (Uri)e.NewValue;\r\n        }\r\n\r\n        public string Title { get => (string)GetValue(TitleProperty); private set => SetValue(TitleProperty, value); }\r\n        public static readonly DependencyProperty TitleProperty =\r\n            DependencyProperty.Register(\"Title\", typeof(string), typeof(UniversalWebView), new PropertyMetadata(\"\"));\r\n\r\n        public UniversalWebView()\r\n        {\r\n            DefaultStyleKey = typeof(UniversalWebView);\r\n            Unloaded += OnViewUnloaded;\r\n        }\r\n\r\n        private void OnViewUnloaded(object sender, RoutedEventArgs e)\r\n        {\r\n\r\n        }\r\n\r\n        protected override void OnApplyTemplate()\r\n        {\r\n            base.OnApplyTemplate();\r\n            if (_isLoaded) return;\r\n            _isLoaded = true;\r\n\r\n            _root = this.FindChild<Border>(\"PART_Root\");\r\n\r\n#if HAS_WEBVIEW_2\r\n            if (IsWebView2Available.Value)\r\n            {\r\n                _webView2 = new WebView2 { Source = Source };\r\n                _webView2.CoreWebView2Initialized += OnCoreWebView2Initialized;\r\n\r\n                _root.Child = _webView2;\r\n                return;\r\n            }\r\n#endif\r\n\r\n            var executionMode = WebViewExecutionMode.SeparateThread;\r\n            //if (ApiInformation.IsEnumNamedValuePresent(\"Windows.UI.Xaml.Controls.WebViewExecutionMode\", \"SeparateProcess\"))\r\n            //    executionMode = WebViewExecutionMode.SeparateProcess;\r\n\r\n            _webView = new WebView(executionMode) { Source = Source };\r\n            _webView.ContainsFullScreenElementChanged += OnWebViewFullScreenElementChanged;\r\n\r\n            _root.Child = _webView;\r\n        }\r\n\r\n        private async void OnWebViewFullScreenElementChanged(WebView sender, object args)\r\n        {\r\n            var service = FullscreenService.GetForCurrentView();\r\n            if (sender.ContainsFullScreenElement)\r\n                await service.EnterFullscreenAsync(_webView, _root);\r\n            else\r\n                await service.LeaveFullscreenAsync(_webView, _root);\r\n        }\r\n\r\n#if HAS_WEBVIEW_2\r\n        private void OnCoreWebView2Initialized(WebView2 sender, CoreWebView2InitializedEventArgs args)\r\n        {\r\n            sender.CoreWebView2.DocumentTitleChanged += OnWebView2DocumentTitleChanged;\r\n            sender.CoreWebView2.ContainsFullScreenElementChanged += OnWebView2FullScreenElementChanged;\r\n            sender.CoreWebView2.NewWindowRequested += OnWebView2NewWindowRequesteed;\r\n        }\r\n\r\n        private async void OnWebView2NewWindowRequesteed(CoreWebView2 sender, CoreWebView2NewWindowRequestedEventArgs args)\r\n        {\r\n            args.Handled = true;\r\n            await Launcher.LaunchUriAsync(new Uri(args.Uri));\r\n        }\r\n\r\n        private void OnWebView2DocumentTitleChanged(CoreWebView2 sender, object args)\r\n        {\r\n            this.Title = sender.DocumentTitle;\r\n        }\r\n\r\n        private async void OnWebView2FullScreenElementChanged(CoreWebView2 sender, object args)\r\n        {\r\n            var service = FullscreenService.GetForCurrentView();\r\n            if (sender.ContainsFullScreenElement)\r\n                await service.EnterFullscreenAsync(_webView2, _root);\r\n            else\r\n                await service.LeaveFullscreenAsync(_webView2, _root);\r\n\r\n            _ = Dispatcher.RunIdleAsync((_) => _root.InvalidateArrange());\r\n            _ = Dispatcher.RunIdleAsync((_) => _webView2.InvalidateArrange());\r\n\r\n            //await _webView2.EnsureCoreWebView2Async();\r\n        }\r\n\r\n        internal void Close()\r\n        {\r\n            _root.Child = null;\r\n#if HAS_WEBVIEW_2\r\n            _webView2 = null;\r\n#endif\r\n            _webView = null;\r\n        }\r\n#endif\r\n    }\r\n}\r\n\r\n#pragma warning restore CS8305 // Type is for evaluation purposes only and is subject to change or removal in future updates.\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/UploadItemsControl.xaml",
    "content": "﻿<UserControl\n    x:Class=\"Unicord.Universal.Controls.UploadItemsControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:local=\"using:Unicord.Universal.Controls\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:models=\"using:Unicord.Universal.Models\"\n    xmlns:win1809=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)\"\n    xmlns:winui=\"using:Microsoft.UI.Xaml.Controls\"\n    Height=\"200\"\n    MaxHeight=\"200\"\n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"400\"\n    mc:Ignorable=\"d\">\n\n    <Grid>\n        <controls:DockPanel x:Name=\"uploadGrid\"\n                            Grid.Row=\"2\"\n                            LastChildFill=\"True\">\n            <Grid x:Name=\"uploadSizeContainer\"\n                  Grid.Row=\"1\"\n                  Grid.Column=\"1\"\n                  controls:DockPanel.Dock=\"Right\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\" />\n                    <ColumnDefinition Width=\"Auto\" />\n                </Grid.ColumnDefinitions>\n\n                <Grid Margin=\"8\">\n                    <ProgressBar\n                        x:Name=\"uploadSizeBar\"\n                        Foreground=\"{Binding UploadInfoForeground, TargetNullValue={ThemeResource AccentFillColorDefaultBrush}}\"\n                        Maximum=\"{Binding UploadLimit}\"\n                        RenderTransformOrigin=\"0.5, 0.5\"\n                        Value=\"{Binding UploadProgressBarValue}\">\n                        <ProgressBar.RenderTransform>\n                            <RotateTransform x:Name=\"uploadSizeBarTransform\" Angle=\"-90\" />\n                        </ProgressBar.RenderTransform>\n                        <ProgressBar.Resources>\n                            <CornerRadius x:Key=\"ControlCornerRadius\">2</CornerRadius>\n                        </ProgressBar.Resources>\n                    </ProgressBar>\n                </Grid>\n\n                <TextBlock x:Name=\"uploadSizeText\"\n                           Grid.Row=\"1\"\n                           Grid.Column=\"1\"\n                           Margin=\"-4,8,8,8\"\n                           VerticalAlignment=\"Bottom\"\n                           Foreground=\"{Binding UploadInfoForeground, TargetNullValue={ThemeResource ApplicationForegroundThemeBrush}}\">\n                    <Run x:Name=\"sizeRun\"\n                         FontSize=\"20\"\n                         Text=\"{Binding DisplayUploadSize, FallbackValue='0.0'}\" />\n                    /<Run Text=\"{Binding DisplayUploadLimit, FallbackValue='8.0 MB'}\" /></TextBlock>\n            </Grid>\n\n            <ListView x:Name=\"uploadList\"\n                      IsItemClickEnabled=\"True\"\n                      ItemClick=\"UploadList_ItemClick\"\n                      ItemsSource=\"{Binding FileUploads}\"\n                      ScrollViewer.HorizontalScrollBarVisibility=\"Auto\"\n                      ScrollViewer.HorizontalScrollMode=\"Enabled\"\n                      ScrollViewer.IsHorizontalRailEnabled=\"True\"\n                      ScrollViewer.IsVerticalRailEnabled=\"False\"\n                      ScrollViewer.VerticalScrollBarVisibility=\"Disabled\"\n                      ScrollViewer.VerticalScrollMode=\"Disabled\"\n                      SelectionMode=\"None\">\n                <ListView.ItemsPanel>\n                    <ItemsPanelTemplate>\n                        <ItemsStackPanel Orientation=\"Horizontal\" />\n                    </ItemsPanelTemplate>\n                </ListView.ItemsPanel>\n                <ListView.ItemContainerStyle>\n                    <Style TargetType=\"ListViewItem\" BasedOn=\"{StaticResource DefaultListViewItemStyle}\">\n                        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n                        <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\n                        <Setter Property=\"Padding\" Value=\"4\"/>\n                    </Style>\n                </ListView.ItemContainerStyle>\n                <ListView.ItemTemplate>\n                    <DataTemplate x:DataType=\"models:FileUploadModel\">\n                        <Grid MaxWidth=\"250\" VerticalAlignment=\"Stretch\" CornerRadius=\"4\">\n                            <Grid MaxWidth=\"250\">\n                                <Image VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Stretch=\"UniformToFill\" Source=\"{Binding Thumbnail}\" />\n                            </Grid>\n                            \n                            <Grid HorizontalAlignment=\"Stretch\"\n                                  VerticalAlignment=\"Stretch\">\n                                <Rectangle Fill=\"{ThemeResource BackgroundGradientBrush}\"/>\n\n                                <Grid HorizontalAlignment=\"Stretch\"\n                                      VerticalAlignment=\"Bottom\"\n                                      Padding=\"4\">\n                                    <Grid.ColumnDefinitions>\n                                        <ColumnDefinition Width=\"*\" />\n                                        <ColumnDefinition Width=\"Auto\" />\n                                        <ColumnDefinition Width=\"Auto\" />\n                                        <ColumnDefinition Width=\"Auto\" />\n                                        <ColumnDefinition Width=\"Auto\" />\n                                    </Grid.ColumnDefinitions>\n\n                                    <TextBlock Text=\"{Binding FileName}\" VerticalAlignment=\"Center\" Margin=\"8,0,0,0\" TextTrimming=\"CharacterEllipsis\"/>\n\n                                    <Button x:Name=\"transcodeFailedButton\"\n                                            x:Uid=\"/Controls/TranscodeFailedButton\"\n                                            Grid.Column=\"1\"\n                                            Margin=\"4,0,0,0\"\n                                            Click=\"TranscodeFailedButton_Click\"\n                                            Content=\"&#xE783;\"\n                                            Foreground=\"{ThemeResource ErrorTextForegroundBrush}\"\n                                            Style=\"{ThemeResource IconButtonStyle}\"\n                                            ToolTipService.ToolTip=\"Transcode failed!\"\n                                            Visibility=\"{Binding TranscodeFailed, Converter={StaticResource BoolVisibilityConverter}}\" />\n\n                                    <Button x:Name=\"editButton\"\n                                            x:Uid=\"/Controls/EditButton\"\n                                            Grid.Column=\"2\"\n                                            Margin=\"4,0,0,0\"\n                                            Command=\"{Binding EditCommand}\"\n                                            Content=\"&#xE8B2;\"\n                                            Style=\"{ThemeResource IconButtonStyle}\"\n                                            ToolTipService.ToolTip=\"Edit this clip\"\n                                            Visibility=\"{Binding CanEdit, Converter={StaticResource BoolVisibilityConverter}}\">\n                                    </Button>\n                                    \n                                    <Button x:Name=\"CropButton\"\n                                            x:Uid=\"/Controls/EditButton\"\n                                            Grid.Column=\"2\"\n                                            Margin=\"4,0,0,0\"\n                                            Command=\"{Binding CropCommand}\"\n                                            Content=\"&#xe7a8;\"\n                                            Style=\"{ThemeResource IconButtonStyle}\"\n                                            ToolTipService.ToolTip=\"Crop this Image\"\n                                            Visibility=\"{Binding CanCrop, Converter={StaticResource BoolVisibilityConverter}}\">\n                                    </Button>\n\n                                    <ToggleButton x:Name=\"spoilerButton\"\n                                                  x:Uid=\"/Controls/SpoilerButton\"\n                                                  Grid.Column=\"3\"\n                                                  Margin=\"4,0,0,0\"\n                                                  Content=\"&#xE890;\"\n                                                  IsChecked=\"{Binding Spoiler, Mode=TwoWay}\"\n                                                  Style=\"{ThemeResource IconToggleButtonStyle}\"\n                                                  ToolTipService.ToolTip=\"Mark as Spoiler\" />\n\n                                    <Button x:Name=\"removeItemButton\"\n                                            Grid.Column=\"4\"\n                                            Margin=\"4,0,0,0\"\n                                            Click=\"RemoveItemButton_Click\"\n                                            Content=\"&#xE74D;\"\n                                            Style=\"{ThemeResource IconButtonStyle}\"\n                                            ToolTipService.ToolTip=\"Remove\" />\n                                </Grid>\n                            </Grid>\n                        </Grid>\n                    </DataTemplate>\n                </ListView.ItemTemplate>\n            </ListView>\n        </controls:DockPanel>\n\n        <Grid\n            x:Name=\"transcodeOverlay\"\n            Background=\"{ThemeResource SystemControlBackgroundAltMediumBrush}\"\n            Visibility=\"Collapsed\">\n            <Grid>\n                <StackPanel Margin=\"10\" VerticalAlignment=\"Center\">\n                    <TextBlock\n                        x:Uid=\"/Controls/TranscodingProgressHeader\"\n                        Margin=\"10\"\n                        Style=\"{ThemeResource TitleTextBlockStyle}\"\n                        TextAlignment=\"Center\" />\n                    <winui:ProgressBar\n                        x:Name=\"transcodeProgress\"\n                        MaxWidth=\"350\"\n                        IsIndeterminate=\"False\" />\n                    <Button\n                        x:Uid=\"/Controls/TranscodingCancelButton\"\n                        HorizontalAlignment=\"Center\"\n                        Click=\"Button_Click\"\n                        Style=\"{ThemeResource TextBlockButtonStyle}\" />\n                </StackPanel>\n            </Grid>\n        </Grid>\n\n        <VisualStateManager.VisualStateGroups>\n            <VisualStateGroup x:Name=\"DefaultStates\">\n                <VisualState x:Name=\"LargeState\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"640\" />\n                    </VisualState.StateTriggers>\n                    <VisualState.Setters>\n                        <Setter Target=\"uploadSizeContainer.(controls:DockPanel.Dock)\" Value=\"Right\" />\n                        <Setter Target=\"uploadSizeBar.Width\" Value=\"130\" />\n                        <Setter Target=\"uploadSizeBar.Margin\" Value=\"-57, 27, -57, 27\" />\n                        <Setter Target=\"uploadSizeBarTransform.Angle\" Value=\"-90\" />\n                        <Setter Target=\"sizeRun.FontSize\" Value=\"28\" />\n                    </VisualState.Setters>\n                </VisualState>\n                <VisualState x:Name=\"SmallState\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"0\" />\n                    </VisualState.StateTriggers>\n                    <VisualState.Setters>\n                        <Setter Target=\"uploadSizeContainer.(controls:DockPanel.Dock)\" Value=\"Bottom\" />\n                        <Setter Target=\"uploadSizeBar.Margin\" Value=\"8\" />\n                        <Setter Target=\"uploadSizeBarTransform.Angle\" Value=\"0\" />\n                        <Setter Target=\"sizeRun.FontSize\" Value=\"20\" />\n                    </VisualState.Setters>\n                </VisualState>\n            </VisualStateGroup>\n        </VisualStateManager.VisualStateGroups>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/UploadItemsControl.xaml.cs",
    "content": "﻿using System;\r\nusing System.IO;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing Unicord.Universal.Models;\r\nusing Unicord.Universal.Utilities;\r\nusing Windows.Storage;\r\nusing Windows.System;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Controls\r\n{\r\n    public sealed partial class UploadItemsControl : UserControl\r\n    {\r\n        private enum MediaType\r\n        {\r\n            Audio, Video, Photo\r\n        }\r\n\r\n        private CancellationTokenSource _cancellationToken;\r\n        private SemaphoreSlim _transcodeWait = new SemaphoreSlim(1, 1);\r\n\r\n        public UploadItemsControl()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n\r\n        public async Task AddStorageFileAsync(IStorageFile file, bool temporary = false)\r\n        {\r\n            try\r\n            {\r\n                await _transcodeWait.WaitAsync();\r\n\r\n                var model = DataContext as ChannelPageViewModel;\r\n                var type = file.ContentType;\r\n                var progress = new Progress<double?>(UpdateProgressBar);\r\n                var setting = (MediaTranscodeOptions)App.RoamingSettings.Read(Constants.AUTO_TRANSCODE_MEDIA, (int)MediaTranscodeOptions.WhenNeeded);\r\n                var props = await file.GetBasicPropertiesAsync();\r\n                _cancellationToken = new CancellationTokenSource();\r\n\r\n                var transcodeFailed = false;\r\n\r\n                if (!temporary && setting == MediaTranscodeOptions.Always || (setting == MediaTranscodeOptions.WhenNeeded && props.Size >= (ulong)model.UploadLimit))\r\n                {\r\n                    MediaType? mediaType = null;\r\n\r\n                    if (type.StartsWith(\"audio\"))\r\n                    {\r\n                        mediaType = MediaType.Audio;\r\n                    }\r\n                    else if (type.StartsWith(\"video\"))\r\n                    {\r\n                        mediaType = MediaType.Video;\r\n                    }\r\n                    else if (type.StartsWith(\"image\"))\r\n                    {\r\n                        mediaType = MediaType.Photo;\r\n                    }\r\n\r\n                    if (mediaType != null)\r\n                    {\r\n                        model.IsTranscoding = true;\r\n                        transcodeProgress.IsIndeterminate = true;\r\n                        transcodeOverlay.Visibility = Visibility.Visible;\r\n\r\n                        var newFile = await TryTranscodeMediaAsync(file, mediaType.Value, progress, _cancellationToken.Token);\r\n                        if (newFile != null)\r\n                        {\r\n                            temporary = true;\r\n                            file = newFile;\r\n                        }\r\n                        else\r\n                        {\r\n                            if (!_cancellationToken.IsCancellationRequested)\r\n                            {\r\n                                transcodeFailed = true;\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    props = await file.GetBasicPropertiesAsync();\r\n                    transcodeProgress.IsIndeterminate = false;\r\n                    transcodeOverlay.Visibility = Visibility.Collapsed;\r\n                }\r\n\r\n                var fileModel = await FileUploadModel.FromStorageFileAsync(model, file, props, temporary, transcodeFailed);\r\n                model.FileUploads.Add(fileModel);\r\n\r\n                model.IsTranscoding = false;\r\n\r\n                _transcodeWait.Release();\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Logger.LogError(ex);\r\n            }\r\n        }\r\n\r\n        private void UpdateProgressBar(double? obj)\r\n        {\r\n            if (obj == null)\r\n            {\r\n                if (!transcodeProgress.IsIndeterminate)\r\n                    transcodeProgress.IsIndeterminate = true;\r\n            }\r\n            else\r\n            {\r\n                transcodeProgress.IsIndeterminate = false;\r\n                transcodeProgress.Value = obj.Value;\r\n            }\r\n        }\r\n\r\n        private async void RemoveItemButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            var item = (sender as FrameworkElement).DataContext as FileUploadModel;\r\n            var channelViewModel = DataContext as ChannelPageViewModel;\r\n            channelViewModel.FileUploads.Remove(item);\r\n\r\n            if (item.IsTemporary)\r\n            {\r\n                await item.StorageFile.DeleteAsync();\r\n            }\r\n\r\n            item.Dispose();\r\n        }\r\n\r\n        private async void UploadList_ItemClick(object sender, ItemClickEventArgs e)\r\n        {\r\n            if (e.ClickedItem is FileUploadModel m && m.StorageFile != null)\r\n            {\r\n                await Launcher.LaunchFileAsync(m.StorageFile);\r\n            }\r\n        }\r\n\r\n        private async Task<IStorageFile> TryTranscodeMediaAsync(IStorageFile file, MediaType type, IProgress<double?> progress, CancellationToken token)\r\n        {\r\n            var success = false;\r\n            StorageFile tempFile = null;\r\n            var channelViewModel = (ChannelPageViewModel)DataContext;\r\n\r\n            try\r\n            {\r\n                switch (type)\r\n                {\r\n                    case MediaType.Audio:\r\n                        tempFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(Path.ChangeExtension(file.Name, \".mp3\"), CreationCollisionOption.GenerateUniqueName);\r\n                        success = await MediaTranscoding.TryTranscodeAudioAsync(file, tempFile, channelViewModel.HasNitro, progress, token);\r\n                        break;\r\n                    case MediaType.Video:\r\n                        tempFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(Path.ChangeExtension(file.Name, \".mp4\"), CreationCollisionOption.GenerateUniqueName);\r\n                        success = await MediaTranscoding.TryTranscodeVideoAsync(file, tempFile, progress, token);\r\n                        break;\r\n                    case MediaType.Photo:\r\n                        tempFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(file.Name, CreationCollisionOption.GenerateUniqueName);\r\n                        success = await MediaTranscoding.TryTranscodePhotoAsync(file, tempFile, progress, token);\r\n                        break;\r\n                    default:\r\n                        return file;\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                if (!(ex is TaskCanceledException))\r\n                {\r\n                    Logger.LogError(ex);\r\n                }\r\n            }\r\n\r\n            if (success)\r\n            {\r\n                return tempFile;\r\n            }\r\n\r\n            if (tempFile != null)\r\n                await tempFile.DeleteAsync();\r\n\r\n            return null;\r\n        }\r\n\r\n        private void Button_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            _cancellationToken.Cancel();\r\n        }\r\n\r\n        private async void TranscodeFailedButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            await UIUtilities.ShowErrorDialogAsync(\r\n                \"Failed to transcode!\",\r\n                \"This file failed to transcode, it may have been a format I don't understand, or your PC might not have the needed codecs. Sorry!\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/UsernameControl.cs",
    "content": "﻿using Unicord.Universal.Models.User;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Controls\n{\n    public sealed class UsernameControl : Control\n    {\n        public UserViewModel User\n        {\n            get => (UserViewModel)GetValue(UserProperty);\n            set => SetValue(UserProperty, value);\n        }\n\n        public static readonly DependencyProperty UserProperty =\n            DependencyProperty.Register(\"User\", typeof(UserViewModel), typeof(UsernameControl), new PropertyMetadata(null));\n\n        public double IconSize\n        {\n            get => (double)GetValue(IconSizeProperty);\n            set => SetValue(IconSizeProperty, value);\n        }\n\n        public static readonly DependencyProperty IconSizeProperty =\n            DependencyProperty.Register(\"IconSize\", typeof(double), typeof(UsernameControl), new PropertyMetadata(16));\n\n        public UsernameControl()\n        {\n            this.DefaultStyleKey = typeof(UsernameControl);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/Users/AvatarControl.cs",
    "content": "﻿using System;\r\nusing Unicord.Universal.Models.User;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\n// The Templated Control item template is documented at https://go.microsoft.com/fwlink/?LinkId=234235\r\n\r\nnamespace Unicord.Universal.Controls.Users\r\n{\r\n    public sealed class AvatarControl : Control\r\n    {\r\n        public Uri Source\r\n        {\r\n            get { return (Uri)GetValue(SourceProperty); }\r\n            set { SetValue(SourceProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty SourceProperty =\r\n            DependencyProperty.Register(\"Source\", typeof(Uri), typeof(AvatarControl), new PropertyMetadata(null));\r\n\r\n        public PresenceViewModel Presence\r\n        {\r\n            get { return (PresenceViewModel)GetValue(PresenceProperty); }\r\n            set { SetValue(PresenceProperty, value); }\r\n        }\r\n\r\n        public static readonly DependencyProperty PresenceProperty =\r\n            DependencyProperty.Register(\"Presence\", typeof(PresenceViewModel), typeof(AvatarControl), new PropertyMetadata(null));\r\n\r\n        public AvatarControl()\r\n        {\r\n            this.DefaultStyleKey = typeof(AvatarControl);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Controls/Voice/VoiceConnectionControl.xaml",
    "content": "﻿<UserControl\n    x:Name=\"self\"\n    x:Class=\"Unicord.Universal.Controls.Voice.VoiceConnectionControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls\"\n    xmlns:converters=\"using:Unicord.Universal.Converters\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    mc:Ignorable=\"d\" x:DefaultBindMode=\"TwoWay\"\n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"220\">\n\n    <Grid Margin=\"0,4,0,0\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <!--<TextBlock ToolTipService.ToolTip=\"{x:Bind ConnectionModel.UdpPing, Mode=OneWay}\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Margin=\"16,8,8,8\" VerticalAlignment=\"Center\" FontSize=\"16\" Text=\"{x:Bind ConnectionModel.UdpPing, Converter={StaticResource VoicePingGlyphConverter}, Mode=OneWay}\"/>-->\n            <TextBlock Margin=\"0,8,8,8\" Grid.Column=\"1\" Text=\"{x:Bind ConnectionModel.ConnectionStatus, Mode=OneWay}\"/>\n        </Grid>\n        <Grid Grid.Row=\"1\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition x:Name=\"RoutingColumn\" Width=\"*\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <ToggleButton x:Name=\"muteToggleButton\" Padding=\"0,8\" Margin=\"0,0,2,0\" Grid.Column=\"0\" IsChecked=\"{x:Bind ConnectionModel.Muted}\" Style=\"{ThemeResource StretchyIconToggleButtonStyle}\" HorizontalAlignment=\"Stretch\" Content=\"&#xEC54;\"/>\n            <ToggleButton x:Name=\"deafenToggleButton\" Padding=\"0,8\" Margin=\"0,0,2,0\" Grid.Column=\"1\" IsChecked=\"{x:Bind ConnectionModel.Deafened}\" Style=\"{ThemeResource StretchyIconToggleButtonStyle}\" HorizontalAlignment=\"Stretch\" Content=\"&#xE74F;\"/>\n            <lib:DropDownButton x:Name=\"RoutingButton\" Margin=\"0,0,2,0\" Grid.Column=\"2\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" Style=\"{ThemeResource StretchyIconButtonStyle}\"  Content=\"&#xE8EA;\">\n                <lib:DropDownButton.Flyout>\n                    <MenuFlyout>\n                        <lib:RadioMenuFlyoutItem Text=\"Earpiece\">\n                            <MenuFlyoutItem.Icon>\n                                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xE8EA;\"/>\n                            </MenuFlyoutItem.Icon>\n                        </lib:RadioMenuFlyoutItem>\n                        <lib:RadioMenuFlyoutItem Text=\"Speakerphone\">\n                            <MenuFlyoutItem.Icon>\n                                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xE7F5;\"/>\n                            </MenuFlyoutItem.Icon>\n                        </lib:RadioMenuFlyoutItem>\n                        <lib:RadioMenuFlyoutItem Text=\"Bluetooth\">\n                            <MenuFlyoutItem.Icon>\n                                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xE702;\"/>\n                            </MenuFlyoutItem.Icon>\n                        </lib:RadioMenuFlyoutItem>\n                    </MenuFlyout>\n                </lib:DropDownButton.Flyout>\n            </lib:DropDownButton>\n            <Button x:Name=\"disconnectButton\" Padding=\"0,8\" Margin=\"0,0,2,0\" Grid.Column=\"3\" Click=\"DisconnectButton_Click\" Style=\"{ThemeResource StretchyIconButtonStyle}\" HorizontalAlignment=\"Stretch\" Content=\"&#xE778;\"/>\n            <Button x:Name=\"voiceSettingsButton\" Padding=\"0,8\" Grid.Column=\"4\" Click=\"VoiceSettingsButton_Click\" Style=\"{ThemeResource StretchyIconButtonStyle}\" HorizontalAlignment=\"Stretch\" Content=\"&#xE713;\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/Voice/VoiceConnectionControl.xaml.cs",
    "content": "﻿using System;\nusing Unicord.Universal.Models.Voice;\nusing Unicord.Universal.Services;\nusing Windows.UI.Core;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Controls.Voice\n{\n    public sealed partial class VoiceConnectionControl : UserControl\n    {\n        public VoiceConnectionModel ConnectionModel\n        {\n            get => (VoiceConnectionModel)GetValue(ConnectionModelProperty);\n            set => SetValue(ConnectionModelProperty, value);\n        }\n\n        public static readonly DependencyProperty ConnectionModelProperty =\n            DependencyProperty.Register(\"ConnectionModel\", typeof(VoiceConnectionModel), typeof(VoiceConnectionControl), new PropertyMetadata(null, OnConnectionModelChanged));\n\n        public VoiceConnectionControl()\n        {\n            this.InitializeComponent();\n            Visibility = Visibility.Collapsed;\n        }\n\n        private static void OnConnectionModelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            if (d is VoiceConnectionControl control)\n            {\n                if (e.NewValue == null)\n                {\n                    control.Visibility = Visibility.Collapsed;\n                    if(e.OldValue is VoiceConnectionModel old)\n                    {\n                        old.Disconnected -= control.Model_Disconnected;\n                    }\n                }\n                else if (e.NewValue is VoiceConnectionModel model)\n                {\n                    control.Visibility = Visibility.Visible;\n                    model.Disconnected += control.Model_Disconnected;\n                }\n            }\n        }\n\n        private async void Model_Disconnected(object sender, EventArgs e)\n        {\n            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => Visibility = Visibility.Collapsed);\n        }\n\n        private async void DisconnectButton_Click(object sender, RoutedEventArgs e)\n        {\n            await ConnectionModel?.DisconnectAsync();\n        }\n\n        private async void VoiceSettingsButton_Click(object sender, RoutedEventArgs e)\n        {\n            var service = SettingsService.GetForCurrentView();\n            await service.OpenAsync(SettingsPageType.Voice);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Controls/VoiceConnectionControl.xaml",
    "content": "﻿<UserControl\n    x:Name=\"self\"\n    x:Class=\"Unicord.Universal.Controls.VoiceConnectionControl\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls\"\n    xmlns:converters=\"using:Unicord.Universal.Converters\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    mc:Ignorable=\"d\" x:DefaultBindMode=\"TwoWay\"\n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"220\">\n    <UserControl.Resources>\n        <converters:VoicePingGlyphConverter x:Name=\"VoicePingGlyphConverter\"/>\n        <converters:VoicePingConverter x:Name=\"VoicePingConverter\"/>\n    </UserControl.Resources>\n\n    <Grid Margin=\"0,4,0,0\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <TextBlock ToolTipService.ToolTip=\"{x:Bind ConnectionModel.UdpPing, Converter={StaticResource VoicePingConverter}, Mode=OneWay}\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Margin=\"16,8,8,8\" VerticalAlignment=\"Center\" FontSize=\"16\" Text=\"{x:Bind ConnectionModel.UdpPing, Converter={StaticResource VoicePingGlyphConverter}, Mode=OneWay}\"/>\n            <TextBlock Margin=\"0,8,8,8\" Grid.Column=\"1\" Text=\"{x:Bind ConnectionModel.ConnectionStatus, Mode=OneWay}\"/>\n        </Grid>\n        <Grid Grid.Row=\"1\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition x:Name=\"RoutingColumn\" Width=\"*\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <ToggleButton x:Name=\"muteToggleButton\" Padding=\"0,8\" Margin=\"0,0,2,0\" Grid.Column=\"0\" IsChecked=\"{x:Bind ConnectionModel.Muted}\" Style=\"{ThemeResource StretchyIconToggleButtonStyle}\" HorizontalAlignment=\"Stretch\" Content=\"&#xEC54;\"/>\n            <ToggleButton x:Name=\"deafenToggleButton\" Padding=\"0,8\" Margin=\"0,0,2,0\" Grid.Column=\"1\" IsChecked=\"{x:Bind ConnectionModel.Deafened}\" Style=\"{ThemeResource StretchyIconToggleButtonStyle}\" HorizontalAlignment=\"Stretch\" Content=\"&#xE74F;\"/>\n            <lib:DropDownButton x:Name=\"RoutingButton\" Margin=\"0,0,2,0\" Grid.Column=\"2\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" Style=\"{ThemeResource StretchyIconButtonStyle}\"  Content=\"&#xE8EA;\">\n                <lib:DropDownButton.Flyout>\n                    <MenuFlyout>\n                        <lib:RadioMenuFlyoutItem Text=\"Earpiece\">\n                            <MenuFlyoutItem.Icon>\n                                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xE8EA;\"/>\n                            </MenuFlyoutItem.Icon>\n                        </lib:RadioMenuFlyoutItem>\n                        <lib:RadioMenuFlyoutItem Text=\"Speakerphone\">\n                            <MenuFlyoutItem.Icon>\n                                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xE7F5;\"/>\n                            </MenuFlyoutItem.Icon>\n                        </lib:RadioMenuFlyoutItem>\n                        <lib:RadioMenuFlyoutItem Text=\"Bluetooth\">\n                            <MenuFlyoutItem.Icon>\n                                <FontIcon FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Glyph=\"&#xE702;\"/>\n                            </MenuFlyoutItem.Icon>\n                        </lib:RadioMenuFlyoutItem>\n                    </MenuFlyout>\n                </lib:DropDownButton.Flyout>\n            </lib:DropDownButton>\n            <Button x:Name=\"disconnectButton\" Padding=\"0,8\" Margin=\"0,0,2,0\" Grid.Column=\"3\" Click=\"DisconnectButton_Click\" Style=\"{ThemeResource StretchyIconButtonStyle}\" HorizontalAlignment=\"Stretch\" Content=\"&#xE778;\"/>\n            <Button x:Name=\"voiceSettingsButton\" Padding=\"0,8\" Grid.Column=\"4\" Click=\"VoiceSettingsButton_Click\" Style=\"{ThemeResource StretchyIconButtonStyle}\" HorizontalAlignment=\"Stretch\" Content=\"&#xE713;\"/>\n        </Grid>\n    </Grid>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Controls/VoiceConnectionControl.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Unicord.Universal.Services;\nusing Unicord.Universal.Voice;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Core;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace Unicord.Universal.Controls\n{\n    public sealed partial class VoiceConnectionControl : UserControl\n    {\n        public VoiceConnectionModel ConnectionModel\n        {\n            get => (VoiceConnectionModel)GetValue(ConnectionModelProperty);\n            set => SetValue(ConnectionModelProperty, value);\n        }\n\n        public static readonly DependencyProperty ConnectionModelProperty =\n            DependencyProperty.Register(\"ConnectionModel\", typeof(VoiceConnectionModel), typeof(VoiceConnectionControl), new PropertyMetadata(null, OnConnectionModelChanged));\n\n        public VoiceConnectionControl()\n        {\n            this.InitializeComponent();\n            Visibility = Visibility.Collapsed;\n        }\n\n        private static void OnConnectionModelChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            if (d is VoiceConnectionControl control)\n            {\n                if (e.NewValue == null)\n                {\n                    control.Visibility = Visibility.Collapsed;\n                    if(e.OldValue is VoiceConnectionModel old)\n                    {\n                        old.Disconnected -= control.Model_Disconnected;\n                    }\n                }\n                else if (e.NewValue is VoiceConnectionModel model)\n                {\n                    control.Visibility = Visibility.Visible;\n                    model.Disconnected += control.Model_Disconnected;\n                }\n            }\n        }\n\n        private async void Model_Disconnected(object sender, EventArgs e)\n        {\n            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => Visibility = Visibility.Collapsed);\n        }\n\n        private async void DisconnectButton_Click(object sender, RoutedEventArgs e)\n        {\n            await ConnectionModel?.DisconnectAsync();\n        }\n\n        private async void VoiceSettingsButton_Click(object sender, RoutedEventArgs e)\n        {\n            var service = SettingsService.GetForCurrentView();\n            await service.OpenAsync(SettingsPageType.Voice);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/BoolConverter.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Converters\n{\n    class BoolConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            return value is not null && (value is bool b ? b : !(value is int i && i <= 0));\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/BoolOpacityConverter.cs",
    "content": "﻿using System;\nusing DSharpPlus.Entities;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Converters\n{\n    class BoolOpacityConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            if (value == null)\n            {\n                return 0.5;\n            }\n\n            if (value is Optional<bool> op)\n                if (op.HasValue && op.Value)\n                    return 1.0;\n                else\n                    return 0.5;\n\n            if (value is bool b && b)\n            {\n                return 1.0;\n            }\n            else\n            {\n                return 0.5;\n            }\n        }\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            throw new NotImplementedException();\n        }\n\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/BoolVisibilityConverter.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Linq;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Converters\n{\n    class BoolVisibilityConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            if (parameter != null)\n                return (Visibility)Convert(value, targetType, null, language) == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;\n\n            if (value is null)\n            {\n                return Visibility.Collapsed;\n            }\n\n            if (value is bool b)\n            {\n                return b ? Visibility.Visible : Visibility.Collapsed;\n            }\n\n            if (value is int i)\n            {\n                return i > 0 ? Visibility.Visible : Visibility.Collapsed;\n            }\n\n            if (value is string str)\n            {\n                return string.IsNullOrWhiteSpace(str) ? Visibility.Collapsed : Visibility.Visible;\n            }\n\n            if (value is IEnumerable e)\n            {\n                return e.OfType<object>().Any() ? Visibility.Visible : Visibility.Collapsed;\n            }\n\n            return Visibility.Collapsed;\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            throw new NotImplementedException();\n        }\n    }\n\n    class InverseBoolVisibilityConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            if (value is null)\n            {\n                return Visibility.Visible;\n            }\n\n            if (value is bool b)\n            {\n                return b ? Visibility.Collapsed : Visibility.Visible;\n            }\n\n            if (value is int i)\n            {\n                return i > 0 ? Visibility.Collapsed : Visibility.Visible;\n            }\n\n            if (value is IEnumerable e)\n            {\n                return e.OfType<object>().Any() ? Visibility.Collapsed : Visibility.Visible;\n            }\n\n            return Visibility.Visible;\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/ChannelSymbolConverter.cs",
    "content": "﻿using System;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Windows.UI.Xaml.Data;\r\n\r\nnamespace Unicord.Universal.Converters\r\n{\r\n    class ChannelSymbolConverter : IValueConverter\r\n    {\r\n        public string NSFWGlyph { get; set; } = \"\\xE7BA\";\r\n        public string TextGlyph { get; set; } = \"\\xE8BD\";\r\n        public string VoiceGlyph { get; set; } = \"\\xE767\";\r\n        public string NewsGlyph { get; set; } = \"\\xE789\";\r\n        public string StoreGlyph { get; set; } = \"\\xE719\";\r\n        public string StageGlyph { get; set; } = \"\\xE93E\";\r\n        public string ForumGlyph { get; set; } = \"\\xE93E\";\r\n        public string DirectoryGlyph { get; set; } = \"\\xE93E\";\r\n        public string UnknownGlyph { get; set; } = \"\\xE11B\";\r\n\r\n        public object Convert(object value, Type targetType, object parameter, string language)\r\n        {\r\n            var type = ChannelType.Unknown;\r\n            var isNSFW = false;\r\n\r\n            switch (value)\r\n            {\r\n                case DiscordChannel c:\r\n                    type = c.Type;\r\n                    isNSFW = c.IsNSFW;\r\n                    break;\r\n                case ChannelListViewModel vm:\r\n                    type = vm.ChannelType;\r\n                    isNSFW = vm.Channel.IsNSFW;\r\n                    break;\r\n                case ChannelType t:\r\n                    type = t;\r\n                    break;\r\n            }\r\n\r\n            if (isNSFW)\r\n            {\r\n                return NSFWGlyph;\r\n            }\r\n\r\n            return type switch\r\n            {\r\n                ChannelType.Text or ChannelType.PublicThread or ChannelType.PrivateThread => TextGlyph,\r\n                ChannelType.Voice => VoiceGlyph,\r\n                ChannelType.Announcement or ChannelType.AnnouncementThread => NewsGlyph,\r\n                //ChannelType.Store => StoreGlyph,\r\n                ChannelType.Stage => StageGlyph,\r\n                //ChannelType.GuildDirectory => DirectoryGlyph,\r\n                ChannelType.GuildForum => ForumGlyph,\r\n                _ => UnknownGlyph,\r\n            };\r\n        }\r\n\r\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Converters/ChannelTypeTemplateSelector.cs",
    "content": "﻿using DSharpPlus;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Converters\r\n{\r\n    public class ChannelTypeTemplateSelector : DataTemplateSelector\r\n    {\r\n        public DataTemplate TextChannelTemplate { get; set; }\r\n        public DataTemplate VoiceChannelTemplate { get; set; }\r\n        public DataTemplate CategoryTemplate { get; set; }\r\n        public DataTemplate ThreadTemplate { get; set; }\r\n        public DataTemplate DMChannelTemplate { get; set; }\r\n        public DataTemplate GroupChannelTemplate { get; set; }\r\n\r\n        protected override DataTemplate SelectTemplateCore(object item)\r\n        {\r\n            if (item is ChannelViewModel channel)\r\n            {\r\n                switch (channel.ChannelType)\r\n                {\r\n                    case ChannelType.Text:\r\n                    case ChannelType.Announcement:\r\n                    case ChannelType.Unknown:\r\n                        return TextChannelTemplate;\r\n                    case ChannelType.Voice:\r\n                        return VoiceChannelTemplate ?? TextChannelTemplate;\r\n                    case ChannelType.Private:\r\n                        return DMChannelTemplate;\r\n                    case ChannelType.Group:\r\n                        return GroupChannelTemplate ?? DMChannelTemplate;\r\n                    case ChannelType.Category:\r\n                        return CategoryTemplate;\r\n                    case ChannelType.AnnouncementThread:\r\n                    case ChannelType.PublicThread:\r\n                    case ChannelType.PrivateThread:\r\n                        return ThreadTemplate;\r\n                }\r\n            }\r\n\r\n            return TextChannelTemplate;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Converters/ColourBrushConverter.cs",
    "content": "﻿using DSharpPlus.Entities;\nusing Microsoft.Toolkit.Uwp;\nusing System;\nusing System.Collections.Generic;\nusing Windows.UI;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Media;\nusing static Unicord.Constants;\nusing ColorHelper = Microsoft.Toolkit.Uwp.Helpers.ColorHelper;\n\nnamespace Unicord.Universal.Converters\n{\n    public class ColourBrushConverter : DependencyObject, IValueConverter\n    {\n        private Dictionary<long, SolidColorBrush> _brushCache\n         = new Dictionary<long, SolidColorBrush>();\n\n        public Color DefaultBackgroundColour\n        {\n            get { return (Color)GetValue(DefaultBackgroundColourProperty); }\n            set { SetValue(DefaultBackgroundColourProperty, value); }\n        }\n\n        public static readonly DependencyProperty DefaultBackgroundColourProperty =\n            DependencyProperty.Register(\"DefaultBackgroundColour\", typeof(Color), typeof(ColourBrushConverter), new PropertyMetadata(Colors.Black));\n\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            if (value is Brush b)\n                return b;\n\n            var background = parameter is Color ? (Color)parameter : DefaultBackgroundColour;\n            var col = new DiscordColor();\n            if (value is DiscordColor)\n                col = (DiscordColor)value;\n\n            if (value is Optional<DiscordColor> opt && opt.HasValue)\n                col = opt.Value;\n\n            if (col.Value == 0)\n                return null;\n\n            var winCol = Color.FromArgb(255, col.R, col.G, col.B);\n\n            if (!App.RoamingSettings.Read(ADJUST_ROLE_COLOURS, true))\n                return GetOrCreateBrush(background, winCol);\n\n            var hslCol = ColorHelper.ToHsl(winCol);\n            var contrast = App.RoamingSettings.Read(MINIMUM_CONTRAST, MINIMUM_CONTRAST_DEFAULT);\n            var backgroundCol = ColorHelper.ToHsl(background);\n\n            var targetCol = winCol;\n\n            var dark = backgroundCol.L < 0.5;\n            var luma = hslCol.L;\n\n            var targetLuma = 0.0;\n\n            if (dark)\n                targetLuma = (contrast * (backgroundCol.L + 0.05)) - 0.05;\n            else\n                targetLuma = ((backgroundCol.L + 0.05) / contrast) - 0.05;\n\n            if (dark ? luma < targetLuma : luma > targetLuma)\n                targetCol = TargetLuma(hslCol, targetLuma);\n\n\n            return GetOrCreateBrush(background, winCol, targetCol);\n        }\n\n        private Color TargetLuma(HslColor col, double target)\n        {\n            var s = col.S;\n            var min = 0.0;\n            var max = 1.0;\n\n            s *= Math.Pow(col.L > 0.5 ? -col.L : col.L - 1, 7) + 1;\n\n            var d = (max - min) / 2;\n            var mid = min + d;\n\n            for (; d > 1.0 / 65536.0; d /= 2, mid = min + d)\n            {\n                if (mid > target)\n                    max = mid;\n                else\n                    min = mid;\n            }\n\n            return ColorHelper.FromHsl(col.H, s, mid, col.A);\n        }\n\n        private SolidColorBrush GetOrCreateBrush(Color background, Color colourKey, Color? value = null)\n        {\n            var bg = ColorHelper.ToInt(background);\n            var fg = ColorHelper.ToInt(colourKey);\n            var argb = (((long)bg) << 32) | (long)fg;\n            if (_brushCache.TryGetValue(argb, out var brush))\n                return brush;\n\n            return _brushCache[argb] = new SolidColorBrush(value ?? colourKey);\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/DateTimeConverter.cs",
    "content": "﻿using System;\nusing Humanizer;\nusing MomentSharp;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Converters\n{\n    class DateTimeConverter : IValueConverter\n    {\n        public static string Convert(TimestampStyle style, DateTime dt)\n        {\n            dt = dt.ToUniversalTime();\n\n            switch (style)\n            {\n                case TimestampStyle.Relative:\n                    return dt.Humanize(true);\n                case TimestampStyle.Absolute:\n                    return new Moment(dt).Calendar();\n                case TimestampStyle.Both:\n                    return $\"{dt.Humanize(true)} - {new Moment(dt).Calendar()}\";\n                default:\n                    return dt.ToShortDateString();\n            }\n        }\n\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            if (parameter is not TimestampStyle style)\n                style = (TimestampStyle)App.RoamingSettings.Read(Constants.TIMESTAMP_STYLE, (int)TimestampStyle.Absolute);\n\n            if (value is not DateTime dt)\n                dt = ((DateTimeOffset)value).DateTime;\n\n            return Convert(style, dt);\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language) => throw new NotImplementedException();\n    }\n}"
  },
  {
    "path": "Unicord.Universal/Converters/FileSizeConverter.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Converters\n{\n    class FileSizeConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            if (value is int i)\n            {\n                return Tools.ToFileSizeString(i);\n            }\n\n            return null;\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language) => throw new NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/GuildListTemplateSelector.cs",
    "content": "﻿using Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml;\r\nusing Unicord.Universal.Models.Guild;\r\n\r\nnamespace Unicord.Universal.Converters\r\n{\r\n    public class GuildListTemplateSelector : DataTemplateSelector\r\n    {\r\n        public DataTemplate GuildTemplate { get; set; }\r\n        public DataTemplate GuildFolderTemplate { get; set; }\r\n\r\n        protected override DataTemplate SelectTemplateCore(object item)\r\n        {\r\n            if (item is GuildListFolderViewModel)\r\n            {\r\n                return GuildFolderTemplate;\r\n            }\r\n\r\n            return GuildTemplate;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Converters/HideOnNullConverter.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Converters\n{\n    class HideOnNullConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            if (value != null)\n            {\n                return Visibility.Visible;\n            }\n\n            return Visibility.Collapsed;\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/MessageTemplateSelector.cs",
    "content": "﻿using Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Converters\n{\n    public class MessageTemplateSelector : DataTemplateSelector\n    {\n        public DataTemplate MessageTemplate { get; set; }\n        public DataTemplate SystemMessageTemplate { get; set; }\n\n        protected override DataTemplate SelectTemplateCore(object item)\n        {\n            if (item is MessageViewModel message)\n            {\n                if (message.IsSystemMessage)\n                    return SystemMessageTemplate;\n            }\n\n            return MessageTemplate;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/Messages/AttachmentTemplateSelector.cs",
    "content": "﻿using System;\nusing Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Converters\n{\n    public class AttachmentTemplateSelector : DataTemplateSelector\n    {\n        public DataTemplate ImageTemplate { get; set; }\n        public DataTemplate AudioTemplate { get; set; }\n        public DataTemplate VideoTemplate { get; set; }\n        public DataTemplate SvgTemplate { get; set; }\n        public DataTemplate GenericTemplate { get; set; }\n\n        protected override DataTemplate SelectTemplateCore(object item)\n        {\n            var attachmentType = AttachmentType.Generic;\n            if (item is AttachmentViewModel viewModel)\n            {\n                attachmentType = viewModel.Type;\n            }\n\n            return attachmentType switch\n            {\n                AttachmentType.Image => ImageTemplate,\n                AttachmentType.Audio => AudioTemplate,\n                AttachmentType.Video => VideoTemplate,\n                AttachmentType.Svg => SvgTemplate,\n                AttachmentType.Generic => GenericTemplate,\n                _ => throw new InvalidOperationException(),\n            };\n        }\n\n        protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)\n        {\n            return SelectTemplateCore(item);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/Messages/AttachmentTypeConverter.cs",
    "content": "﻿using System;\nusing Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Converters\n{\n    public class AttachmentTypeConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            var type = ((AttachmentType)value);\n            var specified = (string)parameter;\n\n            return Enum.GetName(typeof(AttachmentType), type) == specified;\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/Messages/ComponentTemplateSelector.cs",
    "content": "﻿using DSharpPlus;\nusing Unicord.Universal.Models.Messages.Components;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Converters\n{\n    public class ComponentTemplateSelector : DataTemplateSelector\n    {\n        public DataTemplate ActionRowTemplate { get; set; }\n        public DataTemplate PrimaryButtonTemplate { get; set; }\n        public DataTemplate SecondaryButtonTemplate { get; set; }\n        public DataTemplate SuccessButtonTemplate { get; set; }\n        public DataTemplate DangerButtonTemplate { get; set; }\n        public DataTemplate LinkButtonTemplate { get; set; }\n        public DataTemplate UnknownTemplate { get; set; }\n\n        protected override DataTemplate SelectTemplateCore(object item)\n        {\n            switch (item)\n            {\n                case ActionRowComponentViewModel _: \n                    return ActionRowTemplate;\n                case ButtonComponentViewModel button:\n                    switch (button.Style)\n                    {\n                        case ButtonStyle.Primary:\n                            return PrimaryButtonTemplate;\n                        case ButtonStyle.Secondary:\n                            return SecondaryButtonTemplate;\n                        case ButtonStyle.Success:\n                            return SuccessButtonTemplate;\n                        case ButtonStyle.Danger:\n                            return DangerButtonTemplate;\n                        case ButtonStyle.Link:\n                            return LinkButtonTemplate;\n                        default:\n                            break;\n                    }\n                    break;\n            }\n            return UnknownTemplate;\n        }\n\n        protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)\n        {\n            return SelectTemplateCore(item);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/Messages/EmbedTemplateSelector.cs",
    "content": "﻿using System;\nusing Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Converters\n{\n    internal class EmbedTemplateSelector : DataTemplateSelector\n    {\n        public DataTemplate ImageTemplate { get; set; }\n        public DataTemplate VideoTemplate { get; set; }\n        public DataTemplate RichTemplate { get; set; }\n\n        protected override DataTemplate SelectTemplateCore(object item)\n        {\n            if (item is not EmbedViewModel embedViewModel) throw new InvalidOperationException();\n\n            if (embedViewModel.IsRawImage) return ImageTemplate;\n            if (embedViewModel.IsRawVideo) return VideoTemplate;\n\n            return RichTemplate;\n        }\n\n        protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)\n        {\n            return SelectTemplateCore(item);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/PresenceConverters.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing DSharpPlus.Entities;\r\nusing Windows.ApplicationModel.Resources;\r\nusing Windows.UI;\r\nusing Windows.UI.Xaml.Data;\r\n\r\nnamespace Unicord.Universal.Converters\r\n{\r\n    class PresenceColourConverter : IValueConverter\r\n    {\r\n        public Color Offline { get; set; }\r\n        public Color Online { get; set; }\r\n        public Color Idle { get; set; }\r\n        public Color DoNotDisturb { get; set; }\r\n        public Color Fallback { get; set; }\r\n\r\n        public Color StreamingYouTube { get; set; }\r\n        public Color StreamingTwitch { get; set; }\r\n\r\n        public object Convert(object value, Type targetType, object parameter, string language)\r\n        {\r\n            var presence = (DiscordPresence)value;\r\n            if (presence == null)\r\n                return Offline;\r\n\r\n            var streamActivity = presence.Activities?.FirstOrDefault(a => a?.ActivityType == ActivityType.Streaming) ?? presence.Activity;\r\n            if (streamActivity != null && streamActivity.ActivityType == ActivityType.Streaming)\r\n            {\r\n                if (streamActivity.StreamUrl != null && Uri.TryCreate(streamActivity.StreamUrl, UriKind.Absolute, out var uri))\r\n                {\r\n                    if (uri.Host.ToLowerInvariant().Contains(\"youtu\")) // should catch youtube and youtu.be\r\n                        return StreamingYouTube;\r\n\r\n                    return StreamingTwitch;\r\n                }\r\n\r\n                return StreamingTwitch;\r\n            }\r\n\r\n            switch (presence.Status)\r\n            {\r\n                case UserStatus.Invisible:\r\n                case UserStatus.Offline:\r\n                    return Offline;\r\n                case UserStatus.Online:\r\n                    return Online;\r\n                case UserStatus.Idle:\r\n                    return Idle;\r\n                case UserStatus.DoNotDisturb:\r\n                    return DoNotDisturb;\r\n                default:\r\n                    return Fallback;\r\n            }\r\n        }\r\n\r\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    class PresenceGeometryConverter : IValueConverter\r\n    {\r\n        public string Offline { get; set; }\r\n        public string Online { get; set; }\r\n        public string Idle { get; set; }\r\n        public string DoNotDisturb { get; set; }\r\n        public string Fallback { get; set; }\r\n        public string Streaming { get; set; }\r\n\r\n        public object Convert(object value, Type targetType, object parameter, string language)\r\n        {\r\n            if (!App.RoamingSettings.Read(Constants.SHOW_STATUS_GLYPHS, Constants.SHOW_STATUS_GLYPHS_DEFAULT))\r\n            {\r\n                return Fallback;\r\n            }\r\n\r\n            var presence = (DiscordPresence)value;\r\n            if (presence == null)\r\n                return Offline;\r\n\r\n            var streamActivity = presence.Activities?.FirstOrDefault(a => a?.ActivityType == ActivityType.Streaming) ?? presence.Activity;\r\n            if (streamActivity != null && streamActivity.ActivityType == ActivityType.Streaming)\r\n            {\r\n                return Streaming;\r\n            }\r\n\r\n            switch (presence.Status)\r\n            {\r\n                case UserStatus.Invisible:\r\n                case UserStatus.Offline:\r\n                    return Offline;\r\n                case UserStatus.Online:\r\n                    return Online;\r\n                case UserStatus.Idle:\r\n                    return Idle;\r\n                case UserStatus.DoNotDisturb:\r\n                    return DoNotDisturb;\r\n                default:\r\n                    return Fallback;\r\n            }\r\n        }\r\n\r\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n\r\n    class PresenceTextConverter : IValueConverter\r\n    {\r\n        private ResourceLoader _strings;\r\n\r\n        public PresenceTextConverter()\r\n        {\r\n            _strings = ResourceLoader.GetForViewIndependentUse(\"Converters\");\r\n        }\r\n\r\n        public object Convert(object value, Type targetType, object parameter, string language)\r\n        {\r\n            if (!(value is DiscordActivity activity))\r\n            {\r\n                var v = value as DiscordPresence;\r\n                activity = v?.Activity;\r\n            }\r\n\r\n            switch (activity?.ActivityType)\r\n            {\r\n                case ActivityType.Playing:\r\n                    return string.Format(_strings.GetString(\"PlayingStatusFormat\"), activity.Name);\r\n                case ActivityType.Streaming:\r\n                    return string.Format(_strings.GetString(\"StreamingStatusFormat\"), activity.Name);\r\n                case ActivityType.ListeningTo:\r\n                    return string.Format(_strings.GetString(\"ListeningStatusFormat\"), activity.Name);\r\n                case ActivityType.Watching:\r\n                    return string.Format(_strings.GetString(\"WatchingStatusFormat\"), activity.Name);\r\n                case ActivityType.Custom:\r\n                    return activity.CustomStatus.Name;\r\n                default:\r\n                    break;\r\n            }\r\n\r\n            return \"\";\r\n        }\r\n\r\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\r\n        {\r\n            throw new NotImplementedException();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Converters/Static.cs",
    "content": "﻿using Unicord.Universal.Models.Messages;\n\nnamespace Unicord.Universal.Converters\n{\n    public class Static\n    {\n        public static bool NotNull(object obj)\n            => obj != null;\n\n        public static bool Not(bool b)\n            => !b;\n\n        public static bool Is(MessageViewModelState state, MessageViewModelState other)\n            => state == other;\n\n        public static bool IsNot(MessageViewModelState state, MessageViewModelState other)\n            => state != other;\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/ThumbnailImageConverter.cs",
    "content": "﻿using System;\nusing Windows.Storage.FileProperties;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Media.Imaging;\n\nnamespace Unicord.Universal.Converters\n{\n    public class ThumbnailImageConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            BitmapImage image = null;\n\n            if (value is StorageItemThumbnail thumb)\n            {\n                image = new BitmapImage();\n                _ = image.SetSourceAsync(thumb);\n            }\n\n            return image;\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}"
  },
  {
    "path": "Unicord.Universal/Converters/TitleCaseConverter.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Converters\n{\n    public class TitleCaseConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            if (value is string s)\n            {\n                return s.ToUpper();\n            }\n\n            return value;\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language) => throw new NotImplementedException();\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/TruncateConverter.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Converters\n{\n    class TruncateConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            if (value is string str)\n            {\n                return str.Length > 384 ? str.Substring(0, 381) + \"...\" : str;\n            }\n\n            return value;\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Converters/URIConverter.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Converters\n{\n    public class UriConverter : IValueConverter\n    {\n        public object Convert(object value, Type targetType, object parameter, string language)\n        {\n            if (value is string s && Uri.TryCreate(s, UriKind.Absolute, out var uri))\n            {\n                return uri;\n            }\n\n            return null;\n        }\n\n        public object ConvertBack(object value, Type targetType, object parameter, string language)\n        {\n            throw new NotImplementedException();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/BanDialog.xaml",
    "content": "﻿<ContentDialog\n    x:Class=\"Unicord.Universal.Dialogs.BanDialog\"\n    x:Uid=\"/Dialogs/BanDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    Style=\"{ThemeResource DefaultContentDialogStyle}\">\n\n    <StackPanel>\n        <TextBlock x:Name=\"headerTextBlock\" Style=\"{ThemeResource SubtitleTextBlockStyle}\"/>\n        <ComboBox x:Name=\"deleteMessagesBox\" x:Uid=\"/Dialogs/BanDeleteMessagesBox\" Margin=\"0,8\" SelectedIndex=\"1\" HorizontalAlignment=\"Stretch\">\n            <ComboBoxItem x:Uid=\"/Dialogs/BanDeleteNoMessages\" />\n            <ComboBoxItem x:Uid=\"/Dialogs/BanDeleteFromLastDay\" />\n            <ComboBoxItem x:Uid=\"/Dialogs/BanDeleteFromLastWeek\" />\n        </ComboBox>\n        <TextBox x:Name=\"banReasonText\" MaxLength=\"512\" MinHeight=\"96\" AcceptsReturn=\"True\" TextWrapping=\"Wrap\" x:Uid=\"/Dialogs/BanReason\"/>\n    </StackPanel>\n</ContentDialog>\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/BanDialog.xaml.cs",
    "content": "﻿using DSharpPlus.Entities;\nusing Windows.ApplicationModel.Resources;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class BanDialog : ContentDialog\n    {\n        public int DeleteMessageDays\n        {\n            get\n            {\n                switch (deleteMessagesBox.SelectedIndex)\n                {\n                    case 1:\n                        return 1;\n                    case 2:\n                        return 7;\n                    default:\n                        return 0;\n                }\n            }\n        }\n\n        public string BanReason\n            => banReasonText.Text;\n\n        public BanDialog(DiscordMember member)\n        {\n            InitializeComponent();\n            var resources = ResourceLoader.GetForCurrentView(\"Dialogs\");\n            headerTextBlock.Text = string.Format(resources.GetString(\"BanDialogHeaderFormat\"), member.Username, member.Discriminator);\n            \n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/CaptchaRequestDialog.xaml",
    "content": "﻿<ContentDialog\n    x:Class=\"Unicord.Universal.Dialogs.CaptchaRequestDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:controls=\"using:KWebView2\"\n    mc:Ignorable=\"d\"\n    Style=\"{ThemeResource DefaultContentDialogStyle}\"\n    Background=\"{ThemeResource SolidBackgroundFillColorBaseBrush}\"\n    Title=\"Beep Boop! Boop Beep?\"\n    HorizontalAlignment=\"Stretch\"\n    HorizontalContentAlignment=\"Stretch\"\n    VerticalAlignment=\"Stretch\"\n    VerticalContentAlignment=\"Stretch\"\n    Loaded=\"ContentDialog_Loaded\"\n    PrimaryButtonText=\"Continue\"\n    PrimaryButtonStyle=\"{ThemeResource AccentButtonStyle}\"\n    IsPrimaryButtonEnabled=\"False\">\n    \n    <controls:WebView2 x:Name=\"CaptchaWebView\" \n                       Width=\"500\"\n                       Height=\"550\"\n                       HorizontalAlignment=\"Center\"\n                       VerticalAlignment=\"Center\"/>\n</ContentDialog>\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/CaptchaRequestDialog.xaml.cs",
    "content": "﻿using System;\nusing DSharpPlus.Entities;\nusing Microsoft.Web.WebView2.Core;\nusing Newtonsoft.Json.Linq;\nusing Windows.ApplicationModel;\nusing Windows.UI.Core;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\n// The Content Dialog item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class CaptchaRequestDialog : ContentDialog\n    {\n        private readonly DiscordCaptchaRequest captchaRequest;\n        \n        public DiscordCaptchaResponse CaptchaResponse;\n\n        public CaptchaRequestDialog(DiscordCaptchaRequest captchaRequest)\n        {\n            this.InitializeComponent();\n\n            this.captchaRequest = captchaRequest;\n            this.CaptchaResponse = new DiscordCaptchaResponse();\n        }\n\n        private async void ContentDialog_Loaded(object sender, RoutedEventArgs e)\n        {\n            var theme = Application.Current.RequestedTheme == ApplicationTheme.Dark ? \"dark\" : \"light\";\n\n            await CaptchaWebView.EnsureCoreWebView2Async(); // ensure the CoreWebView2 is created\n            var coreWebView = CaptchaWebView.CoreWebView2;\n            if (coreWebView != null)\n            {\n                coreWebView.SetVirtualHostNameToFolderMapping(\n                    \"appx\", Package.Current.InstalledLocation.Path,\n                    CoreWebView2HostResourceAccessKind.Allow);\n\n                coreWebView.WebMessageReceived += OnMessageRecieved;\n\n                CaptchaWebView.Source = new Uri($\"https://appx/Assets/Captcha/hCaptcha.html?siteKey={captchaRequest.SiteKey}&theme=\" + theme);\n            }\n        }\n\n        private async void OnMessageRecieved(CoreWebView2 sender, CoreWebView2WebMessageReceivedEventArgs args)\n        {\n            var jObject = JObject.Parse(args.WebMessageAsJson);\n            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\n            {\n                var op = jObject[\"op\"].ToObject<string>();\n                switch (op)\n                {\n                    case \"captcha_complete\":\n                        CaptchaResponse = new DiscordCaptchaResponse(jObject[\"token\"].ToObject<string>());\n                        IsPrimaryButtonEnabled = true;\n                        break;\n                };\n            });\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/ChangeNicknameDialog.xaml",
    "content": "﻿<ContentDialog\n    x:Class=\"Unicord.Universal.Dialogs.ChangeNicknameDialog\"\n    x:Uid=\"/Dialogs/ChangeNicknameDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    Style=\"{ThemeResource DefaultContentDialogStyle}\"\n    PrimaryButtonText=\"Save\"\n    SecondaryButtonText=\"Cancel\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <TextBlock x:Name=\"title\" x:Uid=\"/Dialogs/ChangeNicknameTitle\" Style=\"{StaticResource SubtitleTextBlockStyle}\" TextWrapping=\"Wrap\" Grid.Column=\"1\"></TextBlock>\n        <TextBlock x:Name=\"content\" x:Uid=\"/Dialogs/ChangeNicknameSubtitle\" Grid.Row=\"1\" TextWrapping=\"Wrap\" Foreground=\"{ThemeResource SystemFillColorCautionBrush}\" Margin=\"0,0,0,12\"></TextBlock>\n        <TextBox x:Name=\"inputBox\" Grid.Row=\"2\"></TextBox>\n    </Grid>\n</ContentDialog>\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/ChangeNicknameDialog.xaml.cs",
    "content": "﻿using DSharpPlus.Entities;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class ChangeNicknameDialog : ContentDialog\n    {\n        public string Text { get => inputBox.Text; set => inputBox.Text = value; }\n\n        public ChangeNicknameDialog(DiscordMember user)\n        {\n            InitializeComponent();\n            inputBox.Text = user.Nickname ?? \"\";\n            inputBox.PlaceholderText = user.Username;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/ConfirmationDialog.xaml",
    "content": "﻿<ContentDialog\n    x:Class=\"Unicord.Universal.Dialogs.ConfirmationDialog\"\n    x:Uid=\"/Dialogs/ConfirmationDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    Style=\"{ThemeResource DefaultContentDialogStyle}\">\n\n    <Grid VerticalAlignment=\"Center\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"48\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n\n        <TextBlock x:Name=\"iconText\" Text=\"&#xE783;\" FontSize=\"48\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\"/>\n\n        <Grid Grid.Column=\"1\" Margin=\"12,0,0,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <TextBlock x:Name=\"questionTitle\" FontSize=\"16\" FontWeight=\"Bold\" Text=\"Remove this item?\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" />\n            <TextBlock x:Name=\"questionContent\" Grid.Row=\"1\" Text=\"Are you sure you want to remove this item?\" TextWrapping=\"Wrap\" />\n        </Grid>\n    </Grid>\n</ContentDialog>\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/ConfirmationDialog.xaml.cs",
    "content": "﻿using Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class ConfirmationDialog : ContentDialog\n    {\n        public string Icon { get => iconText.Text; set => iconText.Text = value; }\n        public new string Title { get => questionTitle.Text; set => questionTitle.Text = value; }\n        public new string Content { get => questionContent.Text; set => questionContent.Text = value; }\n\n        public ConfirmationDialog()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/CreateServerDialog.xaml",
    "content": "﻿<ContentDialog\n    x:Class=\"Unicord.Universal.Dialogs.CreateServerDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:models=\"using:Unicord.Universal.Models\"\n    mc:Ignorable=\"d\"\n    Title=\"Create a Server!\"\n    PrimaryButtonText=\"Create\"\n    SecondaryButtonText=\"Cancel\"\n    PrimaryButtonClick=\"ContentDialog_PrimaryButtonClick\"\n    Background=\"{ThemeResource BackgroundSecondaryBrush}\"\n    PrimaryButtonStyle=\"{ThemeResource AccentButtonStyle}\">\n    <ContentDialog.Resources>\n        <DataTemplate x:Key=\"SmallHeaderTemplate\">\n            <TextBlock Text=\"{Binding}\" FontSize=\"12\"/>\n        </DataTemplate>\n    </ContentDialog.Resources>\n    <ContentDialog.DataContext>\n        <models:CreateServerModel />\n    </ContentDialog.DataContext>\n\n    <Grid x:Name=\"MainGrid\">\n        <Grid>\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"*\"/>\n            </Grid.ColumnDefinitions>\n            <StackPanel x:Name=\"ChooseIcon\" Tapped=\"ChooseIcon_Tapped\" VerticalAlignment=\"Center\" Margin=\"8,0,24,0\">\n                <Grid>\n                    <lib:PersonPicture DisplayName=\"{Binding Name, Mode=TwoWay}\" ProfilePicture=\"{Binding Icon}\" Width=\"128\" Height=\"128\"/>\n                    <lib:ProgressRing x:Name=\"IconProgressRing\" Width=\"32\" Height=\"32\" />\n                </Grid>\n                <TextBlock FontSize=\"11\" TextWrapping=\"Wrap\" Margin=\"4\" HorizontalAlignment=\"Center\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\">\n                Tap to add an Icon!\n                </TextBlock>\n            </StackPanel>\n            <StackPanel x:Name=\"MainDetails\" Grid.Column=\"1\">\n                <TextBox Text=\"{Binding Name, Mode=TwoWay}\" HeaderTemplate=\"{StaticResource SmallHeaderTemplate}\" Header=\"Name\" HorizontalAlignment=\"Stretch\" PlaceholderText=\"Witty Server Name\" Margin=\"0,0,0,8\"/>\n                <ComboBox SelectedItem=\"{Binding Region, Mode=TwoWay}\" HeaderTemplate=\"{StaticResource SmallHeaderTemplate}\" Header=\"Region\" HorizontalAlignment=\"Stretch\" ItemsSource=\"{Binding Regions}\" Margin=\"0,0,0,8\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <TextBlock Text=\"{Binding Name}\"/>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n                </ComboBox>\n                <TextBlock FontSize=\"11\" TextWrapping=\"Wrap\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\">\n                By creating a server, you agree to Discord's \n                <Hyperlink NavigateUri=\"https://discordapp.com/terms\">Terms of Service</Hyperlink>\n                and \n                <Hyperlink NavigateUri=\"https://discordapp.com/guidelines\">Community Guidelines</Hyperlink>\n                </TextBlock>\n            </StackPanel>\n        </Grid>\n    </Grid>\n</ContentDialog>\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/CreateServerDialog.xaml.cs",
    "content": "﻿using System;\nusing System.IO;\nusing Unicord.Universal.Models;\nusing Windows.Storage;\nusing Windows.Storage.Pickers;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media.Imaging;\nusing Unicord.Universal.Services;\n\n// The Content Dialog item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class CreateServerDialog : ContentDialog\n    {\n        public CreateServerDialog()\n        {\n            InitializeComponent();\n        }\n\n        private async void ChooseIcon_Tapped(object sender, TappedRoutedEventArgs e)\n        {\n            if (DataContext is CreateServerModel model)\n            {\n                var picker = new FileOpenPicker();\n                picker.FileTypeFilter.Add(\".png\");\n                picker.FileTypeFilter.Add(\".jpg\");\n                picker.FileTypeFilter.Add(\".gif\");\n                picker.FileTypeFilter.Add(\".webp\");\n\n                var file = await picker.PickSingleFileAsync();\n                if (file != null)\n                {\n                    IconProgressRing.IsActive = true;\n\n                    model.IconFile = file;\n                    if (!(model.Icon is BitmapImage image))\n                    {\n                        image = new BitmapImage\n                        {\n                            DecodePixelHeight = 128,\n                            DecodePixelType = DecodePixelType.Logical\n                        };\n\n                        model.Icon = image;\n                    }\n\n                    using (var stream = await file.OpenAsync(FileAccessMode.Read))\n                    {\n                        await image.SetSourceAsync(stream);\n                    }\n\n                    IconProgressRing.IsActive = false;\n                }\n            }\n        }\n\n        private async void ContentDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)\n        {\n            return;\n\n            if (DataContext is CreateServerModel model)\n            {\n                if (string.IsNullOrEmpty(model.Name))\n                {\n                    args.Cancel = true;\n                    return;\n                }\n\n                if (model.Region == null) // should never happen, better safe than sorry.\n                {\n                    args.Cancel = true;\n                    return;\n                }\n\n                try\n                {\n                    if (model.IconFile != null)\n                    {\n                        using (var stream = await model.IconFile.OpenStreamForReadAsync())\n                        {\n                            await DiscordManager.Discord.CreateGuildAsync(model.Name, model.Region.Id, stream);\n                        }\n                    }\n                    else\n                    {\n                        await DiscordManager.Discord.CreateGuildAsync(model.Name, model.Region.Id);\n                    }\n                }\n                catch (Exception ex)\n                {\n                    Logger.LogError(ex);\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/DeleteMessageDialog.xaml",
    "content": "﻿<ContentDialog\n    x:Name=\"Self\"\n    x:Class=\"Unicord.Universal.Dialogs.DeleteMessageDialog\"\n    x:Uid=\"/Dialogs/DeleteMessageDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:messages=\"using:Unicord.Universal.Controls.Messages\"\n    mc:Ignorable=\"d\"\n    Style=\"{ThemeResource DefaultContentDialogStyle}\">\n    <messages:MessageControl x:Name=\"MessageControl\" IsEnabled=\"False\" Background=\"Transparent\" />\n</ContentDialog>\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/DeleteMessageDialog.xaml.cs",
    "content": "﻿using DSharpPlus.Entities;\nusing Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class DeleteMessageDialog : ContentDialog\n    {\n        public DiscordMessage Message\n        {\n            get => (DiscordMessage)GetValue(MessageProperty);\n            set => SetValue(MessageProperty, value);\n        }\n\n        public static readonly DependencyProperty MessageProperty =\n            DependencyProperty.Register(\"Message\", typeof(DiscordMessage), typeof(DeleteMessageDialog), new PropertyMetadata(null, OnMessageSet));\n\n        private static void OnMessageSet(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            // todo: why\n            (d as DeleteMessageDialog).MessageControl.MessageViewModel = new MessageViewModel(e.NewValue as DiscordMessage);\n        }\n\n        public DeleteMessageDialog()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/ErrorDialog.xaml",
    "content": "﻿<ContentDialog\n    x:Class=\"Unicord.Universal.Dialogs.ErrorDialog\"\n    x:Uid=\"/Dialogs/ErrorDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\" \n    Style=\"{ThemeResource DefaultContentDialogStyle}\">\n\n    <Grid VerticalAlignment=\"Center\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"48\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n\n        <TextBlock x:Name=\"iconText\" Text=\"&#xE783;\" FontSize=\"48\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\"/>\n\n        <Grid Grid.Column=\"1\" Margin=\"12,0,0,0\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <TextBlock x:Name=\"errorTitle\" FontSize=\"16\" FontWeight=\"Bold\" Text=\"Whoops!\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Grid.Column=\"1\"></TextBlock>\n            <TextBlock x:Name=\"errorContent\" Grid.Row=\"1\" Text=\"Something went very wrong here, I entirely blame you for it.\" TextWrapping=\"Wrap\" />\n        </Grid>\n    </Grid>\n</ContentDialog>\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/ErrorDialog.xaml.cs",
    "content": "﻿using Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class ErrorDialog : ContentDialog\n    {\n        public string Icon { get => iconText.Text; set => iconText.Text = value; }\n        public new string Title { get => errorTitle.Text; set => errorTitle.Text = value; }\n        public new string Content { get => errorContent.Text; set => errorContent.Text = value; }\n\n        public ErrorDialog()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/GuildDialog.xaml",
    "content": "﻿<UserControl\n    x:Class=\"Unicord.Universal.Dialogs.GuildDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:med=\"using:Microsoft.UI.Xaml.Media\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    mc:Ignorable=\"d\" \n    d:DesignHeight=\"300\"\n    d:DesignWidth=\"400\">\n\n    <!--\n    \n    <Grid HorizontalAlignment=\"Stretch\" Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n        <Grid>\n            <Grid.Background>\n                <ImageBrush Stretch=\"UniformToFill\" ImageSource=\"{Binding SplashUrl, TargetNullValue={Binding IconUrl}}\"/>\n            </Grid.Background>\n            <Grid Padding=\"20\">\n                <Grid.Background>\n                    <med:AcrylicBrush TintOpacity=\"0\"/>\n                </Grid.Background>\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n                <lib:PersonPicture Width=\"128\" Height=\"128\" Margin=\"0,0,20,0\" ProfilePicture=\"{Binding IconUrl}\" DisplayName=\"{Binding Name}\"/>\n                <TextBlock Grid.Column=\"1\" VerticalAlignment=\"Center\" Style=\"{ThemeResource SubheaderTextBlockStyle}\" Text=\"{Binding Name}\"/>\n            </Grid>\n        </Grid>\n        <Pivot MinHeight=\"250\" Grid.Row=\"1\" Padding=\"0,0,0,20\">\n            <PivotItem Header=\"Info\">\n                <Grid>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"*\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                    </Grid.ColumnDefinitions>\n                    <StackPanel>\n                        <StackPanel>\n                            <TextBlock Text=\"Created\" Style=\"{ThemeResource TitleTextBlockStyle}\"/>\n                            <TextBlock Text=\"{Binding CreationTimestamp.LocalDateTime}\"/>\n                        </StackPanel>\n                        <StackPanel Margin=\"0,10,0,0\">\n                            <TextBlock Text=\"Owner\" Style=\"{ThemeResource TitleTextBlockStyle}\"/>\n                            <Grid DataContext=\"{Binding Owner}\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n                                <lib:PersonPicture Width=\"36\" Height=\"36\" DisplayName=\"{Binding Username}\" ProfilePicture=\"{Binding NonAnimatedAvatarUrl}\" Margin=\"0,0,0,10\" />\n                                <TextBlock Grid.Column=\"1\" Foreground=\"{StaticResource SystemColorGrayTextBrush}\" TextTrimming=\"CharacterEllipsis\">\n                                   @<Run Text=\"{Binding Username, Mode=OneWay}\" Foreground=\"{StaticResource ApplicationForegroundThemeBrush}\" FontWeight=\"Bold\"/>#<Run Text=\"{Binding Discriminator, Mode=OneWay}\"/>\n                                </TextBlock>\n\n                            </Grid>\n                        </StackPanel>\n                    </StackPanel>\n                    <StackPanel Grid.Column=\"1\">\n                        <StackPanel>\n                            <TextBlock Text=\"Joined\" Style=\"{ThemeResource TitleTextBlockStyle}\"/>\n                            <TextBlock Text=\"{Binding CurrentMember.JoinedAt.LocalDateTime}\"/>\n                        </StackPanel>                        \n                    </StackPanel>\n                </Grid>\n            </PivotItem>\n            <PivotItem Header=\"Members\">\n                <Grid>\n                    <ListView ItemsSource=\"{Binding Members}\">\n                        <ListView.ItemTemplate>\n                            <DataTemplate>\n                                <ItemsControl ItemsSource=\"{Binding Roles}\">\n                                    <ItemsControl.ItemsPanel>\n                                        <ItemsPanelTemplate>\n                                            <StackPanel Orientation=\"Horizontal\"/>\n                                        </ItemsPanelTemplate>\n                                    </ItemsControl.ItemsPanel>\n                                    <ItemsControl.ItemTemplate>\n                                        <DataTemplate>\n                                            <Border Margin=\"2.5\" BorderThickness=\"1\" BorderBrush=\"{Binding Color, Converter={StaticResource ColourBrushConverter}, TargetNullValue={ThemeResource DefaultTextForegroundThemeBrush}}\" Padding=\"5,2,5,4\">\n                                                <TextBlock Foreground=\"{Binding Color, Converter={StaticResource ColourBrushConverter}}\" FontSize=\"12\" Text=\"{Binding Name}\" VerticalAlignment=\"Center\" TextAlignment=\"Center\" LineHeight=\"15\"/>\n                                            </Border>\n                                        </DataTemplate>\n                                    </ItemsControl.ItemTemplate>\n                                </ItemsControl>\n                            </DataTemplate>\n                        </ListView.ItemTemplate>\n                    </ListView>\n                </Grid>\n            </PivotItem>\n            <PivotItem Header=\"Roles\">\n                <Grid>\n\n                </Grid>\n            </PivotItem>\n            <PivotItem Header=\"Emoji\">\n                <Grid>\n\n                </Grid>\n            </PivotItem>\n        </Pivot>\n    </Grid>\n    \n    -->\n\n    <Grid Background=\"{StaticResource OverlayBackdrop}\">\n\n        <VisualStateManager.VisualStateGroups>\n            <VisualStateGroup x:Name=\"AdaptiveStates\">\n                <VisualState x:Name=\"UltraWideState\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"1000\" />\n                    </VisualState.StateTriggers>\n\n                    <VisualState.Setters>\n                        <Setter Target=\"nav.PaneDisplayMode\" Value=\"Left\"/>\n                        <Setter Target=\"nav.Margin\" Value=\"0\"/>\n                        <Setter Target=\"icon.Visibility\" Value=\"Visible\"/>\n                        <Setter Target=\"name.Style\" Value=\"{ThemeResource SubheaderTextBlockStyle}\"/>\n                        <Setter Target=\"name.HorizontalAlignment\" Value=\"Left\"/>\n                        <Setter Target=\"headerGrid.Height\" Value=\"168\"/>\n                        <Setter Target=\"headerGrid.Margin\" Value=\"0\"/>\n                        <Setter Target=\"close.Margin\" Value=\"0\"/>\n                        <Setter Target=\"close.Visibility\" Value=\"Collapsed\"/>\n                    </VisualState.Setters>\n                </VisualState>\n                <VisualState x:Name=\"WideState\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"769\" />\n                    </VisualState.StateTriggers>\n\n                    <VisualState.Setters>\n                        <Setter Target=\"nav.PaneDisplayMode\" Value=\"LeftCompact\"/>\n                        <Setter Target=\"nav.Margin\" Value=\"0\"/>\n                        <Setter Target=\"icon.Visibility\" Value=\"Visible\"/>\n                        <Setter Target=\"name.Style\" Value=\"{ThemeResource SubheaderTextBlockStyle}\"/>\n                        <Setter Target=\"name.HorizontalAlignment\" Value=\"Left\"/>\n                        <Setter Target=\"headerGrid.Height\" Value=\"168\"/>\n                        <Setter Target=\"headerGrid.Margin\" Value=\"0\"/>\n                        <Setter Target=\"close.Margin\" Value=\"0\"/>\n                        <Setter Target=\"close.Visibility\" Value=\"Collapsed\"/>\n                    </VisualState.Setters>\n                </VisualState>\n                <VisualState x:Name=\"NarrowState\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"0\" />\n                    </VisualState.StateTriggers>\n\n                    <VisualState.Setters>\n                        <Setter Target=\"nav.PaneDisplayMode\" Value=\"Auto\"/>\n                        <Setter Target=\"nav.Margin\" Value=\"0,25,0,0\"/>\n                        <Setter Target=\"icon.Visibility\" Value=\"Collapsed\"/>\n                        <Setter Target=\"headerGrid.Height\" Value=\"65\"/>\n                        <Setter Target=\"headerGrid.Margin\" Value=\"0,-25,0,0\"/>\n                        <Setter Target=\"name.Style\" Value=\"{ThemeResource SubtitleTextBlockStyle}\"/>\n                        <Setter Target=\"name.HorizontalAlignment\" Value=\"Center\"/>\n                        <Setter Target=\"name.Margin\" Value=\"0,20,0,0\"/>\n                        <Setter Target=\"close.Visibility\" Value=\"Visible\"/>\n                    </VisualState.Setters>\n                </VisualState>\n            </VisualStateGroup>\n        </VisualStateManager.VisualStateGroups>\n\n        <lib:NavigationView\n            x:Name=\"nav\"\n            OpenPaneLength=\"250\"\n            PaneDisplayMode=\"Auto\"\n            IsBackButtonVisible=\"Collapsed\"\n            IsSettingsVisible=\"False\"\n            Background=\"{ThemeResource ApplicationPageBackgroundThemeBrush}\">\n\n            <lib:NavigationView.MenuItems>\n                <lib:NavigationViewItem Content=\"Details\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"&#xE946;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n                <lib:NavigationViewItemSeparator/>\n                <lib:NavigationViewItem Content=\"Moderation\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"&#xEC7A;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n                <lib:NavigationViewItemSeparator/>\n                <lib:NavigationViewItem Content=\"Members\">\n                    <lib:NavigationViewItem.Icon>\n                        <SymbolIcon Symbol=\"People\"/>\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n                <lib:NavigationViewItem Content=\"Roles\">\n                    <lib:NavigationViewItem.Icon>\n                        <SymbolIcon Symbol=\"Permissions\"/>\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n                <lib:NavigationViewItem Content=\"Emoji\">\n                    <lib:NavigationViewItem.Icon>\n                        <SymbolIcon Symbol=\"Emoji2\"/>\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n                <lib:NavigationViewItemSeparator/>\n                <lib:NavigationViewItem Content=\"Audit Log\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"&#xE7BC;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n                <lib:NavigationViewItemSeparator/>\n                <lib:NavigationViewItem Foreground=\"Red\" SelectsOnInvoked=\"False\" Content=\"Delete Server\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"&#xE74D;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n            </lib:NavigationView.MenuItems>\n            <lib:NavigationView.PaneFooter>\n                <Button Style=\"{ThemeResource NavigationViewPaneSearchButtonStyle}\" Content=\"&#xE72B;\" Click=\"Button_Click\"/>\n            </lib:NavigationView.PaneFooter>\n\n            <Grid>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"*\"/>\n                </Grid.RowDefinitions>\n                <Grid>\n                    <Grid.Background>\n                        <ImageBrush Stretch=\"UniformToFill\" ImageSource=\"{Binding SplashUrl, TargetNullValue={Binding IconUrl}}\"/>\n                    </Grid.Background>\n                    <Grid x:Name=\"headerGrid\" Height=\"40\">\n                        <Grid.Background>\n                            <med:AcrylicBrush TintOpacity=\"0\"/>\n                        </Grid.Background>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"auto\" MinWidth=\"42\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <lib:PersonPicture x:Name=\"icon\" Width=\"128\" Height=\"128\" Margin=\"20,0\" ProfilePicture=\"{Binding IconUrl}\" DisplayName=\"{Binding Name}\"/>\n                        <TextBlock x:Name=\"name\" Grid.Column=\"1\" VerticalAlignment=\"Center\" Text=\"{Binding Name}\"/>\n                        <Button x:Name=\"close\" Grid.Column=\"2\" Style=\"{ThemeResource NavigationViewPaneSearchButtonStyle}\" Click=\"Button_Click\" Margin=\"0,25,0,0\" Content=\"&#xE711;\"/>\n                    </Grid>\n                </Grid>\n\n                <Grid Grid.Row=\"1\" Padding=\"10\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"*\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                        <ColumnDefinition Width=\"*\"/>\n                    </Grid.ColumnDefinitions>\n\n                    <Grid Margin=\"20\" Padding=\"10\" Background=\"{ThemeResource SystemControlDisabledChromeMediumLowBrush}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n\n                        <TextBlock HorizontalAlignment=\"Center\" Style=\"{ThemeResource SubheaderTextBlockStyle}\">Server</TextBlock>\n\n                        <StackPanel Grid.Row=\"1\" Margin=\"0,5,0,0\">\n                            <TextBlock Style=\"{ThemeResource BaseTextBlockStyle}\" Margin=\"5\" Text=\"Server Name\"/>\n                            <TextBox Text=\"{Binding Name}\"/>\n                        </StackPanel>\n\n                        <StackPanel Grid.Row=\"2\" Margin=\"0,5,0,0\">\n                            <TextBlock Style=\"{ThemeResource BaseTextBlockStyle}\" Margin=\"5\" Text=\"Server Region\"/>\n                            <ComboBox x:Name=\"regionsBox\" HorizontalAlignment=\"Stretch\" SelectedItem=\"{Binding VoiceRegion}\">\n                                <ComboBox.ItemTemplate>\n                                    <DataTemplate>\n                                        <TextBlock Text=\"{Binding Name}\"/>\n                                    </DataTemplate>\n                                </ComboBox.ItemTemplate>\n                            </ComboBox>\n                        </StackPanel>\n                    </Grid>\n                    <Grid Grid.Column=\"1\" Margin=\"20\" Padding=\"10\" Background=\"{ThemeResource SystemControlDisabledChromeMediumLowBrush}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"*\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n\n                        <TextBlock HorizontalAlignment=\"Center\" Style=\"{ThemeResource SubheaderTextBlockStyle}\">Members</TextBlock>\n\n                        <ListView \n                            Padding=\"0,10,0,0\"\n                            Grid.Row=\"1\" \n                            SelectionMode=\"None\"\n                            ItemsSource=\"{Binding Members}\"\n                            ScrollViewer.VerticalScrollBarVisibility=\"Disabled\"\n                            ScrollViewer.VerticalScrollMode=\"Disabled\"\n                            ScrollViewer.HorizontalScrollBarVisibility=\"Disabled\"\n                            ScrollViewer.HorizontalScrollMode=\"Disabled\">\n                            <ListView.ItemTemplate>\n                                <DataTemplate>\n                                    <Grid Margin=\"0,5\">\n                                        <Grid.ColumnDefinitions>\n                                            <ColumnDefinition Width=\"Auto\"/>\n                                            <ColumnDefinition Width=\"*\"/>\n                                        </Grid.ColumnDefinitions>\n                                        <lib:PersonPicture Width=\"36\" Height=\"36\" DisplayName=\"{Binding Username}\" ProfilePicture=\"{Binding AvatarUrl}\" />\n                                        <TextBlock Grid.Column=\"1\" VerticalAlignment=\"Center\" TextTrimming=\"CharacterEllipsis\" Margin=\"10,0,0,0\" Text=\"{Binding Username}\"/>\n                                    </Grid>\n                                </DataTemplate>\n                            </ListView.ItemTemplate>\n                        </ListView>\n\n                        <Grid Grid.Row=\"2\" Padding=\"0,10,0,0\">\n                            <Button Style=\"{ThemeResource TextBlockButtonStyle}\" HorizontalAlignment=\"Center\" Content=\"View More\"/>\n                        </Grid>\n                    </Grid>\n                    <Grid Grid.Column=\"2\" Margin=\"20\" Padding=\"10\" Background=\"{ThemeResource SystemControlDisabledChromeMediumLowBrush}\">\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"*\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n                        <Grid.Resources>\n                            <CollectionViewSource x:Key=\"cvs\" x:Name=\"cvs\" IsSourceGrouped=\"True\" />\n                        </Grid.Resources>\n\n                        <TextBlock HorizontalAlignment=\"Center\" Style=\"{ThemeResource SubheaderTextBlockStyle}\">Channels</TextBlock>\n\n                        <ListView \n                            Margin=\"0,10,0,0\"\n                            Grid.Row=\"1\" \n                            SelectionMode=\"Single\"\n                            CanReorderItems=\"True\"\n                            CanDragItems=\"True\"\n                            ItemsSource=\"{Binding Source={StaticResource cvs}}\"\n                            ItemTemplate=\"{StaticResource ChannelListTemplate}\"\n                            ScrollViewer.HorizontalScrollBarVisibility=\"Disabled\"\n                            ScrollViewer.HorizontalScrollMode=\"Disabled\">\n                            <ListView.GroupStyle>\n                                <GroupStyle HidesIfEmpty=\"True\">\n                                    <GroupStyle.HeaderTemplate>\n                                        <DataTemplate>\n                                            <TextBlock Text=\"{Binding Key.Name, FallbackValue={Binding Key}}\" Style=\"{ThemeResource FlyoutPickerTitleTextBlockStyle}\" TextTrimming=\"CharacterEllipsis\" TextWrapping=\"NoWrap\"/>\n                                        </DataTemplate>\n                                    </GroupStyle.HeaderTemplate>\n                                </GroupStyle>\n                            </ListView.GroupStyle>\n                        </ListView>\n\n                        <Grid Grid.Row=\"2\" Padding=\"0,10,0,0\">\n                            <Button Style=\"{ThemeResource TextBlockButtonStyle}\" HorizontalAlignment=\"Center\" Content=\"Edit\"/>\n                        </Grid>\n                    </Grid>\n                    <Grid Grid.Column=\"3\" Margin=\"20\" Padding=\"10\" Background=\"{ThemeResource SystemControlDisabledChromeMediumLowBrush}\">\n\n                    </Grid>\n                </Grid>\n\n            </Grid>\n        </lib:NavigationView>\n    </Grid>\n</UserControl>\n "
  },
  {
    "path": "Unicord.Universal/Dialogs/GuildDialog.xaml.cs",
    "content": "﻿using System.Linq;\nusing DSharpPlus.Entities;\nusing Unicord.Universal.Extensions;\nusing Unicord.Universal.Services;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class GuildDialog : UserControl\n    {\n        public DiscordGuild Guild\n        {\n            get => (DiscordGuild)GetValue(GuildProperty);\n            set => SetValue(GuildProperty, value);\n        }\n\n        public static readonly DependencyProperty GuildProperty =\n            DependencyProperty.Register(\"Guild\", typeof(DiscordGuild), typeof(GuildDialog), new PropertyMetadata(null, OnGuildChanged));\n\n        private static void OnGuildChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var guild = e.NewValue as DiscordGuild;\n            var guildDialog = d as GuildDialog;\n            guildDialog.DataContext = guild;\n\n            if (guild.Channels.Values.Any(c => c.IsCategory))\n            {\n                // Use new discord channel category behaviour\n                guildDialog.cvs.IsSourceGrouped = true;\n                guildDialog.cvs.Source = guild.Channels.Values\n                    .Where(c => !c.IsCategory)\n                    .OrderBy(c => c.Position)\n                    .OrderBy(c => c.Type)\n                    .GroupBy(g => g.Parent)\n                    .OrderBy(c => c.Key?.Position);\n            }\n            else\n            {\n                // Use old discord non-category behaviour\n                guildDialog.cvs.IsSourceGrouped = false;\n                guildDialog.cvs.Source = guild.Channels.Values\n                    .OrderBy(c => c.Position)\n                    .OrderBy(c => c.Type);\n            }\n        }\n\n        public GuildDialog()\n        {\n            InitializeComponent();\n            regionsBox.ItemsSource = DiscordManager.Discord.VoiceRegions.Values;\n        }\n\n        private void Button_Click(object sender, RoutedEventArgs e)\n        {\n            this.FindParent<ContentControl>().Visibility = Visibility.Collapsed;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/KickDialog.xaml",
    "content": "﻿<ContentDialog\n    x:Class=\"Unicord.Universal.Dialogs.KickDialog\"\n    x:Uid=\"/Dialogs/KickDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"    \n    Style=\"{ThemeResource DefaultContentDialogStyle}\">\n\n    <StackPanel>\n        <TextBlock x:Name=\"headerTextBlock\" Style=\"{ThemeResource SubtitleTextBlockStyle}\"/>\n        <TextBox x:Name=\"kickReasonText\" x:Uid=\"/Dialogs/KickReason\" Margin=\"0,8,0,0\" MaxLength=\"512\" MinHeight=\"96\" AcceptsReturn=\"True\" TextWrapping=\"Wrap\"/>\n    </StackPanel>\n</ContentDialog>\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/KickDialog.xaml.cs",
    "content": "﻿using DSharpPlus.Entities;\nusing Windows.ApplicationModel.Resources;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class KickDialog : ContentDialog\n    {\n        public string KickReason\n            =>  kickReasonText.Text;\n\n        public KickDialog(DiscordMember member)\n        {\n            InitializeComponent();\n            var resources = ResourceLoader.GetForCurrentView(\"Dialogs\");\n            headerTextBlock.Text = string.Format(resources.GetString(\"KickDialogHeaderFormat\"), member.Username, member.Discriminator);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/PinMessageDialog.xaml",
    "content": "﻿<ContentDialog\n    x:Class=\"Unicord.Universal.Dialogs.PinMessageDialog\"\n    x:Uid=\"/Dialogs/PinMessageDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:messages=\"using:Unicord.Universal.Controls.Messages\"\n    mc:Ignorable=\"d\"\n    Style=\"{ThemeResource DefaultContentDialogStyle}\">\n    <messages:MessageControl x:Name=\"MessageControl\" IsEnabled=\"False\" Background=\"Transparent\" />\n</ContentDialog>\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/PinMessageDialog.xaml.cs",
    "content": "﻿using DSharpPlus.Entities;\nusing Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class PinMessageDialog : ContentDialog\n    {\n        public DiscordMessage Message\n        {\n            get => (DiscordMessage)GetValue(MessageProperty);\n            set => SetValue(MessageProperty, value);\n        }\n\n        public static readonly DependencyProperty MessageProperty =\n            DependencyProperty.Register(\"Message\", typeof(DiscordMessage), typeof(PinMessageDialog), new PropertyMetadata(null, OnMessageSet));\n\n        private static void OnMessageSet(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            // todo: why\n            (d as PinMessageDialog).MessageControl.MessageViewModel = new MessageViewModel(e.NewValue as DiscordMessage);\n            (d as ContentDialog).Title = (e.NewValue as DiscordMessage).Pinned ? \"Unpin this message?\" : \"Pin this message?\";\n        }\n\n        public PinMessageDialog()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/ProfileOverlay.xaml",
    "content": "﻿<UserControl\n    x:Class=\"Unicord.Universal.Dialogs.ProfileOverlay\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:controls=\"using:Unicord.Universal.Controls\"\n    xmlns:toolkit=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:media=\"using:Microsoft.UI.Xaml.Media\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:users=\"using:Unicord.Universal.Controls.Users\" xmlns:guild=\"using:Unicord.Universal.Models.Guild\"\n    x:DefaultBindMode=\"OneWay\" mc:Ignorable=\"d\" MaxWidth=\"550\">\n\n    <UserControl.Resources>\n        <FontFamily x:Key=\"PivotHeaderItemFontFamily\">Segoe UI Variable Display</FontFamily>\n        <FontWeight x:Key=\"PivotHeaderItemThemeFontWeight\">Medium</FontWeight>\n    </UserControl.Resources>\n\n    <Border VerticalAlignment=\"Center\"\n            Background=\"{ThemeResource AcrylicInAppFillColorBaseBrush}\"\n            BorderBrush=\"{ThemeResource SurfaceStrokeColorDefaultBrush}\"\n            BorderThickness=\"1,1,1,1\"\n            CornerRadius=\"8\">\n        <StackPanel>\n            <Border Background=\"{ThemeResource LayerFillColorAltBrush}\"\n                    CornerRadius=\"8,8,0,0\">\n                <Grid Padding=\"20\">\n                    <Grid>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"1*\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <users:AvatarControl Width=\"96\" Height=\"96\"\n                                         Style=\"{StaticResource LargeAvatarWithPresenceStyle}\"\n                                         Source=\"{x:Bind User.AvatarUrl}\" \n                                         Presence=\"{x:Bind User.Presence}\"/>\n                        <StackPanel Margin=\"20,0,0,0\" Grid.Column=\"1\" VerticalAlignment=\"Center\">\n                            <TextBlock Style=\"{ThemeResource TitleTextBlockStyle}\" \n                                       TextTrimming=\"CharacterEllipsis\" \n                                       TextWrapping=\"NoWrap\"\n                                       FontFamily=\"Segoe UI Variable Display\" \n                                       Text=\"{x:Bind User.DisplayName, TargetNullValue='DisplayName'}\">\n\n                            </TextBlock>\n                            <TextBlock x:Name=\"nicknameTextBlock\"\n                                   Margin=\"0,0,4,0\" \n                                   TextWrapping=\"NoWrap\" \n                                   Visibility=\"{x:Bind User.Nickname, Converter={StaticResource BoolVisibilityConverter}, FallbackValue=Collapsed}\"\n                                   Foreground=\"{x:Bind User.Color, Converter={StaticResource ColourBrushConverter}}\" \n                                   Text=\"{x:Bind User.DisplayName}\"\n                                   Style=\"{ThemeResource SubtitleTextBlockStyle}\"\n                                   FontFamily=\"Segoe UI Variable Display\">\n                            </TextBlock>\n                        </StackPanel>\n                        <Grid Grid.Column=\"2\" VerticalAlignment=\"Center\" Margin=\"12,0,0,0\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"*\"/>\n                                <RowDefinition Height=\"*\"/>\n                            </Grid.RowDefinitions>\n                            <Button Style=\"{ThemeResource IconButtonStyle}\" VerticalAlignment=\"Stretch\" Content=\"&#xE8BD;\" Command=\"{Binding MessageCommand}\" />\n                            <Button Style=\"{ThemeResource IconButtonStyle}\" VerticalAlignment=\"Stretch\" Content=\"&#xE717;\" Grid.Row=\"1\" />\n                        </Grid>\n                    </Grid>\n                </Grid>\n            </Border>\n            <!--<Border Background=\"{ThemeResource LayerFillColorAltBrush}\">\n                <Grid Grid.Row=\"1\" \n                      Visibility=\"{x:Bind User.Presence.Status, Converter={StaticResource HideOnNullConverter}, FallbackValue=Collapsed}\">\n                    --><!--<controls:RichPresenceControl DataContext=\"{x:Bind _user.Presence.Activity}\" Margin=\"8\" />--><!--\n                </Grid>\n            </Border>-->\n            <Border>\n                <Grid MinHeight=\"200\"\n                      Padding=\"0,0,0,20\"\n                      BorderThickness=\"0,1,0,0\"\n                      BorderBrush=\"{ThemeResource CardStrokeColorDefaultBrush}\">\n                    <Pivot SelectedIndex=\"0\">\n                        <Pivot.HeaderTemplate>\n                            <DataTemplate>\n                                <TextBlock Text=\"{Binding}\" TextWrapping=\"NoWrap\" TextTrimming=\"CharacterEllipsis\" Style=\"{ThemeResource SubtitleTextBlockStyle}\"/>\n                            </DataTemplate>\n                        </Pivot.HeaderTemplate>\n                        <PivotItem x:Name=\"guildOverlay\" x:Load=\"{x:Bind User.IsMember, Mode=OneTime}\" Header=\"{x:Bind User.Guild.Name}\">\n                            <StackPanel>\n                                <StackPanel x:Name=\"rolesList\" \n                                            Visibility=\"{x:Bind User.Roles, Converter={StaticResource BoolVisibilityConverter}}\">\n                                    <TextBlock x:Uid=\"/Dialogs/ProfileRoles\" Style=\"{ThemeResource FlyoutPickerTitleTextBlockStyle}\" Margin=\"0,4\"/>\n                                    <ItemsControl ItemTemplate=\"{StaticResource RoleTemplate}\" ItemsSource=\"{x:Bind User.Roles}\">\n                                        <ItemsControl.ItemsPanel>\n                                            <ItemsPanelTemplate>\n                                                <toolkit:WrapPanel VerticalSpacing=\"4\" HorizontalSpacing=\"4\"/>\n                                            </ItemsPanelTemplate>\n                                        </ItemsControl.ItemsPanel>\n                                    </ItemsControl>\n                                </StackPanel>\n\n                                <TextBlock x:Uid=\"/Dialogs/ProfileJoinedServer\" Style=\"{ThemeResource FlyoutPickerTitleTextBlockStyle}\" Margin=\"0,4\"/>\n                                <TextBlock Text=\"{x:Bind User.JoinedAt, Converter={StaticResource DateTimeConverter}}\"/>\n                            </StackPanel>\n                        </PivotItem>\n                        <PivotItem x:Uid=\"/Dialogs/ProfileMutualServers\">\n                            <PivotItem.Content>\n                                <ListView x:Name=\"mutualServers\" MaxHeight=\"180\" SelectionMode=\"None\" ItemsSource=\"{x:Bind User.MutualGuilds}\">\n                                    <ListView.ItemTemplate>\n                                        <DataTemplate x:DataType=\"guild:GuildViewModel\">\n                                            <Grid>\n                                                <Grid.ColumnDefinitions>\n                                                    <ColumnDefinition Width=\"Auto\"/>\n                                                    <ColumnDefinition Width=\"*\"/>\n                                                </Grid.ColumnDefinitions>\n\n                                                <lib:PersonPicture DisplayName=\"{x:Bind Name}\" ProfilePicture=\"{x:Bind Icon}\" Width=\"36\" Height=\"36\" Margin=\"0,4\"/>\n                                                <TextBlock Grid.Column=\"1\" Margin=\"12,0\" Text=\"{x:Bind Name}\" VerticalAlignment=\"Center\"/>\n                                            </Grid>\n                                        </DataTemplate>\n                                    </ListView.ItemTemplate>\n                                </ListView>\n                            </PivotItem.Content>\n                        </PivotItem>\n                        <PivotItem x:Uid=\"/Dialogs/ProfileConnections\">\n                        </PivotItem>\n                    </Pivot>\n                </Grid>\n            </Border>\n        </StackPanel>\n    </Border>\n</UserControl>\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/ProfileOverlay.xaml.cs",
    "content": "﻿using Unicord.Universal.Models.User;\nusing Unicord.Universal.Services;\nusing Windows.System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Input;\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class ProfileOverlay : UserControl\n    {\n        public UserViewModel User\n        {\n            get => (UserViewModel)GetValue(UserProperty);\n            set => SetValue(UserProperty, value);\n        }\n\n        public static readonly DependencyProperty UserProperty =\n            DependencyProperty.Register(\"User\", typeof(UserViewModel), typeof(ProfileOverlay), new PropertyMetadata(null, OnUserChanged));\n\n        private static void OnUserChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var overlay = (ProfileOverlay)d;\n            overlay.Bindings.Update();\n        }\n\n        public ProfileOverlay()\n        {\n            InitializeComponent();\n        }\n\n        private void DropShadowPanel_PreviewKeyUp(object sender, KeyRoutedEventArgs e)\n        {\n            if (e.Key == VirtualKey.Escape)\n            {\n                OverlayService.GetForCurrentView()\n                    .CloseOverlay();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/TokenDialog.xaml",
    "content": "﻿<ContentDialog\n    x:Uid=\"/Dialogs/TokenDialog\"\n    x:Class=\"Unicord.Universal.Dialogs.TokenDialog\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Dialogs\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:controls=\"using:Unicord.Universal.Controls\"\n    mc:Ignorable=\"d\"\n    PrimaryButtonText=\"PrimaryButtonText\"\n    SecondaryButtonText=\"SecondaryButtonText\"\n    CloseButtonText=\"CloseButtonText\"\n    Style=\"{ThemeResource DefaultContentDialogStyle}\"\n    DefaultButton=\"Primary\"\n    SecondaryButtonClick=\"ContentDialog_SecondaryButtonClick\"\n    CloseButtonClick=\"ContentDialog_CloseButtonClick\">\n\n    <Grid MaxWidth=\"400\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n        <TextBlock x:Name=\"TitleTextBlock\" x:Uid=\"/Dialogs/TokenTitle\" Style=\"{StaticResource SubtitleTextBlockStyle}\" TextWrapping=\"Wrap\" Grid.Column=\"1\" Text=\"/Dialogs/TokenTitle\"/>\n        <controls:MarkdownTextBlock x:Name=\"SubtitleTextBlock\"\n                                    x:Uid=\"/Dialogs/TokenSubtitle\"\n                                    Grid.Row=\"1\"\n                                    Text=\"/Dialogs/TokenSubtitle\"\n                                    LinkClicked=\"SubtitleTextBlock_LinkClicked\"/>\n        <PasswordBox x:Name=\"TokenTextBox\" Margin=\"0,12,0,0\" Grid.Row=\"2\"/>\n    </Grid>\n</ContentDialog>\n"
  },
  {
    "path": "Unicord.Universal/Dialogs/TokenDialog.xaml.cs",
    "content": "﻿using System;\nusing Windows.Storage;\nusing Windows.Storage.Pickers;\nusing Windows.UI.Xaml.Controls;\n\n// The Content Dialog item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace Unicord.Universal.Dialogs\n{\n    public sealed partial class TokenDialog : ContentDialog\n    {\n        public string Token =>\n            TokenTextBox.Password;\n\n        public TokenDialog()\n        {\n            this.InitializeComponent();\n        }\n\n        private async void ContentDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)\n        {\n            args.Cancel = true;\n\n            var picker = new FileOpenPicker();\n            picker.FileTypeFilter.Add(\".txt\");\n            var file = await picker.PickSingleFileAsync();\n\n            if (file != null)\n            {\n                TokenTextBox.Password = await FileIO.ReadTextAsync(file);\n            }\n        }\n\n        private void ContentDialog_CloseButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args)\n        {\n            TokenTextBox.Password = \"\";\n        }\n\n        private void SubtitleTextBlock_LinkClicked(object sender, Controls.LinkClickedEventArgs e)\n        {\n\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Extensions/AvatarExtensions.cs",
    "content": "﻿using System;\nusing System.Globalization;\nusing System.Numerics;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing Unicord.Universal.Utilities;\nusing Windows.Graphics.Display;\n\nnamespace Unicord.Universal.Extensions\n{\n    public static class AvatarExtensions\n    {\n        private static float logicalDpi;\n\n        static AvatarExtensions()\n        {\n            var info = DisplayInformation.GetForCurrentView();\n            info.DpiChanged += OnDpiChanged;\n\n            logicalDpi = info.LogicalDpi;\n        }\n\n        private static void OnDpiChanged(DisplayInformation sender, object args)\n        {\n            logicalDpi = sender.LogicalDpi;\n        }\n\n        public static string GetIconUrl(this DiscordGuild guild, int size)\n        {\n            if (size < 16 || size > 2048)\n                throw new ArgumentOutOfRangeException(nameof(size));\n\n            size = (int)BitOperations.RoundUpToPowerOf2((uint)(size * (logicalDpi / 96.0f)));\n\n            var fmt = WebPHelpers.ShouldUseWebP ? ImageFormat.WebP : ImageFormat.Png;\n            var sfmt = fmt switch\n            {\n                ImageFormat.Gif => \"gif\",\n                ImageFormat.Jpeg => \"jpg\",\n                ImageFormat.Png => \"png\",\n                ImageFormat.WebP => \"webp\",\n                _ => throw new ArgumentOutOfRangeException(nameof(fmt)),\n            };\n\n            var ssize = size.ToString(CultureInfo.InvariantCulture);\n            if (!string.IsNullOrWhiteSpace(guild.IconHash))\n            {\n                var id = guild.Id.ToString(CultureInfo.InvariantCulture);\n                return $\"https://cdn.discordapp.com/icons/{id}/{guild.IconHash}.{sfmt}?size={ssize}\";\n            }\n            else\n            {\n                return null;\n            }\n        }\n\n        public static string GetBannerUrl(this DiscordGuild guild)\n        {\n            var fmt = WebPHelpers.ShouldUseWebP ? ImageFormat.WebP : ImageFormat.Png;\n            var sfmt = fmt switch\n            {\n                ImageFormat.Gif => \"gif\",\n                ImageFormat.Jpeg => \"jpg\",\n                ImageFormat.Png => \"png\",\n                ImageFormat.WebP => \"webp\",\n                _ => throw new ArgumentOutOfRangeException(nameof(fmt)),\n            };\n\n            if (!string.IsNullOrWhiteSpace(guild.Banner))\n            {\n                var id = guild.Id.ToString(CultureInfo.InvariantCulture);\n                return $\"https://cdn.discordapp.com/banners/{id}/{guild.Banner}.{sfmt}?size=512\";\n            }\n            else\n            {\n                return null;\n            }\n        }\n\n        public static string GetSplashUrl(this DiscordGuild guild)\n        {\n            var fmt = WebPHelpers.ShouldUseWebP ? ImageFormat.WebP : ImageFormat.Png;\n            var sfmt = fmt switch\n            {\n                ImageFormat.Gif => \"gif\",\n                ImageFormat.Jpeg => \"jpg\",\n                ImageFormat.Png => \"png\",\n                ImageFormat.WebP => \"webp\",\n                _ => throw new ArgumentOutOfRangeException(nameof(fmt)),\n            };\n\n            if (!string.IsNullOrWhiteSpace(guild.SplashHash))\n            {\n                var id = guild.Id.ToString(CultureInfo.InvariantCulture);\n                return $\"https://cdn.discordapp.com/splashes/{id}/{guild.SplashHash}.{sfmt}\";\n            }\n            else\n            {\n                return null;\n            }\n        }\n\n\n        /// <summary>\n        /// Gets the user's avatar URL, in requested format and size.\n        /// </summary>\n        /// <param name=\"fmt\">Format of the avatar to get.</param>\n        /// <param name=\"size\">Maximum size of the avatar. Must be a power of two, minimum 16, maximum 2048.</param>\n        /// <returns>URL of the user's avatar.</returns>\n        public static string GetAvatarUrl(this DiscordUser user, ushort size = 1024)\n        {\n            if (size < 16 || size > 2048)\n                throw new ArgumentOutOfRangeException(nameof(size));\n\n            size = (ushort)BitOperations.RoundUpToPowerOf2((uint)(size * (logicalDpi / 96.0f)));\n\n            var fmt = WebPHelpers.ShouldUseWebP ? ImageFormat.WebP : ImageFormat.Png;\n\n            var sfmt = \"\";\n            switch (fmt)\n            {\n                case ImageFormat.Gif:\n                    sfmt = \"gif\";\n                    break;\n\n                case ImageFormat.Jpeg:\n                    sfmt = \"jpg\";\n                    break;\n\n                case ImageFormat.Png:\n                    sfmt = \"png\";\n                    break;\n\n                case ImageFormat.WebP:\n                    sfmt = \"webp\";\n                    break;\n\n                default:\n                    throw new ArgumentOutOfRangeException(nameof(fmt));\n            }\n\n            var ssize = size.ToString(CultureInfo.InvariantCulture);\n            if (!string.IsNullOrWhiteSpace(user.AvatarHash))\n            {\n                var id = user.Id.ToString(CultureInfo.InvariantCulture);\n                return $\"https://cdn.discordapp.com/avatars/{id}/{user.AvatarHash}.{sfmt}?size={ssize}\";\n            }\n            else\n            {\n                string type;\n                if (string.IsNullOrWhiteSpace(user.Discriminator) || user.Discriminator == \"0\")\n                {\n                    type = ((user.Id >> 22) % 6).ToString(CultureInfo.InvariantCulture);\n                }\n                else\n                {\n                    type = (int.Parse(user.Discriminator, CultureInfo.InvariantCulture) % 5)\n                        .ToString(CultureInfo.InvariantCulture);\n                }\n                return $\"https://cdn.discordapp.com/embed/avatars/{type}.{sfmt}?size={ssize}\";\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Extensions/ChannelTypeExtensions.cs",
    "content": "﻿using DSharpPlus;\r\nusing DSharpPlus.Entities;\r\n\r\nnamespace Unicord.Universal.Extensions\r\n{\r\n    internal static class ChannelExtensions\r\n    {\r\n        public static bool IsText(this DiscordChannel channel) =>\r\n            channel.Type is (ChannelType.Text or ChannelType.Announcement or ChannelType.Private or ChannelType.Group or ChannelType.PrivateThread or ChannelType.PublicThread or ChannelType.AnnouncementThread);\r\n        public static bool IsVoice(this DiscordChannel channel) =>\r\n            channel.Type == ChannelType.Voice || channel.Type == ChannelType.Stage;\r\n\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Extensions/CollectionExtensions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace Unicord.Universal.Extensions\n{\n    internal static class CollectionExtensions\n    {\n        public static int FindIndex<T>(this IList<T> ts, Predicate<T> match)\n        {\n            return ts.FindIndex(0, ts.Count, match);\n        }\n\n        public static int FindIndex<T>(this IList<T> ts, int startIndex, Predicate<T> match)\n        {\n            return ts.FindIndex(startIndex, ts.Count, match);\n        }\n\n        public static int FindIndex<T>(this IList<T> ts, int startIndex, int count, Predicate<T> match)\n        {\n            if (startIndex < 0) startIndex = 0;\n            if (count > ts.Count) count = ts.Count;\n\n            for (int i = startIndex; i < count; i++)\n            {\n                if (match(ts[i])) return i;\n            }\n\n            return -1;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Extensions/DiscordColorExtensions.cs",
    "content": "﻿using DSharpPlus.Entities;\nusing Windows.UI;\n\nnamespace Unicord.Universal.Extensions\n{\n    public static class DiscordColorExtensions\n    {\n        public static Color ToColor(this DiscordColor color)\n        {\n            // Color.FromArgb is a native call lmao\n            return new Color() { A = 255, R = color.R, G = color.G, B = color.B };\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Extensions/FocusExtensions.cs",
    "content": "﻿using Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Extensions\n{\n    public static class FocusExtensions\n    {\n        public static bool GetIsFocused(DependencyObject obj)\n        {\n            return (bool)obj.GetValue(IsFocusedProperty);\n        }\n\n        public static void SetIsFocused(DependencyObject obj, bool value)\n        {\n            obj.SetValue(IsFocusedProperty, value);\n        }\n\n        public static readonly DependencyProperty IsFocusedProperty =\n            DependencyProperty.RegisterAttached(\"IsFocused\", typeof(bool), typeof(FocusExtensions), new PropertyMetadata(false, OnIsFocusedPropertyChanged));\n\n        private static void OnIsFocusedPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            void OnLoaded(object sender, RoutedEventArgs e)\n            {\n                var control = (Control)d;\n                control.Focus(FocusState.Programmatic);\n                control.Loaded -= OnLoaded;\n            }\n\n            var control = (Control)d;\n            if ((bool)e.NewValue)\n            {\n                control.Loaded += OnLoaded;\n                control.Focus(FocusState.Programmatic);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Extensions/MessengerExtensions.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing CommunityToolkit.Mvvm.Messaging;\nusing DSharpPlus.AsyncEvents;\nusing Unicord.Universal.Models.Messaging;\n\nnamespace Unicord.Universal.Extensions\n{\n    internal static class MessengerExtensions\n    {\n        public delegate Task AsyncMessageHandler<in TRecipient, in TMessage>(TRecipient recipient, TMessage message)\n            where TRecipient : class where TMessage : class;\n\n        /// <summary>\n        /// Registers a recipient for a given type of message.\n        /// </summary>\n        /// <typeparam name=\"TRecipient\">The type of recipient for the message.</typeparam>\n        /// <typeparam name=\"TMessage\">The type of message to receive.</typeparam>\n        /// <param name=\"messenger\">The <see cref=\"IMessenger\"/> instance to use to register the recipient.</param>\n        /// <param name=\"recipient\">The recipient that will receive the messages.</param>\n        /// <param name=\"handler\">The <see cref=\"MessageHandler{TRecipient,TMessage}\"/> to invoke when a message is received.</param>\n        /// <exception cref=\"InvalidOperationException\">Thrown when trying to register the same message twice.</exception>\n        /// <remarks>This method will use the default channel to perform the requested registration.</remarks>\n        public static void Register<TRecipient, TMessage>(this IMessenger messenger, TRecipient recipient, MessageHandler<TRecipient, DiscordEventMessage<TMessage>> handler)\n            where TRecipient : class\n            where TMessage : AsyncEventArgs\n        {\n            messenger.Register<TRecipient, DiscordEventMessage<TMessage>>(recipient, handler);\n        }\n\n        /// <summary>\n        /// Registers a recipient for a given type of message.\n        /// </summary>\n        /// <typeparam name=\"TRecipient\">The type of recipient for the message.</typeparam>\n        /// <typeparam name=\"TMessage\">The type of message to receive.</typeparam>\n        /// <param name=\"messenger\">The <see cref=\"IMessenger\"/> instance to use to register the recipient.</param>\n        /// <param name=\"recipient\">The recipient that will receive the messages.</param>\n        /// <param name=\"handler\">The <see cref=\"MessageHandler{TRecipient,TMessage}\"/> to invoke when a message is received.</param>\n        /// <exception cref=\"InvalidOperationException\">Thrown when trying to register the same message twice.</exception>\n        /// <remarks>This method will use the default channel to perform the requested registration.</remarks>\n        public static void Register<TRecipient, TMessage>(this IMessenger messenger, TRecipient recipient, AsyncMessageHandler<TRecipient, DiscordEventMessage<TMessage>> handler)\n            where TRecipient : class\n            where TMessage : AsyncEventArgs\n        {\n            messenger.Register<TRecipient, DiscordEventMessage<TMessage>>(recipient, (t, v) => v.Reply(handler(t, v)));\n        }\n\n        /// <summary>\n        /// Sends a message of the specified type to all registered recipients.\n        /// </summary>\n        /// <typeparam name=\"TMessage\">The type of message to send.</typeparam>\n        /// <param name=\"messenger\">The <see cref=\"IMessenger\"/> instance to use to send the message.</param>\n        /// <param name=\"message\">The message to send.</param>\n        /// <returns>The message that was sent (ie. <paramref name=\"message\"/>).</returns>\n        public static DiscordEventMessage<TMessage> Send<TMessage>(this IMessenger messenger, TMessage message)\n            where TMessage : AsyncEventArgs\n        {\n            return messenger.Send(new DiscordEventMessage<TMessage>(message));\n        }\n    }\n}"
  },
  {
    "path": "Unicord.Universal/Extensions/ShiftEnterExtensions.cs",
    "content": "﻿using System.Windows.Input;\nusing Windows.System;\nusing Windows.UI.Core;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Input;\n\nnamespace Unicord.Universal.Extensions\n{\n    public static class ShiftEnterExtensions\n    {\n        public static bool GetIsEnabled(DependencyObject obj)\n        {\n            return (bool)obj.GetValue(IsEnabledProperty);\n        }\n\n        public static void SetIsEnabled(DependencyObject obj, bool value)\n        {\n            obj.SetValue(IsEnabledProperty, value);\n        }\n\n        public static readonly DependencyProperty IsEnabledProperty =\n            DependencyProperty.RegisterAttached(\"IsEnabled\", typeof(bool), typeof(ShiftEnterExtensions), new PropertyMetadata(false, OnIsEnabledPropertyChanged));\n\n        public static ICommand GetShiftEnterCommand(DependencyObject obj)\n        {\n            return (ICommand)obj.GetValue(ShiftEnterCommandProperty);\n        }\n\n        public static void SetShiftEnterCommand(DependencyObject obj, ICommand value)\n        {\n            obj.SetValue(ShiftEnterCommandProperty, value);\n        }\n\n        public static readonly DependencyProperty ShiftEnterCommandProperty =\n            DependencyProperty.RegisterAttached(\"ShiftEnterCommand\", typeof(ICommand), typeof(ShiftEnterExtensions), new PropertyMetadata(null));\n\n        public static ICommand GetEnterCommand(DependencyObject obj)\n        {\n            return (ICommand)obj.GetValue(EnterCommandProperty);\n        }\n\n        public static void SetEnterCommand(DependencyObject obj, ICommand value)\n        {\n            obj.SetValue(EnterCommandProperty, value);\n        }\n\n        public static readonly DependencyProperty EnterCommandProperty =\n            DependencyProperty.RegisterAttached(\"EnterCommand\", typeof(ICommand), typeof(ShiftEnterExtensions), new PropertyMetadata(null));\n\n        public static ICommand GetEscapeCommand(DependencyObject obj)\n        {\n            return (ICommand)obj.GetValue(EscapeCommandProperty);\n        }\n\n        public static void SetEscapeCommand(DependencyObject obj, ICommand value)\n        {\n            obj.SetValue(EscapeCommandProperty, value);\n        }\n\n        public static readonly DependencyProperty EscapeCommandProperty =\n            DependencyProperty.RegisterAttached(\"EscapeCommand\", typeof(ICommand), typeof(ShiftEnterExtensions), new PropertyMetadata(null));\n\n        private static void OnIsEnabledPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)\n        {\n            var textBox = (TextBox)d;\n            if ((bool)e.NewValue)\n            {\n                textBox.KeyDown += OnPreviewKeyDown;\n            }\n            else\n            {\n                textBox.KeyDown -= OnPreviewKeyDown;\n            }\n        }\n\n        private static void OnPreviewKeyDown(object sender, KeyRoutedEventArgs e)\n        {\n            var textBox = (TextBox)sender;\n\n            var shiftEnter = GetShiftEnterCommand(textBox);\n            var enter = GetEnterCommand(textBox);\n            var escape = GetEscapeCommand(textBox);\n\n            var shift = Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift);\n            if (e.Key == VirtualKey.Enter)\n            {\n                e.Handled = true;\n\n                if (shift.HasFlag(CoreVirtualKeyStates.Down))\n                {\n                    if (shiftEnter.CanExecute(textBox))\n                        shiftEnter.Execute(textBox);\n                }\n                else\n                {\n                    if (enter.CanExecute(textBox))\n                        enter.Execute(textBox);\n                }\n            }\n\n            if (e.Key == VirtualKey.Escape)\n            {\n                if (escape.CanExecute(textBox))\n                    escape.Execute(textBox);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Extensions/VisualTreeExtensions.cs",
    "content": "﻿using Windows.UI.Xaml;\nusing Windows.UI.Xaml.Media;\n\nnamespace Unicord.Universal.Extensions\n{\n    internal static class VisualTreeExtensions\n    {\n        public static T FindChild<T>(this DependencyObject parent, string controlName = null) where T : FrameworkElement\n        {\n            for (var index = 0; index < VisualTreeHelper.GetChildrenCount(parent); ++index)\n            {\n                var child = VisualTreeHelper.GetChild(parent, index);\n                if (child is T t && (controlName == null || t.Name == controlName))\n                {\n                    return t;\n                }\n                else if ((child = FindChild<T>(child, controlName)) != null)\n                {\n                    return child as T;\n                }\n            }\n\n            return default;\n        }\n\n        public static T FindParent<T>(this DependencyObject obj, string controlName = null) where T : FrameworkElement\n        {\n            var parent = VisualTreeHelper.GetParent(obj);\n            if (parent == null)\n                return default;\n\n            return parent is T found && (controlName == null || found.Name == controlName) ? found : parent.FindParent<T>(controlName);\n        }\n    }\n}"
  },
  {
    "path": "Unicord.Universal/Integration/ContactListManager.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing DSharpPlus.Enums;\nusing Windows.ApplicationModel.Contacts;\nusing Windows.Storage;\nusing Windows.Storage.Streams;\nusing Unicord.Universal.Services;\nusing System.Collections.Frozen;\nusing Microsoft.Extensions.Logging;\n\nnamespace Unicord.Universal.Integration\n{\n    internal class ContactListManager\n    {\n#if RELEASE\n        private const string REMOTE_ID_PREFIX = \"Unicord_\";\n        private const string REMOTE_ID_FORMAT = \"Unicord_{0}\";\n        private const string CONTACT_LIST_NAME = \"Unicord\";\n        private const string APP_ID = \"24101WamWooWamRD.Unicord_g9xp2jqbzr3wg!App\";\n#else\n        private const string REMOTE_ID_PREFIX = \"UnicordCanary_\";\n        private const string REMOTE_ID_FORMAT = \"UnicordCanary_{0}\";\n        private const string CONTACT_LIST_NAME = \"Unicord Canary\";\n        private const string APP_ID = \"24101WamWooWamRD.Unicord.Canary_g9xp2jqbzr3wg!App\";\n#endif\n\n        public static async Task<ulong> TryGetChannelIdAsync(Contact contact)\n        {\n            var contacts = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite);\n            var manager = await ContactManager.RequestAnnotationStoreAsync(ContactAnnotationStoreAccessType.AppAnnotationsReadWrite);\n            contact = await contacts.GetContactAsync(contact.Id);\n\n            var annotations = await manager.FindAnnotationsForContactAsync(contact);\n            var annotation = annotations.FirstOrDefault();\n\n            if (ulong.TryParse(annotation.RemoteId.Split('_').Last(), out var id))\n            {\n                return id;\n            }\n\n            return 0;\n        }\n\n        public static async Task UpdateContactsListAsync()\n        {\n            var logger = Logger.GetLogger<ContactListManager>();\n            var relationships = DiscordManager.Discord.Relationships.ToFrozenDictionary();\n\n            try\n            {\n                var folder = await ApplicationData.Current.LocalFolder.CreateFolderAsync(\"AvatarCache\", CreationCollisionOption.OpenIfExists);\n                var store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite); // requests contact permissions\n\n                if (store != null)\n                {\n                    var lists = await store.FindContactListsAsync();\n                    var list = lists.FirstOrDefault(l => l.DisplayName == CONTACT_LIST_NAME) ?? (await store.CreateContactListAsync(CONTACT_LIST_NAME));\n\n                    var annotationStore = await ContactManager.RequestAnnotationStoreAsync(ContactAnnotationStoreAccessType.AppAnnotationsReadWrite);\n                    var annotationList = await GetAnnotationListAsync(annotationStore);\n                    var allContacts = await store.FindContactsAsync();\n\n                    // remove all contacts no longer in the user's friends list\n                    var removed = allContacts.Where(c => c.RemoteId.StartsWith(REMOTE_ID_PREFIX) && !relationships.ContainsKey(ulong.TryParse(c.RemoteId.Split('_').Last(), out var id) ? id : 0));\n                    foreach (var cont in removed)\n                    {\n                        try\n                        {\n                            await list.DeleteContactAsync(cont);\n                        }\n                        catch { }\n                    }\n\n                    // update all contacts\n                    //var relationships = DiscordManager.Discord.Relationships.Values.Where(r => r.RelationshipType == DiscordRelationshipType.Friend);\n                    foreach (var relationship in relationships.Values.Where(r => r.RelationshipType == DiscordRelationshipType.Friend))\n                    {\n                        await AddOrUpdateContactAsync(logger, relationship, list, annotationList, folder);\n                    }\n\n                    App.LocalSettings.Save<string>(\"ContactAvatarHashes\", relationships.ToDictionary(k => k.Key.ToString(), v => v.Value.User.AvatarHash));\n                }\n            }\n            catch (Exception ex)\n            {\n                logger.LogError(ex, \"Failde to sync contacts!\");\n            }\n        }\n\n        private static async Task<Contact> AddOrUpdateContactAsync(ILogger<ContactListManager> logger, DiscordRelationship relationship, ContactList list, ContactAnnotationList annotationList, StorageFolder folder)\n        {\n            Contact contact;\n            if ((contact = await list.GetContactFromRemoteIdAsync(string.Format(REMOTE_ID_FORMAT, relationship.User.Id))) == null)\n            {\n                logger.LogInformation(\"Creating new contact for user {User}\", relationship.User);\n                contact = new Contact { RemoteId = string.Format(REMOTE_ID_FORMAT, relationship.User.Id) };\n            }\n\n            if (contact.Name != relationship.User.DisplayName)\n            {\n                logger.LogDebug(\"Updating contact username for {User} ({OldName} => {NewName})\", relationship.User, contact.Name, relationship.User.DisplayName);\n                contact.Name = relationship.User.DisplayName;\n            }\n\n            var currentHash = App.LocalSettings.Read<string>(\"ContactAvatarHashes\", relationship.User.Id.ToString(), null);\n            if ((currentHash == null && relationship.User.AvatarHash != null) || relationship.User.AvatarHash != currentHash)\n            {\n                logger.LogDebug(\"Updating contact avatar for {User}\", relationship.User);\n                contact.SourceDisplayPicture = await GetAvatarReferenceAsync(relationship.User, folder);\n            }\n\n            await list.SaveContactAsync(contact);\n\n            var annotations = await annotationList.FindAnnotationsByRemoteIdAsync(contact.RemoteId);\n            if (!annotations.Any())\n            {\n                logger.LogDebug(\"Creating new contact annotation for user {User}\", relationship.User);\n\n                var annotation = new ContactAnnotation()\n                {\n                    ContactId = contact.Id,\n                    RemoteId = string.Format(REMOTE_ID_FORMAT, relationship.User.Id),\n                    SupportedOperations = ContactAnnotationOperations.Share |\n                        ContactAnnotationOperations.AudioCall | \n                        ContactAnnotationOperations.Message | \n                        ContactAnnotationOperations.ContactProfile | \n                        ContactAnnotationOperations.SocialFeeds |\n                        ContactAnnotationOperations.VideoCall,\n                    ProviderProperties = { [\"ContactPanelAppID\"] = APP_ID, [\"ContactShareAppID\"] = APP_ID }\n                };\n\n                await annotationList.TrySaveAnnotationAsync(annotation);\n            }\n\n            return contact;\n        }\n\n        public static async Task ClearContactsAsync()\n        {\n            try\n            {\n                var store = await ContactManager.RequestStoreAsync(ContactStoreAccessType.AppContactsReadWrite); // requests contact permissions\n                if (store != null)\n                {\n                    var lists = await store.FindContactListsAsync();\n                    var list = lists.FirstOrDefault(c => c.DisplayName == CONTACT_LIST_NAME) ?? (await store.CreateContactListAsync(CONTACT_LIST_NAME));\n                    await list.DeleteAsync();\n                }\n            }\n            catch { }\n        }\n\n        private static async Task<RandomAccessStreamReference> GetAvatarReferenceAsync(DiscordUser user, StorageFolder folder)\n        {\n            if (string.IsNullOrWhiteSpace(user.AvatarHash))\n            {\n                return RandomAccessStreamReference.CreateFromUri(new Uri(\"ms-appx:///Assets/example-avatar.png\"));\n            }\n\n            var tempFile = await folder.TryGetItemAsync($\"{user.AvatarHash}.jpg\") as StorageFile;\n            if (tempFile == null)\n            {\n                tempFile = await folder.CreateFileAsync($\"{user.AvatarHash}.jpg\", CreationCollisionOption.FailIfExists);\n\n                var fileStream = await tempFile.OpenAsync(FileAccessMode.ReadWrite);\n                var stream = await Tools.HttpClient.GetInputStreamAsync(new Uri(user.GetAvatarUrl(ImageFormat.Jpeg, 256)));\n                await RandomAccessStream.CopyAndCloseAsync(stream, fileStream);\n            }\n\n            return RandomAccessStreamReference.CreateFromFile(tempFile);\n        }\n\n        private static async Task<ContactAnnotationList> GetAnnotationListAsync(ContactAnnotationStore store)\n        {\n            var lists = await store.FindAnnotationListsAsync();\n            var list = lists.FirstOrDefault();\n            if (list == null)\n            {\n                list = await store.CreateAnnotationListAsync();\n            }\n\n            return list;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Integration/JumpListManager.cs",
    "content": "﻿using DSharpPlus;\nusing Microsoft.Extensions.Logging;\nusing System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Unicord.Universal.Extensions;\nusing Unicord.Universal.Models.Channels;\nusing Windows.Storage;\nusing Windows.UI.StartScreen;\n\nnamespace Unicord.Universal.Integration\n{\n    internal class JumpListManager\n    {\n        public static async Task AddToListAsync(ChannelViewModel channel)\n        {\n            channel = channel ?? throw new ArgumentNullException(nameof(channel));\n\n            if (!JumpList.IsSupported())\n                return;\n\n            var logger = Logger.GetLogger<JumpListManager>();\n            var list = await JumpList.LoadCurrentAsync();\n            try\n            {\n                var data = ApplicationData.Current.LocalFolder;\n                var folder = await data.CreateFolderAsync(\"recents\", CreationCollisionOption.OpenIfExists);\n\n                string title = null;\n                string group = null;\n                StorageFile file = null;\n\n                var arguments = $\"-channelId={channel.Id}\";\n\n                if (channel.Guild != null && channel.Channel.IsText())\n                {\n                    group = \"ms-resource:///Resources/RecentChannelsJumpListGroup\";\n                    title = $\"#{channel.Name} - {channel.Guild.Name}\";\n\n                    if (!string.IsNullOrWhiteSpace(channel.Guild.Guild.IconHash))\n                    {\n                        file = await folder.CreateFileAsync($\"server-{channel.Guild.Guild.IconHash}.png\", CreationCollisionOption.ReplaceExisting);\n                        await Tools.DownloadToFileAsync(new Uri(channel.Guild.IconUrl + \"?size=128\"), file);\n                    }\n                }\n                else if (channel.ChannelType == ChannelType.Private)\n                {\n                    var recipient = channel.Recipient;\n                    group = \"ms-resource:///Resources/RecentPeopleJumpListGroup\";\n                    title = $\"{recipient.DisplayName}\";\n\n                    if (!string.IsNullOrWhiteSpace(recipient.User.AvatarHash))\n                    {\n                        file = await folder.CreateFileAsync($\"user-{recipient.User.AvatarHash}.png\", CreationCollisionOption.ReplaceExisting);\n                        await Tools.DownloadToFileAsync(new Uri(recipient.User.GetAvatarUrl(ImageFormat.Png, 128)), file);\n                    }\n                }\n                else\n                {\n                    return;\n                }\n\n                if (group != null && arguments != null)\n                {\n                    logger.LogInformation(\"Adding jump list item for {Channel}, group {Group}\", channel.Channel, group);\n\n                    var item = list.Items.FirstOrDefault(i => i.Arguments == arguments);\n                    if (item == null)\n                    {\n                        item = JumpListItem.CreateWithArguments(arguments, title);\n                        item.GroupName = group;\n                        if (file != null)\n                            item.Logo = new Uri($\"ms-appdata:///local/recents/{file.Name}\");\n                        else\n                            item.Logo = new Uri($\"ms-appx:///Assets/example-avatar.png\");\n\n                        list.Items.Add(item);\n                    }\n                    else\n                    {\n                        list.Items.Remove(item);\n                        list.Items.Insert(0, item);\n                    }\n                }\n            }\n            catch (Exception ex)\n            {\n                logger.LogError(ex, \"Failed to add jump list item for {Channel}\", channel.Channel);\n            }\n            finally\n            {\n                while (list.Items.Count > 10)\n                    list.Items.Remove(list.Items.Last());\n\n                await list.SaveAsync();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Integration/WindowsHelloManager.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Microsoft.AppCenter.Analytics;\nusing Windows.ApplicationModel.Resources;\nusing Windows.Security.Credentials.UI;\nusing static Unicord.Constants;\n\nnamespace Unicord.Universal\n{\n    internal static class WindowsHelloManager\n    {\n        public static async Task<bool> VerifyAsync(string setting, string displayReason)\n        {\n            if ((DateTimeOffset.Now - App.RoamingSettings.Read(\"LastVerified\", DateTimeOffset.MinValue))\n                <= App.RoamingSettings.Read(AUTHENTICATION_TIME, TimeSpan.FromMinutes(5)))\n            {\n                return true;\n            }\n\n            if (!App.RoamingSettings.Read(setting, false))\n            {\n                return true;\n            }\n\n            Analytics.TrackEvent(\"WindowsHelloManager_Verify\");\n\n            var resourceLoader = ResourceLoader.GetForViewIndependentUse();\n            var actualReason = resourceLoader.GetString(displayReason);\n            actualReason = string.IsNullOrWhiteSpace(actualReason) ? displayReason : actualReason;\n\n            var available = await UserConsentVerifier.CheckAvailabilityAsync();\n            if (available == UserConsentVerifierAvailability.Available)\n            {\n                var consentResult = await UserConsentVerifier.RequestVerificationAsync(actualReason);\n                if (consentResult == UserConsentVerificationResult.Verified)\n                {\n                    App.RoamingSettings.Save(\"LastVerified\", DateTimeOffset.Now);\n                    return true;\n                }\n            }\n            else\n            {\n                return true;\n            }\n\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Interop/BitmapInterop.cs",
    "content": "﻿using System;\r\nusing System.IO;\r\nusing System.Runtime.InteropServices;\r\nusing System.Runtime.InteropServices.WindowsRuntime;\r\nusing System.Threading.Tasks;\r\nusing WamWooWam.Core;\r\nusing Windows.Graphics.Imaging;\r\nusing Windows.Storage;\r\nusing Windows.Storage.Streams;\r\n\r\nnamespace Unicord.Universal.Interop\r\n{\r\n    public enum BI_COMPRESSION : int\r\n    {\r\n        BI_RGB = 0,\r\n        BI_RLE8 = 1,\r\n        BI_RLE4 = 2,\r\n        BI_BITFIELDS = 3,\r\n        BI_JPEG = 4,\r\n        BI_PNG = 5\r\n    }\r\n\r\n    [StructLayout(LayoutKind.Sequential)]\r\n    public struct CIEXYZ\r\n    {\r\n        public uint ciexyzX;\r\n        public uint ciexyzY;\r\n        public uint ciexyzZ;\r\n\r\n        public CIEXYZ(uint FXPT2DOT30)\r\n        {\r\n            ciexyzX = FXPT2DOT30;\r\n            ciexyzY = FXPT2DOT30;\r\n            ciexyzZ = FXPT2DOT30;\r\n        }\r\n    }\r\n\r\n    [StructLayout(LayoutKind.Sequential)]\r\n    public struct CIEXYZTRIPLE\r\n    {\r\n        public CIEXYZ ciexyzRed;\r\n        public CIEXYZ ciexyzGreen;\r\n        public CIEXYZ ciexyzBlue;\r\n    }\r\n\r\n    [StructLayout(LayoutKind.Explicit)]\r\n    public struct BITMAPINFOHEADER\r\n    {\r\n        [FieldOffset(0)]\r\n        public uint biSize;\r\n        [FieldOffset(4)]\r\n        public int biWidth;\r\n        [FieldOffset(8)]\r\n        public int biHeight;\r\n        [FieldOffset(12)]\r\n        public ushort biPlanes;\r\n        [FieldOffset(14)]\r\n        public ushort biBitCount;\r\n        [FieldOffset(16)]\r\n        public BI_COMPRESSION biCompression;\r\n        [FieldOffset(20)]\r\n        public uint biSizeImage;\r\n        [FieldOffset(24)]\r\n        public int biXPelsPerMeter;\r\n        [FieldOffset(28)]\r\n        public int biYPelsPerMeter;\r\n        [FieldOffset(32)]\r\n        public uint biClrUsed;\r\n        [FieldOffset(36)]\r\n        public uint biClrImportant;\r\n        [FieldOffset(40)]\r\n        public uint bV5RedMask;\r\n        [FieldOffset(44)]\r\n        public uint bV5GreenMask;\r\n        [FieldOffset(48)]\r\n        public uint bV5BlueMask;\r\n        [FieldOffset(52)]\r\n        public uint bV5AlphaMask;\r\n        [FieldOffset(56)]\r\n        public uint bV5CSType;\r\n        [FieldOffset(60)]\r\n        public CIEXYZTRIPLE bV5Endpoints;\r\n        [FieldOffset(96)]\r\n        public uint bV5GammaRed;\r\n        [FieldOffset(100)]\r\n        public uint bV5GammaGreen;\r\n        [FieldOffset(104)]\r\n        public uint bV5GammaBlue;\r\n        [FieldOffset(108)]\r\n        public uint bV5Intent;\r\n        [FieldOffset(112)]\r\n        public uint bV5ProfileData;\r\n        [FieldOffset(116)]\r\n        public uint bV5ProfileSize;\r\n        [FieldOffset(120)]\r\n        public uint bV5Reserved;\r\n\r\n        public const int DIB_RGB_COLORS = 0;\r\n\r\n        public BITMAPINFOHEADER(int width, int height, ushort bpp)\r\n        {\r\n            biSize = (uint)Marshal.SizeOf(typeof(BITMAPINFOHEADER));\r\n            biPlanes = 1;\r\n            biCompression = BI_COMPRESSION.BI_RGB;\r\n            biWidth = width;\r\n            biHeight = height;\r\n            biBitCount = bpp;\r\n            biSizeImage = (uint)(width * height * (bpp >> 3));\r\n            biXPelsPerMeter = 0;\r\n            biYPelsPerMeter = 0;\r\n            biClrUsed = 0;\r\n            biClrImportant = 0;\r\n            bV5RedMask = (uint)255 << 16;\r\n            bV5GreenMask = (uint)255 << 8;\r\n            bV5BlueMask = (uint)255;\r\n            bV5AlphaMask = (uint)255 << 24;\r\n            bV5CSType = 1934772034;\r\n            bV5Endpoints = new CIEXYZTRIPLE();\r\n            bV5Endpoints.ciexyzBlue = new CIEXYZ(0);\r\n            bV5Endpoints.ciexyzGreen = new CIEXYZ(0);\r\n            bV5Endpoints.ciexyzRed = new CIEXYZ(0);\r\n            bV5GammaRed = 0;\r\n            bV5GammaGreen = 0;\r\n            bV5GammaBlue = 0;\r\n            bV5Intent = 4;\r\n            bV5ProfileData = 0;\r\n            bV5ProfileSize = 0;\r\n            bV5Reserved = 0;\r\n        }\r\n\r\n        public uint OffsetToPixels\r\n        {\r\n            get\r\n            {\r\n                if (biCompression == BI_COMPRESSION.BI_BITFIELDS)\r\n                {\r\n                    return biSize + (3 * 4);\r\n                }\r\n\r\n                return biSize;\r\n            }\r\n        }\r\n    }\r\n\r\n    [ComImport]\r\n    [Guid(\"5B0D3235-4DBA-4D44-865E-8F1D0E4FD04D\")]\r\n    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]\r\n    unsafe interface IMemoryBufferByteAccess\r\n    {\r\n        void GetBuffer(out byte* buffer, out uint capacity);\r\n    }\r\n\r\n    public class BitmapInterop\r\n    {\r\n        public static async Task<StorageFile> GetFromRandomAccessStreamAsync(IRandomAccessStream stream)\r\n        {\r\n            var file = await ApplicationData.Current.TemporaryFolder.CreateFileAsync($\"{Strings.RandomString(12)}.png\");\r\n\r\n            var array = new byte[stream.Size];\r\n            var clrStream = stream.AsStream();\r\n            await clrStream.ReadAsync(array, 0, array.Length);\r\n\r\n            var softwareBitmap = CreateSoftwareBitmap(array);\r\n            using (var outputStream = await file.OpenAsync(FileAccessMode.ReadWrite))\r\n            {\r\n                var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, outputStream);\r\n                encoder.SetSoftwareBitmap(softwareBitmap);\r\n                await encoder.FlushAsync();\r\n            }\r\n\r\n            return file;\r\n        }\r\n\r\n        private static unsafe SoftwareBitmap CreateSoftwareBitmap(byte[] data)\r\n        {\r\n            fixed (byte* dataPtr = data)\r\n            {\r\n                var info = *(BITMAPINFOHEADER*)dataPtr;\r\n                var bytesPerPixel = info.biBitCount >> 3;\r\n\r\n                if (info.biSizeImage == 0)\r\n                    info.biSizeImage = (uint)(info.biWidth * info.biHeight * bytesPerPixel);\r\n\r\n                var stride = -(int)(info.biSizeImage / info.biHeight);\r\n                var scanOffset = info.OffsetToPixels + ((info.biHeight - 1) * (int)(info.biSizeImage / info.biHeight));\r\n\r\n                var desiredStride = info.biWidth * 4;\r\n                var bmp = new SoftwareBitmap(BitmapPixelFormat.Bgra8, info.biWidth, info.biHeight, BitmapAlphaMode.Straight);\r\n\r\n                using (var buff = bmp.LockBuffer(BitmapBufferAccessMode.Write))\r\n                using (var reference = buff.CreateReference())\r\n                {\r\n                    (reference as IMemoryBufferByteAccess).GetBuffer(out var raw, out var capacity);\r\n\r\n                    if (bytesPerPixel == 3)\r\n                    {\r\n                        // UWP doesn't support 24bpp bitmaps so we have to copy this manually\r\n                        for (var row = 0; row < info.biHeight; row++)\r\n                        {\r\n                            var beginOffset = scanOffset + (row * stride);\r\n                            for (var x = 0; x < info.biWidth; x++)\r\n                            {\r\n                                var root = (row * desiredStride) + x;\r\n                                raw[root] = data[beginOffset];\r\n                                raw[root + 1] = data[beginOffset + 1];\r\n                                raw[root + 2] = data[beginOffset + 2];\r\n                                raw[root + 3] = 255;\r\n\r\n                                beginOffset += 3;\r\n                            }\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        // remove padding copying row by row\r\n                        var scan0 = dataPtr + scanOffset;\r\n                        for (int row = 0; row < info.biHeight; row++)\r\n                        {\r\n                            var dataBeginPointer = scan0 + (row * stride);\r\n                            var targetPointer = raw + (row * desiredStride);\r\n                            System.Buffer.MemoryCopy(dataBeginPointer, targetPointer, capacity - (row * desiredStride), info.biWidth * bytesPerPixel);\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return bmp;\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/MainPage.xaml",
    "content": "﻿<Page x:Class=\"Unicord.Universal.MainPage\"\r\n      xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n      xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n      xmlns:local=\"using:Unicord.Universal\"\r\n      xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n      xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n      xmlns:p=\"using:Unicord.Universal.Pages\"    \r\n      xmlns:fc=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,5)\"\r\n      xmlns:not1709=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,5)\"\r\n      xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\r\n      xmlns:dialogs=\"using:Unicord.Universal.Dialogs\"\r\n      xmlns:controls1=\"using:Unicord.Universal.Controls\"\r\n      xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\r\n      xmlns:media=\"using:Microsoft.UI.Xaml.Media\" \r\n      xmlns:media1=\"using:Microsoft.Toolkit.Uwp.UI.Media\"\r\n      mc:Ignorable=\"d\" \r\n      Loaded=\"Page_Loaded\" \r\n      Unloaded=\"Page_Unloaded\" \r\n      NavigationCacheMode=\"Required\"\r\n      Background=\"{ThemeResource General_Page_BackgroundBrush}\">\r\n    <Page.Resources>\r\n        <CircleEase x:Key=\"CircleEase\" EasingMode=\"EaseInOut\"/>\r\n\r\n        <ExponentialEase x:Key=\"EaseEnter\" EasingMode=\"EaseOut\" Exponent=\"7\" />\r\n        <ExponentialEase x:Key=\"EaseExit\" EasingMode=\"EaseIn\" Exponent=\"4.5\" />\r\n\r\n        <!-- TODO: redo connecting animations -->\r\n\r\n        <Storyboard x:Name=\"ShowConnecting\" x:Key=\"ShowConnecting\">\r\n\r\n            <DoubleAnimation From=\"0\" To=\"1\"\r\n                             Storyboard.TargetName=\"ConnectingOverlay\"\r\n                             Storyboard.TargetProperty=\"Opacity\"\r\n                             Duration=\"0:0:0.50\"\r\n                             EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n\r\n            <DoubleAnimation From=\"1\" To=\"0\"\r\n                             Storyboard.TargetName=\"ContentRoot\"\r\n                             Storyboard.TargetProperty=\"Opacity\"\r\n                             Duration=\"0:0:0.50\"\r\n                             EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n\r\n            <DoubleAnimation From=\"1\" To=\"0.85\" \r\n                             Storyboard.TargetName=\"MainScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleX)\"\r\n                             Duration=\"0:0:0.40\"\r\n                             EasingFunction=\"{StaticResource EaseExit}\"/>\r\n            <DoubleAnimation From=\"1\" To=\"0.85\" \r\n                             Storyboard.TargetName=\"MainScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleY)\"\r\n                             Duration=\"0:0:0.40\"\r\n                             EasingFunction=\"{StaticResource EaseExit}\"/>\r\n\r\n            <DoubleAnimation From=\"1.15\" To=\"1\" \r\n                             Storyboard.TargetName=\"ConnectingScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleX)\"\r\n                             Duration=\"0:0:0.40\"\r\n                             EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n            <DoubleAnimation From=\"1.15\" To=\"1\" \r\n                             Storyboard.TargetName=\"ConnectingScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleY)\"\r\n                             Duration=\"0:0:0.40\"\r\n                             EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n\r\n        </Storyboard>\r\n        <Storyboard x:Name=\"hideConnecting\" x:Key=\"hideConnecting\"\r\n                    Completed=\"hideConnecting_Completed\">\r\n            <DoubleAnimation To=\"1\"\r\n                             Storyboard.TargetName=\"ContentRoot\"\r\n                             Storyboard.TargetProperty=\"Opacity\"\r\n                             Duration=\"0:0:0.25\"/>\r\n            <DoubleAnimation To=\"1\" \r\n                             Storyboard.TargetName=\"MainScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleX)\"\r\n                             Duration=\"0:0:0.25\"\r\n                             EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n            <DoubleAnimation To=\"1\" \r\n                             Storyboard.TargetName=\"MainScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleY)\"\r\n                             Duration=\"0:0:0.25\"\r\n                             EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n\r\n            <DoubleAnimation To=\"0\"\r\n                             Storyboard.TargetName=\"ConnectingOverlay\"\r\n                             Storyboard.TargetProperty=\"Opacity\"\r\n                             Duration=\"0:0:0.15\"\r\n                             EasingFunction=\"{StaticResource EaseExit}\"/>\r\n\r\n            <DoubleAnimation To=\"1.15\" \r\n                             Storyboard.TargetName=\"ConnectingScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleX)\"\r\n                             Duration=\"0:0:0.15\"\r\n                             EasingFunction=\"{StaticResource EaseExit}\"/>\r\n            <DoubleAnimation To=\"1.15\" \r\n                             Storyboard.TargetName=\"ConnectingScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleY)\"\r\n                             Duration=\"0:0:0.15\"\r\n                             EasingFunction=\"{StaticResource EaseExit}\"/>\r\n        </Storyboard>\r\n\r\n  \r\n\r\n        <Storyboard x:Name=\"ShowOverlayStoryboard\" x:Key=\"ShowOverlayStoryboard\">\r\n\r\n            <DoubleAnimation From=\"0\" To=\"1\"\r\n                             Storyboard.TargetName=\"CustomOverlayGrid\"\r\n                             Storyboard.TargetProperty=\"Opacity\"\r\n                             Duration=\"0:0:0.30\"\r\n                             EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n\r\n            <DoubleAnimation From=\"0.85\" To=\"1\" \r\n                             Storyboard.TargetName=\"CustomPaneScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleX)\"\r\n                             Duration=\"0:0:0.30\"\r\n                             EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n            <DoubleAnimation From=\"0.85\" To=\"1\" \r\n                             Storyboard.TargetName=\"CustomPaneScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleY)\"\r\n                             Duration=\"0:0:0.30\"\r\n                             EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n\r\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"CustomOverlayGrid\" \r\n                                           Storyboard.TargetProperty=\"Visibility\"\r\n                                           BeginTime=\"0:0:0.0\">\r\n                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\" />\r\n            </ObjectAnimationUsingKeyFrames>\r\n\r\n        </Storyboard>\r\n        <Storyboard x:Name=\"HideOverlayStoryboard\" x:Key=\"HideOverlayStoryboard\"\r\n                    Completed=\"HideOverlayStoryboard_Completed\">\r\n            <DoubleAnimation From=\"1\" To=\"0\"\r\n                             Storyboard.TargetName=\"CustomOverlayGrid\"\r\n                             Storyboard.TargetProperty=\"Opacity\"\r\n                             Duration=\"0:0:0.15\"\r\n                             EasingFunction=\"{StaticResource EaseExit}\"/>\r\n\r\n            <DoubleAnimation From=\"1\" To=\"0.85\" \r\n                             Storyboard.TargetName=\"CustomPaneScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleX)\"\r\n                             Duration=\"0:0:0.15\"\r\n                             EasingFunction=\"{StaticResource EaseExit}\"/>\r\n            <DoubleAnimation From=\"1\" To=\"0.85\" \r\n                             Storyboard.TargetName=\"CustomPaneScale\"\r\n                             Storyboard.TargetProperty=\"(ScaleTransform.ScaleY)\"\r\n                             Duration=\"0:0:0.15\"\r\n                             EasingFunction=\"{StaticResource EaseExit}\"/>\r\n\r\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"CustomOverlayGrid\" \r\n                                           Storyboard.TargetProperty=\"Visibility\"\r\n                                           BeginTime=\"0:0:0.15\">\r\n                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\" />\r\n            </ObjectAnimationUsingKeyFrames>\r\n        </Storyboard>\r\n    </Page.Resources>\r\n    <Grid x:Name=\"Everything\">\r\n        <Grid x:Name=\"ContentRoot\"\r\n              RenderTransformOrigin=\"0.5, 0.5\">\r\n            <Grid.RenderTransform>\r\n                <ScaleTransform x:Name=\"MainScale\" ScaleX=\"1\" ScaleY=\"1\"/>\r\n            </Grid.RenderTransform>\r\n\r\n            <Grid x:Name=\"mainContent\">\r\n                <Frame x:Name=\"rootFrame\" />\r\n                <Grid x:Name=\"overlayGrid\"/>\r\n            </Grid>\r\n\r\n            <Grid x:Name=\"CustomOverlayGrid\"\r\n                  Opacity=\"0\"\r\n                  Visibility=\"Collapsed\">\r\n                <Grid x:Name=\"OverlayBackdrop\"\r\n                      Tapped=\"OverlayBackdrop_Tapped\">\r\n                    <Grid.Background>\r\n                        <SolidColorBrush Color=\"Black\" Opacity=\"0.66\"/>\r\n                    </Grid.Background>\r\n                </Grid>\r\n                <Grid x:Name=\"CustomContainer\"\r\n                      RenderTransformOrigin=\"0.5,0.5\"\r\n                      CornerRadius=\"8\">\r\n                    <Grid.RenderTransform>\r\n                        <ScaleTransform x:Name=\"CustomPaneScale\" ScaleX=\"1\" ScaleY=\"1\" />\r\n                    </Grid.RenderTransform>\r\n                    <Frame x:Name=\"CustomOverlayFrame\" />\r\n                </Grid>\r\n            </Grid>\r\n\r\n            <Canvas x:Name=\"FullscreenBorder\" \r\n                    VerticalAlignment=\"Stretch\" \r\n                    HorizontalAlignment=\"Stretch\" \r\n                    Visibility=\"Collapsed\"/>\r\n        </Grid>\r\n\r\n        <Grid x:Name=\"ConnectingOverlay\" \r\n              Visibility=\"Collapsed\" \r\n              Opacity=\"0\" \r\n              RenderTransformOrigin=\"0.5, 0.5\" \r\n              Background=\"Transparent\">\r\n            <Grid.RenderTransform>\r\n                <ScaleTransform x:Name=\"ConnectingScale\" ScaleX=\"1\" ScaleY=\"1\"/>\r\n            </Grid.RenderTransform>\r\n            <Grid>\r\n                <Grid.RowDefinitions>\r\n                    <RowDefinition Height=\"*\"/>\r\n                    <RowDefinition Height=\"*\"/>\r\n                    <RowDefinition Height=\"*\"/>\r\n                </Grid.RowDefinitions>\r\n\r\n                <Image x:Name=\"ExtendedSplashImage\"\r\n                       Grid.RowSpan=\"3\"\r\n                       Source=\"{ThemeResource DiscordSplashScreen}\"\r\n                       VerticalAlignment=\"Center\"\r\n                       Stretch=\"Uniform\"\r\n                       MaxWidth=\"620\"/>\r\n\r\n                <lib:ProgressRing x:Name=\"ConnectingProgress\" \r\n                                  Grid.Row=\"2\"\r\n                                  VerticalAlignment=\"Top\"\r\n                                  HorizontalAlignment=\"Center\"\r\n                                  IsIndeterminate=\"False\"\r\n                                  Width=\"32\"\r\n                                  Height=\"32\"/>\r\n\r\n                <not1709:ProgressRing x:Name=\"ConnectingProgress1\" \r\n                                      Grid.Row=\"2\"\r\n                                      VerticalAlignment=\"Top\"\r\n                                      HorizontalAlignment=\"Center\"\r\n                                      Width=\"32\"\r\n                                      Height=\"32\"/>\r\n            </Grid>\r\n        </Grid>\r\n\r\n        <Grid x:Name=\"TitleBar\" Visibility=\"Collapsed\" VerticalAlignment=\"Top\" Margin=\"0,0,0,0\" Background=\"Transparent\"/>\r\n    </Grid>\r\n</Page>\r\n"
  },
  {
    "path": "Unicord.Universal/MainPage.xaml.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing DSharpPlus;\r\nusing DSharpPlus.EventArgs;\r\nusing Microsoft.AppCenter.Analytics;\r\nusing Microsoft.Toolkit.Uwp.Helpers;\r\nusing TenMica;\r\nusing Unicord.Universal.Integration;\r\nusing Unicord.Universal.Models;\r\nusing Unicord.Universal.Pages;\r\nusing Unicord.Universal.Services;\r\nusing Unicord.Universal.Utilities;\r\nusing Windows.ApplicationModel.Activation;\r\nusing Windows.ApplicationModel.DataTransfer.ShareTarget;\r\nusing Windows.Foundation.Metadata;\r\nusing Windows.Security.Credentials;\r\nusing Windows.UI.Core;\r\nusing Windows.UI.StartScreen;\r\nusing Windows.UI.ViewManagement;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Input;\r\nusing Windows.UI.Xaml.Navigation;\r\n\r\nnamespace Unicord.Universal\r\n{\r\n    public sealed partial class MainPage : Page\r\n    {\r\n        internal MainPageArgs Arguments { get; private set; }\r\n        public bool IsOverlayShown { get; internal set; }\r\n        public Frame RootFrame => rootFrame;\r\n        public Frame CustomFrame => CustomOverlayFrame;\r\n\r\n        private ShareOperation _shareOperation;\r\n        private bool _isReady;\r\n\r\n        public MainPage()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n\r\n        protected override async void OnNavigatedTo(NavigationEventArgs e)\r\n        {\r\n            switch (e.Parameter)\r\n            {\r\n                case MainPageArgs args:\r\n                    Arguments = args;\r\n                    break;\r\n                case ShareOperation operation:\r\n                    _shareOperation = operation;\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n\r\n\r\n            if (_isReady)\r\n            {\r\n                await OnFirstDiscordReady(null, null);\r\n            }\r\n        }\r\n\r\n        private async void Page_Loaded(object sender, RoutedEventArgs e)\r\n        {\r\n            var handle = WindowingService.Current.GetHandle(this);\r\n            if (WindowingService.Current.IsMainWindow(handle))\r\n                WindowingService.Current.HandleTitleBarForWindow(TitleBar, this);\r\n\r\n            if (ThemeService.GetForCurrentView().GetTheme() == AppTheme.SunValley)\r\n            {\r\n                var brush = new TenMicaBrush();\r\n                if (WindowingService.Current.IsCompactOverlay(handle))\r\n                    brush.EnabledInActivatedNotForeground = true;\r\n\r\n                Background = brush;\r\n            }\r\n\r\n            var pane = InputPane.GetForCurrentView();\r\n            pane.Showing += Pane_Showing;\r\n            pane.Hiding += Pane_Hiding;\r\n\r\n            if (Arguments?.SplashScreen != null)\r\n            {\r\n                PositionSplash(Arguments.SplashScreen);\r\n                Window.Current.SizeChanged += OnSplashResize;\r\n            }\r\n\r\n            try\r\n            {\r\n                var vault = new PasswordVault();\r\n                var result = vault.FindAllByResource(Constants.TOKEN_IDENTIFIER)\r\n                    .FirstOrDefault(t => t.UserName == \"Default\");\r\n\r\n                if (result != null)\r\n                {\r\n                    rootFrame.Navigate(typeof(DiscordPage));\r\n\r\n                    ConnectingOverlay.Visibility = Visibility.Visible;\r\n                    ConnectingOverlay.Opacity = 1;\r\n                    ContentRoot.Opacity = 0;\r\n                    ConnectingScale.ScaleX = 1;\r\n                    ConnectingScale.ScaleY = 1;\r\n                    MainScale.ScaleX = 0.85;\r\n                    MainScale.ScaleY = 0.85;\r\n\r\n                    IsOverlayShown = true;\r\n                    ConnectingProgress.IsIndeterminate = true;\r\n                    if (ConnectingProgress1 != null)\r\n                        ConnectingProgress1.IsActive = true;\r\n\r\n                    result.RetrievePassword();\r\n\r\n                    await DiscordManager.LoginAsync(result.Password, OnFirstDiscordReady, App.LoginError, false);\r\n                }\r\n                else\r\n                {\r\n                    rootFrame.Navigate(typeof(LoginPage));\r\n                    await ClearJumpListAsync();\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Logger.LogError(ex);\r\n                rootFrame.Navigate(typeof(LoginPage));\r\n                await ClearJumpListAsync();\r\n            }\r\n        }\r\n\r\n        private void OnSplashResize(object sender, WindowSizeChangedEventArgs e)\r\n        {\r\n            PositionSplash(Arguments.SplashScreen);\r\n        }\r\n\r\n        private void PositionSplash(SplashScreen splash)\r\n        {\r\n            var imageRect = splash.ImageLocation;\r\n            ExtendedSplashImage.SetValue(Canvas.LeftProperty, imageRect.X);\r\n            ExtendedSplashImage.SetValue(Canvas.TopProperty, imageRect.Y);\r\n            ExtendedSplashImage.Height = imageRect.Height;\r\n            ExtendedSplashImage.Width = imageRect.Width;\r\n\r\n            ConnectingProgress.SetValue(Canvas.LeftProperty, imageRect.X + (imageRect.Width * 0.5) - (ConnectingProgress.Width * 0.5));\r\n            ConnectingProgress.SetValue(Canvas.TopProperty, imageRect.Y + imageRect.Height + imageRect.Height * 0.1);\r\n        }\r\n\r\n        private void RemoveEventHandlers()\r\n        {\r\n            var pane = InputPane.GetForCurrentView();\r\n            pane.Showing -= Pane_Showing;\r\n            pane.Hiding -= Pane_Hiding;\r\n        }\r\n\r\n        private void Page_Unloaded(object sender, RoutedEventArgs e)\r\n        {\r\n            RemoveEventHandlers();\r\n        }\r\n\r\n        private static async Task ClearJumpListAsync()\r\n        {\r\n            if (JumpList.IsSupported())\r\n            {\r\n                var list = await JumpList.LoadCurrentAsync();\r\n                list.Items.Clear();\r\n                await list.SaveAsync();\r\n            }\r\n\r\n            if (ApiInformation.IsApiContractPresent(\"Windows.Foundation.UniversalApiContract\", 5))\r\n            {\r\n                await ContactListManager.ClearContactsAsync();\r\n            }\r\n        }\r\n\r\n        private async Task OnFirstDiscordReady(DiscordClient client, ReadyEventArgs e)\r\n        {\r\n            if (!_isReady)\r\n            {\r\n                DiscordManager.Discord.Ready += OnDiscordReady;\r\n                DiscordManager.Discord.Resumed += OnDiscordResumed;\r\n                DiscordManager.Discord.SocketClosed += OnDiscordDisconnected;\r\n                DiscordManager.Discord.LoggedOut += OnLoggedOut;\r\n            }\r\n\r\n            DiscordManager.Discord.Ready -= OnFirstDiscordReady;\r\n            Analytics.TrackEvent(\"Discord_OnFirstReady\");\r\n\r\n            _isReady = true;\r\n\r\n            // TODO: This doesn't work?\r\n            //await e.Client.UpdateStatusAsync(userStatus: UserStatus.Online);\r\n\r\n            if (Arguments != null && (Arguments.ChannelId != 0 || Arguments.UserId != 0))\r\n            {\r\n                if (Arguments.FullFrame)\r\n                {\r\n                    await GoToChannelAsync(Arguments);\r\n                }\r\n                else\r\n                {\r\n                    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\r\n                        rootFrame.Navigate(typeof(DiscordPage), Arguments));\r\n                }\r\n            }\r\n            else if (_shareOperation != null)\r\n            {\r\n                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\r\n                    rootFrame.Navigate(typeof(SharePage), _shareOperation));\r\n            }\r\n            else\r\n            {\r\n                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\r\n                    rootFrame.Navigate(typeof(DiscordPage), Arguments));\r\n            }\r\n        }\r\n\r\n        private Task OnLoggedOut(DiscordClient client, LoggedOutEventArgs args)\r\n        {\r\n            _isReady = false;\r\n            RemoveEventHandlers();\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private async Task OnDiscordReady(DiscordClient client, ReadyEventArgs e)\r\n        {\r\n            await HideDisconnectingMessage();\r\n        }\r\n\r\n        private async Task OnDiscordResumed(DiscordClient client, ResumedEventArgs e)\r\n        {\r\n            await HideDisconnectingMessage();\r\n        }\r\n\r\n        private async Task OnDiscordDisconnected(DiscordClient client, SocketCloseEventArgs e)\r\n        {\r\n            Analytics.TrackEvent(\"Discord_Disconnected\");\r\n            if (ApiInformation.IsTypePresent(\"Windows.UI.ViewManagement.StatusBar\"))\r\n            {\r\n                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>\r\n                {\r\n                    var status = StatusBar.GetForCurrentView();\r\n                    status.ProgressIndicator.ProgressValue = NetworkHelper.IsNetworkConnected ? null : (double?)0;\r\n                    status.ProgressIndicator.Text = NetworkHelper.IsNetworkConnected ? \"Reconnecting...\" : \"Offline\";\r\n                    await status.ProgressIndicator.ShowAsync();\r\n                });\r\n            }\r\n        }\r\n\r\n        private async Task HideDisconnectingMessage()\r\n        {\r\n            Analytics.TrackEvent(\"Discord_Reconnected\");\r\n            if (ApiInformation.IsTypePresent(\"Windows.UI.ViewManagement.StatusBar\"))\r\n            {\r\n                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () =>\r\n                {\r\n                    var status = StatusBar.GetForCurrentView();\r\n                    await status.ProgressIndicator.HideAsync();\r\n                });\r\n            }\r\n        }\r\n\r\n        internal async Task GoToChannelAsync(MainPageArgs args)\r\n        {\r\n            try\r\n            {\r\n                if (args.ChannelId != 0)\r\n                {\r\n                    if (DiscordManager.Discord.TryGetCachedChannel(args.ChannelId, out var channel) && channel.IsAccessible())\r\n                    {\r\n                        await DiscordNavigationService.GetForCurrentView()\r\n                            .NavigateAsync(channel);\r\n                    }\r\n                }\r\n                else if (args.UserId != 0)\r\n                {\r\n                    var dm = DiscordManager.Discord.PrivateChannels.Values\r\n                        .FirstOrDefault(c => c.Type == ChannelType.Private && c.Recipients.Count == 1 && c.Recipients[0].Id == args.UserId);\r\n\r\n                    await DiscordNavigationService.GetForCurrentView()\r\n                        .NavigateAsync(dm);\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Logger.LogError(ex);\r\n            }\r\n            finally\r\n            {\r\n                await Dispatcher.AwaitableRunAsync(() => HideConnectingOverlay());\r\n            }\r\n        }\r\n\r\n        internal void ShowConnectingOverlay()\r\n        {\r\n            if (IsOverlayShown)\r\n                return;\r\n\r\n            ConnectingOverlay.Visibility = Visibility.Visible;\r\n            ConnectingProgress.IsIndeterminate = true;\r\n            if (ConnectingProgress1 != null)\r\n                ConnectingProgress1.IsActive = true;\r\n            IsOverlayShown = true;\r\n            ShowConnecting.Begin();\r\n        }\r\n\r\n        internal void HideConnectingOverlay()\r\n        {\r\n            if (!IsOverlayShown)\r\n                return;\r\n\r\n            hideConnecting.Begin();\r\n        }\r\n\r\n        private void hideConnecting_Completed(object sender, object e)\r\n        {\r\n            ConnectingOverlay.Visibility = Visibility.Collapsed;\r\n            ConnectingProgress.IsIndeterminate = false;\r\n            if (ConnectingProgress1 != null)\r\n                ConnectingProgress1.IsActive = false;\r\n            IsOverlayShown = false;\r\n        }\r\n\r\n        internal void Nagivate(Type type)\r\n        {\r\n            rootFrame.Navigate(type);\r\n        }\r\n\r\n        private void Pane_Showing(InputPane sender, InputPaneVisibilityEventArgs args)\r\n        {\r\n            Everything.Margin = new Thickness(0, 0, 0, args.OccludedRect.Height);\r\n            args.EnsuredFocusedElementInView = true;\r\n        }\r\n\r\n        private void Pane_Hiding(InputPane sender, InputPaneVisibilityEventArgs args)\r\n        {\r\n            Everything.Margin = new Thickness(0);\r\n            args.EnsuredFocusedElementInView = true;\r\n        }\r\n\r\n        public void ShowCustomOverlay()\r\n        {\r\n            WindowingService.Current.HandleTitleBarForControl(CustomOverlayGrid);\r\n            ShowOverlayStoryboard.Begin();\r\n        }\r\n\r\n        public void HideCustomOverlay()\r\n        {\r\n            if (CustomOverlayGrid.Visibility != Visibility.Collapsed)\r\n                HideOverlayStoryboard.Begin();\r\n        }\r\n\r\n        private void OverlayBackdrop_Tapped(object sender, TappedRoutedEventArgs e)\r\n        {\r\n            OverlayService.GetForCurrentView()\r\n                .CloseOverlay();\r\n        }\r\n\r\n        private void HideOverlayStoryboard_Completed(object sender, object e)\r\n        {\r\n            CustomOverlayFrame.Navigate(typeof(Page));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Misc/Emoji.cs",
    "content": "﻿using System.Collections;\nusing System.Collections.Generic;\nusing System.Linq;\nusing DSharpPlus.Entities;\nusing NeoSmart.Unicode;\nusing Unicord.Universal.Extensions;\nusing Unicord.Universal.Models.Emoji;\n\nnamespace Unicord.Universal.Misc\n{\n    public class EmojiHeader\n    {\n        public string Name { get; set; }\n        public string IconCharacter { get; set; }\n        public string IconUrl { get; set; }\n    }\n\n    public class EmojiGroup : IGrouping<EmojiHeader, EmojiViewModel>, IList<EmojiViewModel>\n    {\n        private List<EmojiViewModel> _emojis;\n\n        public EmojiGroup(DiscordGuild guild, IEnumerable<DiscordEmoji> emojis)\n        {\n            Key = new EmojiHeader() { Name = guild.Name, IconUrl = guild.GetIconUrl(32) };\n            _emojis = emojis.Select(e => new EmojiViewModel(e))\n                   .OrderBy(e => e.Name)\n                   .ToList();\n        }\n\n        public EmojiGroup(string category, IEnumerable<SingleEmoji> emojis)\n        {\n            var first = emojis.First();\n            Key = new EmojiHeader() { Name = category, IconCharacter = first.Sequence.AsString };\n            _emojis = emojis.Select(e => new EmojiViewModel(e)).ToList();\n        }\r\n\r\n        public EmojiViewModel this[int index] { get => ((IList<EmojiViewModel>)_emojis)[index]; set => ((IList<EmojiViewModel>)_emojis)[index] = value; }\r\n\r\n        public EmojiHeader Key { get; }\r\n\r\n        public int Count => ((ICollection<EmojiViewModel>)_emojis).Count;\r\n\r\n        public bool IsReadOnly => ((ICollection<EmojiViewModel>)_emojis).IsReadOnly;\r\n\r\n        public void Add(EmojiViewModel item)\r\n        {\r\n            ((ICollection<EmojiViewModel>)_emojis).Add(item);\r\n        }\r\n\r\n        public void Clear()\r\n        {\r\n            ((ICollection<EmojiViewModel>)_emojis).Clear();\r\n        }\r\n\r\n        public bool Contains(EmojiViewModel item)\r\n        {\r\n            return ((ICollection<EmojiViewModel>)_emojis).Contains(item);\r\n        }\r\n\r\n        public void CopyTo(EmojiViewModel[] array, int arrayIndex)\r\n        {\r\n            ((ICollection<EmojiViewModel>)_emojis).CopyTo(array, arrayIndex);\r\n        }\r\n\r\n        public IEnumerator<EmojiViewModel> GetEnumerator() => _emojis.GetEnumerator();\r\n\r\n        public int IndexOf(EmojiViewModel item)\r\n        {\r\n            return ((IList<EmojiViewModel>)_emojis).IndexOf(item);\r\n        }\r\n\r\n        public void Insert(int index, EmojiViewModel item)\r\n        {\r\n            ((IList<EmojiViewModel>)_emojis).Insert(index, item);\r\n        }\r\n\r\n        public bool Remove(EmojiViewModel item)\r\n        {\r\n            return ((ICollection<EmojiViewModel>)_emojis).Remove(item);\r\n        }\r\n\r\n        public void RemoveAt(int index)\r\n        {\r\n            ((IList<EmojiViewModel>)_emojis).RemoveAt(index);\r\n        }\r\n\r\n        IEnumerator IEnumerable.GetEnumerator() => _emojis.GetEnumerator();\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Misc/ListViewBehaviour.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml;\n\nnamespace Unicord.Universal.Behaviours\n{\n    public class ListViewBehaviour\n    {\n        /// <summary>\n        /// This property specifies the minium width for child items in an items wrap grid panel. \n        /// Setting this property o an non zero value will enable dynamic sizing of items so that\n        /// when items are wrapped the items control is always filled out horizontally\n        /// i.e. the width of items are increased to fill the empty space.\n        /// </summary>\n        public static readonly DependencyProperty MinItemWidthProperty =\n            DependencyProperty.RegisterAttached(\"MinItemWidth\", typeof(double),\n            typeof(ListViewBehaviour), new PropertyMetadata(0.0d, OnMinItemWidthChanged));\n\n        /// <summary>\n        /// Only applicable when MinItemWidth is non zero. Typically the logic behind \n        /// MinItemWidth will only trigger if the number of items is more than or equal to \n        /// what a single row will accomodate. This property specifies that the layout logic\n        /// is also performed when there are less items than what a single row will accomodate.\n        /// </summary>\n        public static readonly DependencyProperty FillBeforeWrapProperty =\n           DependencyProperty.RegisterAttached(\"FillBeforeWrap\", typeof(bool),\n           typeof(ListViewBehaviour), new PropertyMetadata(false));\n\n        /// <summary>\n        /// Returns the value of the FillBeforeWrap\n        /// </summary>\n        /// <param name=\"obj\">The dependency-object whichs value should be returned</param> \n        /// <returns>The value of the property</returns>\n        public static bool GetFillBeforeWrap(DependencyObject obj)\n        {\n            return (bool)obj.GetValue(FillBeforeWrapProperty);\n        }\n\n        /// <summary>\n        /// Sets the value of the FillBeforeWrap\n        /// </summary>\n        /// <param name=\"obj\">The dependency-object whichs value should be set</param>\n        /// <param name=\"value\">The value which should be assigned to the property.</param>\n        public static void SetFillBeforeWrap(DependencyObject obj, bool value)\n        {\n            obj.SetValue(FillBeforeWrapProperty, value);\n        }\n\n        /// <summary>\n        /// Returns the value of the MinItemWidthProperty\n        /// </summary>\n        /// <param name=\"obj\">The dependency-object whichs value should be returned</param> \n        /// <returns>The value of the property</returns>\n        public static double GetMinItemWidth(DependencyObject obj)\n        {\n            return (double)obj.GetValue(MinItemWidthProperty);\n        }\n\n        /// <summary>\n        /// Sets the value of the MinItemWidthProperty\n        /// </summary>\n        /// <param name=\"obj\">The dependency-object whichs value should be set</param>\n        /// <param name=\"value\">The value which should be assigned to the property.</param>\n        public static void SetMinItemWidth(DependencyObject obj, double value)\n        {\n            obj.SetValue(MinItemWidthProperty, value);\n        }\n\n        private static void OnMinItemWidthChanged(DependencyObject s, DependencyPropertyChangedEventArgs e)\n        {\n            if (s is ListViewBase f)\n            {\n                f.SizeChanged -= OnListViewSizeChanged;\n\n                if (((double)e.NewValue) > 0)\n                {\n                    f.SizeChanged += OnListViewSizeChanged;\n                }\n            }\n        }\n\n        private static void OnListViewSizeChanged(object sender, SizeChangedEventArgs e)\n        {\n            // Unbox the sender.\n            var itemsControl = sender as ListViewBase;\n\n            // If the items panel is a wrap grid.\n            if (itemsControl.ItemsPanelRoot is ItemsWrapGrid itemsPanel)\n            {\n                // Get total size\n                var total = e.NewSize.Width - (itemsPanel.Margin.Left + itemsPanel.Margin.Right + itemsControl.Padding.Left + itemsControl.Padding.Right);\n\n                // Minimum item size.\n                var itemMinSize = Math.Min(total, (double)itemsControl.GetValue(MinItemWidthProperty));\n\n                // How many items can be fit whole.\n                var canBeFit = Math.Floor(total / itemMinSize);\n\n                // I could add logic that if the total items are less then the number of items that \n                // would fit then devide the total size by the number of items rather than the number\n                // of items that would actually fit.\n                if ((bool)itemsControl.GetValue(FillBeforeWrapProperty) &&\n                    itemsControl.Items.Count > 0 &&\n                    itemsControl.Items.Count < canBeFit)\n                {\n                    canBeFit = itemsControl.Items.Count;\n                }\n\n                // Set the items Panel item width appropriately.\n                // Note you will need your container to stretch\n                // along with the items panel or it will look \n                // strange. \n                // <GridView.ItemContainerStyle>\n                //     <Style TargetType=\"GridViewItem\">\n                //         <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n                //         <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n                //     </Style>\n                // </GridView.ItemContainerStyle>\n                itemsPanel.ItemWidth = total / canBeFit;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Unicord.Universal/Misc/Logger.cs",
    "content": "﻿using Microsoft.AppCenter.Crashes;\r\nusing Microsoft.Extensions.Logging;\r\n#if DEBUG\r\nusing Microsoft.Extensions.Logging.Debug;\r\n#endif\r\nusing System;\r\nusing System.Collections.Generic;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Threading.Tasks;\r\nusing Windows.Foundation.Diagnostics;\r\n\r\nnamespace Unicord.Universal\r\n{\r\n    internal static class Logger\r\n    {\r\n        private class WinRTLoggerProvider : ILoggerProvider\r\n        {\r\n            private class WinRTLogger : ILogger, IDisposable\r\n            {\r\n                private readonly LoggingChannel channel;\r\n                private readonly FileLoggingSession session;\r\n\r\n                public WinRTLogger(string categoryName, FileLoggingSession session)\r\n                {\r\n                    this.channel = new LoggingChannel(categoryName, new LoggingChannelOptions());\r\n                    this.session = session;\r\n                    session.AddLoggingChannel(channel);\r\n                }\r\n\r\n                public IDisposable BeginScope<TState>(TState state) where TState : notnull\r\n                {\r\n                    return null;\r\n                }\r\n\r\n                public bool IsEnabled(LogLevel logLevel)\r\n                {\r\n                    return true;\r\n                }\r\n\r\n                public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)\r\n                {\r\n                    var fields = new LoggingFields();\r\n                    fields.AddString(\"Message\", formatter(state, exception));\r\n                    this.channel.LogEvent(eventId.ToString(), fields, MapLevel(logLevel));\r\n                }\r\n\r\n                private static LoggingLevel MapLevel(LogLevel level) => level switch\r\n                {\r\n                    LogLevel.Trace or LogLevel.Debug => LoggingLevel.Verbose,\r\n                    LogLevel.Information => LoggingLevel.Information,\r\n                    LogLevel.Warning => LoggingLevel.Warning,\r\n                    LogLevel.Error => LoggingLevel.Error,\r\n                    LogLevel.Critical => LoggingLevel.Critical,\r\n                    _ => LoggingLevel.Verbose\r\n                };\r\n\r\n                public void Dispose()\r\n                {\r\n                    this.session.RemoveLoggingChannel(this.channel);\r\n                }\r\n            }\r\n\r\n            private FileLoggingSession session;\r\n            public WinRTLoggerProvider()\r\n            {\r\n                this.session = new FileLoggingSession(\"Unicord-\" + Guid.NewGuid().ToString());\r\n            }\r\n\r\n            public ILogger CreateLogger(string categoryName)\r\n            {\r\n                return new WinRTLogger(categoryName, session);\r\n            }\r\n\r\n            public async Task SaveAsync()\r\n            {\r\n                var oldSession = session;\r\n                this.session = new FileLoggingSession(\"Unicord-\" + Guid.NewGuid().ToString());\r\n\r\n                await oldSession.CloseAndSaveToFileAsync();\r\n            }\r\n\r\n            public void Dispose()\r\n            {\r\n                this.session.Dispose();\r\n            }\r\n        }\r\n\r\n        private static WinRTLoggerProvider WinRTProvider\r\n             = new WinRTLoggerProvider();\r\n\r\n        public static ILoggerFactory LoggerFactory = new LoggerFactory(new ILoggerProvider[] {\r\n#if DEBUG\r\n            new DebugLoggerProvider(),\r\n#endif\r\n            WinRTProvider\r\n        }, new LoggerFilterOptions()\r\n        {\r\n#if DEBUG\r\n            MinLevel = LogLevel.Debug\r\n#else\r\n            MinLevel = LogLevel.Information\r\n#endif\r\n        });\r\n\r\n        private static readonly ILogger InternalLogger\r\n            = LoggerFactory.CreateLogger(\"Unicord\");\r\n\r\n        public static ILogger<T> GetLogger<T>() where T : class\r\n            => LoggerFactory.CreateLogger<T>();\r\n\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public static void Log(object message, [CallerMemberName] string source = \"General\")\r\n        {\r\n            InternalLogger.Log(LogLevel.Information, new EventId(100, source), \"[{Source}] {Message}\", source, message);\r\n        }\r\n\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        public static void LogError(Exception ex, [CallerMemberName] string memberName = \"UnknownMember\", [CallerFilePath] string filePath = \"Unknown.cs\", [CallerLineNumber] int lineNum = 0)\r\n        {\r\n            InternalLogger.Log(LogLevel.Error, ex, \"An error occured: {MemberName} @ {FilePath}:{LineNumber}\", memberName, filePath, lineNum);\r\n            Crashes.TrackError(ex, new Dictionary<string, string> { [\"MemberName\"] = memberName, [\"FilePath\"] = filePath, [\"LineNumber\"] = lineNum.ToString() });\r\n        }\r\n\r\n        public static async Task OnSuspendingAsync()\r\n        {\r\n            await WinRTProvider.SaveAsync();\r\n        }\r\n    }\r\n}\r\n\r\n"
  },
  {
    "path": "Unicord.Universal/Models/ChannelEditViewModel.cs",
    "content": "﻿using System.Collections.ObjectModel;\nusing System.Threading.Tasks;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing Microsoft.AppCenter.Analytics;\n\nusing Windows.UI.Xaml.Controls;\nusing NavigationViewItem = Microsoft.UI.Xaml.Controls.NavigationViewItem;\nusing System.Linq;\n\nnamespace Unicord.Universal.Models\n{\n    public class ChannelEditViewModel : ViewModelBase\n    {\n        public ChannelEditViewModel(DiscordChannel channel)\n        {\n            Channel = channel;\n\n            Name = channel.Name;\n            Topic = channel.Topic;\n            NSFW = channel.IsNSFW;\n            Userlimit = channel.UserLimit.GetValueOrDefault();\n            Bitrate = channel.Bitrate.GetValueOrDefault() / 1000;\n\n            // this is awful and horrible and bad\n            PermissionOverwrites = new ObservableCollection<NavigationViewItem>();\n\n            foreach (var overwrite in channel.PermissionOverwrites.OrderBy(o => o.Type))\n            {\n                var content = \"\";\n                var icon = new SymbolIcon();\n                \n                if (overwrite.Type == OverwriteType.Member)\n                {\n                    icon.Symbol = Symbol.Contact;\n                    content = channel.Guild.Members.TryGetValue(overwrite.Id, out var member)\n                        ? $\"@{member.Username}#{member.Discriminator}\"\n                        : $\"Unknown Member {overwrite.Id}\";\n                }\n                else if(overwrite.Type == OverwriteType.Role)\n                {\n                    var role = channel.Guild.Roles[overwrite.Id];\n                    icon.Symbol = (Symbol)57704;\n                    content = role.Name;\n                }\n\n                PermissionOverwrites.Add(new NavigationViewItem() { Tag = overwrite, Content = content, Icon = icon });\n            }\n        }\n\n        public DiscordChannel Channel { get; }\n\n        public string Name { get; set; }\n\n        public bool IsText => Channel.Type == ChannelType.Text;\n        public string Topic { get; set; }\n        public bool NSFW { get; set; }\n\n        public bool IsVoice => Channel.Type == ChannelType.Voice;\n        public int Userlimit { get; set; }\n        public int Bitrate { get; set; }\n\n        // BUGBUG: this is an MVVM travesty\n        public ObservableCollection<NavigationViewItem> PermissionOverwrites { get; set; }\n\n        public Task SaveChangesAsync()\n        {\n            Analytics.TrackEvent(\"ChannelEditViewModel_SaveChanges\");\n\n            if (IsText)\n            {\n                return Channel.ModifyAsync(m =>\n                {\n                    m.Name = Name;\n                    m.Topic = Topic;\n                    m.Nsfw = NSFW;\n                });\n            }\n            if (IsVoice)\n            {\n                return Channel.ModifyAsync(m =>\n                {\n                    m.Name = Name;\n                    m.Userlimit = (int)Userlimit;\n                    m.Bitrate = (int)Bitrate * 1000;\n                });\n            }\n\n            return Task.CompletedTask;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/ChannelPermissionEditViewModel.cs",
    "content": "﻿using DSharpPlus;\nusing DSharpPlus.Entities;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Windows.ApplicationModel.Resources;\n\nnamespace Unicord.Universal.Models\n{\n    public class ChannelPermissionViewModel\n    {\n        private DiscordOverwrite _overwrite;\n\n        public ChannelPermissionViewModel(Permissions permission, DiscordOverwrite overwrite, ResourceLoader loader)\n        {\n            _overwrite = overwrite;\n\n            Permission = permission;\n            Title = loader.GetString($\"{permission}Title\");\n            Subtitle = loader.GetString($\"{permission}Subtitle\");\n            Allowed = overwrite.Allowed;\n            Denied = overwrite.Denied;\n        }\n\n        public bool IsDirty { get; private set; }\n        public Permissions Permission { get; private set; }\n        public Permissions Allowed { get; private set; }\n        public Permissions Denied { get; private set; }\n        public string Title { get; private set; }\n        public string Subtitle { get; private set; }\n        public bool? Value\n        {\n            get => GetPermissionValue(Permission);\n            set => SetPermissionValue(Permission, value);\n        }\n\n        private bool? GetPermissionValue(Permissions p)\n        {\n            if (Allowed.HasPermission(p))\n                return true;\n\n            if (Denied.HasPermission(p))\n                return false;\n\n            return null;\n        }\n\n        private void SetPermissionValue(Permissions p, bool? value)\n        {\n            Allowed = Allowed.Revoke(p);\n            Denied = Denied.Revoke(p);\n\n            if (value == true)\n                Allowed = Allowed.Grant(p);\n\n            if (value == false)\n                Denied = Denied.Grant(p);\n        }\n    }\n\n    public class ChannelPermissionEditViewModel : ViewModelBase\n    {\n        private DiscordChannel _channel;\n        private DiscordOverwrite _overwrite;\n        private ResourceLoader _resourceLoader;\n\n        private static Permissions[] PERMISSION_GROUP_GENERAL = new[] { Permissions.AccessChannels, Permissions.ManageChannels, Permissions.ManageRoles };\n        private static Permissions[] PERMISSION_GROUP_MEMBERSHIP = new[] { Permissions.CreateInstantInvite };\n        private static Permissions[] PERMISSION_GROUP_TEXT = new[]\n        {\n            Permissions.SendMessages,\n            Permissions.EmbedLinks,\n            Permissions.AttachFiles,\n            Permissions.AddReactions,\n            Permissions.UseExternalEmojis,\n            Permissions.MentionEveryone,\n            Permissions.ManageMessages,\n            Permissions.ReadMessageHistory,\n            Permissions.SendTtsMessages,\n            Permissions.ManageWebhooks\n        };\n        private static Permissions[] PERMISSION_GROUP_VOICE = new[]\n        {\n            Permissions.UseVoice,\n            Permissions.Speak,\n            Permissions.Stream,\n            Permissions.UseVoiceDetection,\n            Permissions.PrioritySpeaker,\n            Permissions.MuteMembers,\n            Permissions.DeafenMembers,\n            Permissions.MoveMembers\n        };\n\n        public ChannelPermissionEditViewModel(DiscordChannel channel, DiscordOverwrite overwrite)\n        {\n            _channel = channel;\n            _overwrite = overwrite;\n            _resourceLoader = ResourceLoader.GetForViewIndependentUse(\"Permissions\");\n\n            General = PERMISSION_GROUP_GENERAL.Select(p => new ChannelPermissionViewModel(p, overwrite, _resourceLoader)).ToList();\n            Membership = PERMISSION_GROUP_MEMBERSHIP.Select(p => new ChannelPermissionViewModel(p, overwrite, _resourceLoader)).ToList();\n            Text = PERMISSION_GROUP_TEXT.Select(p => new ChannelPermissionViewModel(p, overwrite, _resourceLoader)).ToList();\n            Voice = PERMISSION_GROUP_VOICE.Select(p => new ChannelPermissionViewModel(p, overwrite, _resourceLoader)).ToList();\n        }\n\n        public bool IsTextChannel => _channel.Type == ChannelType.Text || _channel.Type == ChannelType.Announcement;\n        public bool IsVoiceChannel => _channel.Type == ChannelType.Voice;\n\n        public List<ChannelPermissionViewModel> General { get; }\n        public List<ChannelPermissionViewModel> Membership { get; }\n        public List<ChannelPermissionViewModel> Text { get; }\n        public List<ChannelPermissionViewModel> Voice { get; }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Channels/ChannelListViewModel.cs",
    "content": "﻿using DSharpPlus.Entities;\r\nusing Unicord.Universal.Models.Guild;\r\n\r\nnamespace Unicord.Universal.Models.Channels\r\n{\r\n    public class ChannelListViewModel : ChannelViewModel\r\n    {\r\n        private readonly GuildChannelListViewModel _guildChannelList;\r\n\r\n        public ChannelListViewModel(DiscordChannel channel, GuildChannelListViewModel guildChannelList = null) \r\n            : base(channel.Id)\r\n        {\r\n            _guildChannelList = guildChannelList;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Channels/ChannelPageViewModel.cs",
    "content": "﻿using System;\r\nusing System.Collections.Concurrent;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Input;\r\nusing CommunityToolkit.Mvvm.Input;\r\nusing CommunityToolkit.Mvvm.Messaging;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.EventArgs;\r\nusing DSharpPlus.Windows;\r\nusing Humanizer;\r\nusing Microsoft.AppCenter.Analytics;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Unicord.Universal.Models.Messages;\r\nusing Unicord.Universal.Models.User;\r\nusing Unicord.Universal.Services;\r\nusing Unicord.Universal.Utilities;\r\nusing WamWooWam.Core;\r\nusing Windows.ApplicationModel.Resources;\r\nusing Windows.Storage.Streams;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Media;\r\n\r\nnamespace Unicord.Universal.Models\r\n{\r\n    public class ChannelPageViewModel : ChannelPageViewModelBase, IDisposable\r\n    {\r\n#if ARM\r\n        private const int INITIAL_LOAD_LIMIT = 15;\r\n#else\r\n        private const int INITIAL_LOAD_LIMIT = 25;\r\n#endif\r\n\r\n        private readonly DiscordChannel _channel;\r\n        private readonly ConcurrentDictionary<ulong, CancellationTokenSource> _typingCancellation;\r\n        private readonly WindowHandle _windowHandle;\r\n        private readonly ResourceLoader _strings;\r\n        private readonly SemaphoreSlim _loadSemaphore;\r\n        private readonly DispatcherTimer _slowModeTimer;\r\n\r\n        private DiscordUser _currentUser;\r\n        private double _slowModeTimeout;\r\n        private DateTimeOffset _typingLastSent;\r\n        private DateTimeOffset _messageLastSent;\r\n        private string _messageText;\r\n        private bool _isTranscoding;\r\n        private ObservableCollection<MessageViewModel> _messages;\r\n        private MessageViewModel _replyTo;\r\n        private bool _replyPing = true;\r\n\r\n        public ChannelPageViewModel(DiscordChannel channel,\r\n                                    WindowHandle window,\r\n                                    ICommand enterEditMode = null,\r\n                                    ICommand exitEditMode = null)\r\n            : base(channel)\r\n        {\r\n            if (!channel.IsText())\r\n                throw new InvalidOperationException(\"Unable to create a view model for a non-text channel\"); // no op this\r\n\r\n            _windowHandle = window;\r\n            _strings = ResourceLoader.GetForCurrentView(\"ChannelPage\");\r\n            _loadSemaphore = new SemaphoreSlim(1, 1);\r\n            _typingCancellation = new ConcurrentDictionary<ulong, CancellationTokenSource>();\r\n            _typingLastSent = DateTime.Now - TimeSpan.FromSeconds(10);\r\n\r\n            _channel = channel;\r\n            _currentUser = channel.Guild?.CurrentMember ?? discord.CurrentUser;\r\n            _messages = new ObservableCollection<MessageViewModel>();\r\n\r\n            WeakReferenceMessenger.Default.Register<ChannelPageViewModel, TypingStartEventArgs>(this, static (t, v) => t.OnTypingStarted(v.Event));\r\n            WeakReferenceMessenger.Default.Register<ChannelPageViewModel, MessageCreateEventArgs>(this, static (t, v) => t.OnMessageCreated(v.Event));\r\n            WeakReferenceMessenger.Default.Register<ChannelPageViewModel, MessageDeleteEventArgs>(this, static (t, v) => t.OnMessageDeleted(v.Event));\r\n            WeakReferenceMessenger.Default.Register<ChannelPageViewModel, ResumedEventArgs>(this, static (t, v) => t.OnResumed(v.Event));\r\n\r\n            TypingUsers = new ObservableCollection<UserViewModel>();\r\n            FileUploads = new ObservableCollection<FileUploadModel>();\r\n            FileUploads.CollectionChanged += (o, e) =>\r\n            {\r\n                InvokePropertyChanged(nameof(DisplayUploadSize));\r\n                InvokePropertyChanged(nameof(UploadProgressBarValue));\r\n                InvokePropertyChanged(nameof(CanSend));\r\n                InvokePropertyChanged(nameof(UploadInfoForeground));\r\n                InvokePropertyChanged(nameof(CanUpload));\r\n                InvokePropertyChanged(nameof(ShowUploads));\r\n            };\r\n\r\n            if (channel.Guild != null)\r\n            {\r\n                Permissions = _channel.PermissionsFor(channel.Guild.CurrentMember);\r\n            }\r\n            else\r\n            {\r\n                Permissions = Permissions.Administrator;\r\n            }\r\n\r\n            _slowModeTimer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(1 / 60.0) };\r\n            _slowModeTimer.Tick += (o, e) =>\r\n            {\r\n                SlowModeTimeout = Math.Max(0, PerUserRateLimit - (DateTimeOffset.Now - _messageLastSent).TotalMilliseconds);\r\n                InvokePropertyChanged(nameof(ShowSlowModeTimeout));\r\n                if (SlowModeTimeout == 0)\r\n                {\r\n                    InvokePropertyChanged(nameof(CanSend));\r\n                    _slowModeTimer.Stop();\r\n                }\r\n            };\r\n\r\n            EnterEditModeCommand = enterEditMode;\r\n            ExitEditModeCommand = exitEditMode;\r\n            ClearReplyCommand = new RelayCommand(() => this.ReplyTo = null);\r\n            MassDeleteCommand = new AsyncRelayCommand(async () =>\r\n            {\r\n                var loader = ResourceLoader.GetForCurrentView(\"ChannelPage\");\r\n                if (await UIUtilities.ShowYesNoDialogAsync(loader.GetString(\"MassDeleteTitle\"), loader.GetString(\"MassDeleteMessage\"), \"\\xE74D\"))\r\n                {\r\n                    Analytics.TrackEvent(\"ChannelPage_MassDeleteMessage\");\r\n                    var items = Messages.Where(m => m.IsSelected)\r\n                                        .ToArray();\r\n\r\n                    ExitEditModeCommand?.Execute(null);\r\n\r\n                    foreach (var item in items)\r\n                    {\r\n                        await item.Message.DeleteAsync();\r\n                        await Task.Delay(500);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n\r\n        public ObservableCollection<MessageViewModel> Messages\r\n        {\r\n            get => _messages;\r\n            set => OnPropertySet(ref _messages, value);\r\n        }\r\n\r\n        public string MessageText\r\n        {\r\n            get => _messageText;\r\n            set => OnPropertySet(ref _messageText, value);\r\n        }\r\n\r\n        public DiscordUser CurrentUser\r\n        {\r\n            get => _currentUser;\r\n            set\r\n            {\r\n                OnPropertySet(ref _currentUser, value);\r\n\r\n                if (_channel.Guild != null)\r\n                {\r\n                    Permissions = _channel.PermissionsFor(_currentUser as DiscordMember);\r\n                }\r\n                else\r\n                {\r\n                    Permissions = Permissions.Administrator;\r\n                }\r\n\r\n                InvokePropertyChanged(string.Empty);\r\n            }\r\n        }\r\n\r\n        public Permissions Permissions { get; set; }\r\n\r\n        public ObservableCollection<UserViewModel> TypingUsers { get; set; }\r\n\r\n        public ObservableCollection<FileUploadModel> FileUploads { get; set; }\r\n\r\n        public MessageViewModel ReplyTo\r\n        {\r\n            get => _replyTo; set\r\n            {\r\n                OnPropertySet(ref _replyTo, value);\r\n                InvokePropertyChanged(nameof(ShowReply));\r\n            }\r\n        }\r\n\r\n        public bool ReplyPing { get => _replyPing; set => OnPropertySet(ref _replyPing, value); }\r\n\r\n        public bool ShowReply =>\r\n            ReplyTo != null;\r\n\r\n        public override string Topic\r\n            => Channel.Topic != null ? Channel.Topic.Replace(new[] { \"\\r\\n\", \"\\r\", \"\\n\" }, \" \").Truncate(512, \"...\") : string.Empty;\r\n\r\n        /// <summary>\r\n        /// The channel's symbol. (i.e. #, @ etc.)\r\n        /// </summary>\r\n        public string ChannelPrefix =>\r\n            Channel.Guild != null && !Channel.IsThread ? \"#\"\r\n            : Channel.Type == ChannelType.Private ? \"@\"\r\n            : string.Empty;\r\n\r\n\r\n        /// <summary>\r\n        /// The suffix of the channel's display name. (i.e. #6402)\r\n        /// </summary>\r\n        public string ChannelSuffix =>\r\n            string.Empty;\r\n\r\n        /// <summary>\r\n        /// The full channel name (i.e. @WamWooWam#6402, #general, etc.)\r\n        /// </summary>\r\n        public string FullChannelName =>\r\n            $\"{ChannelPrefix}{DisplayName}{ChannelSuffix}\";\r\n\r\n        /// <summary>\r\n        /// The current placeholder to display in the message text box\r\n        /// </summary>\r\n        public string ChannelPlaceholder =>\r\n           CanSend || (SlowModeTimeout != 0 && !ImmuneToSlowMode) ?\r\n            string.Format(_strings.GetString(\"MessageChannelFormat\"), ChannelPrefix, DisplayName) :\r\n            _strings.GetString(\"ChannelReadonlyText\");\r\n\r\n        public bool CanType => CanSend || (SlowModeTimeout != 0 && !ImmuneToSlowMode);\r\n\r\n        /// <summary>\r\n        /// The title for the page displaying the channel\r\n        /// </summary>\r\n        public string TitleText => Channel.Guild != null ? $\"{FullChannelName} - {Channel.Guild.Name}\" : FullChannelName;\r\n\r\n\r\n        public bool CanSend\r\n        {\r\n            get\r\n            {\r\n                if (SlowModeTimeout != 0 && !ImmuneToSlowMode)\r\n                {\r\n                    return false;\r\n                }\r\n\r\n                if (UploadSize > (ulong)UploadLimit)\r\n                {\r\n                    return false;\r\n                }\r\n\r\n                if (Channel.Type == ChannelType.Voice)\r\n                {\r\n                    return false;\r\n                }\r\n\r\n                if (Channel is DiscordDmChannel)\r\n                {\r\n                    return true;\r\n                }\r\n\r\n                if (_currentUser is DiscordMember member)\r\n                {\r\n                    return Permissions.HasPermission(Permissions.SendMessages) && Permissions.HasPermission(Permissions.AccessChannels);\r\n                }\r\n\r\n                return false;\r\n            }\r\n        }\r\n\r\n        public bool CanUpload\r\n        {\r\n            get\r\n            {\r\n                if (!CanSend)\r\n                {\r\n                    return false;\r\n                }\r\n\r\n                if (Channel is DiscordDmChannel)\r\n                {\r\n                    return true;\r\n                }\r\n\r\n                if (_currentUser is DiscordMember member)\r\n                {\r\n                    return Permissions.HasPermission(Permissions.AttachFiles);\r\n                }\r\n\r\n                return false;\r\n            }\r\n        }\r\n\r\n        public double PerUserRateLimit =>\r\n            (_channel.PerUserRateLimit ?? 0) * 1000;\r\n\r\n        public bool ShowSlowModeTimeout =>\r\n            SlowModeTimeout > 0;\r\n\r\n        public double SlowModeTimeout { get => _slowModeTimeout; set => OnPropertySet(ref _slowModeTimeout, value); }\r\n\r\n        // TODO: \"ChannelPageUploadViewModel\"\r\n        public int UploadLimit => DiscordManager.Discord.CurrentUser.UploadLimit();\r\n\r\n        public ulong UploadSize => (ulong)FileUploads.Sum(u => (double)u.Length);\r\n\r\n        public string DisplayUploadSize => Tools.ToFileSizeString(UploadSize);\r\n\r\n        public string DisplayUploadLimit => Tools.ToFileSizeString(UploadLimit);\r\n\r\n        public double UploadProgressBarValue => Math.Min(UploadSize, (ulong)UploadLimit);\r\n\r\n        // TODO: refactor this\r\n        public Brush UploadInfoForeground => !CanSend ? (Brush)Application.Current.Resources[\"ErrorTextForegroundBrush\"] : null;\r\n\r\n        public bool ShowUploads => FileUploads.Any() || IsTranscoding;\r\n\r\n        public bool HasNitro => DiscordManager.Discord.CurrentUser.HasNitro();\r\n\r\n        public bool ShowEditButton\r\n            => Channel.Guild != null && Permissions.HasPermission(Permissions.ManageChannels);\r\n\r\n        public bool ShowSlowMode\r\n            => Channel.PerUserRateLimit.HasValue && Channel.PerUserRateLimit != 0;\r\n\r\n        public string SlowModeText\r\n            => string.Format(_strings.GetString(ImmuneToSlowMode ? \"ImmuneSlowModeFormat\" : \"SlowModeFormat\"), TimeSpan.FromSeconds(Channel.PerUserRateLimit ?? 0).ToNaturalString());\r\n\r\n        private bool ImmuneToSlowMode\r\n            => Permissions.HasPermission(Permissions.ManageMessages) && Permissions.HasPermission(Permissions.ManageChannels);\r\n\r\n        public bool ShowTypingUsers\r\n            => TypingUsers?.Any() == true;\r\n\r\n        public bool ShowTypingContainer =>\r\n            ShowSlowMode || ShowTypingUsers;\r\n        public bool HideTypingContainer =>\r\n            !ShowTypingContainer;\r\n\r\n        public DateTimeOffset LastAccessed { get; internal set; }\r\n\r\n        public bool IsEditMode { get; set; }\r\n\r\n        public bool IsTranscoding\r\n        {\r\n            get => _isTranscoding;\r\n            internal set\r\n            {\r\n                OnPropertySet(ref _isTranscoding, value);\r\n                InvokePropertyChanged(nameof(ShowUploads));\r\n            }\r\n        }\r\n\r\n        public ICommand EnterEditModeCommand { get; }\r\n        public ICommand ExitEditModeCommand { get; }\r\n        public ICommand MassDeleteCommand { get; }\r\n        public ICommand ClearReplyCommand { get; }\r\n\r\n        public bool IsDisposed { get; internal set; }\r\n\r\n        private async Task OnMessageCreated(MessageCreateEventArgs e)\r\n        {\r\n            if (e.Channel != Channel) return;\r\n\r\n            await _loadSemaphore.WaitAsync().ConfigureAwait(false);\r\n\r\n            try\r\n            {\r\n                if (_typingCancellation.TryGetValue(e.Author.Id, out var src))\r\n                {\r\n                    src.Cancel();\r\n                }\r\n\r\n                var usr = TypingUsers.FirstOrDefault(u => u.Id == e.Author.Id);\r\n                if (usr != null)\r\n                {\r\n                    syncContext.Post(a =>\r\n                    {\r\n                        TypingUsers.Remove(usr);\r\n                        InvokePropertyChanged(nameof(ShowTypingUsers));\r\n                        InvokePropertyChanged(nameof(ShowTypingContainer));\r\n                        InvokePropertyChanged(nameof(HideTypingContainer));\r\n                    }, null);\r\n                }\r\n\r\n                if (string.IsNullOrWhiteSpace(e.Message.Author.Username))\r\n                    _ = RequestMissingMembersAsync(new[] { e.Message });\r\n\r\n                if (!Messages.Any(m => m.Id == e.Message.Id))\r\n                {\r\n                    syncContext.Post(a => AddMessage(e.Message), null);\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                _loadSemaphore.Release();\r\n            }\r\n\r\n        }\r\n\r\n        private Task OnMessageDeleted(MessageDeleteEventArgs e)\r\n        {\r\n            if (e.Channel != Channel) return Task.CompletedTask;\r\n\r\n            // BUGBUG: These are fire and forget, may be better to refactor into an async event setup?\r\n            syncContext.Post(a => RemoveMessage(e.Message), null);\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        protected override async Task OnChannelUpdated(ChannelUpdateEventArgs e)\r\n        {\r\n            await base.OnChannelUpdated(e);\r\n\r\n            // todo: what changed\r\n            if (e.ChannelAfter.Id == _channel.Id)\r\n            {\r\n                // Channel = e.ChannelAfter;\r\n            }\r\n        }\r\n\r\n        private async Task OnResumed(ResumedEventArgs e)\r\n        {\r\n            await _loadSemaphore.WaitAsync().ConfigureAwait(false);\r\n\r\n            try\r\n            {\r\n                // needs work, but it's functional\r\n                // i also never want to touch it again\r\n\r\n                var rawMessages = (await Channel.GetMessagesAsync().ConfigureAwait(false));\r\n                var messages = rawMessages.Reverse().ToList();\r\n                var lastMessage = messages.LastOrDefault(m => m.Id == Messages.LastOrDefault()?.Id);\r\n                if (lastMessage != null)\r\n                {\r\n                    if (lastMessage.Id != messages.LastOrDefault().Id)\r\n                    {\r\n                        var messagesToAppend = messages.Skip(messages.IndexOf(lastMessage) + 1).Reverse().ToList();\r\n                        InsertMessages(Messages.Count - 1, messagesToAppend);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    ClearAndAddMessages(messages);\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                _loadSemaphore.Release();\r\n            }\r\n        }\r\n\r\n        internal async Task LoadMessagesAsync()\r\n        {\r\n            await _loadSemaphore.WaitAsync().ConfigureAwait(false);\r\n            Analytics.TrackEvent(\"ChannelViewModel_LoadMessages\");\r\n\r\n            if (Channel.Guild != null)\r\n            {\r\n                App.RoamingSettings.Save($\"GuildPreviousChannels::{Channel.Guild.Id}\", Channel.Id);\r\n            }\r\n\r\n            App.LocalSettings.Save(\"LastViewedChannel\", Channel.Id);\r\n\r\n            try\r\n            {\r\n                IsLoading = true;\r\n\r\n                if (!Messages.Any())\r\n                {\r\n                    await UnsafeLoadMessages().ConfigureAwait(false);\r\n                }\r\n                else\r\n                {\r\n                    var message = Messages.Last();\r\n                    var index = Messages.IndexOf(message);\r\n                    var messages = await Channel.GetMessagesAfterAsync(message.Id, 100).ConfigureAwait(false);\r\n                    if (messages.Count < 100)\r\n                    {\r\n                        InsertMessages(index, messages);\r\n                    }\r\n                    else\r\n                    {\r\n                        ClearAndAddMessages(await Channel.GetMessagesAsync());\r\n                    }\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                IsLoading = false;\r\n                _loadSemaphore.Release();\r\n            }\r\n        }\r\n\r\n        private void InsertMessages(int index, IEnumerable<DiscordMessage> messages) => syncContext.Post(d =>\r\n        {\r\n            _ = RequestMissingMembersAsync(messages);\r\n\r\n            foreach (var mess in messages)\r\n            {\r\n                InsertMessage(index + 1, mess);\r\n            }\r\n        }, this);\r\n\r\n        private void ClearAndAddMessages(IEnumerable<DiscordMessage> messages) => syncContext.Post(d =>\r\n        {\r\n            _ = RequestMissingMembersAsync(messages);\r\n\r\n            Messages.Clear();\r\n            foreach (var mess in messages.Reverse())\r\n            {\r\n                AddMessage(mess);\r\n            }\r\n\r\n        }, null);\r\n\r\n        private async Task RequestMissingMembersAsync(IEnumerable<DiscordMessage> messages)\r\n        {\r\n            if (Channel.Guild != null)\r\n            {\r\n                var mentionedUsers = messages.SelectMany(m => m.MentionedUsers);\r\n                var usersToSync = messages.Select(m => m.Author)\r\n                                          .Where(u => string.IsNullOrWhiteSpace(u.Username) || (u is not DiscordMember m || m.IsLocal))\r\n                                          .Concat(mentionedUsers)\r\n                                          .Select(u => u.Id)\r\n                                          .Distinct();\r\n\r\n                Analytics.TrackEvent(\"ChannelViewModel_RequestMembers\", new Dictionary<string, string> { [\"Count\"] = $\"{usersToSync.Count()}\" });\r\n\r\n                if (usersToSync.Any())\r\n                    await Channel.Guild.RequestUserPresencesAsync(usersToSync);\r\n            }\r\n        }\r\n\r\n        private async Task UnsafeLoadMessages()\r\n        {\r\n            var messages = await Channel.GetMessagesAsync(INITIAL_LOAD_LIMIT).ConfigureAwait(false);\r\n            if (messages.Any())\r\n                ClearAndAddMessages(messages);\r\n        }\r\n\r\n        internal async Task LoadMessagesBeforeAsync()\r\n        {\r\n            await _loadSemaphore.WaitAsync().ConfigureAwait(false);\r\n\r\n            try\r\n            {\r\n                var message = Messages.FirstOrDefault();\r\n                if (message != null)\r\n                {\r\n                    var messages = await Channel.GetMessagesBeforeAsync(message.Id, INITIAL_LOAD_LIMIT)\r\n                        .ConfigureAwait(false);\r\n                    if (messages.Any())\r\n                    {\r\n                        InsertMessages(-1, messages);\r\n                    }\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                _loadSemaphore.Release();\r\n            }\r\n        }\r\n\r\n        public string ProcessMessageText(string input)\r\n        {\r\n            // step 1: normalise whitespace\r\n            var output = input.Replace('\\r', '\\n');\r\n            var index = 0;\r\n\r\n            while ((index = output.IndexOf('@', index)) != -1)\r\n            {\r\n                var index2 = -1;\r\n                if ((index2 = output.IndexOf('#', index)) != -1)\r\n                {\r\n                    // process a user (definitely)\r\n\r\n                    var username = output.Substring(index, index2 - index);\r\n                    var discriminator = output.Substring(index2, 4);\r\n\r\n\r\n                }\r\n\r\n                // process a user *or* role\r\n            }\r\n\r\n            // TODO: emoji, channels\r\n\r\n            return output;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Abstracts sending a message.\r\n        /// </summary>\r\n        /// <returns></returns>\r\n        public async Task SendMessageAsync()\r\n        {\r\n            if (Channel.Type == ChannelType.Voice)\r\n            {\r\n                return;\r\n            }\r\n            try\r\n            {\r\n                Analytics.TrackEvent(\"ChannelViewModel_SendMessage\");\r\n\r\n                if ((!string.IsNullOrWhiteSpace(MessageText) || FileUploads.Any()) && CanSend)\r\n                {\r\n                    var txt = MessageText ?? \"\";\r\n                    txt = txt.Replace('\\r', '\\n'); // this is incredibly stupid\r\n\r\n                    var replyTo = ReplyTo;\r\n                    var replyPing = ReplyPing;\r\n                    var models = FileUploads.ToArray();\r\n\r\n                    ReplyTo = null;\r\n                    ReplyPing = true;\r\n                    MessageText = \"\";\r\n                    FileUploads.Clear();\r\n\r\n                    var mentions = new List<IMention> { UserMention.All, RoleMention.All, EveryoneMention.All };\r\n                    if (replyPing && replyTo != null)\r\n                        mentions.Add(RepliedUserMention.All);\r\n\r\n                    if (models.Any())\r\n                    {\r\n                        IsUploading = true;\r\n                        var files = new Dictionary<string, IInputStream>();\r\n                        foreach (var item in models)\r\n                        {\r\n                            files.Add(item.Spoiler ? $\"SPOILER_{item.FileName}\" : item.FileName, await item.GetStreamAsync().ConfigureAwait(false));\r\n                        }\r\n\r\n                        var progress = new Progress<double?>((p) =>\r\n                        {\r\n                            if (p == null && !IsUploadIndeterminate)\r\n                            {\r\n                                IsUploadIndeterminate = true;\r\n                            }\r\n                            else\r\n                            {\r\n                                IsUploadIndeterminate = false;\r\n                                UploadProgress = p.Value;\r\n                            }\r\n                        });\r\n\r\n                        await Channel.SendFilesWithProgressAsync(Tools.HttpClient, txt, mentions, replyTo?.Message, files, progress)\r\n                                   .ConfigureAwait(false);\r\n\r\n                        foreach (var item in files)\r\n                        {\r\n                            item.Value.Dispose();\r\n                        }\r\n\r\n                        foreach (var item in models)\r\n                        {\r\n                            if (item.IsTemporary && item.StorageFile != null)\r\n                            {\r\n                                await item.StorageFile.DeleteAsync();\r\n                            }\r\n\r\n                            item.Dispose();\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        await Channel.SendMessageAsync(new DiscordMessageBuilder()\r\n                            .WithContent(txt)\r\n                            .WithReply(replyTo?.Id)\r\n                            .WithAllowedMentions(mentions)).ConfigureAwait(false);\r\n                    }\r\n\r\n\r\n                    if (!ImmuneToSlowMode)\r\n                    {\r\n                        _messageLastSent = DateTimeOffset.Now;\r\n                        SlowModeTimeout = PerUserRateLimit;\r\n                        InvokePropertyChanged(nameof(CanSend));\r\n                        syncContext.Post(o => ((DispatcherTimer)o).Start(), _slowModeTimer);\r\n                    }\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                IsUploading = false;\r\n            }\r\n        }\r\n\r\n        public async Task TruncateMessagesAsync(int max = INITIAL_LOAD_LIMIT)\r\n        {\r\n            await _loadSemaphore.WaitAsync();\r\n\r\n            try\r\n            {\r\n                if (Messages.Count > max)\r\n                {\r\n                    Messages = new ObservableCollection<MessageViewModel>(Messages.TakeLast(max));\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                _loadSemaphore.Release();\r\n            }\r\n        }\r\n\r\n        #region Typing\r\n\r\n        public async Task TriggerTypingAsync()\r\n        {\r\n            if ((DateTimeOffset.Now - _typingLastSent).Seconds > 10)\r\n            {\r\n                _typingLastSent = DateTimeOffset.Now;\r\n\r\n                try\r\n                {\r\n                    await Channel.TriggerTypingAsync().ConfigureAwait(false);\r\n                }\r\n                catch { }\r\n            }\r\n        }\r\n\r\n        private Task OnTypingStarted(TypingStartEventArgs e)\r\n        {\r\n            if (e.Channel.Id == Channel.Id && e.User.Id != CurrentUser.Id)\r\n            {\r\n                if (_typingCancellation.TryRemove(e.User.Id, out var src))\r\n                {\r\n                    src.Cancel();\r\n                }\r\n\r\n                syncContext.Post(o =>\r\n                {\r\n                    TypingUsers.Add(new UserViewModel(e.User, Channel.GuildId, this));\r\n                    InvokePropertyChanged(nameof(ShowTypingUsers));\r\n                    InvokePropertyChanged(nameof(ShowTypingContainer));\r\n                    InvokePropertyChanged(nameof(HideTypingContainer));\r\n                }, null);\r\n\r\n                HandleTypingStart(e);\r\n            }\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private void HandleTypingStart(TypingStartEventArgs e)\r\n        {\r\n            var source = new CancellationTokenSource(10_000);\r\n            source.Token.Register(() => syncContext.Post(o =>\r\n            {\r\n                foreach (var user in TypingUsers.Where(u => u.Id == e.User.Id).ToArray())\r\n                    TypingUsers.Remove(user);\r\n                InvokePropertyChanged(nameof(ShowTypingUsers));\r\n                InvokePropertyChanged(nameof(ShowTypingContainer));\r\n                InvokePropertyChanged(nameof(HideTypingContainer));\r\n            }, null));\r\n\r\n            _typingCancellation[e.User.Id] = source;\r\n        }\r\n\r\n        #endregion\r\n\r\n        private void AddMessage(DiscordMessage message)\r\n        {\r\n            Messages.Add(new MessageViewModel(message, this));\r\n        }\r\n\r\n        private void InsertMessage(int index, DiscordMessage message)\r\n        {\r\n            Messages.Insert(index, new MessageViewModel(message, this));\r\n        }\r\n\r\n        private void RemoveMessage(DiscordMessage message)\r\n        {\r\n            var vm = Messages.FirstOrDefault(m => m.Id == message.Id);\r\n            if (vm == null)\r\n                return;\r\n\r\n            Messages.Remove(vm);\r\n        }\r\n\r\n        public virtual void Dispose()\r\n        {\r\n            IsDisposed = true;\r\n\r\n            Messages.Clear();\r\n\r\n            foreach (var item in FileUploads)\r\n            {\r\n                item.Dispose();\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Channels/ChannelPageViewModelBase.cs",
    "content": "﻿using System.Windows.Input;\nusing CommunityToolkit.Mvvm.Input;\nusing DSharpPlus.Entities;\nusing Unicord.Universal.Pages.Subpages;\nusing Unicord.Universal.Services;\n\nnamespace Unicord.Universal.Models.Channels\n{\n    public class ChannelPageViewModelBase : ChannelViewModel\n    {\n        internal ChannelPageViewModelBase(DiscordChannel channel, bool isTransient = false, ViewModelBase parent = null) \n            : base(channel, isTransient, parent)\n        {\n            CreateCommands();\n        }\n\n        internal ChannelPageViewModelBase(ulong channelId, bool isTransient = false, ViewModelBase parent = null)\n            : base(channelId, isTransient, parent)\n        {\n            CreateCommands();\n        }\n\n        private void CreateCommands()\n        {\n            LeftPaneCommand = new RelayCommand(() => SplitPaneService.GetForCurrentView().ToggleLeftPane());\n            SearchCommand = new RelayCommand(() => SplitPaneService.GetForCurrentView().ToggleRightPane<SearchPage>(this));\n            PinsCommand = new RelayCommand(() => SplitPaneService.GetForCurrentView().ToggleRightPane<PinsPage>(this));\n            UserListCommand = new RelayCommand(() => SplitPaneService.GetForCurrentView().ToggleRightPane<UserListPage>(this));\n        }\n\n        public ICommand LeftPaneCommand { get; private set; }\n        public ICommand SearchCommand { get; private set; }            \n        public ICommand PinsCommand { get; private set; }\n        public ICommand UserListCommand { get; private set; }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Channels/ChannelViewModel.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Input;\r\nusing CommunityToolkit.Mvvm.Messaging;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.EventArgs;\r\nusing Humanizer;\r\nusing Unicord.Universal.Commands;\r\nusing Unicord.Universal.Commands.Channels;\r\nusing Unicord.Universal.Commands.Generic;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models.Guild;\r\nusing Unicord.Universal.Models.User;\r\nusing Windows.UI.StartScreen;\r\n\r\nnamespace Unicord.Universal.Models.Channels\r\n{\r\n    public class ChannelViewModel : ViewModelBase, IEquatable<ChannelViewModel>, IEquatable<DiscordChannel>, ISnowflake\r\n    {\r\n        private readonly ulong _channelId;\r\n        private readonly DiscordChannel _channelCache;\r\n\r\n        private UserViewModel _recipientCache;\r\n        private ReadStateViewModel _readStateCache;\r\n\r\n        private bool isLoading;\r\n        private bool isUploading;\r\n        private bool isUploadIndeterminate;\r\n        private double uploadProgress;\r\n\r\n        internal ChannelViewModel(ulong channelId, bool isTransient = false, ViewModelBase parent = null)\r\n            : base(parent)\r\n        {\r\n            this._channelId = channelId;\r\n\r\n            // BUGBUG: PERF, this doesn't appreciate being used by objects with short lifetimes\r\n            if (!isTransient)\r\n            {\r\n                AcknowledgeCommand = new AcknowledgeChannelCommand(this);\r\n                EditCommand = new EditChannelCommand();\r\n                ToggleMuteCommand = new MuteChannelCommand(this);\r\n                PinToStartCommand = new PinChannelToStartCommand(this);\r\n                CopyIdCommand = new CopyIdCommand(this);\r\n                CopyUrlCommand = new CopyUrlCommand(this);\r\n                OpenInNewWindowCommand = new OpenInNewWindowCommand(this, false);\r\n                OpenInCompactOverlayWindowCommand = new OpenInNewWindowCommand(this, true);\r\n\r\n                WeakReferenceMessenger.Default.Register<ChannelViewModel, ChannelUpdateEventArgs>(this, static (r, m) => r.OnChannelUpdated(m.Event));\r\n                WeakReferenceMessenger.Default.Register<ChannelViewModel, ReadStateUpdateEventArgs>(this, static (r, m) => r.OnReadStateUpdated(m.Event));\r\n            }\r\n        }\r\n\r\n        //\r\n        // So as a rule, we're trying to stick to the cache for channels because we want a single\r\n        // \"source of truth\" for everything on screen, however sometimes we have to fetch entities\r\n        // via REST, which may not be in the cache, so this constructor accomodates that, but it should\r\n        // be used sparingly.\r\n        //\r\n        internal ChannelViewModel(DiscordChannel channel, bool isTransient = false, ViewModelBase parent = null)\r\n            : this(channel.Id, isTransient, parent)\r\n        {\r\n            this._channelCache = channel;\r\n        }\r\n\r\n        public ulong Id\r\n            => _channelId;\r\n\r\n        public virtual DiscordChannel Channel\r\n            => (discord.TryGetCachedChannel(Id, out var channel) ? channel :\r\n                 discord.TryGetCachedThread(Id, out var thread) ? thread : _channelCache)\r\n            ?? throw new InvalidOperationException(\"Unable to find this channel, probably a thread that you've not joined.\");\r\n\r\n        public virtual ChannelViewModel Parent => Channel.ParentId != null ?\r\n            new ChannelViewModel(Channel.ParentId.Value, false, this) :\r\n            null;\r\n\r\n        public virtual GuildViewModel Guild => Channel.GuildId != null && Channel.GuildId != 0 ?\r\n            new GuildViewModel(Channel.GuildId.Value, this) :\r\n            null;\r\n\r\n        public virtual string Name\r\n        {\r\n            get\r\n            {\r\n                if (Channel is DiscordDmChannel dm)\r\n                {\r\n                    if (dm.Type == ChannelType.Private && dm.Recipients.Count == 1 && dm.Recipients[0] != null)\r\n                    {\r\n                        return dm.Recipients[0].DisplayName;\r\n                    }\r\n\r\n                    if (dm.Type == ChannelType.Group)\r\n                    {\r\n                        return dm.Name ?? dm.Recipients.Select(r => r.DisplayName).Humanize();\r\n                    }\r\n                }\r\n\r\n                return Channel.Name;\r\n            }\r\n        }\r\n        public virtual ChannelType ChannelType\r\n            => Channel.Type;\r\n        public virtual int Position\r\n            => Channel.Position;\r\n        public virtual string Topic\r\n            => Channel.Topic;\r\n        public virtual ReadStateViewModel ReadState\r\n            => _readStateCache ??= new ReadStateViewModel(Id, this);\r\n        public virtual bool Unread\r\n            => !Muted && ReadState.Unread;\r\n        public virtual bool NotificationMuted\r\n            => (Muted || (Parent?.Muted ?? false) || (Guild?.Muted ?? false));\r\n        public UserViewModel Recipient\r\n        {\r\n            get\r\n            {\r\n                if (Channel is not DiscordDmChannel dm || dm.Type != ChannelType.Private || dm.Recipients.Count == 0)\r\n                    return null;\r\n\r\n                return _recipientCache ??= new UserViewModel(dm.Recipients[0], null, this);\r\n            }\r\n        }\r\n\r\n        public bool Muted\r\n            => Channel.IsMuted();\r\n        public int? NullableMentionCount\r\n            => ReadState.MentionCount == 0 ? -1 : ReadState.MentionCount;\r\n        public double MutedOpacity\r\n            => Muted ? 0.5 : 1.0;\r\n        public bool HasTopic\r\n            => !string.IsNullOrWhiteSpace(Topic);\r\n\r\n        public bool IsDM\r\n            => Channel.Type is ChannelType.Private;\r\n\r\n        public bool IsNotDM\r\n            => !IsDM;\r\n\r\n        public Uri IconUrl\r\n        {\r\n            get\r\n            {\r\n                if (Channel is not DiscordDmChannel dm)\r\n                    return null;\r\n\r\n                if (dm.Type == ChannelType.Private && dm.Recipients.Count == 1 && dm.Recipients[0] != null)\r\n                {\r\n                    return new Uri(dm.Recipients[0].GetAvatarUrl(64));\r\n                }\r\n\r\n                if (dm.Type == ChannelType.Group)\r\n                {\r\n                    if (dm.IconUrl != null) return new Uri(dm.IconUrl + \"?size=64\");\r\n                    // TODO: default icons?\r\n                }\r\n\r\n                return null;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// The actual channel name. (i.e. general, WamWooWam, etc.)\r\n        /// </summary>\r\n        public string DisplayName\r\n        {\r\n            get\r\n            {\r\n                if (!string.IsNullOrEmpty(Channel.Name))\r\n                {\r\n                    return Channel.Name;\r\n                }\r\n\r\n                if (Channel is DiscordDmChannel dm)\r\n                {\r\n                    return dm.Recipients.Select(r => r.DisplayName).Humanize();\r\n                }\r\n\r\n                return string.Empty;\r\n            }\r\n        }\r\n\r\n        public bool ShouldShowNotificaitonIndicator\r\n        {\r\n            get\r\n            {\r\n                if (Channel is DiscordDmChannel dm)\r\n                {\r\n                    return NullableMentionCount != -1;\r\n                }\r\n\r\n                return Unread;\r\n            }\r\n        }\r\n\r\n        /// <summary>\r\n        /// The icon to show in the top left of a channel\r\n        /// </summary>\r\n        public string ChannelIconUrl\r\n        {\r\n            get\r\n            {\r\n                if (Channel is DiscordDmChannel dm)\r\n                {\r\n                    if (dm.Type == ChannelType.Private && dm.Recipients[0] != null)\r\n                        return dm.Recipients[0].AvatarUrl;\r\n\r\n                    if (dm.Type == ChannelType.Group && dm.IconUrl != null)\r\n                        return dm.IconUrl;\r\n                }\r\n\r\n                return null;\r\n            }\r\n        }\r\n\r\n        public bool ShowUserlistButton\r\n            => Channel.Type == ChannelType.Group || Channel.Guild != null;\r\n\r\n        public bool IsPinned =>\r\n            SecondaryTile.Exists($\"Channel_{Channel.Id}\");\r\n\r\n        public bool IsLoading { get => isLoading; set => OnPropertySet(ref isLoading, value); }\r\n        public bool IsUploading { get => isUploading; set => OnPropertySet(ref isUploading, value); }\r\n        public bool IsUploadIndeterminate { get => isUploadIndeterminate; set => OnPropertySet(ref isUploadIndeterminate, value); }\r\n        public double UploadProgress { get => uploadProgress; set => OnPropertySet(ref uploadProgress, value); }\r\n\r\n        public bool ShowPinsButton\r\n            => Channel.IsText();\r\n\r\n        public bool ShowExtendedItems\r\n            => Channel.IsText();\r\n\r\n        public ICommand AcknowledgeCommand { get; }\r\n        public ICommand EditCommand { get; }\r\n        public ICommand ToggleMuteCommand { get; }\r\n        public ICommand PinToStartCommand { get; }\r\n        public ICommand CopyIdCommand { get; }\r\n        public ICommand CopyUrlCommand { get; }\r\n        public ICommand OpenInNewWindowCommand { get; }\r\n        public ICommand OpenInCompactOverlayWindowCommand { get; }\r\n\r\n        private void OnReadStateUpdated(ReadStateUpdateEventArgs e)\r\n        {\r\n            if (e.ReadState.Id != Channel.Id)\r\n                return;\r\n\r\n            InvokePropertyChanged(nameof(Unread));\r\n            InvokePropertyChanged(nameof(ShouldShowNotificaitonIndicator));\r\n            InvokePropertyChanged(nameof(NullableMentionCount));\r\n        }\r\n\r\n        protected virtual Task OnChannelUpdated(ChannelUpdateEventArgs e)\r\n        {\r\n            if (e.ChannelAfter.Id != Id)\r\n                return Task.CompletedTask;\r\n\r\n            if (e.ChannelAfter.Name != e.ChannelBefore.Name)\r\n                InvokePropertyChanged(nameof(Name));\r\n\r\n            if (e.ChannelAfter.Topic != e.ChannelBefore.Topic)\r\n            {\r\n                InvokePropertyChanged(nameof(Topic));\r\n                InvokePropertyChanged(nameof(HasTopic));\r\n            }\r\n\r\n            if (e.ChannelAfter.Position != e.ChannelBefore.Position)\r\n                InvokePropertyChanged(nameof(Position));\r\n            if (e.ChannelAfter.Type != e.ChannelBefore.Type)\r\n                InvokePropertyChanged(nameof(ChannelType));\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        public bool Equals(ChannelViewModel other)\r\n        {\r\n            return other.Channel.Id == Channel.Id;\r\n        }\r\n\r\n        public bool Equals(DiscordChannel other)\r\n        {\r\n            return other.Id == Channel.Id;\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            return obj switch\r\n            {\r\n                ChannelViewModel vm => Equals(vm),\r\n                DiscordChannel ch => Equals(ch),\r\n                _ => base.Equals(obj),\r\n            };\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            return 329305889 + EqualityComparer<ulong>.Default.GetHashCode(Id);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Channels/DmChannelListViewModel.cs",
    "content": "﻿using System.Linq;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing Humanizer;\r\nusing Unicord.Universal.Extensions;\r\n\r\nnamespace Unicord.Universal.Models.Channels\r\n{\r\n    public class DmChannelListViewModel : ChannelViewModel\r\n    {\r\n        private string _name;\r\n        private string _avatarUrl;\r\n\r\n        public DmChannelListViewModel(DiscordDmChannel channel) \r\n            : base(channel, false, null)\r\n        {\r\n            _name = DmChannel.Name ?? DmChannel.Recipients.Select(s => s.DisplayName).Humanize();\r\n            if (channel.Type == ChannelType.Private)\r\n                AvatarUrl = channel.Recipients.FirstOrDefault()?.GetAvatarUrl(32);\r\n        }\r\n\r\n        public override DiscordChannel Channel \r\n            => base.Channel as DiscordDmChannel;\r\n\r\n        public override string Name \r\n            => _name;\r\n\r\n        public DiscordDmChannel DmChannel \r\n            => (DiscordDmChannel)Channel;\r\n\r\n        public string AvatarUrl { get => _avatarUrl; set => OnPropertySet(ref _avatarUrl, value); }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Models/Channels/ForumChannelViewModel.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing Unicord.Universal.Models.Messages;\nusing Unicord.Universal.Models.User;\n\nnamespace Unicord.Universal.Models.Channels\n{\n    public class ForumChannelViewModel : ChannelPageViewModelBase\n    {\n        internal ForumChannelViewModel(ulong channelId, ViewModelBase parent = null)\n            : base(channelId, false, parent)\n        {\n            if (Channel is not DiscordForumChannel forum)\n                throw new InvalidOperationException();\n\n            IsLoading = true;\n            ForumThreads = new ForumThreadsCollection(this, discord);\n\n            foreach (var thread in ForumChannel.Threads.OrderByDescending(t => t.FirstMessage?.CreationTimestamp))\n                ForumThreads.Add(new ForumThreadViewModel(thread, null, this));\n        }\n\n        public DiscordForumChannel ForumChannel\n            => (DiscordForumChannel)Channel;\n\n        public ForumThreadsCollection ForumThreads { get; }\n\n        public async Task LoadPostData()\n        {\n            if (!ForumChannel.CurrentPermissions.HasPermission(Permissions.ReadMessageHistory) || !ForumChannel.Threads.Any())\n                return;\n\n            await ForumChannel.Guild.RequestUserPresencesAsync(ForumChannel.Threads.Select(c => c.CreatorId));\n\n            var result = await discord.GetForumPostDataAsync(ForumChannel, ForumChannel.Threads.Select(t => t.Id).ToArray())\n                .ConfigureAwait(false);\n\n            syncContext.Post((o) =>\n            {\n                foreach (var thread in result.ThreadData)\n                {\n                    var viewModel = ForumThreads.FirstOrDefault(v => v.Id == thread.Key);\n                    if (viewModel == null) continue;\n\n                    var data = thread.Value;\n                    if (data.FirstMessage != null)\n                        viewModel.FirstMessage = new MessageViewModel(data.FirstMessage);\n                    if (data.Creator != null)\n                        viewModel.Creator = new UserViewModel(data.Creator, ForumChannel.GuildId);\n                }\n            }, null);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Channels/ForumThreadViewModel.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing DSharpPlus.Entities;\nusing Unicord.Universal.Models.Messages;\nusing Unicord.Universal.Models.User;\n\nnamespace Unicord.Universal.Models.Channels\n{\n    public class ForumThreadViewModel : ChannelPageViewModelBase\n    {\n        private MessageViewModel firstMessage;\n        private UserViewModel creator;\n\n        internal ForumThreadViewModel(DiscordThreadChannel channel, DiscordMessage firstMessage, ViewModelBase parent = null)\n            : base(channel, false, parent)\n        {\n            if (Channel is not DiscordThreadChannel thread)\n                throw new InvalidOperationException();\n\n            if (thread.FirstMessage != null)\n                this.firstMessage = new MessageViewModel(thread.FirstMessage);\n            else if (firstMessage != null)\n                this.firstMessage = new MessageViewModel(firstMessage);\n\n\n            creator = new UserViewModel(thread.CreatorId, thread.GuildId, this);\n        }\n\n        public DiscordThreadChannel Thread\n            => (DiscordThreadChannel)Channel;\n\n        public MessageViewModel FirstMessage\n        {\n            get => firstMessage;\n            internal set\n            {\n                OnPropertySet(ref firstMessage, value);\n                InvokePropertyChanged(nameof(ShowAttachment));\n                InvokePropertyChanged(nameof(DisplayAttachment));\n            }\n        }\n\n        public UserViewModel Creator\n        {\n            get => creator;\n            internal set\n            {\n                OnPropertySet(ref creator, value);\n                InvokePropertyChanged(nameof(HasValidCreator));\n            }\n        }\n\n        public bool HasValidCreator\n            => !string.IsNullOrWhiteSpace(Creator.DisplayName);\n\n        public bool ShowAttachment\n            => DisplayAttachment != null;\n\n        public AttachmentViewModel DisplayAttachment\n            => FirstMessage?.Attachments.FirstOrDefault(a => !double.IsNaN(a.NaturalWidth));\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Channels/ForumThreadsCollection.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing DSharpPlus;\nusing Windows.Foundation;\nusing Windows.UI.Core;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Models.Channels\n{\n    public class ForumThreadsCollection : ObservableCollection<ForumThreadViewModel>, ISupportIncrementalLoading\n    {\n        private readonly ForumChannelViewModel viewModel;\n        private readonly DiscordClient client;\n        private int fetched = 0;\n        private int total = 1;\n\n        public ForumThreadsCollection(\n            ForumChannelViewModel viewModel,\n            DiscordClient client)\n        {\n            this.viewModel = viewModel;\n            this.client = client;\n            this.HasMoreItems = true;\n        }\n\n        public bool HasMoreItems { get; private set; }\n\n        public IAsyncOperation<LoadMoreItemsResult> LoadMoreItemsAsync(uint count)\n        {\n            var dispatcher = Window.Current.Dispatcher;\n            return Task.Run(async () =>\n            {\n                viewModel.IsLoading = true;\n                var toFetch = (int)Math.Min(Math.Min(count, 25), total - fetched);\n                if (toFetch <= 0)\n                {\n                    HasMoreItems = false;\n                    viewModel.IsLoading = false;\n                    return new LoadMoreItemsResult() { Count = 0 };\n                }\n\n                var forum = viewModel.ForumChannel;\n                var search = await client.SearchForumChannelAsync(forum, true, false, toFetch, fetched, []);\n\n                await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\n                {\n                    foreach (var item in search.Threads)\n                    {\n                        var firstMessage = search.FirstMessages.FirstOrDefault(m => m.ChannelId == item.Id);\n                        this.Add(new ForumThreadViewModel(item, firstMessage, viewModel));\n                    }\n\n                    HasMoreItems = search.HasMore;\n                    total = search.TotalResults.Value;\n                    fetched += search.Threads.Count;\n                    viewModel.IsLoading = false;\n                });\n\n                return new LoadMoreItemsResult() { Count = (uint)search.Threads.Count };\n            }).AsAsyncOperation();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Channels/PinsPageViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing CommunityToolkit.Mvvm.Messaging;\nusing DSharpPlus.Entities;\nusing DSharpPlus.EventArgs;\nusing DSharpPlus.Exceptions;\nusing Microsoft.Extensions.Logging;\nusing Unicord.Universal.Extensions;\nusing Unicord.Universal.Models.Messages;\n\nnamespace Unicord.Universal.Models.Channels\n{\n    internal class PinsPageViewModel : ViewModelBase\n    {\n        private bool isLoading;\n        private bool isErrored;\n        private bool isRateLimited;\n\n        private readonly DiscordChannel _channel;\n        private readonly ILogger<PinsPageViewModel> _logger\n            = Logger.GetLogger<PinsPageViewModel>();\n\n        public PinsPageViewModel()\n        {\n\n        }\n\n        public PinsPageViewModel(ChannelViewModel channel)\n            : base(channel)\n        {\n            this._channel = channel.Channel;\n\n            Messages.CollectionChanged += (o, e) =>\n            {\n                if (!IsLoading)\n                    UnsafeInvokePropertyChanged(nameof(NoMessages));\n            };\n\n            WeakReferenceMessenger.Default.Register<PinsPageViewModel, MessageUpdateEventArgs>(this, static (r, m) => r.OnMessageUpdated(m.Event));\n\n            Task.Run(LoadAsync);\n        }\n\n        public ObservableCollection<MessageViewModel> Messages { get; } = [];\n\n        public bool NoMessages\n            => !IsErrored && !IsLoading && !IsRateLimited && Messages.Count == 0;\n\n        public bool IsLoading\n        {\n            get => isLoading;\n            set => OnPropertySet(ref isLoading, value, nameof(IsLoading), nameof(NoMessages));\n        }\n\n        public bool IsRateLimited\n        {\n            get => isRateLimited;\n            set => OnPropertySet(ref isRateLimited, value, nameof(IsRateLimited), nameof(NoMessages));\n        }\n\n        public bool IsErrored\n        {\n            get => isErrored;\n            set => OnPropertySet(ref isErrored, value, nameof(IsErrored), nameof(NoMessages));\n        }\n\n        private async Task LoadAsync()\n        {\n            IsLoading = true;\n            IsRateLimited = false;\n            IsErrored = false;\n            try\n            {\n                var pinnedMessages = await _channel.GetPinnedMessagesAsync();\n                syncContext.Post((o) =>\n                {\n                    foreach (var message in pinnedMessages)\n                    {\n                        Messages.Add(new MessageViewModel(message));\n                    }\n                }, null);\n            }\n            catch (RateLimitException ex)\n            {\n                _logger.LogWarning(ex, \"Rate limited when loading pinned messages for channel {Channel}\", _channel);\n                IsRateLimited = true;\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Failed to load pinned messages for channel {Channel}\", _channel);\n                IsErrored = true;\n            }\n            finally\n            {\n                IsLoading = false;\n            }\n        }\n\n        private void OnMessageUpdated(MessageUpdateEventArgs ev)\n        {\n            if (ev.Channel.Id != _channel.Id)\n                return;\n\n            syncContext.Post((o) =>\n            {\n                var vm = Messages.FirstOrDefault(m => m.Id == ev.Message.Id);\n\n                if (ev.Message.Pinned)\n                {\n                    if (vm == null)\n                        Messages.Add(new MessageViewModel(ev.Message));\n                }\n                else\n                {\n                    if (vm != null)\n                        Messages.Remove(vm);\n                }\n            }, null);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Channels/ReadStateViewModel.cs",
    "content": "﻿using CommunityToolkit.Mvvm.Messaging;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.EventArgs;\r\nusing Unicord.Universal.Extensions;\r\n\r\nnamespace Unicord.Universal.Models.Channels\r\n{\r\n    public class ReadStateViewModel : ViewModelBase\r\n    {\r\n        protected readonly ulong channelId;\r\n        protected readonly ChannelViewModel viewModel;\r\n\r\n        protected DiscordReadState readState;\r\n\r\n        public ReadStateViewModel(ulong channelId, ChannelViewModel channelViewModel = null)\r\n            : base(channelViewModel)\r\n        {\r\n            this.channelId = channelId;\r\n            this.viewModel = channelViewModel ?? new ChannelViewModel(channelId, true, this);\r\n\r\n            if (!discord.ReadStates.TryGetValue(channelId, out readState))\r\n                readState = null;\r\n\r\n            WeakReferenceMessenger.Default.Register<ReadStateViewModel, ChannelUnreadUpdateEventArgs>(this, (r, m) => r.OnChannelUnreadUpdate(m.Event));\r\n            WeakReferenceMessenger.Default.Register<ReadStateViewModel, ReadStateUpdateEventArgs>(this, (r, m) => r.OnReadStateUpdated(m.Event));\r\n        }\r\n\r\n        private void OnChannelUnreadUpdate(ChannelUnreadUpdateEventArgs e)\r\n        {\r\n            if (!e.ReadStates.TryGetValue(channelId, out var newReadState))\r\n                return;\r\n\r\n            readState = newReadState;\r\n            InvokePropertyChanged(nameof(Unread));\r\n            InvokePropertyChanged(nameof(MentionCount));\r\n            InvokePropertyChanged(nameof(LastMessageId));\r\n        }\r\n\r\n        private void OnReadStateUpdated(ReadStateUpdateEventArgs e)\r\n        {\r\n            if (e.ReadState.Id != channelId)\r\n                return;\r\n\r\n            readState = e.ReadState;\r\n            InvokePropertyChanged(nameof(Unread));\r\n            InvokePropertyChanged(nameof(MentionCount));\r\n            InvokePropertyChanged(nameof(LastMessageId));\r\n        }\r\n\r\n        /// <summary>\r\n        /// Is the channel unread according to the read state. <para/>Notably does not take channel mutes into account.\r\n        /// </summary>\r\n        public bool Unread\r\n        {\r\n            get\r\n            {\r\n                // this shit should never happen but apparently it does sometimes, don't question it\r\n                if (readState == null || readState.Id == 0)\r\n                    return false;\r\n\r\n                if (discord == null)\r\n                    return false;\r\n\r\n                if (!discord.TryGetCachedChannel(channelId, out var channel)) \r\n                    return false; // in theory impossible\r\n\r\n                if (channel.Type == ChannelType.Voice || channel.Type == ChannelType.Category)\r\n                    return false;\r\n\r\n                if (channel.Type == ChannelType.Private || channel.Type == ChannelType.Group)\r\n                {\r\n                    return readState.MentionCount > 0;\r\n                }\r\n\r\n                return (readState.MentionCount > 0 || (channel.LastMessageId != 0 && channel.LastMessageId > readState.LastMessageId));\r\n            }\r\n        }\r\n\r\n        public int MentionCount\r\n            => readState?.MentionCount ?? 0;\r\n        public ulong LastMessageId\r\n            => readState?.LastMessageId ?? 0;\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Channels/SearchPageViewModel.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing DSharpPlus.Entities;\nusing Microsoft.Extensions.Logging;\nusing Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml.Data;\n\nnamespace Unicord.Universal.Models.Channels\n{\n    public class SearchPageViewModel : ViewModelBase\n    {\n        private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);\n        private readonly ChannelViewModel _channel;\n        private readonly ILogger<SearchPageViewModel> _logger\n            = Logger.GetLogger<SearchPageViewModel>();\n\n        private int _currentPage = 1;\n        private int _totalPages = 1;\n        private bool _waitingForIndex;\n        private bool _isSearching;\n        private int _totalMessages;\n        private bool _hasSearched;\n\n        public bool IsSearching\n        {\n            get => _isSearching;\n            set => OnPropertySet(ref _isSearching, value, nameof(IsSearching), nameof(NoResults));\n        }\n\n        public bool WaitingForIndex\n        {\n            get => _waitingForIndex;\n            set => OnPropertySet(ref _waitingForIndex, value, nameof(WaitingForIndex), nameof(NoResults));\n        }\n\n        public int TotalMessages\n        {\n            get => _totalMessages;\n            set => OnPropertySet(ref _totalMessages, value, nameof(TotalMessages), nameof(TotalMessagesString), nameof(CanGoBack), nameof(CanGoForward), nameof(NoResults));\n        }\n\n        public bool NoResults =>\n            _hasSearched && !IsSearching && TotalMessages == 0 && !WaitingForIndex;\n\n        public int CurrentPage\n        {\n            get => _currentPage;\n            set => OnPropertySet(ref _currentPage, value, nameof(CurrentPage), nameof(CanGoBack), nameof(CanGoForward));\n        }\n\n        public int TotalPages\n        {\n            get => _totalPages;\n            set => OnPropertySet(ref _totalPages, value, nameof(TotalPages), nameof(CanGoBack), nameof(CanGoForward));\n        }\n\n        public string TotalMessagesString =>\n            TotalMessages.ToString(\"N0\");\n\n        public bool CanGoForward =>\n            CurrentPage < TotalPages;\n\n        public bool CanGoBack =>\n            CurrentPage > 1;\n\n        public CollectionViewSource ViewSource { get; set; }\n\n        public SearchPageViewModel(ChannelViewModel channel)\n        {\n            _channel = channel;\n            ViewSource = new CollectionViewSource { IsSourceGrouped = false };\n            WaitingForIndex = false;\n        }\n\n        public async Task SearchAsync(string content)\n        {\n            await _semaphore.WaitAsync();\n\n            _hasSearched = true;\n            IsSearching = true;\n            ViewSource.Source = Array.Empty<object>();\n\n            try\n            {\n                DiscordSearchResult result = null;\n                if (_channel.Guild != null)\n                    result = await discord.SearchAsync(_channel.Guild.Guild, content, offset: (CurrentPage - 1) * 25);\n                else\n                    result = await discord.SearchAsync(_channel.Channel, content, offset: (CurrentPage - 1) * 25);\n\n                if (!result.IsIndexed)\n                {\n                    WaitingForIndex = true;\n                    TotalMessages = 0;\n                }\n                else\n                {\n                    WaitingForIndex = false;\n                    TotalMessages = result.TotalResults;\n                    TotalPages = (int)Math.Ceiling(result.TotalResults / 25d);\n                    ViewSource.Source = result.Messages\n                                              .Select(v => new MessageViewModel(v[0]))\n                                              .ToList();\n                }\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Failed to load search results\");\n            }\n            finally\n            {\n                _semaphore.Release();\n                IsSearching = false;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/CreateServerModel.cs",
    "content": "﻿using DSharpPlus.Entities;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Windows.Storage;\nusing Windows.UI.Xaml.Media;\n\nnamespace Unicord.Universal.Models\n{\n    public class CreateServerModel : ViewModelBase\n    {\n        private string _name;\n        private DiscordVoiceRegion _region;\n        private ImageSource _icon;\n\n        public CreateServerModel()\n        {\n            Region = Regions?.FirstOrDefault(r => r.IsOptimal);\n        }\n\n        public string Name { get => _name; set => OnPropertySet(ref _name, value); }\n        public DiscordVoiceRegion Region { get => _region; set => OnPropertySet(ref _region, value); }\n        public ImageSource Icon { get => _icon; set => OnPropertySet(ref _icon, value); }\n\n        public StorageFile IconFile { get; set; }\n\n        public IEnumerable<DiscordVoiceRegion> Regions\n            => discord?.VoiceRegions.Values.Where(r => !r.IsDeprecated && !r.IsVIP).OrderBy(r => r.Name);\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/DMChannelsViewModel.cs",
    "content": "﻿using System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing CommunityToolkit.Mvvm.Messaging;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.EventArgs;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models.Channels;\r\n\r\nnamespace Unicord.Universal.Models\r\n{\r\n    public class DMChannelsViewModel : ViewModelBase\r\n    {\r\n        private int _selectedItem = -1;\r\n\r\n        public DMChannelsViewModel() : base(null)\r\n        {\r\n            DMChannels = new ObservableCollection<DmChannelListViewModel>(\r\n                discord.PrivateChannels\r\n                .OrderByDescending(r => r.Value.LastMessageId ?? 0)\r\n                .Select(s => new DmChannelListViewModel(s.Value)));\r\n\r\n            WeakReferenceMessenger.Default.Register<DMChannelsViewModel, DmChannelCreateEventArgs>(this, (r, e) => r.OnDmCreated(e.Event));\r\n            WeakReferenceMessenger.Default.Register<DMChannelsViewModel, DmChannelDeleteEventArgs>(this, (r, e) => r.OnDmDeleted(e.Event));\r\n            WeakReferenceMessenger.Default.Register<DMChannelsViewModel, MessageCreateEventArgs>(this, (r, e) => r.OnMessageCreated(e.Event));\r\n            WeakReferenceMessenger.Default.Register<DMChannelsViewModel, ReadyEventArgs>(this, (r, e) => r.OnReady(e.Event));\r\n        }\r\n\r\n        public ObservableCollection<DmChannelListViewModel> DMChannels { get; set; }\r\n\r\n        public int SelectedIndex { get => _selectedItem; set => OnPropertySet(ref _selectedItem, value); }\r\n        public bool UpdatingIndex { get; set; }\r\n\r\n        private Task OnReady(ReadyEventArgs e)\r\n        {\r\n            syncContext.Post((o) =>\r\n            {\r\n                DMChannels.Clear();\r\n                foreach (var vm in discord.PrivateChannels\r\n                    .OrderByDescending(r => r.Value.LastMessageId ?? 0)\r\n                    .Select(s => new DmChannelListViewModel(s.Value)))\r\n                {\r\n                    DMChannels.Add(vm);\r\n                }\r\n\r\n            }, null);\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnDmCreated(DmChannelCreateEventArgs e)\r\n        {\r\n            syncContext.Post(o => DMChannels.Insert(0, new DmChannelListViewModel(o as DiscordDmChannel)), e.Channel);\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnDmDeleted(DmChannelDeleteEventArgs e)\r\n        {\r\n            syncContext.Post(o => DMChannels.Remove(DMChannels.FirstOrDefault(s => s.Channel == o as DiscordDmChannel)), e.Channel);\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnMessageCreated(MessageCreateEventArgs e)\r\n        {\r\n            if (e.Channel is DiscordDmChannel dm)\r\n            {\r\n                var current = DMChannels.ElementAtOrDefault(SelectedIndex);\r\n                var index = DMChannels.FindIndex(s => s.Channel == dm);\r\n                if (index == 0)\r\n                    return Task.CompletedTask;\r\n\r\n                syncContext.Post(o =>\r\n                {\r\n                    // BUGBUG: this is very bad\r\n                    UpdatingIndex = true;\r\n                    if (index > 0)\r\n                    {\r\n                        DMChannels.Move(index, 0);\r\n                    }\r\n                    else if (index < 0)\r\n                    {\r\n                        DMChannels.Insert(0, new DmChannelListViewModel(dm));\r\n                    }\r\n\r\n                    SelectedIndex = current == null ? -1 : DMChannels.IndexOf(current);\r\n                    UpdatingIndex = false;\r\n                }, null);\r\n            }\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/DiscordPageViewModel.cs",
    "content": "﻿using System.Collections.Frozen;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing CommunityToolkit.Mvvm.Messaging;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.EventArgs;\r\nusing Microsoft.Toolkit.Uwp.Helpers;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Unicord.Universal.Models.Guild;\r\nusing Unicord.Universal.Models.Voice;\r\nusing Unicord.Universal.Services;\r\nusing Windows.ApplicationModel;\r\n\r\nnamespace Unicord.Universal.Models\r\n{\r\n    // TODO: Move functionality from DiscordPage.xaml.cs into this class\r\n    class DiscordPageViewModel : ViewModelBase\r\n    {\r\n        private VoiceConnectionModel _voiceModel;\r\n        private DiscordUser _currentUser;\r\n        private DiscordChannel _currentChannel;\r\n        private ChannelViewModel _selectedDM;\r\n        private GuildListViewModel _selectedGuild;\r\n        private bool _isFriendsSelected;\r\n        private bool _isRightPaneOpen;\r\n\r\n        public DiscordPageViewModel()\r\n        {\r\n            Guilds = [];\r\n            UnreadDMs = [];\r\n\r\n            WeakReferenceMessenger.Default.Register<DiscordPageViewModel, ReadyEventArgs>(this, (t, v) => t.OnReady(v.Event));\r\n            WeakReferenceMessenger.Default.Register<DiscordPageViewModel, GuildCreateEventArgs>(this, (t, v) => t.OnGuildCreated(v.Event));\r\n            WeakReferenceMessenger.Default.Register<DiscordPageViewModel, GuildDeleteEventArgs>(this, (t, v) => t.OnGuildDeleted(v.Event));\r\n            WeakReferenceMessenger.Default.Register<DiscordPageViewModel, MessageCreateEventArgs>(this, (t, v) => t.OnMessageCreated(v.Event));\r\n            WeakReferenceMessenger.Default.Register<DiscordPageViewModel, MessageAcknowledgeEventArgs>(this, (t, v) => t.OnMessageAcknowledged(v.Event));\r\n            WeakReferenceMessenger.Default.Register<DiscordPageViewModel, UserSettingsUpdateEventArgs>(this, (t, v) => t.OnUserSettingsUpdated(v.Event));\r\n\r\n            Load();\r\n        }\r\n\r\n        private void Load()\r\n        {\r\n            if (discord == null) return;\r\n\r\n            Guilds.Clear();\r\n            UnreadDMs.Clear();\r\n            CurrentUser = discord.CurrentUser;\r\n\r\n            var guilds = discord.Guilds.ToFrozenDictionary();\r\n            var dms = discord.PrivateChannels.ToFrozenDictionary();\r\n\r\n            var folders = discord.UserSettings?.GuildFolders;\r\n            var ids = new HashSet<ulong>();\r\n            if (folders != null)\r\n            {\r\n                foreach (var folder in folders)\r\n                {\r\n                    if (folder.Id == null || folder.Id == 0)\r\n                    {\r\n                        foreach (var id in folder.GuildIds)\r\n                        {\r\n                            if (!guilds.TryGetValue(id, out var server))\r\n                                continue;\r\n\r\n                            Guilds.Add(new GuildListViewModel(server));\r\n                            ids.Add(id);\r\n                        }\r\n\r\n                        continue;\r\n                    }\r\n\r\n                    var folderItems = folder.GuildIds.Select(id => guilds.TryGetValue(id, out var server) ? server : null)\r\n                                                     .Where(g => g != null);\r\n\r\n                    foreach (var item in folderItems)\r\n                        ids.Add(item.Id);\r\n\r\n                    Guilds.Add(new GuildListFolderViewModel(folder, folderItems));\r\n                }\r\n            }\r\n\r\n            foreach (var (id, guild) in guilds)\r\n            {\r\n                if (!ids.Contains(id))\r\n                    Guilds.Insert(0, new GuildListViewModel(guild));\r\n            }\r\n\r\n            foreach (var (id, dm) in dms.Where(d => d.Value.ReadState?.MentionCount > 0)\r\n                                        .OrderByDescending(d => d.Value.LastMessageId))\r\n            {\r\n                UnreadDMs.Add(new ChannelViewModel(dm.Id, parent: this));\r\n            }\r\n        }\r\n\r\n        public bool Navigating { get; internal set; }\r\n        public ObservableCollection<IGuildListViewModel> Guilds { get; }\r\n        public ObservableCollection<ChannelViewModel> UnreadDMs { get; }\r\n\r\n        public DiscordUser CurrentUser { get => _currentUser; set => OnPropertySet(ref _currentUser, value); }\r\n        public VoiceConnectionModel VoiceModel { get => _voiceModel; set => OnPropertySet(ref _voiceModel, value); }\r\n\r\n        public DiscordChannel CurrentChannel { get => _currentChannel; set => OnPropertySet(ref _currentChannel, value); }\r\n        public ChannelViewModel SelectedDM { get => _selectedDM; set => OnPropertySet(ref _selectedDM, value); }\r\n        public GuildListViewModel SelectedGuild { get => _selectedGuild; set => OnPropertySet(ref _selectedGuild, value); }\r\n        public bool IsFriendsSelected { get => _isFriendsSelected; set => OnPropertySet(ref _isFriendsSelected, value); }\r\n        public bool IsRightPaneOpen { get => _isRightPaneOpen; set => OnPropertySet(ref _isRightPaneOpen, value); }\r\n        public ChannelViewModel PreviousDM { get; set; }\r\n\r\n        public string DisplayVersion\r\n        {\r\n            get\r\n            {\r\n                var gitSha = \"\";\r\n                var versionedAssembly = typeof(DiscordPageViewModel).Assembly;\r\n                var attribute = versionedAssembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();\r\n                var idx = -1;\r\n                if (attribute != null && (idx = attribute.InformationalVersion.IndexOf('+')) != -1)\r\n                {\r\n                    gitSha = \"-\" + attribute.InformationalVersion.Substring(idx + 1, 7);\r\n                }\r\n\r\n                return $\"{Package.Current.Id.Version.ToFormattedString(3)}{gitSha}\";\r\n            }\r\n        }\r\n\r\n        public GuildListViewModel ViewModelFromGuild(DiscordGuild guild)\r\n        {\r\n            foreach (var guildVM in Guilds)\r\n            {\r\n                if (guildVM.TryGetModelForGuild(guild, out var model))\r\n                    return model;\r\n            }\r\n\r\n            return null;\r\n        }\r\n\r\n        private Task OnReady(ReadyEventArgs e)\r\n        {\r\n            discord = DiscordManager.Discord;\r\n            syncContext.Post((o) => Load(), null);\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnMessageCreated(MessageCreateEventArgs e)\r\n        {\r\n            if (e.Channel is DiscordDmChannel dm)\r\n            {\r\n                UpdateReadState(dm);\r\n            }\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnMessageAcknowledged(MessageAcknowledgeEventArgs e)\r\n        {\r\n            if (e.Channel is DiscordDmChannel dm)\r\n            {\r\n                UpdateReadState(dm);\r\n            }\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private void UpdateReadState(DiscordDmChannel channel)\r\n        {\r\n            var shouldShow = (channel.ReadState?.MentionCount ?? 0) > 0;\r\n            var dm = UnreadDMs.FirstOrDefault(d => channel.Id == d.Channel.Id);\r\n            syncContext.Post((o) =>\r\n            {\r\n                if (shouldShow)\r\n                {\r\n                    if (dm == null)\r\n                    {\r\n                        dm = new ChannelViewModel(channel.Id, false, this);\r\n                        UnreadDMs.Insert(0, dm);\r\n                    }\r\n                    else\r\n                    {\r\n                        UnreadDMs.Move(UnreadDMs.IndexOf(dm), 0);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    UnreadDMs.Remove(dm);\r\n                }\r\n            }, null);\r\n        }\r\n\r\n        private Task OnGuildCreated(GuildCreateEventArgs e)\r\n        {\r\n            var vm = this.ViewModelFromGuild(e.Guild);\r\n            if (vm == null)\r\n            {\r\n                syncContext.Post(d => Guilds.Insert(0, new GuildListViewModel(e.Guild)), null);\r\n            }\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnGuildDeleted(GuildDeleteEventArgs e)\r\n        {\r\n            var vm = this.ViewModelFromGuild(e.Guild);\r\n            if (vm == null)\r\n            {\r\n                syncContext.Post(d =>\r\n                {\r\n                    Guilds.Remove(vm);\r\n                    foreach (var guildFolder in Guilds.OfType<GuildListFolderViewModel>())\r\n                        guildFolder.Children.Remove(vm);\r\n                }, null);\r\n            }\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnUserSettingsUpdated(UserSettingsUpdateEventArgs e)\r\n        {\r\n            //var guildPositions = DiscordManager.Discord.UserSettings?.GuildPositions;\r\n            //if (guildPositions == null || Guilds.Select(g => g.Id).SequenceEqual(guildPositions))\r\n            //    return Task.CompletedTask;\r\n\r\n            //for (var i = 0; i < guildPositions.Count; i++)\r\n            //{\r\n            //    var id = guildPositions[i];\r\n            //    var guild = Guilds[i];\r\n            //    if (id != guild.Id)\r\n            //    {\r\n            //        _synchronisation.Post((o) => Guilds.Move(Guilds.IndexOf(Guilds.First(g => g.Id == id)), i), null);\r\n            //    }\r\n            //}\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Emoji/EmojiViewModel.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Globalization;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing NeoSmart.Unicode;\r\nusing Unicord.Universal.Services;\r\n\r\nnamespace Unicord.Universal.Models.Emoji\r\n{\r\n    public readonly struct EmojiViewModel\r\n    {\r\n        private readonly DiscordEmoji _emoji;\r\n\r\n        public EmojiViewModel(DiscordComponentEmoji emoji) : this()\r\n        {\r\n            if (emoji == null)\r\n                return;\r\n\r\n            if (emoji.Id == 0)\r\n            {\r\n                Name = emoji.Name;\r\n                Unicode = emoji.Name;\r\n            }\r\n            else if (DiscordEmoji.TryFromGuildEmote(DiscordManager.Discord, emoji.Id, out var discordEmoji))\r\n            {\r\n                _emoji = discordEmoji;\r\n                Name = discordEmoji.Name;\r\n                Url = discordEmoji.Url + \"?size=32\";\r\n                IsValid = true;\r\n            }\r\n            else\r\n            {\r\n                Name = emoji.Name;\r\n                Url = $\"https://cdn.discordapp.com/emojis/{emoji.Id.ToString(CultureInfo.InvariantCulture)}.png?size=32\";\r\n            }\r\n\r\n            IsValid = true;\r\n        }\r\n\r\n        public EmojiViewModel(DiscordEmoji emoji)\r\n        {\r\n            //Emoji = emoji;\r\n            _emoji = emoji;\r\n            Name = emoji.Id != 0 ? emoji.Name : emoji.GetDiscordName();\r\n            Unicode = emoji.Id == 0 ? emoji.Name : null;\r\n            IsAvailable = emoji.IsAvailable;\r\n            Url = emoji.Id != 0 ? emoji.Url + \"?size=32\" : null;\r\n            IsValid = true;\r\n        }\r\n\r\n        public EmojiViewModel(SingleEmoji emoji)\r\n        {\r\n            _emoji = null;\r\n            Unicode = emoji.Sequence.AsString;\r\n\r\n            if (DiscordEmoji.DiscordNameLookup.TryGetValue(Unicode, out var name))\r\n                Name = $\":{name}:\";\r\n            else\r\n                Name = \"\";\r\n\r\n            IsAvailable = true;\r\n            IsValid = true;\r\n            Url = null;\r\n        }\r\n\r\n        public EmojiViewModel(ulong id, string text, bool isAnimated) : this()\r\n        {\r\n            Name = text;\r\n            Unicode = \"\";\r\n            Url = isAnimated\r\n                    ? $\"https://cdn.discordapp.com/emojis/{id.ToString(CultureInfo.InvariantCulture)}.gif?size=32\"\r\n                    : $\"https://cdn.discordapp.com/emojis/{id.ToString(CultureInfo.InvariantCulture)}.png?size=32\";\r\n            IsAvailable = true;\r\n            IsValid = true;\r\n        }\r\n\r\n        public readonly string Name { get; }\r\n        public readonly string Unicode { get; }\r\n        public readonly string Url { get; }\r\n        public readonly bool IsAvailable { get; }\r\n        public readonly bool IsValid { get; }\r\n        public readonly double Opacity\r\n            => this.IsAvailable ? 1.0 : 0.5;\r\n\r\n        public readonly DiscordEmoji? DiscordEmoji =>\r\n            _emoji ?? DiscordEmoji.FromUnicode(Unicode);\r\n\r\n        public override string ToString()\r\n        {\r\n            return _emoji != null ? Formatter.Emoji(_emoji) : Unicode;\r\n        }\r\n\r\n        public override bool Equals(object obj)\r\n        {\r\n            return obj is EmojiViewModel model && model == this;\r\n        }\r\n\r\n        public override int GetHashCode()\r\n        {\r\n            int hashCode = -330246126;\r\n            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Name);\r\n            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Unicode);\r\n            hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(Url);\r\n            hashCode = hashCode * -1521134295 + IsAvailable.GetHashCode();\r\n            hashCode = hashCode * -1521134295 + Opacity.GetHashCode();\r\n            return hashCode;\r\n        }\r\n\r\n        public static bool operator ==(EmojiViewModel lhs, EmojiViewModel rhs)\r\n        {\r\n            return lhs.Name == rhs.Name &&\r\n                   lhs.Unicode == rhs.Unicode &&\r\n                   lhs.Url == rhs.Url &&\r\n                   lhs.IsAvailable == rhs.IsAvailable &&\r\n                   lhs.Opacity == rhs.Opacity;\r\n        }\r\n\r\n        public static bool operator !=(EmojiViewModel lhs, EmojiViewModel rhs)\r\n        {\r\n            return !(lhs == rhs);\r\n        }\r\n\r\n        public static bool operator ==(EmojiViewModel lhs, DiscordEmoji rhs)\r\n        {\r\n            return lhs._emoji != null && lhs._emoji == rhs;\r\n        }\r\n\r\n        public static bool operator !=(EmojiViewModel lhs, DiscordEmoji rhs)\r\n        {\r\n            return !(lhs == rhs);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/FileUploadModel.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.Input;\nusing Microsoft.AppCenter.Analytics;\nusing Unicord.Universal.Pages;\nusing Unicord.Universal.Services;\nusing Windows.ApplicationModel.DataTransfer;\nusing Windows.Foundation.Collections;\nusing Windows.Media.Editing;\nusing Windows.Storage;\nusing Windows.Storage.FileProperties;\nusing Windows.Storage.Streams;\nusing Windows.System;\nusing Windows.UI.Xaml.Media.Imaging;\n\nnamespace Unicord.Universal.Models\n{\n    public class FileUploadModel : ViewModelBase, IDisposable\n    {\n        public ChannelPageViewModel Parent { get; }\n\n        public IStorageFile StorageFile { get; set; }\n        public BitmapImage Thumbnail { get; set; }\n        public string FileName { get; set; }\n        public ulong Length { get; set; }\n\n        public bool IsTemporary { get; set; }\n        public bool CanCrop { get; set; }\n        public bool CanEdit { get; set; }\n        public bool TranscodeFailed { get; set; }\n\n        public bool Spoiler { get; set; } = false;\n        public string DisplayLength => Tools.ToFileSizeString(Length);\n\n        internal FileUploadModel(ChannelPageViewModel viewModel)\n        {\n            Parent = viewModel;\n            EditCommand = new AsyncRelayCommand(EditAsync);\n            CropCommand = new AsyncRelayCommand(CropAsync);\n        }\n\n        public ICommand EditCommand { get; }\n        public ICommand CropCommand { get; }\n\n        public static async Task<FileUploadModel> FromStorageFileAsync(ChannelPageViewModel viewModel, IStorageFile file, BasicProperties prop = null, bool isTemporary = false, bool transcodeFailed = false)\n        {\n            Analytics.TrackEvent(\"FileUploadModel_CreateFromStorageFile\");\n\n            var model = new FileUploadModel(viewModel);\n            await model.UpdateFromStorageFileAsync(file, prop, isTemporary, transcodeFailed);\n            return model;\n        }\n\n        public async Task UpdateFromStorageFileAsync(IStorageFile file, BasicProperties prop = null, bool isTemporary = false, bool transcodeFailed = false)\n        {\n            if (file is IStorageFilePropertiesWithAvailability availability && !availability.IsAvailable)\n                throw new InvalidOperationException(\"The selected file is unavailable.\");\n            \n            if (IsTemporary && StorageFile != null)\n            {\n                await StorageFile.DeleteAsync();\n            }\n\n            StorageFile = file;\n            FileName = file.Name;\n            IsTemporary = isTemporary;\n            TranscodeFailed = transcodeFailed;\n\n            prop = prop ?? await file.GetBasicPropertiesAsync();\n            Length = prop.Size;\n\n            if (file.ContentType.StartsWith(\"video\"))\n            {\n                CanEdit = true;\n            }\n\n            if (file.ContentType.StartsWith(\"image\"))\n            {\n                CanCrop = true;\n            }\n\n            if (file is IStorageItemProperties props && (Thumbnail?.Dispatcher.HasThreadAccess ?? true))\n            {\n                using var thumbStream = await props.GetThumbnailAsync(ThumbnailMode.SingleItem, 256);\n                await (Thumbnail ??= new BitmapImage()).SetSourceAsync(thumbStream);\n            }\n        }\n\n        internal async Task<IInputStream> GetStreamAsync()\n        {\n            if (StorageFile != null)\n                return await StorageFile.OpenReadAsync();\n            return null;\n        }\n\n        private async Task EditAsync()\n        {\n            var newModel = new EditedFileUploadModel(this, Parent);\n            Parent.FileUploads.Remove(this);\n            Parent.FileUploads.Add(newModel);\n\n            await OverlayService.GetForCurrentView()\n                .ShowOverlayAsync<VideoEditor>(newModel);\n        }\n\n        private async Task CropAsync()\n        {\n            var newFile = await StorageFile.CopyAsync(ApplicationData.Current.LocalFolder, FileName, NameCollisionOption.GenerateUniqueName);\n            var props = await newFile.Properties.GetImagePropertiesAsync();\n\n            var sourceToken = SharedStorageAccessManager.AddFile(StorageFile);\n            var destinationToken = SharedStorageAccessManager.AddFile(newFile);\n\n            var options = new LauncherOptions { TargetApplicationPackageFamilyName = \"Microsoft.Windows.Photos_8wekyb3d8bbwe\" };\n\n            var parameters = new ValueSet\n            {\n                { \"EllipticalCrop\", false },\n                { \"ShowCamera\", false },\n                { \"InputToken\", sourceToken },\n                { \"DestinationToken\", destinationToken }\n            };\n\n            var result = await Launcher.LaunchUriForResultsAsync(new Uri(\"microsoft.windows.photos.crop:\"), options, parameters);\n            if (result.Status != LaunchUriStatus.Success)\n            {\n                // TODO: Dialog\n                return;\n            }\n\n            await UpdateFromStorageFileAsync(newFile);\n        }\n\n        public virtual void Dispose()\n        {\n\n        }\n    }\n\n    public class EditedFileUploadModel : FileUploadModel, IDisposable\n    {\n        public EditedFileUploadModel(FileUploadModel original, ChannelPageViewModel viewModel)\n            : base(viewModel)\n        {\n            StorageFile = original.StorageFile;\n            Thumbnail = original.Thumbnail;\n            FileName = original.FileName;\n            Length = original.Length;\n            IsTemporary = original.IsTemporary;\n            Spoiler = original.Spoiler;\n            CanEdit = original.CanEdit;\n            CanCrop = original.CanCrop;\n        }\n\n        public SynchronizationContext SyncContext\n            => syncContext;\n\n        public MediaComposition Composition { get; set; }\n        public MediaClip Clip { get; set; }\n        public StorageFile CompositionFile { get; internal set; }\n\n        public override void Dispose()\n        {\n            Composition = null;\n            Clip = null;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/FriendsPageViewModel.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing CommunityToolkit.Mvvm.Messaging;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.Enums;\r\nusing DSharpPlus.EventArgs;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models.Relationships;\r\nusing Unicord.Universal.Services;\r\n\r\nnamespace Unicord.Universal.Models\r\n{\r\n    public class FriendsPageViewModel : ViewModelBase\r\n    {\r\n        public FriendsPageViewModel()\r\n        {\r\n            All = [];\r\n            Online = [];\r\n            Blocked = [];\r\n            Pending = [];\r\n\r\n            Load();\r\n            WeakReferenceMessenger.Default.Register<FriendsPageViewModel, ReadyEventArgs>(this, (t, v) => t.OnReady(v.Event));\r\n            WeakReferenceMessenger.Default.Register<FriendsPageViewModel, RelationshipAddEventArgs>(this, (t, v) => t.OnRelationshipAdded(v.Event));\r\n            WeakReferenceMessenger.Default.Register<FriendsPageViewModel, RelationshipRemoveEventArgs>(this, (t, v) => t.OnRelationshipRemoved(v.Event));\r\n            WeakReferenceMessenger.Default.Register<FriendsPageViewModel, PresenceUpdateEventArgs>(this, (t, v) => t.OnPresenceUpdated(v.Event));\r\n        }\r\n\r\n        private void Load()\r\n        {\r\n            if (discord == null)\r\n                return;\r\n\r\n            All.Clear();\r\n            Online.Clear();\r\n            Blocked.Clear();\r\n            Pending.Clear();\r\n\r\n            foreach (var (id, rel) in discord.Relationships.OrderBy(r => r.Value.User?.DisplayName))\r\n            {\r\n                var vm = new RelationshipViewModel(rel, this);\r\n                switch (rel.RelationshipType)\r\n                {\r\n                    case DiscordRelationshipType.Friend:\r\n                        All.Add(vm);\r\n                        if (vm.User.Presence != null && vm.User.Presence.Status != UserStatus.Offline)\r\n                            Online.Add(vm);\r\n                        break;\r\n                    case DiscordRelationshipType.Blocked:\r\n                        Blocked.Add(vm);\r\n                        break;\r\n                    case DiscordRelationshipType.IncomingRequest:\r\n                    case DiscordRelationshipType.OutgoingRequest:\r\n                        Pending.Add(vm);\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n        }\r\n\r\n        public DiscordUser CurrentUser => discord.CurrentUser;\r\n        public ObservableCollection<RelationshipViewModel> All { get; private set; }\r\n        public ObservableCollection<RelationshipViewModel> Online { get; private set; }\r\n        public ObservableCollection<RelationshipViewModel> Blocked { get; private set; }\r\n        public ObservableCollection<RelationshipViewModel> Pending { get; private set; }\r\n\r\n        private void SortRelationship(DiscordRelationship rel, bool skipAll = false)\r\n        {\r\n            RemoveRelationship(rel, skipAll);\r\n\r\n            var viewModel = new RelationshipViewModel(rel, this);\r\n            switch (viewModel.Type)\r\n            {\r\n                case DiscordRelationshipType.Friend:\r\n                    if (!skipAll)\r\n                    {\r\n                        var i = All.BinarySearch(viewModel);\r\n                        if (i < 0)\r\n                            i = ~i;\r\n\r\n                        i = Math.Min(i, All.Count - 1);\r\n                        All.Insert(i, viewModel);\r\n                    }\r\n\r\n                    if (viewModel.User.Presence != null && viewModel.User.Presence.Status != UserStatus.Offline)\r\n                    {\r\n                        var i = Online.BinarySearch(viewModel);\r\n                        if (i < 0)\r\n                            i = ~i;\r\n\r\n                        i = Math.Min(i, Online.Count);\r\n                        Online.Insert(i, viewModel);\r\n                    }\r\n                    break;\r\n                case DiscordRelationshipType.Blocked:\r\n                    Blocked.Add(viewModel);\r\n                    break;\r\n                case DiscordRelationshipType.IncomingRequest:\r\n                case DiscordRelationshipType.OutgoingRequest:\r\n                    Pending.Add(viewModel);\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n        }\r\n\r\n        private void RemoveRelationship(DiscordRelationship rel, bool skipAll = false)\r\n        {\r\n            RemoveRelationship(All, rel);\r\n            RemoveRelationship(Online, rel);\r\n            RemoveRelationship(Pending, rel);\r\n            RemoveRelationship(Blocked, rel);\r\n        }\r\n\r\n        private void RemoveRelationship(ICollection<RelationshipViewModel> collection, DiscordRelationship rel)\r\n        {\r\n            var old = collection.FirstOrDefault(r => rel.Id == r.Id);\r\n            if (old != null)\r\n                collection.Remove(old);\r\n        }\r\n\r\n        private Task OnReady(ReadyEventArgs e)\r\n        {\r\n            syncContext.Post((o) =>\r\n            {\r\n                discord = DiscordManager.Discord;\r\n                Load();\r\n            }, null);\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnPresenceUpdated(PresenceUpdateEventArgs e)\r\n        {\r\n            if (e.User != null && e.PresenceBefore?.Status != e.Status)\r\n            {\r\n                if (discord.Relationships.TryGetValue(e.User.Id, out var rel) &&\r\n                    rel.RelationshipType == DiscordRelationshipType.Friend)\r\n                {\r\n                    syncContext.Post(_ => SortRelationship(rel, true), null);\r\n                }\r\n            }\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnRelationshipAdded(RelationshipAddEventArgs e)\r\n        {\r\n            syncContext.Post(_ => SortRelationship(e.Relationship), null);\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnRelationshipRemoved(RelationshipRemoveEventArgs e)\r\n        {\r\n            syncContext.Post(_ => RemoveRelationship(e.Relationship), null);\r\n            return Task.CompletedTask;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Guild/GuildChannelListViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing CommunityToolkit.Mvvm.Messaging;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing DSharpPlus.EventArgs;\nusing Unicord.Universal.Extensions;\nusing Unicord.Universal.Models.Channels;\nusing Unicord.Universal.Services;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Models.Guild\n{\n    public class GuildChannelListViewModel : GuildViewModel\n    {\n        private bool _canEdit;\n\n        public GuildChannelListViewModel(DiscordGuild guild)\n            : base(guild.Id)\n        {\n            Channels = [];\n            InitialiseLists();\n\n            WeakReferenceMessenger.Default.Register<GuildChannelListViewModel, ReadyEventArgs>(this, (t, e) => t.OnReady(e.Event));\n        }\n\n        public string HeaderImage => Guild.GetBannerUrl();\n        public ObservableCollection<ChannelListViewModel> Channels { get; set; }\n        public ListViewReorderMode ReorderMode => CanEdit ? ListViewReorderMode.Enabled : ListViewReorderMode.Disabled;\n\n        public bool CanEdit\n        {\n            get => _canEdit;\n            set\n            {\n                OnPropertySet(ref _canEdit, value);\n                InvokePropertyChanged(nameof(ReorderMode));\n            }\n        }\n\n        private Task OnReady(ReadyEventArgs e)\n        {\n            syncContext.Post(o => InitialiseLists(), null);\n            return Task.CompletedTask;\n        }\n\n        /// <summary>\n        /// Initially populates the server list\n        /// </summary>\n        private void InitialiseLists()\n        {\n            Channels.Clear();\n\n            var currentMember = Guild.CurrentMember;\n            Debug.Assert(currentMember != null);\n\n            var permissions = currentMember.PermissionsIn(null);\n            CanEdit = permissions.HasPermission(Permissions.ManageChannels);\n\n            var channels = Guild.Channels;\n            static bool FilterChannels(DiscordChannel channel, DiscordMember currentMember)\n            {\n                if (currentMember.IsOwner)\n                    return true;\n\n                return channel.IsCategory ?\n                    channel.Children.Any(x => x.PermissionsFor(currentMember).HasPermission(Permissions.AccessChannels)) :\n                    channel.PermissionsFor(currentMember).HasPermission(Permissions.AccessChannels);\n            }\n\n            static bool FilterThreads(DiscordThreadChannel channel)\n            {\n                var currentUserId = DiscordManager.Discord.CurrentUser.Id;\n                return (channel.CurrentMember != null || \n                        channel.CreatorId == currentUserId ||\n                        (channel.MemberIdsPreview != null && channel.MemberIdsPreview.Contains(currentUserId))) \n                    && !(channel.ThreadMetadata?.IsArchived ?? true);\n            }\n\n            // Use new discord channel category behaviour (new as of 2017 KEKW)\n            var orderedChannels = channels.Select(t => t.Value)\n                .Where(c => c.Type != ChannelType.Category)\n                .Where(c => FilterChannels(c, currentMember))\n                .OrderBy(c => c.Type == ChannelType.Voice)\n                .ThenBy(c => c.Position)\n                .GroupBy(g => g.Parent)\n                .OrderBy(g => g.Key?.Position)\n                .SelectMany(g => g.Key != null ? g.Prepend(g.Key) : g)\n                .SelectMany<DiscordChannel, DiscordChannel>(c => [c, .. c.Threads.Where(FilterThreads).Cast<DiscordChannel>()])\n                .Select(c => new ChannelListViewModel(c, this));\n\n            foreach (var channel in orderedChannels)\n                Channels.Add(channel);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Guild/GuildListFolderViewModel.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing DSharpPlus.Entities;\r\n\r\nnamespace Unicord.Universal.Models.Guild\r\n{\r\n    internal class GuildListFolderViewModel : ViewModelBase, IGuildListViewModel\r\n    {\r\n        public DiscordGuildFolder _folder;\r\n        private bool _isExpanded;\r\n\r\n        public GuildListFolderViewModel(DiscordGuildFolder folder, IEnumerable<DiscordGuild> guilds)\r\n            : base(null)\r\n        {\r\n            _folder = folder;\r\n            Children = new ObservableCollection<GuildListViewModel>(guilds.Select(g => new GuildListViewModel(g, this)));\r\n        }\r\n\r\n        public string Name => _folder.Name;\r\n\r\n        public DiscordColor Color => _folder.Color ?? default;\r\n\r\n        public bool Unread => Children.Any(g => g.Unread);\r\n\r\n        public int MentionCount\r\n        {\r\n            get\r\n            {\r\n                var v = 0;\r\n                foreach (var child in Children)\r\n                {\r\n                    if (child.Muted) continue;\r\n\r\n                    var count = child.MentionCount;\r\n                    if (count != -1)\r\n                        v += count;\r\n                }\r\n\r\n                return v == 0 ? -1 : v;\r\n            }\r\n        }\r\n\r\n        public bool IsExpanded { get => _isExpanded; set => OnPropertySet(ref _isExpanded, value); }\r\n\r\n        public ObservableCollection<GuildListViewModel> Children { get; set; }\r\n\r\n        public string Icon1 => Children.ElementAtOrDefault(0)?.IconUrl;\r\n        public string Icon2 => Children.ElementAtOrDefault(1)?.IconUrl;\r\n        public string Icon3 => Children.ElementAtOrDefault(2)?.IconUrl;\r\n        public string Icon4 => Children.ElementAtOrDefault(3)?.IconUrl;\r\n\r\n        public bool TryGetModelForGuild(DiscordGuild guild, out GuildListViewModel model)\r\n        {\r\n            foreach (var child in Children)\r\n            {\r\n                if (child.TryGetModelForGuild(guild, out model))\r\n                    return true;\r\n            }\r\n\r\n            model = null;\r\n            return false;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Guild/GuildListViewModel.cs",
    "content": "﻿using DSharpPlus.Entities;\r\nusing DSharpPlus.EventArgs;\r\n\r\nnamespace Unicord.Universal.Models.Guild\r\n{\r\n    internal class GuildListViewModel : GuildViewModel, IGuildListViewModel\r\n    {\r\n        private GuildListFolderViewModel _parent;\r\n        private bool _isSelected;\r\n\r\n        public GuildListViewModel(DiscordGuild guild, GuildListFolderViewModel parent = null) \r\n            : base(guild.Id)\r\n        {\r\n            _parent = parent;\r\n        }\r\n\r\n        public bool IsSelected\r\n        {\r\n            get => _isSelected;\r\n            set => OnPropertySet(ref _isSelected, value);\r\n        }\r\n\r\n        public int MentionCount\r\n        {\r\n            get\r\n            {\r\n                if (Muted)\r\n                    return -1;\r\n\r\n                var count = 0;\r\n                foreach (var channel in AccessibleChannels)\r\n                {\r\n                    if (channel.Muted)\r\n                        continue;\r\n\r\n                    if (discord.ReadStates.TryGetValue(channel.Id, out var rs))\r\n                        count += rs.MentionCount;\r\n                }\r\n\r\n                return count == 0 ? -1 : count;\r\n            }\r\n        }\r\n\r\n        public bool TryGetModelForGuild(DiscordGuild guild, out GuildListViewModel model)\r\n        {\r\n            if (Guild == guild)\r\n            {\r\n                model = this;\r\n                return true;\r\n            }\r\n\r\n            model = null;\r\n            return false;\r\n        }\r\n\r\n        protected override void OnReadStateUpdatedCore(ReadStateUpdateEventArgs e)\r\n        {\r\n            InvokePropertyChanged(nameof(MentionCount));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Guild/GuildViewModel.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Input;\r\nusing CommunityToolkit.Mvvm.Messaging;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.EventArgs;\r\nusing Unicord.Universal.Commands.Generic;\r\nusing Unicord.Universal.Commands.Guild;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Unicord.Universal.Models.User;\r\nusing Windows.UI.Xaml.Media;\r\nusing Windows.UI.Xaml.Media.Imaging;\r\n\r\nnamespace Unicord.Universal.Models.Guild\r\n{\r\n    public class GuildViewModel : ViewModelBase, ISnowflake\r\n    {\r\n        private readonly ulong _guildId;\r\n        private Dictionary<ulong, ChannelViewModel> _accessibleChannels;\r\n\r\n        public GuildViewModel(ulong guildId, ViewModelBase parent = null)\r\n            : base(parent)\r\n        {\r\n            _guildId = guildId;\r\n\r\n            CurrentMember = new UserViewModel(discord.CurrentUser.Id, guildId, this);\r\n\r\n            WeakReferenceMessenger.Default.Register<GuildViewModel, ChannelUnreadUpdateEventArgs>(this, (r, m) => r.OnChannelUnreadUpdate(m.Event));\r\n            WeakReferenceMessenger.Default.Register<GuildViewModel, ReadStateUpdateEventArgs>(this, (r, m) => r.OnReadStateUpdated(m.Event));\r\n\r\n            AcknowledgeCommand = new AcknowledgeGuildCommand(this);\r\n            ToggleMuteCommand = new MuteGuildCommand(this);\r\n            CopyUrlCommand = new CopyUrlCommand(this);\r\n            CopyIdCommand = new CopyIdCommand(this);\r\n        }\r\n\r\n        public ulong Id\r\n            => _guildId;\r\n\r\n        public DiscordGuild Guild\r\n            => discord.TryGetCachedGuild(Id, out var guild) ? guild : throw new InvalidOperationException();\r\n\r\n        public UserViewModel CurrentMember { get; }\r\n\r\n        public string Name\r\n            => Guild.Name;\r\n\r\n        public string IconUrl\r\n            => Guild.GetIconUrl(64);\r\n\r\n        public ImageSource Icon\r\n            => IconUrl != null ? new BitmapImage(new Uri(IconUrl)) : null;\r\n\r\n        public bool Muted\r\n            => Guild.IsMuted();\r\n\r\n        public bool Unread\r\n            => !Muted && AccessibleChannels.Any(r => !r.NotificationMuted && r.Unread);\r\n\r\n        internal IEnumerable<ChannelViewModel> AccessibleChannels\r\n        {\r\n            get\r\n            {\r\n                if (_accessibleChannels == null)\r\n                    PopulateAccessibleChannels();\r\n\r\n                return _accessibleChannels.Values;\r\n            }\r\n        }\r\n\r\n        public ICommand AcknowledgeCommand { get; }\r\n        public ICommand ToggleMuteCommand { get; }\r\n        public ICommand EditGuildCommand { get; }\r\n        public ICommand LeaveServerCommand { get; }\r\n        public ICommand CopyUrlCommand { get; }\r\n        public ICommand CopyIdCommand { get; }\r\n\r\n        private Task OnReadStateUpdated(ReadStateUpdateEventArgs e)\r\n        {\r\n            if (Guild.Channels.ContainsKey(e.ReadState.Id))\r\n            {\r\n                InvokePropertyChanged(nameof(Unread));\r\n                OnReadStateUpdatedCore(e);\r\n            }\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnChannelUnreadUpdate(ChannelUnreadUpdateEventArgs e)\r\n        {\r\n            if (e.GuildId == Id)\r\n            {\r\n                InvokePropertyChanged(nameof(Unread));\r\n            }\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        // TODO: update this cache when the user's roles change, and when the guild gets updated, and when a new channel gets created :D\r\n        private void PopulateAccessibleChannels()\r\n        {\r\n            _accessibleChannels = new Dictionary<ulong, ChannelViewModel>();\r\n\r\n            if ((Guild.CurrentMember?.IsOwner ?? true))\r\n            {\r\n                foreach (var (key, value) in Guild.Channels)\r\n                {\r\n                    _accessibleChannels[key] = new ChannelViewModel(value.Id, true, this);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                foreach (var (key, value) in Guild.Channels)\r\n                {\r\n                    if (!value.PermissionsFor(Guild.CurrentMember).HasFlag(Permissions.AccessChannels))\r\n                        continue;\r\n\r\n                    if (value.Parent != null && !value.Parent.PermissionsFor(Guild.CurrentMember).HasFlag(Permissions.AccessChannels))\r\n                        continue;\r\n\r\n                    _accessibleChannels[key] = new ChannelViewModel(value.Id, true, this);\r\n                }\r\n            }\r\n        }\r\n\r\n        protected virtual void OnReadStateUpdatedCore(ReadStateUpdateEventArgs e) { }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Guild/IGuildListViewModel.cs",
    "content": "﻿using DSharpPlus.Entities;\r\n\r\nnamespace Unicord.Universal.Models.Guild\r\n{\r\n    internal interface IGuildListViewModel\r\n    {\r\n        string Name { get; }\r\n        bool Unread { get; }\r\n        int MentionCount { get; }\r\n        bool TryGetModelForGuild(DiscordGuild guild, out GuildListViewModel model);\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/ISnowflake.cs",
    "content": "﻿namespace Unicord.Universal.Models\r\n{\r\n    public interface ISnowflake\r\n    {\r\n        ulong Id { get; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/MainPageArgs.cs",
    "content": "using System;\nusing Windows.ApplicationModel.Activation;\nusing Windows.UI.ViewManagement;\n\nnamespace Unicord.Universal.Models\n{\n    internal class MainPageArgs\n    {\n        public ulong ChannelId { get; internal set; }\n        public bool IsUriActivation { get; internal set; }\n        public ulong UserId { get; set; }\n        public bool FullFrame { get; set; }\n        public ApplicationViewMode ViewMode { get; internal set; }\n        public SplashScreen SplashScreen { get; internal set; }\n        public Exception ThemeLoadException { get; internal set; }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/AttachmentViewModel.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Web;\r\nusing System.Windows.Input;\r\nusing DSharpPlus.Entities;\r\nusing Unicord.Universal.Commands.Generic;\r\nusing Unicord.Universal.Utilities;\r\nusing Windows.Foundation;\r\nusing Windows.Foundation.Collections;\r\nusing Windows.Media.Core;\r\nusing Windows.Media.Playback;\r\nusing Windows.UI.Xaml.Media.Imaging;\r\n\r\nnamespace Unicord.Universal.Models.Messages\r\n{\r\n    public enum AttachmentType\r\n    {\r\n        Image,\r\n        Audio,\r\n        Video,\r\n        Svg,\r\n        Generic\r\n    }\r\n\r\n    public class AttachmentViewModel : ViewModelBase\r\n    {\r\n        // a set of known media file extensions for use as a heuristic\r\n        private static readonly HashSet<string> _mediaExtensions =\r\n              [\".gifv\", \".mp4\", \".mov\", \".webm\", \".wmv\", \".avi\", \".mkv\", \".ogv\", \".mp3\", \".m4a\", \".aac\", \".wav\", \".wma\", \".flac\", \".ogg\", \".oga\", \".opus\", \".mpg\", \".mpeg\"];\r\n\r\n        private DiscordAttachment _attachment;\r\n        private AttachmentType _type;\r\n        private Size? _naturalSize;\r\n        private object _source;\r\n        private bool _sourceInvalidated;\r\n        private string _posterSource = \"\";\r\n\r\n        private MediaSource _mediaSource;\r\n        private MediaPlaybackItem _mediaPlaybackItem;\r\n\r\n        public AttachmentViewModel(DiscordAttachment attachment, ViewModelBase parent)\r\n            : base(parent)\r\n        {\r\n            _attachment = attachment;\r\n            _type = GetAttachmentType(attachment);\r\n            _sourceInvalidated = false;\r\n\r\n            DownloadProgress = new ProgressInfo();\r\n            DownloadCommand = new DownloadCommand(attachment.Url, DownloadProgress);\r\n\r\n            ShareProgress = new ProgressInfo();\r\n            ShareCommand = new ShareCommand(attachment.Url, attachment.FileName, ShareProgress);\r\n\r\n            if (_attachment.Width is not (null or 0))\r\n            {\r\n                var thumbUrl = new UriBuilder(_attachment.ProxyUrl);\r\n                var query = HttpUtility.ParseQueryString(thumbUrl.Query);\r\n                query[\"format\"] = WebPHelpers.ShouldUseWebP ? \"webp\" : \"jpeg\";\r\n                thumbUrl.Query = query.ToString();\r\n\r\n                _posterSource = thumbUrl.Uri.ToString();\r\n            }\r\n        }\r\n\r\n        public string FileName =>\r\n            _attachment.FileName;\r\n        public string FileSize =>\r\n            Tools.ToFileSizeString(_attachment.FileSize);\r\n        public string Url =>\r\n            _attachment.Url;\r\n        public string ProxyUrl =>\r\n            _attachment.ProxyUrl;\r\n        public bool IsSpoiler =>\r\n            _attachment.FileName.StartsWith(\"SPOILER_\");\r\n        public double NaturalWidth =>\r\n            _attachment.Width is not (null or 0) ? _attachment.Width.Value : _naturalSize?.Width ?? double.NaN;\r\n        public double NaturalHeight =>\r\n            _attachment.Height is not (null or 0) ? _attachment.Height.Value : _naturalSize?.Height ?? double.NaN;\r\n        public AttachmentType Type { get => _type; private set => OnPropertySet(ref _type, value); }\r\n\r\n        public object Source =>\r\n            GetOrCreateSource();\r\n        public string PosterSource { get => _posterSource; private set => OnPropertySet(ref _posterSource, value); }\r\n\r\n        public bool IsVideo =>\r\n            Type == AttachmentType.Video;\r\n        public bool IsAudio =>\r\n            Type == AttachmentType.Audio;\r\n\r\n        public ICommand DownloadCommand { get; }\r\n        public ICommand ShareCommand { get; }\r\n        public ICommand CopyCommand { get; set; }\r\n\r\n        public ProgressInfo DownloadProgress { get; set; }\r\n        public ProgressInfo ShareProgress { get; set; }\r\n\r\n        private object GetOrCreateSource()\r\n        {\r\n            if (_source != null && !_sourceInvalidated) return _source;\r\n\r\n            _source = null;\r\n            _sourceInvalidated = false;\r\n\r\n            if (_mediaSource != null)\r\n            {\r\n                _mediaSource.Dispose();\r\n                _mediaSource = null;\r\n                _mediaPlaybackItem = null;\r\n            }\r\n\r\n            switch (_type)\r\n            {\r\n                case AttachmentType.Image:\r\n                    _source = _attachment.ProxyUrl;\r\n                    break;\r\n                case AttachmentType.Svg:\r\n                    _source = new SvgImageSource(new Uri(_attachment.Url)) { RasterizePixelWidth = 480 };\r\n                    break;\r\n                case AttachmentType.Audio:\r\n                case AttachmentType.Video:\r\n                    _mediaSource = MediaSource.CreateFromUri(new Uri(_attachment.Url));\r\n                    _mediaPlaybackItem = new MediaPlaybackItem(_mediaSource);\r\n                    _mediaPlaybackItem.VideoTracksChanged += OnVideoTracksLoaded;\r\n                    _mediaPlaybackItem.AudioTracksChanged += OnAudioTracksLoaded;\r\n                    _source = _mediaPlaybackItem;\r\n                    break;\r\n                case AttachmentType.Generic:\r\n                default:\r\n                    throw new InvalidOperationException(\"Unable to create source for Generic or Invalid attachment type\");\r\n            }\r\n\r\n            return _source;\r\n        }\r\n\r\n        // these callbacks aren't on the UI thread doofus.\r\n        private void OnVideoTracksLoaded(MediaPlaybackItem sender, IVectorChangedEventArgs args)\r\n        {\r\n            var track = sender.VideoTracks.OrderByDescending(d => { var props = d.GetEncodingProperties(); return props.Width * props.Height; })\r\n                                            .FirstOrDefault();\r\n\r\n            if (track != null)\r\n            {\r\n                var props = track.GetEncodingProperties();\r\n\r\n                syncContext.Post((_) =>\r\n                {\r\n                    _naturalSize = new Size(props.Width, props.Height);\r\n                    _type = AttachmentType.Video;\r\n                    InvokePropertyChanged(nameof(NaturalWidth));\r\n                    InvokePropertyChanged(nameof(NaturalHeight));\r\n                    InvokePropertyChanged(nameof(Type));\r\n                    InvokePropertyChanged(nameof(IsVideo));\r\n                    InvokePropertyChanged(nameof(IsAudio));\r\n                }, null);\r\n            }\r\n            else\r\n            {\r\n                syncContext.Post((_) =>\r\n                {\r\n                    _type = AttachmentType.Audio;\r\n                    InvokePropertyChanged(nameof(Type));\r\n                    InvokePropertyChanged(nameof(IsVideo));\r\n                    InvokePropertyChanged(nameof(IsAudio));\r\n                }, null);\r\n            }\r\n        }\r\n\r\n        private void OnAudioTracksLoaded(MediaPlaybackItem sender, IVectorChangedEventArgs args)\r\n        {\r\n\r\n        }\r\n\r\n        public static AttachmentType GetAttachmentType(DiscordAttachment attachment)\r\n        {\r\n            // we have a bunch of heuristics available to work out the type of attachment we're dealing with\r\n            // this code only uses a couple\r\n            var mimeType = attachment.MediaType?.ToLowerInvariant(); // this isn't always available on old messages\r\n            if (!string.IsNullOrWhiteSpace(mimeType))\r\n            {\r\n                // these are easy lmao\r\n                if (mimeType.StartsWith(\"video\")) return AttachmentType.Video;\r\n                if (mimeType.StartsWith(\"audio\")) return AttachmentType.Audio;\r\n                if (mimeType.StartsWith(\"image\")) return AttachmentType.Image;\r\n            }\r\n\r\n            var fileName = attachment.FileName.ToLowerInvariant();\r\n            var fileExtension = Path.GetExtension(fileName);\r\n\r\n            // we special case SVG because their sizing logic is whack\r\n            if (fileExtension == \".svg\") return AttachmentType.Svg;\r\n\r\n            if (_mediaExtensions.Contains(fileExtension))\r\n            {\r\n                // discord doesn't return proper width/height information for some video formats\r\n                // as such, once the media is loaded this may change.\r\n                if (attachment.Width is (0 or null) && attachment.Height is (0 or null))\r\n                    return AttachmentType.Audio;\r\n\r\n                return AttachmentType.Video;\r\n            }\r\n\r\n            if (attachment.Width is not (0 or null) && attachment.Height is not (0 or null))\r\n                return AttachmentType.Image;\r\n\r\n            return AttachmentType.Generic;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/Components/ActionRowComponentViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing DSharpPlus.Entities;\n\nnamespace Unicord.Universal.Models.Messages.Components\n{\n    public class ActionRowComponentViewModel : ComponentViewModelBase\n    {\n        public ActionRowComponentViewModel(\n            DiscordActionRowComponent component, \n            Func<DiscordComponent, ComponentViewModelBase> componentViewModelFactory,\n            MessageViewModel messageViewModel) \n            : base(component, messageViewModel)\n        {\n            Components = new ObservableCollection<ComponentViewModelBase>(component.Components.Select(componentViewModelFactory));\n        }\n\n        public ObservableCollection<ComponentViewModelBase> Components { get; }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/Components/ButtonComponentViewModel.cs",
    "content": "﻿using System;\nusing System.Windows.Input;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing CommunityToolkit.Mvvm.Input;\nusing Unicord.Universal.Models.Emoji;\nusing Windows.System;\n\nnamespace Unicord.Universal.Models.Messages.Components\n{\n    public class ButtonComponentViewModel : ComponentViewModelBase\n    {\n        public ButtonComponentViewModel(DiscordLinkButtonComponent component, MessageViewModel messageViewModel)\n            : base(component, messageViewModel)\n        {\n            Style = ButtonStyle.Link;\n            Emoji = new EmojiViewModel(component.Emoji);\n            Label = component.Label;\n            ShowExternalLinkIcon = true;\n            Execute = new AsyncRelayCommand(async () => await Launcher.LaunchUriAsync(new Uri(component.Url)));\n        }\n\n        public ButtonComponentViewModel(DiscordButtonComponent component, MessageViewModel messageViewModel)\n            : base(component, messageViewModel)\n        {\n            Style = component.Style;\n            Emoji = new EmojiViewModel(component.Emoji);\n            Label = component.Label;\n            ShowExternalLinkIcon = false;\n        }\n\n        public ButtonStyle Style { get; }\n        public EmojiViewModel Emoji { get; }\n        public string Label { get; }\n        public bool HasLabel\n            => Label != null;\n        public bool ShowExternalLinkIcon { get; }\n        public ICommand Execute { get; }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/Components/ComponentViewModelBase.cs",
    "content": "﻿using DSharpPlus.Entities;\r\n\r\nnamespace Unicord.Universal.Models.Messages.Components\r\n{\r\n    public class ComponentViewModelBase : ViewModelBase\r\n    {\r\n        protected readonly DiscordComponent component;\r\n        protected readonly MessageViewModel messageViewModel;\r\n\r\n        public ComponentViewModelBase(DiscordComponent component, MessageViewModel messageViewModel)\r\n            : base(messageViewModel)\r\n        {\r\n            this.component = component;\r\n            this.messageViewModel = messageViewModel;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/Components/UnknownComponentViewModel.cs",
    "content": "﻿using DSharpPlus.Entities;\r\n\r\nnamespace Unicord.Universal.Models.Messages.Components\r\n{\r\n    public class UnknownComponentViewModel : ComponentViewModelBase\r\n    {\r\n        public UnknownComponentViewModel(DiscordComponent component, MessageViewModel messageViewModel) \r\n            : base(component, messageViewModel)\r\n        {\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/EmbedViewModel.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing DSharpPlus.Entities;\r\nusing Unicord.Universal.Extensions;\r\nusing Windows.UI.Xaml.Media;\r\n\r\nnamespace Unicord.Universal.Models.Messages\r\n{\r\n    public class EmbedViewModel : ViewModelBase\r\n    {\r\n        private DiscordEmbed embed;\r\n        private DiscordEmbed[] otherImages;\r\n        private MessageViewModel messageViewModel;\r\n\r\n        public EmbedViewModel(DiscordEmbed embed, DiscordEmbed[] otherImages, ViewModelBase parent)\r\n            : base(parent)\r\n        {\r\n            this.messageViewModel = parent as MessageViewModel;\r\n            this.Update(embed, otherImages);\r\n        }\r\n\r\n        // todo: viewmodelify when possible\r\n        public DiscordChannel Channel\r\n            => this.messageViewModel?.Channel?.Channel;\r\n        public bool IsRawImage =>\r\n            embed.Type == \"image\" && embed.Thumbnail != null;\r\n\r\n        public bool IsRawVideo =>\r\n            embed.Type == \"gifv\" || (embed.Type == \"video\" && embed.Video.Url.Host == \"cdn.discordapp.com\");\r\n\r\n        public bool IsVideo =>\r\n            !IsRawVideo && embed.Type == \"video\";\r\n\r\n        public bool IsRichEmbed\r\n            => !IsRawImage && !IsRawVideo;\r\n\r\n        public string Type\r\n            => embed.Type;\r\n\r\n        public string Title\r\n            => embed.Title;\r\n        public bool HasTitle\r\n            => !string.IsNullOrWhiteSpace(Title);\r\n\r\n        public string Description\r\n            => embed.Description;\r\n        public bool HasDescription\r\n            => embed.Type != \"video\" && !string.IsNullOrWhiteSpace(Description);\r\n\r\n        public EmbedFieldViewModel[] Fields { get; private set; }\r\n\r\n        public bool HasFields\r\n            => Fields.Length > 0;\r\n\r\n        public Uri Url\r\n            => embed.Url;\r\n\r\n        public SolidColorBrush Color\r\n            => embed.Color.HasValue && embed.Color.Value.Value != 0 ?\r\n                new SolidColorBrush(embed.Color.Value.ToColor())\r\n            : App.Current.Resources[\"AccentFillColorDefaultBrush\"] as SolidColorBrush; // FallbackValue just doesn't work lol\r\n\r\n        public bool HasProvider\r\n            => embed.Provider != null;\r\n        public string ProviderName\r\n            => embed.Provider?.Name;\r\n        public Uri ProviderUrl\r\n            => embed.Provider?.Url;\r\n\r\n        public bool HasAuthor\r\n            => embed.Author != null;\r\n\r\n        public EmbedAuthorViewModel Author\r\n            => embed.Author != null ? new EmbedAuthorViewModel(embed.Author, this) : null;\r\n\r\n        public bool HasVideo\r\n            => embed.Video != null;\r\n        public EmbedVideoViewModel Video\r\n            => embed.Video != null ? new EmbedVideoViewModel(embed.Video, this) : null;\r\n\r\n        public bool HasFooter\r\n            => embed.Footer != null;\r\n\r\n        public EmbedFooterViewModel Footer\r\n            => embed.Footer != null ? new EmbedFooterViewModel(embed.Footer, this) : null;\r\n\r\n        /// <summary>\r\n        /// Show the left hand side thumbanil if:\r\n        ///     - We aren't a video\r\n        ///     - We aren't an image\r\n        ///     - We aren't an article\r\n        ///     - We have a Thumbnail object\r\n        ///     - We're not showing any other images\r\n        /// </summary>\r\n        public bool HasSmallThumbnail\r\n            => (embed.Video == null && embed.Type != \"article\")\r\n                && embed.Thumbnail != null\r\n                && !string.IsNullOrWhiteSpace(embed.Thumbnail.ProxyUrl.ToString())\r\n                && otherImages.Length == 0;\r\n\r\n        public bool HasLargeThumbnail\r\n            => (embed.Video == null && embed.Type == \"article\")\r\n                && embed.Thumbnail != null\r\n                && !string.IsNullOrWhiteSpace(embed.Thumbnail.ProxyUrl.ToString())\r\n                && otherImages.Length == 0;\r\n\r\n        public EmbedImageViewModel Image\r\n            => embed.Image != null ? new EmbedImageViewModel(embed.Image, this) : null;\r\n        public EmbedImageViewModel Thumbnail\r\n            => embed.Thumbnail != null ? new EmbedImageViewModel(embed.Thumbnail, this) : null;\r\n\r\n        internal void Update(DiscordEmbed embed, IEnumerable<DiscordEmbed> otherImages)\r\n        {\r\n            this.embed = embed;\r\n            this.otherImages = otherImages.ToArray();\r\n            this.Fields = embed.Fields?.Select(f => new EmbedFieldViewModel(f, this)).ToArray() ?? Array.Empty<EmbedFieldViewModel>();\r\n\r\n            InvokePropertyChanged(\"\");\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/Embeds/EmbedAuthorViewModel.cs",
    "content": "﻿using System;\nusing DSharpPlus.Entities;\n\nnamespace Unicord.Universal.Models.Messages\n{\n    public class EmbedAuthorViewModel : ViewModelBase\n    {\n        public EmbedAuthorViewModel(DiscordEmbedAuthor author, EmbedViewModel parent)\n            : base(parent)\n        {\n            Name = author.Name;\n            IconUrl = author.ProxyIconUrl?.ToUri();\n        }\n\n        public string Name { get; }\n        public Uri IconUrl { get; }\n        public bool HasIconUrl\n            => IconUrl != null;\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/Embeds/EmbedFieldViewModel.cs",
    "content": "﻿using DSharpPlus.Entities;\n\nnamespace Unicord.Universal.Models.Messages\n{\n    public class EmbedFieldViewModel : ViewModelBase\n    {\n        public EmbedFieldViewModel(DiscordEmbedField field, EmbedViewModel parent)\n            : base(parent)\n        {\n            Title = field.Name;\n            Text = field.Value;\n            ColumnSpan = field.Inline ? 1 : 3;\n            Channel = parent.Channel;\n        }\n\n        public string Title { get; }\n        public string Text { get; }\n        public int ColumnSpan { get; }\n        public DiscordChannel Channel { get; }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/Embeds/EmbedFooterViewModel.cs",
    "content": "﻿using System;\nusing DSharpPlus.Entities;\n\nnamespace Unicord.Universal.Models.Messages\n{\n    public class EmbedFooterViewModel : ViewModelBase\n    {\n        public EmbedFooterViewModel(DiscordEmbedFooter footer, EmbedViewModel parent)\n            : base(parent)\n        {\n            Text = footer.Text;\n            IconUrl = footer.ProxyIconUrl?.ToUri();\n        }\n\n        public string Text { get; }\n        public Uri IconUrl { get; }\n        public bool HasIconUrl\n            => IconUrl != null;\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/Embeds/EmbedImageViewModel.cs",
    "content": "﻿using System;\nusing DSharpPlus.Entities;\n\nnamespace Unicord.Universal.Models.Messages\n{\n    public class EmbedImageViewModel : ViewModelBase\n    {\n        public EmbedImageViewModel(DiscordEmbedImage image, EmbedViewModel parent)\n            : base(parent)\n        {\n            NaturalWidth = image.Width;\n            NaturalHeight = image.Height;\n            Source = image.ProxyUrl.ToUri();\n            Url = image.Url.ToString();\n        }\n\n        public EmbedImageViewModel(DiscordEmbedThumbnail image, EmbedViewModel parent)\n            : base(parent)\n        {\n            NaturalWidth = image.Width;\n            NaturalHeight = image.Height;\n            Source = image.ProxyUrl.ToUri();\n            Url = image.Url.ToString();\n        }\n\n        public int NaturalWidth { get; }\n        public int NaturalHeight { get; }\n        public Uri Source { get; }\n        public string Url { get; }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/Embeds/EmbedVideoViewModel.cs",
    "content": "﻿using System;\nusing DSharpPlus.Entities;\n\nnamespace Unicord.Universal.Models.Messages\n{\n    public class EmbedVideoViewModel : ViewModelBase\n    {\n        public EmbedVideoViewModel(DiscordEmbedVideo video, EmbedViewModel parent)\n            : base(parent)\n        {\n            Type = parent.Type;\n            NaturalWidth = video.Width;\n            NaturalHeight = video.Height;\n            Url = video.Url;\n            Thumbnail = parent.Thumbnail;\n            Provider = parent.ProviderName?.ToLowerInvariant() ?? \"\";\n        }\n\n        public string Type { get; }\n        public EmbedImageViewModel Thumbnail { get; }\n        public int NaturalWidth { get; }\n        public int NaturalHeight { get; }\n        public Uri Url { get; }\n        public string Provider { get; }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/MessageEditViewModel.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing System.Windows.Input;\nusing CommunityToolkit.Mvvm.Input;\nusing Unicord.Universal.Dialogs;\nusing Windows.UI.Xaml.Controls;\nusing Microsoft.Extensions.Logging;\nusing Unicord.Universal.Pages;\nusing Windows.UI.Xaml;\nusing Unicord.Universal.Extensions;\n\nnamespace Unicord.Universal.Models.Messages\n{\n    // TODO: this\n    public class MessageEditViewModel : ViewModelBase\n    {\n        private MessageViewModel _parent;\n        private string _content;\n        private ILogger<MessageEditViewModel> _logger\n            = Logger.GetLogger<MessageEditViewModel>();\n        private int _selectionStart;\n\n        public MessageEditViewModel(MessageViewModel viewModel)\n            : base(viewModel)\n        {\n            this._parent = viewModel;\n            this.Content = viewModel.Content;\n            this.SelectionStart = viewModel.Content.Length;\n            this.CommitCommand = new AsyncRelayCommand<TextBox>(CommitAsync);\n            this.DiscardCommand = new RelayCommand(Discard);\n            this.InsertNewLineCommand = new RelayCommand<TextBox>(InsertNewLine);\n\n            InvokePropertyChanged(nameof(IsFocused));\n        }\n\n        // these properties, unlike most VM properties, are NOT THREAD SAFE, this helps when handling focus\n        public string Content { get => _content; set => UnsafeOnPropertySet(ref _content, value); }\n        public int SelectionStart { get => _selectionStart; set => UnsafeOnPropertySet(ref _selectionStart, value); }\n\n        public ICommand CommitCommand { get; }\n        public ICommand DiscardCommand { get; }\n        public ICommand InsertNewLineCommand { get; }\n\n        public bool IsFocused => true;\n\n        public void InsertNewLine(TextBox textBox)\n        {\n            var start = textBox.SelectionStart;\n            Content = textBox.Text.Insert(start, \"\\r\");\n            textBox.SelectionStart = start + 1;\n        }\n\n        private async Task CommitAsync(TextBox textBox)\n        {\n            try\n            {\n                if (textBox != null)\n                    Content = textBox.Text;\n\n                // prompt for deletion\n                if (string.IsNullOrWhiteSpace(Content))\n                {\n                    var deleteDialog = new DeleteMessageDialog();\n                    deleteDialog.Message = _parent.Message;\n\n                    var result = await deleteDialog.ShowAsync();\n                    if (result == ContentDialogResult.Primary)\n                        await _parent.Message.DeleteAsync();\n\n                    return;\n                }\n\n                if (Content != _parent.Content)\n                {\n                    await _parent.Message.ModifyAsync(Content);\n                }\n\n\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Failed to edit message\");\n            }\n            finally\n            {\n                _parent.IsEditing = false;\n\n                var page = Window.Current.Content.FindChild<ChannelPage>();\n                if (page != null)\n                    page.FocusTextBox();\n            }\n        }\n\n        private void Discard()\n        {\n            _parent.IsEditing = false;\n\n            var page = Window.Current.Content.FindChild<ChannelPage>();\n            if (page != null)\n                page.FocusTextBox();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/MessageViewModel.WelcomeStrings.cs",
    "content": "﻿using System.Collections.Immutable;\r\n\r\nnamespace Unicord.Universal.Models.Messages\r\n{\r\n    public partial class MessageViewModel\r\n    {\r\n        private static readonly ImmutableArray<string> WelcomeStrings =\r\n            [\r\n                \"{0} just joined the server - glhf!\",\r\n                \"{0} just joined. Everyone, look busy!\",\r\n                \"{0} just joined. Can I get a heal?\",\r\n                \"{0} joined your party.\",\r\n                \"{0} joined. You must construct additional pylons.\",\r\n                \"Ermagherd. {0} is here.\",\r\n                \"Welcome, {0}. Stay awhile and listen.\",\r\n                \"Welcome, {0}. We were expecting you ( \\u0361\\u00B0 \\u035C\\u0296 \\u0361\\u00B0)\",\r\n                \"Welcome, {0}. We hope you brought pizza.\",\r\n                \"Welcome {0}. Leave your weapons by the door.\",\r\n                \"A wild {0} appeared.\",\r\n                \"Swoooosh. {0} just landed.\",\r\n                \"Brace yourselves. {0} just joined the server.\",\r\n                \"{0} just joined... or did they?\",\r\n                \"{0} just arrived. Seems OP - please nerf.\",\r\n                \"{0} just slid into the server.\",\r\n                \"A {0} has spawned in the server.\",\r\n                \"Big {0} showed up!\",\r\n                \"Where’s {0}? In the server!\",\r\n                \"{0} hopped into the server. Kangaroo!!\",\r\n                \"{0} just showed up. Hold my beer.\",\r\n                \"Challenger approaching - {0} has appeared!\",\r\n                \"It's a bird! It's a plane! Nevermind, it's just {0}.\",\r\n                \"It's {0}! Praise the sun! \\\\\\\\[T]/\",\r\n                \"Never gonna give {0} up. Never gonna let {0} down.\",\r\n                \"{0} has joined the battle bus.\",\r\n                \"Cheers, love! {0}'s here!\",\r\n                \"Hey! Listen! {0} has joined!\",\r\n                \"We've been expecting you {0}\",\r\n                \"It's dangerous to go alone, take {0}!\",\r\n                \"{0} has joined the server! It's super effective!\",\r\n                \"Cheers, love! {0} is here!\",\r\n                \"{0} is here, as the prophecy foretold.\",\r\n                \"{0} has arrived. Party's over.\",\r\n                \"Ready player {0}\",\r\n                \"{0} is here to kick gum and chew ass. And {0} is all out of ass.\",\r\n                \"Hello. Is it {0} you're looking for?\",\r\n                \"{0} has joined. Stay a while and listen!\",\r\n                \"Roses are red, violets are blue, {0} joined this server with you\",\r\n            ];\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/MessageViewModel.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Collections.ObjectModel;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Input;\r\nusing CommunityToolkit.Mvvm.Input;\r\nusing CommunityToolkit.Mvvm.Messaging;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.EventArgs;\r\nusing Unicord.Universal.Commands;\r\nusing Unicord.Universal.Commands.Generic;\r\nusing Unicord.Universal.Commands.Messages;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Unicord.Universal.Models.Messages.Components;\r\nusing Unicord.Universal.Models.User;\r\nusing Unicord.Universal.Services;\r\nusing Windows.ApplicationModel.Resources;\r\n\r\nnamespace Unicord.Universal.Models.Messages\r\n{\r\n    public enum MessageViewModelState\r\n    {\r\n        // not in a channel list\r\n        Default = -1,\r\n        // in a channel list\r\n        Normal,\r\n        Collapsed,\r\n        Editing\r\n    }\r\n\r\n    public partial class MessageViewModel : ViewModelBase, ISnowflake\r\n    {\r\n        private static readonly ResourceLoader _strings\r\n            = ResourceLoader.GetForViewIndependentUse(\"Converters\");\r\n\r\n        private ChannelViewModel _channelViewModelCache;\r\n        private UserViewModel _userViewModelCache;\r\n        private bool _isSelected;\r\n        private bool _isEditing;\r\n\r\n        private MessageViewModel _referencedMessage;\r\n        private MessageEditViewModel _editViewModel;\r\n\r\n        public MessageViewModel(DiscordMessage discordMessage, ChannelPageViewModel parent = null, MessageViewModel parentMessage = null)\r\n            : base((ViewModelBase)parentMessage ?? parent)\r\n        {\r\n            Message = discordMessage;\r\n            Parent = parent;\r\n\r\n            _channelViewModelCache = parent;\r\n\r\n            if (discordMessage.ReferencedMessage != null)\r\n                _referencedMessage = new MessageViewModel(discordMessage.ReferencedMessage, null, this);\r\n\r\n            WeakReferenceMessenger.Default.Register<MessageViewModel, MessageUpdateEventArgs>(this, (t, e) => t.OnMessageUpdated(e.Event));\r\n\r\n            // we dont wanna do this for replies\r\n            if (parentMessage == null)\r\n            {\r\n                ReplyCommand = new ReplyCommand(this);\r\n                CopyMessageCommand = new CopyMessageCommand(this);\r\n                CopyUrlCommand = new CopyUrlCommand(this);\r\n                CopyIdCommand = new CopyIdCommand(this);\r\n                PinCommand = new PinMessageCommand(this);\r\n                DeleteCommand = new DeleteMessageCommand(this);\r\n                ReactCommand = new ReactCommand(this);\r\n                EditCommand = new RelayCommand(() => this.IsEditing = true);\r\n\r\n                var embedModels = GetGroupedEmbeds(Message);\r\n                Embeds = new ObservableCollection<EmbedViewModel>(embedModels);\r\n                Attachments = new ObservableCollection<AttachmentViewModel>(Message.Attachments.Select(a => new AttachmentViewModel(a, this)));\r\n                Stickers = new ObservableCollection<StickerViewModel>(Message.Stickers.Select(s => new StickerViewModel(s, this)));\r\n                Components = new ObservableCollection<ComponentViewModelBase>(Message.Components.Select(ComponentViewModelFactory));\r\n                Reactions = new ObservableCollection<ReactionViewModel>(Message.Reactions.Select(r => new ReactionViewModel(r, ReactCommand)));\r\n\r\n                WeakReferenceMessenger.Default.Register<MessageViewModel, MessageReactionAddEventArgs>(this,\r\n                    (t, e) => t.OnReactionAdded(e.Event));\r\n                WeakReferenceMessenger.Default.Register<MessageViewModel, MessageReactionRemoveEventArgs>(this,\r\n                    (t, e) => t.OnReactionRemoved(e.Event));\r\n                WeakReferenceMessenger.Default.Register<MessageViewModel, MessageReactionRemoveEmojiEventArgs>(this,\r\n                    (t, e) => t.OnReactionGroupRemoved(e.Event));\r\n                WeakReferenceMessenger.Default.Register<MessageViewModel, MessageReactionsClearEventArgs>(this,\r\n                    (t, e) => t.OnReactionsCleared(e.Event));\r\n            }\r\n        }\r\n\r\n        private List<EmbedViewModel> GetGroupedEmbeds(DiscordMessage message)\r\n        {\r\n            if (message.Embeds == null) return [];\r\n\r\n            var embedGroups = message.Embeds\r\n                .GroupBy(g => g.Url);\r\n\r\n            var embedModels = new List<EmbedViewModel>();\r\n            foreach (var group in embedGroups)\r\n            {\r\n                if (group.Key == null)\r\n                    embedModels.AddRange(group.Select(s => new EmbedViewModel(s, [], this)));\r\n                else\r\n                    embedModels.Add(new EmbedViewModel(group.First(), group.Skip(1).ToArray(), this));\r\n            }\r\n\r\n            return embedModels;\r\n        }\r\n\r\n        public DiscordMessage Message { get; }\r\n\r\n        public ChannelPageViewModel Parent { get; }\r\n\r\n        public ulong Id\r\n            => Message.Id;\r\n        public MessageViewModel ReferencedMessage\r\n            => _referencedMessage;\r\n        public ChannelViewModel Channel\r\n            => Parent ?? (_channelViewModelCache ??=\r\n                (Message.Channel != null ? new ChannelViewModel(Message.Channel, true, this) : new ChannelViewModel(Message.ChannelId, true, this)));\r\n\r\n        public UserViewModel Author\r\n            => _userViewModelCache ??= new UserViewModel(Message.Author, Channel.Channel?.GuildId, this);\r\n        public DateTimeOffset Timestamp\r\n            => Message.Timestamp;\r\n        public string Content\r\n            => Message.Content;\r\n        public bool IsEdited\r\n            => Message.IsEdited;\r\n        public bool IsSystemMessage\r\n            => Message.MessageType is not (MessageType.Default or MessageType.Reply or\r\n                MessageType.ApplicationCommand or MessageType.ContextMenuCommand);\r\n        public MessageType Type\r\n            => Message.MessageType ?? MessageType.Default;\r\n\r\n        public string SystemMessageText => Message.MessageType switch\r\n        {\r\n            MessageType.RecipientAdd => string.Format(_strings.GetString(\"UserJoinedGroupFormat\"), Author.Mention),\r\n            MessageType.RecipientRemove => string.Format(_strings.GetString(\"UserLeftGroupFormat\"), Author.Mention),\r\n            MessageType.Call => string.Format(_strings.GetString(\"UserStartedCallFormat\"), Author.Mention),\r\n            MessageType.ChannelNameChange => string.Format(_strings.GetString(\"UserChannelNameChangeFormat\"), Author.Mention),\r\n            MessageType.ChannelIconChange => string.Format(_strings.GetString(\"UserChannelIconChangeFormat\"), Author.Mention),\r\n            MessageType.ChannelPinnedMessage => string.Format(_strings.GetString(\"UserMessagePinFormat\"), Author.Mention),\r\n            MessageType.GuildMemberJoin => string.Format(WelcomeStrings[(int)(Message.CreationTimestamp.ToUnixTimeMilliseconds() % WelcomeStrings.Length)], Author.Mention),\r\n            MessageType.UserPremiumGuildSubscription => string.Format(_strings.GetString(\r\n                                        string.IsNullOrWhiteSpace(Content) ?\r\n                                        \"UserPremiumGuildSubscriptionFormat\" :\r\n                                        \"UserPremiumMultiGuildSubscriptionFormat\"), Author.Mention, Content),\r\n            MessageType.TierOneUserPremiumGuildSubscription => string.Format(_strings.GetString(\r\n                                        string.IsNullOrWhiteSpace(Content) ?\r\n                                        \"UserPremiumGuildSubscriptionTierFormat\" :\r\n                                        \"UserPremiumMultiGuildSubscriptionTierFormat\"), Author.Mention, Content, 1),\r\n            MessageType.TierTwoUserPremiumGuildSubscription => string.Format(_strings.GetString(\r\n                                        string.IsNullOrWhiteSpace(Content) ?\r\n                                        \"UserPremiumGuildSubscriptionTierFormat\" :\r\n                                        \"UserPremiumMultiGuildSubscriptionTierFormat\"), Author.Mention, Content, 2),\r\n            MessageType.TierThreeUserPremiumGuildSubscription => string.Format(_strings.GetString(\r\n                                        string.IsNullOrWhiteSpace(Content) ?\r\n                                        \"UserPremiumGuildSubscriptionTierFormat\" :\r\n                                        \"UserPremiumMultiGuildSubscriptionTierFormat\"), Author.Mention, Content, 3),\r\n            _ => $\"Unknown system message type {Message.MessageType}! [File an issue!](https://github.com/UnicordDev/Unicord/issues/new)\",\r\n        };\r\n\r\n        public string SystemMessageSymbol => Message.MessageType switch\r\n        {\r\n            MessageType.RecipientAdd => \"\\xE72A\",\r\n            MessageType.RecipientRemove => \"\\xE72B\",\r\n            MessageType.Call => \"\\xE717\",\r\n            MessageType.ChannelNameChange\r\n                or MessageType.ChannelIconChange => \"\\xE70F\",\r\n            MessageType.ChannelPinnedMessage => \"\\xE840\",\r\n            MessageType.GuildMemberJoin => \"\\xE72A\",\r\n            MessageType.UserPremiumGuildSubscription\r\n                or MessageType.TierOneUserPremiumGuildSubscription\r\n                or MessageType.TierTwoUserPremiumGuildSubscription\r\n                or MessageType.TierThreeUserPremiumGuildSubscription => \"\\xECAD\",\r\n            _ => \"\\xE783\",\r\n        };\r\n\r\n        public bool IsMention\r\n        {\r\n            get\r\n            {\r\n                var currentMember = Message.Channel.Guild?.CurrentMember;\r\n                var currentUserId = DiscordManager.Discord.CurrentUser.Id;\r\n                return Message.MentionEveryone || Message.MentionedUsers.Any(u => u?.Id == currentUserId) ||\r\n                    (currentMember != null && Message.MentionedRoleIds.Any(r => currentMember.RoleIds.Contains(r)));\r\n            }\r\n        }\r\n\r\n        // todo: cache probably\r\n        public bool IsCollapsed\r\n        {\r\n            get\r\n            {\r\n                if (Parent == null) return false;\r\n\r\n                var index = Parent.Messages.IndexOf(this);\r\n                if (index > 0)\r\n                {\r\n                    if (Parent.Messages[index - 1] is MessageViewModel other\r\n                        && (other.Message.MessageType == MessageType.Default || other.Message.MessageType == MessageType.Reply)\r\n                        && Message.ReferencedMessage == null)\r\n                    {\r\n                        var timeSpan = (Message.CreationTimestamp - other.Message.CreationTimestamp);\r\n                        if (other.Author.User.Id == Message.Author.Id && timeSpan <= TimeSpan.FromMinutes(10))\r\n                        {\r\n                            return true;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                return false;\r\n            }\r\n        }\r\n\r\n        public bool IsSelected { get => _isSelected; set => OnPropertySet(ref _isSelected, value); }\r\n\r\n        public bool IsEditing\r\n        {\r\n            get => _isEditing;\r\n            set\r\n            {\r\n                OnPropertySet(ref _isEditing, value, nameof(IsEditing), nameof(State));\r\n                if (_isEditing)\r\n                    EditViewModel = new MessageEditViewModel(this);\r\n            }\r\n        }\r\n\r\n        public MessageEditViewModel EditViewModel\r\n        {\r\n            get => _editViewModel;\r\n            set => OnPropertySet(ref _editViewModel, value);\r\n        }\r\n\r\n        public MessageViewModelState State\r\n        {\r\n            get\r\n            {\r\n                if (Parent == null)\r\n                    return MessageViewModelState.Default;\r\n\r\n                if (IsEditing)\r\n                    return MessageViewModelState.Editing;\r\n\r\n                return IsCollapsed ? MessageViewModelState.Collapsed : MessageViewModelState.Normal;\r\n            }\r\n        }\r\n\r\n        public ObservableCollection<EmbedViewModel> Embeds { get; }\r\n        public ObservableCollection<AttachmentViewModel> Attachments { get; }\r\n        public ObservableCollection<StickerViewModel> Stickers { get; }\r\n        public ObservableCollection<ComponentViewModelBase> Components { get; }\r\n        public ObservableCollection<ReactionViewModel> Reactions { get; }\r\n\r\n        public ICommand ReplyCommand { get; }\r\n        public ICommand CopyMessageCommand { get; }\r\n        public ICommand CopyUrlCommand { get; }\r\n        public ICommand CopyIdCommand { get; }\r\n        public ICommand PinCommand { get; }\r\n        public ICommand DeleteCommand { get; }\r\n        public ICommand ReactCommand { get; }\r\n        public ICommand EditCommand { get; }\r\n\r\n        private Task OnReactionAdded(MessageReactionAddEventArgs e)\r\n        {\r\n            if (e.Message.Id != Message.Id)\r\n                return Task.CompletedTask;\r\n\r\n            UpdateReactions();\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnReactionRemoved(MessageReactionRemoveEventArgs e)\r\n        {\r\n            if (e.Message.Id != Message.Id)\r\n                return Task.CompletedTask;\r\n\r\n            UpdateReactions();\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnReactionsCleared(MessageReactionsClearEventArgs e)\r\n        {\r\n            if (e.Message.Id != Message.Id)\r\n                return Task.CompletedTask;\r\n\r\n            syncContext.Post((o) => ((MessageViewModel)o).Reactions.Clear(), this);\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private Task OnReactionGroupRemoved(MessageReactionRemoveEmojiEventArgs e)\r\n        {\r\n            if (e.Message.Id != Message.Id)\r\n                return Task.CompletedTask;\r\n\r\n            UpdateReactions();\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private void OnMessageUpdated(MessageUpdateEventArgs e)\r\n        {\r\n            if (e.Message.Id != Message.Id)\r\n                return;\r\n\r\n            if (e.MessageBefore?.Content != e.Message.Content)\r\n                InvokePropertyChanged(nameof(Content));\r\n\r\n            if (e.MessageBefore?.IsEdited != e.Message.IsEdited)\r\n                InvokePropertyChanged(nameof(IsEdited));\r\n\r\n            if (e.Message.Attachments.Count != Attachments.Count)\r\n                syncContext.Post(o =>\r\n                {\r\n                    Attachments.Clear();\r\n                    foreach (var attachment in e.Message.Attachments)\r\n                    {\r\n                        Attachments.Add(new AttachmentViewModel(attachment, this));\r\n                    }\r\n                }, null);\r\n\r\n            var embedGroups = Message.Embeds\r\n                    .GroupBy(g => g.Url);\r\n\r\n            syncContext.Post((o) =>\r\n            {\r\n                Embeds.Clear();\r\n                foreach (var model in GetGroupedEmbeds(e.Message))\r\n                {\r\n                    Embeds.Add(model);\r\n                }\r\n            }, null);\r\n\r\n            return;\r\n        }\r\n\r\n        private ComponentViewModelBase ComponentViewModelFactory(DiscordComponent component)\r\n        {\r\n            if (component is DiscordActionRowComponent actionRow)\r\n                return new ActionRowComponentViewModel(actionRow, ComponentViewModelFactory, this);\r\n\r\n            if (component is DiscordButtonComponent button)\r\n                return new ButtonComponentViewModel(button, this);\r\n\r\n            if (component is DiscordLinkButtonComponent link)\r\n                return new ButtonComponentViewModel(link, this);\r\n\r\n            return new UnknownComponentViewModel(component, this);\r\n        }\r\n\r\n        // TODO: would an observable dictionary type be faster here?\r\n        // probably.\r\n        private void UpdateReactions() => syncContext.Post((o) =>\r\n        {\r\n            foreach (var reaction in Message.Reactions)\r\n            {\r\n                ReactionViewModel model;\r\n                if ((model = Reactions.FirstOrDefault(r => r.Equals(reaction))) == null)\r\n                    Reactions.Add(new ReactionViewModel(reaction, ReactCommand));\r\n                else\r\n                    model.Update(reaction);\r\n            }\r\n\r\n            foreach (var model in Reactions.ToList())\r\n            {\r\n                if (!Message.Reactions.Any(r => model.Emoji == r.Emoji))\r\n                    Reactions.Remove(model);\r\n            }\r\n        }, null);\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/ReactionViewModel.cs",
    "content": "﻿using System;\r\nusing System.Windows.Input;\r\nusing DSharpPlus.Entities;\r\nusing Unicord.Universal.Models.Emoji;\r\n\r\nnamespace Unicord.Universal.Models.Messages\r\n{\r\n    public class ReactionViewModel : ViewModelBase, IEquatable<DiscordReaction>\r\n    {\r\n        private DiscordReaction _reaction;\r\n\r\n        public ReactionViewModel(DiscordReaction reaction, ICommand reactCommand)\r\n            : base(null)\r\n        {\r\n            _reaction = reaction;\r\n            ReactCommand = reactCommand;\r\n        }\r\n        public void Update(DiscordReaction reaction)\r\n        {\r\n            _reaction = reaction;\r\n            InvokePropertyChanged(nameof(Count));\r\n            InvokePropertyChanged(nameof(IsMe));\r\n        }\r\n\r\n        public EmojiViewModel Emoji => \r\n            new EmojiViewModel(_reaction.Emoji);\r\n        public int Count =>\r\n            _reaction.Count;\r\n        public bool IsMe =>\r\n            _reaction.IsMe;\r\n        \r\n        public ICommand ReactCommand { get; set; }\r\n\r\n        public bool Equals(DiscordReaction other)\r\n        {\r\n            return _reaction.Emoji == other.Emoji;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Messages/StickerViewModel.cs",
    "content": "﻿using DSharpPlus.Entities;\r\n\r\nnamespace Unicord.Universal.Models.Messages\r\n{\r\n    public class StickerViewModel : ViewModelBase\r\n    {\r\n        private readonly DiscordMessageSticker sticker;\r\n\r\n        public StickerViewModel(DiscordMessageSticker sticker, MessageViewModel parent)\r\n            :base(parent)\r\n        {\r\n            this.sticker = sticker;\r\n        }\r\n\r\n        public string Name\r\n            => sticker.Name;\r\n        public string Description\r\n            => sticker.Description;\r\n        public StickerType Type\r\n            => sticker.Type;\r\n        public StickerFormat Format\r\n            => sticker.FormatType;\r\n        public string StickerUrl\r\n            => sticker.StickerUrl;\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Messaging/DiscordClientMessenger.cs",
    "content": "﻿using System.Threading.Tasks;\r\nusing DSharpPlus;\r\nusing DSharpPlus.EventArgs;\r\nusing Unicord.Universal.Extensions;\r\n// ?? why do i need this suddenly\r\nusing WeakReferenceMessenger = CommunityToolkit.Mvvm.Messaging.WeakReferenceMessenger;\r\n\r\nnamespace Unicord.Universal.Models.Messaging\r\n{\r\n    internal class DiscordClientMessenger\r\n    {\r\n        public static void Register(DiscordClient client)\r\n        {\r\n            client.Ready += OnReady;\r\n            client.Resumed += OnResumed;\r\n            client.SocketOpened += OnSocketOpened;\r\n            client.SocketErrored += OnSocketErrored;\r\n            client.SocketClosed += OnSocketClosed;\r\n            client.UserSettingsUpdated += OnUserSettingsUpdated;\r\n            client.MessageCreated += OnMessageCreated;\r\n            client.MessageDeleted += OnMessageDeleted;\r\n            client.MessageUpdated += OnMessageUpdated;\r\n            client.MessageAcknowledged += OnMessageAcknowledged;\r\n            client.MessageReactionAdded += OnMessageReactionAdded;\r\n            client.MessageReactionRemoved += OnMessageReactionRemoved;\r\n            client.MessageReactionRemovedEmoji += OnMessageReactionRemovedEmoji;\r\n            client.MessageReactionsCleared += OnMessageReactionsCleared;\r\n            client.ChannelCreated += OnChannelCreated;\r\n            client.ChannelDeleted += OnChannelDeleted;\r\n            client.ChannelUpdated += OnChannelUpdated;\r\n            client.ChannelUnreadUpdated += OnChannelUnreadUpdated;\r\n            client.TypingStarted += OnTypingStarted;\r\n            client.GuildCreated += OnGuildCreated;\r\n            client.GuildDeleted += OnGuildDeleted;\r\n            client.GuildUpdated += OnGuildUpdated;\r\n            client.GuildMemberUpdated += OnGuildMemberUpdated;\r\n            client.GuildMembersChunked += OnGuildMembersChunked;\r\n            client.DmChannelCreated += OnDmChannelCreated;\r\n            client.DmChannelDeleted += OnDmChannelDeleted;\r\n            client.RelationshipAdded += OnRelationshipAdded;\r\n            client.RelationshipRemoved += OnRelationshipRemoved;\r\n            client.PresenceUpdated += OnPresenceUpdated;\r\n            client.ReadStateUpdated += OnReadStateUpdated;\r\n        }\r\n        \r\n        public static void Unregister(DiscordClient client)\r\n        {\r\n            client.Ready -= OnReady;\r\n            client.Resumed -= OnResumed;\r\n            client.UserUpdated -= OnUserUpdated;\r\n            client.UserSettingsUpdated -= OnUserSettingsUpdated;\r\n            client.MessageCreated -= OnMessageCreated;\r\n            client.MessageDeleted -= OnMessageDeleted;\r\n            client.MessageUpdated -= OnMessageUpdated;\r\n            client.MessageAcknowledged -= OnMessageAcknowledged;\r\n            client.MessageReactionAdded -= OnMessageReactionAdded;\r\n            client.MessageReactionRemoved -= OnMessageReactionRemoved;\r\n            client.MessageReactionRemovedEmoji -= OnMessageReactionRemovedEmoji;\r\n            client.MessageReactionsCleared -= OnMessageReactionsCleared;\r\n            client.ChannelCreated -= OnChannelCreated;\r\n            client.ChannelDeleted -= OnChannelDeleted;\r\n            client.ChannelUpdated -= OnChannelUpdated;\r\n            client.ChannelUnreadUpdated -= OnChannelUnreadUpdated;\r\n            client.TypingStarted -= OnTypingStarted;\r\n            client.GuildCreated -= OnGuildCreated;\r\n            client.GuildDeleted -= OnGuildDeleted;\r\n            client.GuildUpdated -= OnGuildUpdated;\r\n            client.GuildMemberUpdated -= OnGuildMemberUpdated;\r\n            client.GuildMembersChunked -= OnGuildMembersChunked;\r\n            client.DmChannelCreated -= OnDmChannelCreated;\r\n            client.DmChannelDeleted -= OnDmChannelDeleted;\r\n            client.RelationshipAdded -= OnRelationshipAdded;\r\n            client.RelationshipRemoved -= OnRelationshipRemoved;\r\n            client.PresenceUpdated -= OnPresenceUpdated;\r\n            client.ReadStateUpdated -= OnReadStateUpdated;\r\n        }\r\n\r\n        private static Task OnUserUpdated(DiscordClient client, UserUpdateEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnReady(DiscordClient client, ReadyEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnResumed(DiscordClient client, ResumedEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnUserSettingsUpdated(DiscordClient client, UserSettingsUpdateEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnMessageCreated(DiscordClient client, MessageCreateEventArgs e)\r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnMessageDeleted(DiscordClient client, MessageDeleteEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnMessageUpdated(DiscordClient client, MessageUpdateEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnMessageAcknowledged(DiscordClient client, MessageAcknowledgeEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnMessageReactionAdded(DiscordClient client, MessageReactionAddEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnMessageReactionRemoved(DiscordClient client, MessageReactionRemoveEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnMessageReactionRemovedEmoji(DiscordClient client, MessageReactionRemoveEmojiEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnMessageReactionsCleared(DiscordClient client, MessageReactionsClearEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnTypingStarted(DiscordClient client, TypingStartEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnChannelCreated(DiscordClient client, ChannelCreateEventArgs e)\r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnChannelUpdated(DiscordClient client, ChannelUpdateEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnChannelDeleted(DiscordClient client, ChannelDeleteEventArgs e)\r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnGuildCreated(DiscordClient client, GuildCreateEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnGuildDeleted(DiscordClient client, GuildDeleteEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnGuildUpdated(DiscordClient client, GuildUpdateEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnGuildMemberUpdated(DiscordClient client, GuildMemberUpdateEventArgs e)\r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnDmChannelCreated(DiscordClient client, DmChannelCreateEventArgs e)\r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnDmChannelDeleted(DiscordClient client, DmChannelDeleteEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnRelationshipAdded(DiscordClient client, RelationshipAddEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnRelationshipRemoved(DiscordClient client, RelationshipRemoveEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnPresenceUpdated(DiscordClient client, PresenceUpdateEventArgs e)\r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnReadStateUpdated(DiscordClient client, ReadStateUpdateEventArgs e)\r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnGuildMembersChunked(DiscordClient client, GuildMembersChunkEventArgs e)\r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnChannelUnreadUpdated(DiscordClient client, ChannelUnreadUpdateEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnSocketOpened(DiscordClient sender, SocketEventArgs e)\r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnSocketErrored(DiscordClient sender, SocketErrorEventArgs e)\r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n\r\n        private static Task OnSocketClosed(DiscordClient sender, SocketCloseEventArgs e) \r\n            => Task.WhenAll(WeakReferenceMessenger.Default.Send(e));\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Messaging/DiscordMessages.cs",
    "content": "﻿using DSharpPlus.AsyncEvents;\nusing CommunityToolkit.Mvvm.Messaging.Messages;\nusing System.Threading.Tasks;\n\nnamespace Unicord.Universal.Models.Messaging\n{\n    /// <summary>\n    /// A base message that signals whenever a specific value has changed.\n    /// </summary>\n    /// <typeparam name=\"T\">The type of value that has changed.</typeparam>\n    public class DiscordEventMessage<T> : CollectionRequestMessage<Task> where T : AsyncEventArgs\n    {\n        /// <summary>\n        /// Initializes a new instance of the <see cref=\"ValueChangedMessage{T}\"/> class.\n        /// </summary>\n        /// <param name=\"value\">The value that has changed.</param>\n        public DiscordEventMessage(T value)\n        {\n            Event = value;\n        }\n\n        /// <summary>\n        /// Gets the value that has changed.\n        /// </summary>\n        public T Event { get; }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Relationships/RelationshipViewModel.cs",
    "content": "﻿using System;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.Enums;\r\nusing Unicord.Universal.Models.User;\r\n\r\nnamespace Unicord.Universal.Models.Relationships\r\n{\r\n    public class RelationshipViewModel(DiscordRelationship rel, ViewModelBase owner) \r\n        : ViewModelBase(owner), IEquatable<RelationshipViewModel>, IComparable<RelationshipViewModel>\r\n    {\r\n        private readonly DiscordRelationship rel = rel;\r\n\r\n        public ulong Id\r\n            => rel.Id;\r\n        public DiscordRelationshipType Type\r\n            => rel.RelationshipType;\r\n        public UserViewModel User\r\n            => new UserViewModel(rel.User, null, this);\r\n\r\n        public int CompareTo(RelationshipViewModel other)\r\n        {\r\n            var name1 = User?.DisplayName;\r\n            var name2 = other?.User?.DisplayName;\r\n\r\n            return name1?.CompareTo(name2 ?? \"\") ?? 0;\r\n        }\r\n\r\n        public bool Equals(RelationshipViewModel other)\r\n        {\r\n            return rel.Id == other.rel.Id;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Settings/AccountsSettingsModel.cs",
    "content": "﻿using System.Linq;\r\nusing System.Reflection;\r\nusing System.Text;\r\nusing System.Threading.Tasks;\r\nusing CommunityToolkit.Mvvm.Input;\r\nusing CommunityToolkit.Mvvm.Messaging;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.Enums;\r\nusing DSharpPlus.EventArgs;\r\nusing Microsoft.Toolkit.Uwp.Helpers;\r\nusing Newtonsoft.Json.Bson;\r\nusing Unicord.Universal.Models.Messaging;\r\nusing Unicord.Universal.Models.User;\r\nusing Unicord.Universal.Pages.Settings;\r\nusing Unicord.Universal.Services;\r\nusing Windows.ApplicationModel.DataTransfer;\r\nusing Windows.ApplicationModel.Resources;\r\nusing static Unicord.Constants;\r\n\r\nnamespace Unicord.Universal.Models\r\n{\r\n    public partial class AccountsSettingsModel : ViewModelBase\r\n    {\r\n        private static readonly bool _isWindows11 = SystemInformation.Instance.OperatingSystemVersion.Build >= 22000;\r\n        private static readonly ResourceLoader _resourceLoader = ResourceLoader.GetForViewIndependentUse(\"AccountsSettingsPage\");\r\n\r\n        public AccountsSettingsModel()\r\n        {\r\n            User = discord?.CurrentUser;\r\n\r\n            if (User != null)\r\n            {\r\n                UserPresence = new PresenceViewModel(User, this);\r\n                WeakReferenceMessenger.Default.Register<AccountsSettingsModel, DiscordEventMessage<PresenceUpdateEventArgs>>(this,\r\n                    (t, e) => t.OnPresenceUpdate(e.Event));\r\n            }\r\n\r\n            var strings = ResourceLoader.GetForCurrentView(nameof(AccountsSettingsPage));\r\n            _loading = strings.GetString(\"Loading\");\r\n            _ = Task.Run(() =>\r\n             {\r\n                 if (discord == null)\r\n                     return;\r\n\r\n                 _serverCount = discord.Guilds.Count; \r\n                 InvokePropertyChanged(nameof(ServerCountString));\r\n\r\n                 _channelCount = discord.Guilds.Values.Sum(c => c.Channels.Count) + discord.PrivateChannels.Count;\r\n                 InvokePropertyChanged(nameof(ChannelsCountString));\r\n\r\n                 _memberCount = discord.Guilds.Values.Sum(c => c.MemberCount);\r\n                 InvokePropertyChanged(nameof(MemberCountString));\r\n\r\n                 _friendCount = discord.Relationships.Values.Count(r => r.RelationshipType == DiscordRelationshipType.Friend); \r\n                 InvokePropertyChanged(nameof(FriendCountString));\r\n\r\n                 _openDMCount = discord.PrivateChannels.Count;\r\n                 InvokePropertyChanged(nameof(OpenDMCountString));\r\n\r\n                 _synchedUserCount = discord.UserCacheCount;\r\n                 InvokePropertyChanged(nameof(SynchedUserCountString));\r\n\r\n                 _synchedPresenceCount = discord.Presences.Count;\r\n                 InvokePropertyChanged(nameof(SynchedPresenceCountString));\r\n\r\n                 _emoteCount = discord.Guilds.Values.Sum(c => c.Emojis.Count);\r\n                 InvokePropertyChanged(nameof(EmoteCountString));\r\n             });\r\n        }\r\n\r\n        private DiscordUser _user;\r\n        private string _loading;\r\n\r\n        public PresenceViewModel UserPresence { get; }\r\n\r\n        private int? _serverCount;\r\n        private int? _channelCount;\r\n        private int? _memberCount;\r\n        private int? _friendCount;\r\n        private int? _openDMCount;\r\n        private int? _synchedUserCount;\r\n        private int? _synchedPresenceCount;\r\n        private int? _emoteCount;\r\n\r\n        public DiscordUser User\r\n        {\r\n            get => _user;\r\n            set => OnPropertySet(ref _user, value);\r\n        }\r\n\r\n        private void OnPresenceUpdate(PresenceUpdateEventArgs e)\r\n        {\r\n            if (User == null || UserPresence == null || e.User.Id != User.Id)\r\n                return;\r\n\r\n            UserPresence.OnPresenceUpdated();\r\n        }\r\n\r\n        public bool BackgroundNotifications\r\n        {\r\n            get => App.LocalSettings.Read(BACKGROUND_NOTIFICATIONS_FULL_TRUST, true);\r\n            set => App.LocalSettings.Save(BACKGROUND_NOTIFICATIONS_FULL_TRUST, value);\r\n        }\r\n\r\n        public string BackgroundNotificationIcon\r\n            => _isWindows11 ? \"\\uEA8F\" : \"\\uE7E7\";\r\n\r\n        public string BackgroundNotificationDescription\r\n            => _isWindows11\r\n                ? _resourceLoader.GetString(\"BackgroundNotificationsDescriptionWin11\")\r\n                : _resourceLoader.GetString(\"BackgroundNotificationsDescriptionWin10\");\r\n\r\n        public bool IsSyncContactsVisible\r\n            => !_isWindows11;\r\n\r\n        public string ServerCountString => _serverCount == null ? _loading : $\"{_serverCount:N0}\";\r\n        public string ChannelsCountString => _channelCount == null ? _loading : $\"{_channelCount:N0}\";\r\n        public string MemberCountString => _memberCount == null ? _loading : $\"{_memberCount:N0}\";\r\n        public string FriendCountString => _friendCount == null ? _loading : $\"{_friendCount:N0}\";\r\n        public string OpenDMCountString => _openDMCount == null ? _loading : $\"{_openDMCount:N0}\";\r\n        public string SynchedUserCountString => _synchedUserCount == null ? _loading : $\"{_synchedUserCount:N0}\";\r\n        public string SynchedPresenceCountString => _synchedPresenceCount == null ? _loading : $\"{_synchedPresenceCount:N0}\";\r\n        public string EmoteCountString => _emoteCount == null ? _loading : $\"{_emoteCount:N0}\";\r\n\r\n        [RelayCommand]\r\n        private void CopyStatistics()\r\n        {\r\n            var sb = new StringBuilder();\r\n            sb.AppendLine($\"Friends\\t\\t\\t{FriendCountString}\");\r\n            sb.AppendLine($\"Servers\\t\\t\\t{ServerCountString}\");\r\n            sb.AppendLine($\"Server Channels\\t\\t{ChannelsCountString}\");\r\n            sb.AppendLine($\"Server Members\\t\\t{MemberCountString}\");\r\n            sb.AppendLine($\"DM Channels\\t\\t{OpenDMCountString}\");\r\n            sb.AppendLine($\"Synced Users\\t\\t{SynchedUserCountString}\");\r\n            sb.AppendLine($\"Synced Presences\\t{SynchedPresenceCountString}\");\r\n            sb.AppendLine($\"Emotes\\t\\t\\t{EmoteCountString}\");\r\n\r\n            var dataPackage = new DataPackage();\r\n            dataPackage.SetText(sb.ToString());\r\n            Clipboard.SetContent(dataPackage);\r\n        }\r\n\r\n        [RelayCommand]\r\n        private void CopyUserId()\r\n        { \r\n            var userId = DiscordManager.Discord.CurrentUser?.Id;\r\n            if (userId == null) return;\r\n\r\n            var dataPackage = new DataPackage();\r\n            dataPackage.SetText(userId.Value.ToString());\r\n            Clipboard.SetContent(dataPackage);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Settings/MediaSettingsModel.cs",
    "content": "﻿using System.Collections.Generic;\r\nusing Windows.Media.Transcoding;\r\nusing static Unicord.Constants;\r\n\r\nnamespace Unicord.Universal.Models\r\n{\r\n    public class MediaSettingsModel : ViewModelBase\r\n    {\r\n        private int[] _availableWidths = new[] { 256, 426, 640, 854, 1280, 1920 };\r\n        private int[] _availableHeights = new[] { 144, 240, 360, 480, 720, 1080 };\r\n\r\n        public int AutoTranscodeMedia\r\n        {\r\n            get => (int)App.RoamingSettings.Read(AUTO_TRANSCODE_MEDIA, (int)MediaTranscodeOptions.WhenNeeded);\r\n            set => App.RoamingSettings.Save(AUTO_TRANSCODE_MEDIA, (int)value);\r\n        }\r\n\r\n        public int ProcessingAlgorithm\r\n        {\r\n            get => (int)App.RoamingSettings.Read(VIDEO_PROCESSING, (int)MediaVideoProcessingAlgorithm.Default);\r\n            set => App.RoamingSettings.Save(VIDEO_PROCESSING, (int)value);\r\n        }\r\n\r\n        public int VideoBitrate\r\n        {\r\n            get => (int)(App.RoamingSettings.Read(VIDEO_BITRATE, DEFAULT_VIDEO_BITRATE) / 1000);\r\n            set => App.RoamingSettings.Save(VIDEO_BITRATE, value * 1000);\r\n        }\r\n\r\n        public int AudioBitrate\r\n        {\r\n            get => (int)(App.RoamingSettings.Read(AUDIO_BITRATE, DEFAULT_AUDIO_BITRATE) / 1000);\r\n            set => App.RoamingSettings.Save(AUDIO_BITRATE, value * 1000);\r\n        }\r\n\r\n        public int VideoWidth\r\n        {\r\n            get => App.RoamingSettings.Read(VIDEO_WIDTH, DEFAULT_VIDEO_WIDTH);\r\n            set => App.RoamingSettings.Save(VIDEO_WIDTH, value);\r\n        }\r\n\r\n        public int VideoHeight\r\n        {\r\n            get => App.RoamingSettings.Read(VIDEO_HEIGHT, DEFAULT_VIDEO_HEIGHT);\r\n            set => App.RoamingSettings.Save(VIDEO_HEIGHT, value);\r\n        }\r\n\r\n        public bool SavePhotos\r\n        {\r\n            get => App.RoamingSettings.Read(SAVE_PHOTOS, DEFAULT_SAVE_PHOTOS);\r\n            set => App.RoamingSettings.Save(SAVE_PHOTOS, value);\r\n        }\r\n\r\n        public bool PreserveFrameRate\r\n        {\r\n            get => App.RoamingSettings.Read(VIDEO_PRESERVE_FRAMERATE, DEFAULT_VIDEO_PRESERVE_FRAMERATE);\r\n            set => App.RoamingSettings.Save(VIDEO_PRESERVE_FRAMERATE, value);\r\n        }\r\n\r\n        public List<string> AvailableResolutions => new List<string> { \"144p\", \"240p\", \"360p\", \"480p\", \"720p\", \"1080p\" };\r\n        public string Resolution\r\n        {\r\n            get => $\"{VideoHeight}p\";\r\n            set\r\n            {\r\n                var index = AvailableResolutions.IndexOf(value);\r\n                VideoWidth = _availableWidths[index];\r\n                VideoHeight = _availableHeights[index];\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Settings/MessagingSettingsModel.cs",
    "content": "﻿using DSharpPlus.Entities;\nusing CommunityToolkit.Mvvm.Input;\nusing System;\nusing System.Windows.Input;\nusing Windows.System;\nusing Windows.UI.Xaml;\nusing static Unicord.Constants;\nusing Unicord.Universal.Utilities;\n\nnamespace Unicord.Universal.Models\n{\n    public class MessageStyle\n    {\n        public string Key { get; set; }\n        public Style Value { get; set; }\n        public DiscordMessage ExampleMessage { get; set; }\n    }\n\n    internal class TimestampStyleModel\n    {\n        internal TimestampStyleModel(TimestampStyle style, DateTime timestamp)\n        {\n            Style = style;\n            Timestamp = timestamp;\n        }\n\n        internal TimestampStyle Style { get; set; }\n        internal DateTime Timestamp { get; set; }\n    }\n\n    internal class MessagingSettingsModel : ViewModelBase\n    {\n        private bool _canUseWebp = false;\n\n        private const string WEBP_IMAGE_EXTENSIONS_PRODUCTID = \"9PG2DK419DRG\";\n        private const string WEBP_IMAGE_EXTENSIONS_PACKAGEFAMILYNAME = \"Microsoft.WebpImageExtension_8wekyb3d8bbwe\";\n\n        private static Uri WebPStoreUri = new Uri($\"ms-windows-store://pdp/?ProductId={WEBP_IMAGE_EXTENSIONS_PRODUCTID}\");\n\n        public MessagingSettingsModel()\n        {\n            CanUseWebP = WebPHelpers.HasWebPSupport();\n            OpenWebPStoreLinkCommand = new AsyncRelayCommand(async () => await Launcher.LaunchUriAsync(WebPStoreUri));\n        } \n\n        public bool EnableSpoilers\n        {\n            get => App.RoamingSettings.Read(ENABLE_SPOILERS, true);\n            set => App.RoamingSettings.Save(ENABLE_SPOILERS, value);\n        }\n\n        public int TimestampStyle\n        {\n            get => (int)App.RoamingSettings.Read(TIMESTAMP_STYLE, (int)Unicord.TimestampStyle.Absolute);\n            set => App.RoamingSettings.Save(TIMESTAMP_STYLE, (int)value);\n        }\n\n        public TimestampStyleModel[] TimestampStyles { get; } = new[]\n        {\n            new TimestampStyleModel(Unicord.TimestampStyle.Relative, DateTime.Now.AddMinutes(-3)),\n            new TimestampStyleModel(Unicord.TimestampStyle.Absolute, DateTime.Now.AddMinutes(-3)),\n            new TimestampStyleModel(Unicord.TimestampStyle.Both, DateTime.Now.AddMinutes(-3)),\n        };\n\n        public bool AutoPlayGifs\n        {\n            get => App.RoamingSettings.Read(GIF_AUTOPLAY, true);\n            set => App.RoamingSettings.Save(GIF_AUTOPLAY, value);\n        }\n\n        public bool WarnUnsafeLinks\n        {\n            get => App.RoamingSettings.Read(WARN_UNSAFE_LINKS, true);\n            set => App.RoamingSettings.Save(WARN_UNSAFE_LINKS, value);\n        }\n\n        public bool ShowHugeEmoji\n        {\n            get => App.RoamingSettings.Read(SHOW_HUGE_EMOJI, SHOW_HUGE_EMOJI_DEFAULT);\n            set => App.RoamingSettings.Save(SHOW_HUGE_EMOJI, value);\n        }\n\n        public bool ShowStatusGlyphs\n        {\n            get => App.RoamingSettings.Read(SHOW_STATUS_GLYPHS, SHOW_STATUS_GLYPHS_DEFAULT);\n            set => App.RoamingSettings.Save(SHOW_STATUS_GLYPHS, value);\n        }\n\n        public bool AdjustRoleColours\n        {\n            get => App.RoamingSettings.Read(ADJUST_ROLE_COLOURS, ADJUST_ROLE_COLOURS_DEFAULT);\n            set => App.RoamingSettings.Save(ADJUST_ROLE_COLOURS, value);\n        }\n\n        public double MinimumContrast\n        {\n            get => App.RoamingSettings.Read(MINIMUM_CONTRAST, MINIMUM_CONTRAST_DEFAULT);\n            set => App.RoamingSettings.Save(MINIMUM_CONTRAST, value);\n        }\n\n        public bool EnableWebP\n        {\n            get => App.LocalSettings.Read(ENABLE_WEBP, ENABLE_WEBP_DEFAULT);\n            set => App.LocalSettings.Save(ENABLE_WEBP, value);\n        }\n\n        public bool EnableGuildBrowsing\n        {\n            get => !App.RoamingSettings.Read(ENABLE_GUILD_BROWSING, ENABLE_GUILD_BROWSING_DEFAULT);\n            set => App.RoamingSettings.Save(ENABLE_GUILD_BROWSING, !value);\n        }\n\n        public bool CanUseWebP { get; }\n        public ICommand OpenWebPStoreLinkCommand { get; }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Settings/NotificationsSettingsModel.cs",
    "content": "﻿using Microsoft.Toolkit.Uwp.Helpers;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.Resources;\nusing Windows.Foundation.Metadata;\nusing static Unicord.Constants;\n\nnamespace Unicord.Universal.Models\n{\n    public class NotificationsSettingsModel : ViewModelBase\n    {\n        private bool isPageEnabled = ApiInformation.IsApiContractPresent(typeof(FullTrustAppContract).FullName, 1);\n        private static readonly bool _isWindows11 = SystemInformation.Instance.OperatingSystemVersion.Build >= 22000;\n        private static readonly ResourceLoader _resourceLoader = ResourceLoader.GetForViewIndependentUse(\"NotificationsSettingsPage\");\n\n        public bool IsPageEnabled\n        {\n            get => isPageEnabled;\n            set\n            {\n                OnPropertySet(ref isPageEnabled, value);\n                InvokePropertyChanged(nameof(IsPageAndNotificationsEnabled));\n            }\n        }\n\n        public bool EnableNotifications\n        {\n            get => App.RoamingSettings.Read(ENABLE_NOTIFICATIONS, ENABLE_NOTIFICATIONS_DEFAULT);\n            set\n            {\n                App.RoamingSettings.Save(ENABLE_NOTIFICATIONS, value);\n                InvokePropertyChanged(nameof(IsPageAndNotificationsEnabled));\n            }\n        }\n\n        public bool IsPageAndNotificationsEnabled\n            => IsPageEnabled && EnableNotifications;\n\n\n        public bool EnableDesktopNotifications\n        {\n            get => App.RoamingSettings.Read(ENABLE_DESKTOP_NOTIFICAITONS, ENABLE_DESKTOP_NOTIFICAITONS_DEFAULT);\n            set => App.RoamingSettings.Save(ENABLE_DESKTOP_NOTIFICAITONS, value);\n        }\n\n        public bool EnableBadgeCount\n        {\n            get => App.RoamingSettings.Read(ENABLE_BADGE_COUNT, ENABLE_BADGE_COUNT_DEFAULT);\n            set => App.RoamingSettings.Save(ENABLE_BADGE_COUNT, value);\n        }\n\n        public bool EnableBadgeUnread\n        {\n            get => App.RoamingSettings.Read(ENABLE_BADGE_UNREAD, ENABLE_BADGE_UNREAD_DEFAULT);\n            set => App.RoamingSettings.Save(ENABLE_BADGE_UNREAD, value);\n        }\n        public bool EnableLiveTiles\n        {\n            get => App.RoamingSettings.Read(ENABLE_LIVE_TILES, ENABLE_LIVE_TILES_DEFAULT);\n            set => App.RoamingSettings.Save(ENABLE_LIVE_TILES, value);\n        }\n\n        public string EnableNotificationsDescription\n            => _isWindows11 \n                ? _resourceLoader.GetString(\"EnableNotificationsDescriptionWin11\")\n                : _resourceLoader.GetString(\"EnableNotificationsDescriptionWin10\");\n\n        public string EnableDesktopNotificationsDescription\n            => _isWindows11\n                ? _resourceLoader.GetString(\"EnableDesktopNotificationsDescriptionWin11\")\n                : _resourceLoader.GetString(\"EnableDesktopNotificationsDescriptionWin10\");\n\n        public bool IsLiveTilesVisible\n            => !_isWindows11;\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Settings/RootSettingsModel.cs",
    "content": "﻿using System.Reflection;\r\nusing DSharpPlus.Entities;\r\nusing Microsoft.Toolkit.Uwp.Helpers;\r\nusing Unicord.Universal.Extensions;\r\nusing Windows.ApplicationModel;\r\n\r\nnamespace Unicord.Universal.Models\r\n{\r\n    public class RootSettingsModel : ViewModelBase\r\n    {\r\n        private static readonly bool _isWindows11 = SystemInformation.Instance.OperatingSystemVersion.Build >= 22000;\r\n\r\n        public DiscordUser CurrentUser =>\r\n            discord.CurrentUser;\r\n\r\n        public string AccountItemImage =>\r\n            discord.CurrentUser.GetAvatarUrl(256);\r\n\r\n        public string AccountDisplayName =>\r\n            discord.CurrentUser.Username;\r\n\r\n        public string ProfileDisplayName =>\r\n            discord.CurrentUser?.GlobalName ?? discord.CurrentUser?.Username;\r\n\r\n        public string ProfileAvatarUrl =>\r\n            discord.CurrentUser?.GetAvatarUrl(256);\r\n\r\n        public string DisplayVersion\r\n        {\r\n            get\r\n            {\r\n                var gitSha = \"\";\r\n                var versionedAssembly = typeof(RootSettingsModel).Assembly;\r\n                var attribute = versionedAssembly.GetCustomAttribute<AssemblyInformationalVersionAttribute>();\r\n                var idx = -1;\r\n                if (attribute != null && (idx = attribute.InformationalVersion.IndexOf('+')) != -1)\r\n                {\r\n                    gitSha = \"-\" + attribute.InformationalVersion.Substring(idx + 1, 7);\r\n                }\r\n\r\n                return $\"{Package.Current.Id.Version.ToFormattedString(3)}{gitSha}\";\r\n            }\r\n        }\r\n\r\n        public string NotificationIconGlyph\r\n            => _isWindows11 ? \"\\uEA8F\" : \"\\uE91C\";\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Settings/SecuritySettingsModel.cs",
    "content": "﻿using System;\nusing static Unicord.Constants;\n\nnamespace Unicord.Universal.Models\n{\n    class SecuritySettingsModel : ViewModelBase\n    {\n        public bool HelloForLogin\n        {\n            get => App.RoamingSettings.Read(VERIFY_LOGIN, false);\n            set => App.RoamingSettings.Save(VERIFY_LOGIN, value);\n        }\n\n        public bool HelloForNSFW\n        {\n            get => App.RoamingSettings.Read(VERIFY_NSFW, false);\n            set => App.RoamingSettings.Save(VERIFY_NSFW, value);\n        }\n\n        public bool HelloForSettings\n        {\n            get => App.RoamingSettings.Read(VERIFY_SETTINGS, false);\n            set => App.RoamingSettings.Save(VERIFY_SETTINGS, value);\n        }\n\n        public bool EnableAnalytics\n        {\n            get => App.RoamingSettings.Read(ENABLE_ANALYTICS, true);\n            set => App.RoamingSettings.Save(ENABLE_ANALYTICS, value);\n        }\n\n        public TimeSpan AuthenticationTime\n        {\n            get => App.RoamingSettings.Read(AUTHENTICATION_TIME, TimeSpan.FromMinutes(5));\n            set => App.RoamingSettings.Save(AUTHENTICATION_TIME, value);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Settings/ThemesSettingsModel.cs",
    "content": "using Microsoft.Toolkit.Uwp.Helpers;\nusing Unicord.Universal.Services;\nusing Windows.UI.Xaml;\nusing static Unicord.Constants;\n\nnamespace Unicord.Universal.Models\n{\n    // not super useful considering most things here can't nicely be MMVMed\n    public class ThemesSettingsModel : ViewModelBase\n    {\n        private bool _isDirty;\n        private int _appTheme;\n\n        private int _initialColour;\n        private int _initialTheme;\n\n        public ThemesSettingsModel()\n        {\n            _appTheme = (int)ThemeService.GetForCurrentView().GetSettingsTheme();\n            _initialColour = App.LocalSettings.Read(REQUESTED_COLOUR_SCHEME, (int)ElementTheme.Default);\n            _initialTheme = _appTheme;\n        }\n\n\n        public bool SunValleyThemeSupported\n            => SystemInformation.Instance.OperatingSystemVersion.Build >= 17763;\n\n        public bool IsLoading { get; internal set; }\n        public ElementTheme PreviewRequestedTheme { get; private set; }\n\n        public int ColourScheme\n        {\n            get => (int)App.LocalSettings.Read(REQUESTED_COLOUR_SCHEME, (int)ElementTheme.Default);\n            set\n            {\n                App.LocalSettings.Save(REQUESTED_COLOUR_SCHEME, value);\n                InvokePropertyChanged(nameof(ColourScheme));\n                InvokePropertyChanged(nameof(IsDirty));\n            }\n        }\n\n        public int ApplicationTheme\n        {\n            get => _appTheme;\n            set\n            {\n                OnPropertySet(ref _appTheme, value);\n                ThemeService.GetForCurrentView()\n                    .SetThemeOnRelaunch((AppTheme)value);\n                InvokePropertyChanged(nameof(IsDirty));\n            }\n        }\n\n        public bool IsDirty\n            => ApplicationTheme != _initialTheme || ColourScheme != _initialColour;\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/Settings/VoiceSettingsModel.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Windows.Devices.Enumeration;\nusing Unicord.Universal.Voice;\n\nnamespace Unicord.Universal.Models\n{\n    public class DeviceInformationWrapper\n    {\n        public DeviceInformation Info { get; set; }\n\n        public string Id => Info?.Id;\n        public string Name => Info?.Name;\n\n        public static implicit operator DeviceInformationWrapper(DeviceInformation info) { return new DeviceInformationWrapper() { Info = info }; }\n    }\n\n    public class VoiceSettingsModel : ViewModelBase\n    {\n        private DeviceInformationWrapper _inputDevice;\n        private DeviceInformationWrapper _outputDevice;\n\n        public VoiceSettingsModel()\n        {\n            AvailableInputDevices = new List<DeviceInformationWrapper>();\n            AvailableOutputDevices = new List<DeviceInformationWrapper>();\n            AvailableInputDevices.Add(new DeviceInformationWrapper());\n            AvailableOutputDevices.Add(new DeviceInformationWrapper());\n        }\n\n        public async Task LoadAsync()\n        {\n            foreach (var dev in await DeviceInformation.FindAllAsync(DeviceClass.AudioCapture))\n            {\n                AvailableInputDevices.Add(dev);\n            }\n\n            foreach (var dev in await DeviceInformation.FindAllAsync(DeviceClass.AudioRender))\n            {\n                AvailableOutputDevices.Add(dev);\n            }\n\n            var inputDeviceId = App.LocalSettings.Read<string>(\"InputDevice\", null);\n            var outputDeviceId = App.LocalSettings.Read<string>(\"OutputDevice\", null);\n\n            _inputDevice = AvailableInputDevices.FirstOrDefault(d => d?.Id == inputDeviceId);\n            _outputDevice = AvailableOutputDevices.FirstOrDefault(d => d?.Id == outputDeviceId);\n\n            InvokePropertyChanged(nameof(AvailableInputDevices));\n            InvokePropertyChanged(nameof(AvailableOutputDevices));\n            InvokePropertyChanged(nameof(InputDevice));\n            InvokePropertyChanged(nameof(OutputDevice));\n        }\n\n        internal Task SaveAsync()\n        {\n            App.LocalSettings.Save(\"InputDevice\", InputDevice?.Id);\n            App.LocalSettings.Save(\"OutputDevice\", OutputDevice?.Id);\n\n            return Task.CompletedTask;\n        }\n\n        public List<DeviceInformationWrapper> AvailableInputDevices { get; set; }\n        public List<DeviceInformationWrapper> AvailableOutputDevices { get; set; }\n\n        public DeviceInformationWrapper InputDevice\n        {\n            get => _inputDevice;\n            set => OnPropertySet(ref _inputDevice, value);\n        }\n\n        public DeviceInformationWrapper OutputDevice\n        {\n            get => _outputDevice;\n            set => OnPropertySet(ref _outputDevice, value);\n        }\n\n        public uint SuppressionLevel\n        {\n            get => App.LocalSettings.Read(\"NoiseSuppression\", (uint)NoiseSuppressionLevel.Medium);\n            set => App.LocalSettings.Save(\"NoiseSuppression\", value);\n        }\n\n        public bool VoiceActivity\n        {\n            get => App.LocalSettings.Read(\"VoiceActivity\", true);\n            set => App.LocalSettings.Save(\"VoiceActivity\", value);\n        }\n\n        public bool EchoCancellation\n        {\n            get => App.LocalSettings.Read(\"EchoCancellation\", true);\n            set => App.LocalSettings.Save(\"EchoCancellation\", value);\n        }\n\n        public bool AutomaticGainControl\n        {\n            get => App.LocalSettings.Read(\"AutomaticGainControl\", true);\n            set => App.LocalSettings.Save(\"AutomaticGainControl\", value);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/SharePageViewModel.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Collections.ObjectModel;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing DSharpPlus.Entities;\nusing Unicord.Universal.Models.Channels;\nusing Unicord.Universal.Models.Guild;\nusing Windows.ApplicationModel.DataTransfer;\nusing Windows.ApplicationModel.DataTransfer.ShareTarget;\nusing Windows.Storage.FileProperties;\nusing Windows.Storage;\nusing Windows.UI.Xaml.Media.Imaging;\n\nnamespace Unicord.Universal.Models\n{\n    internal class SharePageGuildViewModel : ViewModelBase\n    {\n        private GuildViewModel _guildViewModel;\n\n        public SharePageGuildViewModel()\n        {\n\n        }\n\n        public SharePageGuildViewModel(DiscordGuild guild)\n        {\n            _guildViewModel = new GuildViewModel(guild.Id, this);\n        }\n\n        public IEnumerable<ChannelViewModel> GetAccessibleChannels()\n        {\n            if (_guildViewModel != null)\n            {\n                return _guildViewModel.AccessibleChannels;\n            }\n            else\n            {\n                return discord.PrivateChannels\n                    .OrderBy(c => c.Value.LastMessageId)\n                    .Select(c => new DmChannelListViewModel(c.Value));\n            }\n        }\n    }\n\n\n    internal class SharePageViewModel : ViewModelBase\n    {\n        private ShareOperation _operation;\n        private StorageFile _file;\n        private BitmapImage _image;\n        private string _text;\n        public SharePageViewModel(ShareOperation operation)\n        {\n            this._operation = operation;\n        }\n\n        public ObservableCollection<SharePageGuildViewModel> Guilds { get; }\n        public BitmapImage Thumbnail { get => _image; set => OnPropertySet(ref _image, value); }\n        public string Text { get => _text; set => OnPropertySet(ref _text, value); }\n\n        private async Task LoadAsync()\n        {\n            _operation.ReportStarted();\n            try\n            {\n                var data = _operation.Data;\n                if (data.AvailableFormats.Contains(StandardDataFormats.StorageItems))\n                {\n                    _file = (await data.GetStorageItemsAsync()).FirstOrDefault() as StorageFile;\n\n                    var img = new BitmapImage();\n                    Thumbnail = img;\n                    await img.SetSourceAsync(await _file.GetThumbnailAsync(ThumbnailMode.SingleItem));\n                    return;\n                }\n                else if (data.AvailableFormats.Contains(StandardDataFormats.Bitmap))\n                {\n                    _file = await Tools.GetImageFileFromDataPackage(data);\n\n                    var img = new BitmapImage();\n                    Thumbnail = img;\n                    await img.SetSourceAsync(await _file.GetThumbnailAsync(ThumbnailMode.PicturesView));\n\n                    return;\n                }\n\n                if (data.AvailableFormats.Contains(StandardDataFormats.Text))\n                {\n                    var text = await data.GetTextAsync();\n                    Text += text;\n                }\n\n                if (data.AvailableFormats.Contains(StandardDataFormats.WebLink))\n                {\n                    var text = await data.GetWebLinkAsync();\n                    Text += text;\n                }\n            }\n            finally\n            {\n                _operation.ReportDataRetrieved();\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/User/PresenceViewModel.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing DSharpPlus.Entities;\r\nusing Unicord.Universal.Converters;\r\nusing Unicord.Universal.Models.Emoji;\r\nusing Windows.ApplicationModel.Resources;\r\nusing Windows.UI;\r\n\r\nnamespace Unicord.Universal.Models.User\r\n{\r\n    public class PresenceViewModel : ViewModelBase\r\n    {\r\n        private static readonly ResourceLoader strings\r\n            = ResourceLoader.GetForViewIndependentUse(\"Converters\");\r\n\r\n        private EmojiViewModel emoji;\r\n        private string statusTitle;\r\n        private string statusText;\r\n\r\n        protected ulong userId;\r\n        private bool empty;\r\n\r\n        public PresenceViewModel(DiscordUser user, ViewModelBase parent)\r\n            : base(parent)\r\n        {\r\n            userId = user.Id;\r\n            OnPresenceUpdated();\r\n        }\r\n\r\n        public DiscordPresence Presence\r\n            => discord.Presences.TryGetValue(userId, out var presence) ? presence : null;\r\n\r\n        public UserStatus Status\r\n            => Presence?.Status ?? UserStatus.Offline;\r\n\r\n        // \r\n        // Presences are a bit weird, because we have so many of them and they tend to be tied to a user\r\n        // it's the responsibility of the UserViewModel to notify of presence changes\r\n        //\r\n        internal void OnPresenceUpdated()\r\n        {\r\n            try\r\n            {\r\n                if (Presence == null || Presence.Activities == null)\r\n                {\r\n                    HasActivity = false;\r\n                    return;\r\n                }\r\n\r\n                InvokePropertyChanged(nameof(Colour));\r\n                InvokePropertyChanged(nameof(PresenceGeometry));\r\n                InvokePropertyChanged(nameof(Status));\r\n\r\n                var activity = Presence.Activities?\r\n                    .Where(p => p != null)\r\n                    .OrderByDescending(p => p.ActivityType)\r\n                    .FirstOrDefault();\r\n\r\n                HasActivity = activity != null;\r\n                if (activity == null) return;\r\n\r\n                switch (activity.ActivityType)\r\n                {\r\n                    case ActivityType.Playing:\r\n                        CondensedTitle = strings.GetString(\"PlayingStatus\");\r\n                        CondensedText = activity.Name;\r\n                        break;\r\n                    case ActivityType.Streaming:\r\n                        CondensedTitle = strings.GetString(\"StreamingStatus\");\r\n                        CondensedText = activity.RichPresence?.Details ?? activity.Name;\r\n                        break;\r\n                    case ActivityType.ListeningTo:\r\n                        CondensedTitle = strings.GetString(\"ListeningStatus\");\r\n                        CondensedText = activity.Name;\r\n                        break;\r\n                    case ActivityType.Watching:\r\n                        CondensedTitle = strings.GetString(\"WatchingStatus\");\r\n                        CondensedText = activity.Name;\r\n                        break;\r\n                    case ActivityType.Custom:\r\n                        {\r\n                            var custom = activity.CustomStatus;\r\n                            if (custom == null)\r\n                            {\r\n                                HasActivity = false;\r\n                                break;\r\n                            }\r\n\r\n                            if (!string.IsNullOrWhiteSpace(custom.Name))\r\n                            {\r\n                                // swapped so we have the text in not-bold\r\n                                CondensedText = null;\r\n                                CondensedTitle = custom.Name;\r\n                            }\r\n\r\n                            if (custom.Emoji != null)\r\n                                Emoji = new EmojiViewModel(custom.Emoji);\r\n\r\n                            break;\r\n                        }\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                HasActivity = false;\r\n                Logger.LogError(ex);\r\n            }\r\n        }\r\n\r\n        // TODO: these properties suck\r\n        public Color Colour\r\n        {\r\n            get\r\n            {\r\n                var converter = (PresenceColourConverter)App.Current.Resources[\"PresenceColourConverter\"];\r\n                return (Color)converter.Convert(Presence, typeof(Color), null, null);\r\n            }\r\n        }\r\n\r\n        public string PresenceGeometry\r\n        {\r\n            get\r\n            {\r\n                var converter = (PresenceGeometryConverter)App.Current.Resources[\"PresenceGeometryConverter\"];\r\n                return (string)converter.Convert(Presence, typeof(string), null, null);\r\n            }\r\n        }\r\n\r\n        public bool HasActivity { get => empty; private set => OnPropertySet(ref empty, value); }\r\n        public EmojiViewModel Emoji { get => emoji; private set => OnPropertySet(ref emoji, value); }\r\n        public string CondensedTitle { get => statusTitle; private set => OnPropertySet(ref statusTitle, value); }\r\n        public string CondensedText { get => statusText; private set => OnPropertySet(ref statusText, value); }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/User/RoleViewModel.cs",
    "content": "﻿using DSharpPlus.Entities;\nusing Unicord.Universal.Extensions;\nusing Windows.UI.Xaml.Media;\n\nnamespace Unicord.Universal.Models.User\n{\n    public class RoleViewModel : ViewModelBase\n    {\n        private DiscordRole role;\n\n        public RoleViewModel(DiscordRole role, ViewModelBase parent)\n            : base(parent)\n        {\n            this.role = role;\n        }\n\n        public string Name\n            => this.role.Name;\n        public SolidColorBrush Color\n            =>  role.Color.Value != 0 ?\n                new SolidColorBrush(role.Color.ToColor())\n            : App.Current.Resources[\"DefaultTextForegroundThemeBrush\"] as SolidColorBrush; // FallbackValue just doesn't work lol\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Models/User/UserViewModel.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Windows.Input;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.EventArgs;\r\nusing CommunityToolkit.Mvvm.Messaging;\r\nusing Unicord.Universal.Commands;\r\nusing Unicord.Universal.Commands.Members;\r\nusing Unicord.Universal.Commands.Users;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models.Guild;\r\nusing Unicord.Universal.Utilities;\r\nusing Windows.UI.Xaml;\r\n\r\nnamespace Unicord.Universal.Models.User\r\n{\r\n    public class UserViewModel : ViewModelBase, IEquatable<UserViewModel>, IEquatable<DiscordUser>, ISnowflake\r\n    {\r\n        private DiscordUser _userCache;\r\n\r\n        protected ulong id;\r\n        protected ulong? guildId;\r\n\r\n        private PresenceViewModel _presenceVmCache;\r\n        private List<GuildViewModel> _mutualGuilds;\r\n        private List<RoleViewModel> _rolesCache;\r\n\r\n        internal UserViewModel(DiscordUser user, ulong? guildId, ViewModelBase parent = null)\r\n            : this(user.Id, (user as DiscordMember)?.Guild.Id, parent)\r\n        {\r\n            _userCache = user;\r\n        }\r\n\r\n        internal UserViewModel(ulong user, ulong? guildId, ViewModelBase parent = null)\r\n            : base(parent)\r\n        {\r\n            id = user;\r\n            this.guildId = guildId;\r\n            WeakReferenceMessenger.Default.Register(this,\r\n                            (MessageHandler<UserViewModel, Messaging.DiscordEventMessage<UserUpdateEventArgs>>)((t, e) => t.OnUserUpdate(e.Event)));\r\n            WeakReferenceMessenger.Default.Register(this,\r\n                            (MessageHandler<UserViewModel, Messaging.DiscordEventMessage<PresenceUpdateEventArgs>>)((t, e) => t.OnPresenceUpdate(e.Event)));\r\n\r\n            OpenOverlayCommand = new ShowUserOverlayCommand(this);\r\n            MessageCommand = new SendMessageCommand(this);\r\n\r\n            if (this.guildId != null)\r\n            {\r\n                WeakReferenceMessenger.Default.Register(this,\r\n                                    (MessageHandler<UserViewModel, Messaging.DiscordEventMessage<GuildMemberUpdateEventArgs>>)((t, e) => t.OnGuildMemberUpdate(e.Event)));\r\n                WeakReferenceMessenger.Default.Register(this,\r\n                                    (MessageHandler<UserViewModel, Messaging.DiscordEventMessage<GuildMembersChunkEventArgs>>)((t, e) => t.OnGuildMemberChunk(e.Event)));\r\n\r\n                KickCommand = new KickCommand(this);\r\n                BanCommand = new BanCommand(this);\r\n                ChangeNicknameCommand = new ChangeNicknameCommand(this);\r\n            }\r\n            else\r\n            {\r\n                KickCommand = NullCommand.Instance;\r\n                BanCommand = NullCommand.Instance;\r\n                ChangeNicknameCommand = NullCommand.Instance;\r\n            }\r\n        }\r\n\r\n        public ulong Id\r\n            => id;\r\n\r\n        public DiscordUser User\r\n            => discord.TryGetCachedUser(Id, out var user) && !string.IsNullOrWhiteSpace(user.Username) ? user : _userCache;\r\n\r\n        public DiscordMember Member\r\n        {\r\n            get\r\n            {\r\n                if (guildId == null) return null;\r\n\r\n                if (!discord.TryGetCachedGuild(guildId.Value, out var guild))\r\n                    throw new InvalidOperationException();\r\n\r\n                return guild.Members.TryGetValue(Id, out var member) ? member : (_userCache as DiscordMember);\r\n            }\r\n        }\r\n\r\n        public GuildViewModel Guild\r\n            => guildId != null ? new GuildViewModel(guildId.Value, this) : null;\r\n\r\n        public bool IsMember\r\n            => Member != null;\r\n\r\n        public string DisplayName\r\n            => Member != null && !string.IsNullOrWhiteSpace(Member.Nickname) \r\n            ? Member.Nickname\r\n            : (User?.GlobalName ?? User?.Username);\r\n\r\n        public string Nickname\r\n            => Member?.Nickname;\r\n        public string GlobalName\r\n            => User.GlobalName;\r\n        public string Username\r\n            => User.Username;\r\n\r\n        public string AvatarUrl\r\n            => (Member as DiscordUser)?.GetAvatarUrl(64) ?? User.GetAvatarUrl(64);\r\n\r\n        public string Mention\r\n            => User.Mention;\r\n\r\n        public bool IsCurrent\r\n            => User.Id == discord.CurrentUser.Id;\r\n\r\n        public bool IsBot\r\n            => User.IsBot;\r\n\r\n        public DiscordColor Color\r\n            => Member?.Color ?? default;\r\n\r\n        public PresenceViewModel Presence\r\n            => _presenceVmCache ??= new(User, this);\r\n\r\n        public ICommand KickCommand { get; }\r\n        public ICommand BanCommand { get; }\r\n        public ICommand ChangeNicknameCommand { get; }\r\n        public ICommand MessageCommand { get; }\r\n        public ICommand OpenOverlayCommand { get; }\r\n\r\n        public Visibility KickVisibility\r\n            => KickCommand?.CanExecute(null) == true ? Visibility.Visible : Visibility.Collapsed;\r\n        public Visibility BanVisibility\r\n            => BanCommand?.CanExecute(null) == true ? Visibility.Visible : Visibility.Collapsed;\r\n\r\n        public DateTimeOffset JoinedAt\r\n            => Member?.JoinedAt ?? default;\r\n\r\n        public List<GuildViewModel> MutualGuilds\r\n        {\r\n            get\r\n            {\r\n                if (this._mutualGuilds != null)\r\n                    return this._mutualGuilds;\r\n\r\n                var orderedGuilds = EmojiUtilities.GetOrderedGuildsList();\r\n                _mutualGuilds ??= discord.Guilds.Values.Where(g => g.Members.ContainsKey(this.id))\r\n                    .OrderBy(g => orderedGuilds.IndexOf(g.Id))\r\n                    .Select(g => new GuildViewModel(g.Id, this))\r\n                    .ToList();\r\n\r\n                return _mutualGuilds;\r\n            }\r\n        }\r\n\r\n        public List<RoleViewModel> Roles\r\n            => Member != null ?\r\n                _rolesCache ??= Member.Roles.Select(r => new RoleViewModel(r, this)).ToList() : null;\r\n\r\n        private void OnGuildMemberUpdate(GuildMemberUpdateEventArgs e)\r\n        {\r\n            var member = Member;\r\n            if (member == null || e.Member.Id != member.Id || e.Guild.Id != member.Guild.Id)\r\n                return;\r\n\r\n            InvokePropertyChanged(nameof(DisplayName));\r\n\r\n            if (!e.RolesBefore.SequenceEqual(e.RolesAfter))\r\n                InvokePropertyChanged(nameof(Color));\r\n        }\r\n\r\n        private void OnGuildMemberChunk(GuildMembersChunkEventArgs e)\r\n        {\r\n            if (Member == null || e.Guild.Id != Member.Guild.Id)\r\n                return;\r\n\r\n            if (e.Members.TryGetValue(Member.Id, out var member))\r\n            {\r\n                InvokePropertyChanged(nameof(DisplayName));\r\n                InvokePropertyChanged(nameof(Color));\r\n            }\r\n        }\r\n\r\n        private void OnUserUpdate(UserUpdateEventArgs e)\r\n        {\r\n            if (User == null || e.UserAfter.Id != User.Id)\r\n                return;\r\n\r\n            InvokePropertyChanged(nameof(DisplayName));\r\n\r\n            if (e.UserAfter.AvatarHash != e.UserBefore.AvatarHash)\r\n                InvokePropertyChanged(nameof(AvatarUrl));\r\n        }\r\n\r\n        private void OnPresenceUpdate(PresenceUpdateEventArgs e)\r\n        {\r\n            if (User == null || e.User.Id != User.Id || _presenceVmCache == null)\r\n                return;\r\n\r\n            _presenceVmCache.OnPresenceUpdated();\r\n            InvokePropertyChanged(nameof(Presence));\r\n        }\r\n\r\n        public bool Equals(UserViewModel other)\r\n        {\r\n            return Equals(other.User);\r\n        }\r\n\r\n        public bool Equals(DiscordUser other)\r\n        {\r\n            return ((IEquatable<DiscordUser>)User).Equals(other);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/ViewModelbase.cs",
    "content": "﻿using System.ComponentModel;\r\nusing System.Diagnostics;\r\nusing System.Runtime.CompilerServices;\r\nusing System.Threading;\r\nusing DSharpPlus;\r\nusing Unicord.Universal.Services;\r\n\r\nnamespace Unicord.Universal.Models\r\n{\r\n    public abstract class ViewModelBase : INotifyPropertyChanged\r\n    {\r\n        protected DiscordClient discord;\r\n        protected SynchronizationContext syncContext;\r\n\r\n        public ViewModelBase(ViewModelBase parent = null)\r\n        {\r\n            discord = DiscordManager.Discord; // capture the discord client\r\n            syncContext = parent?.syncContext ?? SynchronizationContext.Current;\r\n            Debug.Assert(discord != null);\r\n            Debug.Assert(syncContext != null);\r\n        }\r\n\r\n        public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n        // Holy hell is the C# Discord great.\r\n        // Y'all should join https://aka.ms/csharp-discord\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        protected void OnPropertySet<T>(ref T oldValue, T newValue, [CallerMemberName] string property = null)\r\n        {\r\n            if (oldValue == null || newValue == null || !newValue.Equals(oldValue))\r\n            {\r\n                oldValue = newValue;\r\n                InvokePropertyChanged(property);\r\n            }\r\n        }\r\n\r\n        // overload might avoid boxing?\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        protected void OnPropertySet<T>(ref T oldValue, T newValue, params string[] additionalProperties)\r\n        {\r\n            if (oldValue == null || newValue == null || !newValue.Equals(oldValue))\r\n            {\r\n                oldValue = newValue;\r\n                syncContext.Post((o) =>\r\n                {\r\n                    foreach (var str in additionalProperties)\r\n                    {\r\n                        var args = new PropertyChangedEventArgs(str);\r\n                        PropertyChanged?.Invoke(this, args);\r\n                    }\r\n                }, null);\r\n            }\r\n        }\r\n\r\n\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        protected void UnsafeOnPropertySet<T>(ref T oldValue, T newValue, [CallerMemberName] string property = null)\r\n        {\r\n            if (oldValue == null || newValue == null || !newValue.Equals(oldValue))\r\n            {\r\n                oldValue = newValue;\r\n                UnsafeInvokePropertyChanged(property);\r\n            }\r\n        }\r\n\r\n        [MethodImpl(MethodImplOptions.AggressiveInlining)]\r\n        protected void UnsafeOnPropertySet<T>(ref T oldValue, T newValue, params string[] additionalProperties)\r\n        {\r\n            if (oldValue == null || newValue == null || !newValue.Equals(oldValue))\r\n            {\r\n                oldValue = newValue;\r\n                foreach (var property in additionalProperties)\r\n                {\r\n                    UnsafeInvokePropertyChanged(property);\r\n                }\r\n            }\r\n        }\r\n\r\n        public virtual void InvokePropertyChanged([CallerMemberName] string property = null)\r\n        {\r\n            var args = new PropertyChangedEventArgs(property);\r\n            syncContext.Post((o) => PropertyChanged?.Invoke(this, (PropertyChangedEventArgs)o), args);\r\n        }\r\n\r\n        protected void UnsafeInvokePropertyChanged([CallerMemberName] string property = null)\r\n        {\r\n            var args = new PropertyChangedEventArgs(property);\r\n            PropertyChanged?.Invoke(this, args);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Voice/Transport/VoiceDispatch.cs",
    "content": "﻿using Newtonsoft.Json;\r\n\r\nnamespace Unicord.Universal.Voice.Transport\r\n{\r\n    internal sealed class VoiceDispatch\r\n    {\r\n        [JsonProperty(\"op\")]\r\n        public int OpCode { get; set; }\r\n\r\n        [JsonProperty(\"d\")]\r\n        public object Payload { get; set; }\r\n\r\n        [JsonProperty(\"s\", NullValueHandling = NullValueHandling.Ignore)]\r\n        public int? Sequence { get; set; }\r\n\r\n        [JsonProperty(\"t\", NullValueHandling = NullValueHandling.Ignore)]\r\n        public string EventName { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Voice/Transport/VoiceStateUpdatePayload.cs",
    "content": "﻿using Newtonsoft.Json;\r\n\r\nnamespace Unicord.Universal.Voice.Transport\r\n{\r\n    internal sealed class VoiceStateUpdatePayload\r\n    {\r\n        [JsonProperty(\"guild_id\")]\r\n        public ulong GuildId { get; set; }\r\n\r\n        [JsonProperty(\"channel_id\")]\r\n        public ulong? ChannelId { get; set; }\r\n\r\n        [JsonProperty(\"user_id\", NullValueHandling = NullValueHandling.Ignore)]\r\n        public ulong? UserId { get; set; }\r\n\r\n        [JsonProperty(\"session_id\", NullValueHandling = NullValueHandling.Ignore)]\r\n        public string SessionId { get; set; }\r\n\r\n        [JsonProperty(\"self_deaf\", NullValueHandling = NullValueHandling.Ignore)]\r\n        public bool? Deafened { get; set; }\r\n\r\n        [JsonProperty(\"self_mute\", NullValueHandling = NullValueHandling.Ignore)]\r\n        public bool? Muted { get; set; }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Models/Voice/VoiceConnectionModel.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Threading.Tasks;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing DSharpPlus.EventArgs;\nusing DSharpPlus.Net.Abstractions;\nusing Microsoft.AppCenter.Analytics;\nusing Unicord.Universal.Services;\nusing Unicord.Universal.Voice;\nusing Unicord.Universal.Voice.Background;\nusing Unicord.Universal.Voice.Transport;\nusing Windows.ApplicationModel;\nusing Windows.ApplicationModel.AppService;\nusing Windows.ApplicationModel.Calls;\nusing Windows.ApplicationModel.Resources;\nusing Windows.Foundation.Collections;\n\nnamespace Unicord.Universal.Models.Voice\n{\n    public class VoiceConnectionModel : ViewModelBase\n    {\n        private AppServiceConnection _appServiceConnection;\n        private VoipCallCoordinator _voipCallCoordinator;\n        private ResourceLoader _strings;\n        private VoiceState _state = VoiceState.None;\n        private TaskCompletionSource<VoiceStateUpdateEventArgs> _voiceStateUpdateCompletion;\n        private TaskCompletionSource<VoiceServerUpdateEventArgs> _voiceServerUpdateCompletion;\n        private bool _appServiceConnected;\n        private uint _webSocketPing;\n        private uint _udpPing;\n        private string _connectionStatus;\n\n        public string ConnectionStatus { get => _connectionStatus; set => OnPropertySet(ref _connectionStatus, value); }\n        public DiscordChannel Channel { get; }\n\n        public bool Muted\n        {\n            get => _state != VoiceState.None;\n            set => OnPropertySet(ref _state, _state ^ VoiceState.Muted);\n        }\n\n        public bool Deafened\n        {\n            get => _state.HasFlag(VoiceState.Deafened);\n            set\n            {\n                OnPropertySet(ref _state, _state ^ VoiceState.Deafened);\n                InvokePropertyChanged(nameof(Muted));\n            }\n        }\n\n        public uint WebSocketPing { get => _webSocketPing; set => OnPropertySet(ref _webSocketPing, value); }\n        public uint UdpPing { get => _udpPing; set => OnPropertySet(ref _udpPing, value); }\n        public event EventHandler<EventArgs> Disconnected;\n\n        /// <summary>\n        /// If voice is connected before Unicord launched, returns a VoiceConnectionModel for \n        /// that connection, otherwise null.\n        /// </summary>\n        public static async Task<VoiceConnectionModel> FindExistingConnectionAsync()\n        {\n            var connection = new AppServiceConnection()\n            {\n                AppServiceName = \"com.wankerr.Unicord.Voice\",\n                PackageFamilyName = Package.Current.Id.FamilyName\n            };\n\n            if (await connection.OpenAsync() != AppServiceConnectionStatus.Success)\n            {\n                connection.Dispose();\n                return null;\n            }\n\n            var strings = ResourceLoader.GetForViewIndependentUse(\"Voice\");\n            var stateRequest = new ValueSet() { [\"req\"] = (uint)VoiceServiceRequest.StateRequest };\n            var info = await connection.SendMessageAsync(stateRequest);\n            if (info == null || info.Message == null)\n                return null;\n\n            var state = (VoiceServiceState)(uint)info.Message[\"state\"];\n            if (state == VoiceServiceState.ReadyToConnect)\n            {\n                connection.Dispose();\n                return null;\n            }\n\n            var channel_id = (ulong)info.Message[\"channel_id\"];\n            var guild_id = (ulong)info.Message[\"guild_id\"];\n            var muted = (bool)info.Message[\"muted\"];\n            var deafened = (bool)info.Message[\"deafened\"];\n\n            var channel = DiscordManager.Discord.Guilds[guild_id].Channels[channel_id];\n            var vstate = VoiceState.None;\n            if (muted)\n                vstate = vstate & VoiceState.Muted;\n            if (deafened)\n                vstate = VoiceState.Muted | VoiceState.Deafened;\n\n            return new VoiceConnectionModel(channel, vstate, connection) { ConnectionStatus = string.Format(strings.GetString(\"ConnectedStateFormat\"), channel.Name), _strings = strings };\n        }\n\n        public VoiceConnectionModel(DiscordChannel channel)\n        {\n            _voiceStateUpdateCompletion = new TaskCompletionSource<VoiceStateUpdateEventArgs>();\n            _voiceServerUpdateCompletion = new TaskCompletionSource<VoiceServerUpdateEventArgs>();\n            _voipCallCoordinator = VoipCallCoordinator.GetDefault();\n            _strings = ResourceLoader.GetForViewIndependentUse(\"Voice\");\n\n            Channel = channel;\n            ConnectionStatus = _strings.GetString(\"InitialConnectionState\");\n            PropertyChanged += OnPropertyChanged;\n\n            _appServiceConnection = new AppServiceConnection()\n            {\n                AppServiceName = \"com.wankerr.Unicord.Voice\",\n                PackageFamilyName = Package.Current.Id.FamilyName\n            };\n\n            _appServiceConnection.RequestReceived += OnRequestReceived;\n            _appServiceConnection.ServiceClosed += OnServiceClosed;\n        }\n\n        private VoiceConnectionModel(DiscordChannel channel, VoiceState vstate, AppServiceConnection connection)\n        {\n            Channel = channel;\n            PropertyChanged += OnPropertyChanged;\n\n            _voipCallCoordinator = VoipCallCoordinator.GetDefault();\n            _appServiceConnection = connection;\n            _appServiceConnection.RequestReceived += OnRequestReceived;\n            _appServiceConnection.ServiceClosed += OnServiceClosed;\n            _state = vstate;\n        }\n\n        private async void OnPropertyChanged(object sender, PropertyChangedEventArgs e)\n        {\n            if (e.PropertyName == nameof(Muted))\n            {\n                await ToggleMuteAsync();\n            }\n\n            if (e.PropertyName == nameof(Deafened))\n            {\n                await ToggleDeafenAsync();\n            }\n        }\n\n        public async Task UpdatePreferredAudioDevicesAsync(string audioRender, string audioCapture)\n        {\n            var set = new ValueSet() { [\"req\"] = (uint)VoiceServiceRequest.SettingsUpdate };\n            if (audioRender != null)\n                set[\"output_device\"] = audioRender;\n\n            if (audioCapture != null)\n                set[\"input_device\"] = audioCapture;\n\n            await SendRequestAsync(set);\n        }\n\n        public async Task ConnectAsync()\n        {\n            Analytics.TrackEvent(\"VoiceConnection_Connect\");\n\n            ConnectionStatus = _strings.GetString(\"ConnectionState1\");\n\n            var appServiceStatus = await _appServiceConnection.OpenAsync();\n            if (appServiceStatus != AppServiceConnectionStatus.Success)\n                throw new Exception(\"Unable to connect to AppService! \" + appServiceStatus);\n\n            var stateRequest = new ValueSet() { [\"req\"] = (uint)VoiceServiceRequest.StateRequest };\n            var response = await SendRequestAsync(stateRequest);\n            var state = (VoiceServiceState)(uint)response[\"state\"];\n\n            if (state == VoiceServiceState.Connected)\n            {\n                var channel_id = (ulong)response[\"channel_id\"];\n                var guild_id = (ulong)response[\"guild_id\"];\n\n                if (channel_id != Channel.Id && guild_id != Channel.GuildId)\n                {\n                    ConnectionStatus = _strings.GetString(\"ConnectionState2\");\n\n                    var disconnectRequest = new ValueSet() { [\"req\"] = (uint)VoiceServiceRequest.DisconnectRequest };\n                    await SendRequestAsync(disconnectRequest);\n                }\n            }\n\n            _appServiceConnected = true;\n            var status = await ReserveCallResourcesAsync();\n            if (status != VoipPhoneCallResourceReservationStatus.Success)\n                throw new Exception(\"Unable to reserve call resources!\");\n\n            ConnectionStatus = _strings.GetString(\"ConnectionState3\");\n\n            discord.VoiceStateUpdated += OnVoiceStateUpdated;\n            discord.VoiceServerUpdated += OnVoiceServerUpdated;\n            await SendVoiceStateUpdateAsync(_state, Channel.Id);\n\n            var vstu = await _voiceStateUpdateCompletion.Task.ConfigureAwait(false);\n            var vsru = await _voiceServerUpdateCompletion.Task.ConfigureAwait(false);\n            var inputDeviceId = App.LocalSettings.Read<string>(\"InputDevice\", null);\n            var outputDeviceId = App.LocalSettings.Read<string>(\"OutputDevice\", null);\n\n            ConnectionStatus = string.Format(_strings.GetString(\"ConnectionState4Format\"), Channel.Name);\n\n            var connectionRequest = new ValueSet()\n            {\n                [\"req\"] = (uint)VoiceServiceRequest.GuildConnectRequest,\n                [\"channel_id\"] = Channel.Id,\n                [\"guild_id\"] = Channel.Guild.Id,\n                [\"user_id\"] = discord.CurrentUser.Id,\n                [\"endpoint\"] = vsru.Endpoint,\n                [\"token\"] = vsru.VoiceToken,\n                [\"session_id\"] = vstu.SessionId,\n                [\"contact_name\"] = $\"{Channel.Name} - {Channel.Guild.Name}\",\n                [\"input_device\"] = inputDeviceId,\n                [\"output_device\"] = outputDeviceId,\n                [\"muted\"] = Muted,\n                [\"deafened\"] = Deafened,\n                [\"noise_suppression\"] = App.LocalSettings.Read(\"NoiseSuppression\", (uint)NoiseSuppressionLevel.Medium),\n                [\"auto_gain_control\"] = App.LocalSettings.Read(\"AutomaticGainControl\", true),\n                [\"echo_cancellation\"] = App.LocalSettings.Read(\"EchoCancellation\", true),\n                [\"voice_activity\"] = App.LocalSettings.Read(\"VoiceActivity\", true),\n            };\n\n            await SendRequestAsync(connectionRequest);\n        }\n\n        private async Task<VoipPhoneCallResourceReservationStatus> ReserveCallResourcesAsync()\n        {\n            try\n            {\n                return await _voipCallCoordinator.ReserveCallResourcesAsync(\"Unicord.Universal.Voice.Background.VoiceBackgroundTask\");\n            }\n            catch (Exception ex)\n            {\n                // ERROR_ALREADY_EXISTS\n                if (ex.HResult == -2147024713)\n                    return VoipPhoneCallResourceReservationStatus.Success;\n                else\n                    throw;\n            }\n        }\n\n        private async Task ToggleMuteAsync()\n        {\n            if (_appServiceConnected)\n            {\n                var set = new ValueSet() { [\"req\"] = (uint)VoiceServiceRequest.MuteRequest, [\"muted\"] = Muted };\n                await SendRequestAsync(set);\n            }\n        }\n\n        private async Task ToggleDeafenAsync()\n        {\n            if (_appServiceConnected)\n            {\n                var set = new ValueSet() { [\"req\"] = (uint)VoiceServiceRequest.DeafenRequest, [\"deafened\"] = Deafened };\n                await SendRequestAsync(set);\n            }\n        }\n\n        public async Task DisconnectAsync()\n        {\n            var set = new ValueSet() { [\"req\"] = (uint)VoiceServiceRequest.DisconnectRequest };\n            await SendRequestAsync(set);\n        }\n\n        private async Task<ValueSet> SendRequestAsync(ValueSet request)\n        {\n            var response = await _appServiceConnection.SendMessageAsync(request);\n            if (response.Message != null)\n            {\n                // double cast because C#\n                if ((VoiceServiceRequest)(uint)response.Message[\"req\"] == VoiceServiceRequest.RequestFailed)\n                {\n                    throw new Exception((string)response.Message[\"msg\"]);\n                }\n\n                return response.Message;\n            }\n\n            return null;\n        }\n\n        private async Task SendVoiceStateUpdateAsync(VoiceState state, ulong? channel_id)\n        {\n            try\n            {\n                var payload = new VoiceStateUpdatePayload\n                {\n                    GuildId = Channel.Guild.Id,\n                    ChannelId = channel_id,\n                    Deafened = channel_id != null ? (bool?)state.HasFlag(VoiceState.Deafened) : null,\n                    Muted = channel_id != null ? (bool?)(state != VoiceState.None) : null\n                };\n\n#pragma warning disable CS0618 // Type or member is obsolete\n                await DiscordManager.Discord.SendPayloadAsync(GatewayOpCode.VoiceStateUpdate, payload);\n#pragma warning restore CS0618 // Type or member is obsolete\n            }\n            catch (Exception ex)\n            {\n                Logger.LogError(ex);\n            }\n        }\n\n        private async void OnRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)\n        {\n            if (args.Request.Message.TryGetValue(\"ev\", out var ev))\n            {\n                var serviceEvent = (VoiceServiceEvent)(uint)ev;\n                switch (serviceEvent)\n                {\n                    case VoiceServiceEvent.Connected:\n                        ConnectionStatus = string.Format(_strings.GetString(\"ConnectedStateFormat\"), Channel.Name);\n                        break;\n                    case VoiceServiceEvent.Reconnecting:\n                        ConnectionStatus = _strings.GetString(\"ReconnectingState\");\n                        break;\n                    case VoiceServiceEvent.Disconnected:\n                        ConnectionStatus = _strings.GetString(\"DisconnectedState\");\n                        Disconnected?.Invoke(this, null);\n                        await SendVoiceStateUpdateAsync(VoiceState.None, null);\n                        break;\n                    case VoiceServiceEvent.Muted:\n                        await SendVoiceStateUpdateAsync(_state, Channel.Id);\n                        break;\n                    case VoiceServiceEvent.Deafened:\n                        await SendVoiceStateUpdateAsync(_state, Channel.Id);\n                        break;\n                    case VoiceServiceEvent.UdpPing:\n                        UdpPing = (uint)args.Request.Message[\"ping\"];\n                        break;\n                    case VoiceServiceEvent.WebSocketPing:\n                        WebSocketPing = (uint)args.Request.Message[\"ping\"];\n                        break;\n                    default:\n                        break;\n                }\n            }\n        }\n\n        private void OnServiceClosed(AppServiceConnection sender, AppServiceClosedEventArgs args)\n        {\n            _appServiceConnected = false;\n        }\n\n        private Task OnVoiceStateUpdated(DiscordClient client, VoiceStateUpdateEventArgs e)\n        {\n            if (e.Channel == Channel && e.User == DiscordManager.Discord.CurrentUser)\n            {\n                _voiceStateUpdateCompletion.SetResult(e);\n                client.VoiceStateUpdated -= OnVoiceStateUpdated;\n            }\n\n            return Task.CompletedTask;\n        }\n\n        private Task OnVoiceServerUpdated(DiscordClient client, VoiceServerUpdateEventArgs e)\n        {\n            if (e.Guild == Channel.Guild)\n            {\n                _voiceServerUpdateCompletion.SetResult(e);\n                client.VoiceServerUpdated -= OnVoiceServerUpdated;\n            }\n\n            return Task.CompletedTask;\n        }\n    }\n\n    [Flags]\n    public enum VoiceState\n    {\n        None = 0,\n        Deafened = 1,\n        Muted = 2\n    }\n}"
  },
  {
    "path": "Unicord.Universal/NativeMethods.txt",
    "content": "﻿AssocQueryString\nS_FALSE\n"
  },
  {
    "path": "Unicord.Universal/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n\r\n<Package\r\n  xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\r\n  xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\r\n  xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\r\n  xmlns:uap4=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/4\"\r\n  xmlns:uap5=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/5\"\r\n  xmlns:rescap=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities\"\r\n  IgnorableNamespaces=\"uap uap4 uap5 mp rescap\">\r\n\r\n\t<Identity Name=\"24101WamWooWamRD.UnicordCanary\"\r\n\t\t\t  Publisher=\"CN=0F22111D-EDF0-42F0-B58D-26C4C5C5054B\"\r\n\t\t\t  Version=\"2.0.3.0\" />\r\n\r\n\t<mp:PhoneIdentity PhoneProductId=\"e8adef53-9a75-41ce-88eb-b971a1ee9d57\"\r\n\t\t\t\t\t  PhonePublisherId=\"0F22111D-EDF0-42F0-B58D-26C4C5C5054B\" />\r\n\r\n\t<Properties>\r\n\t\t<DisplayName>ms-resource:DevAppDisplayName</DisplayName>\r\n\t\t<PublisherDisplayName>Wan Kerr Co. Ltd.</PublisherDisplayName>\r\n\t\t<Logo>Assets\\Store\\StoreLogo.png</Logo>\r\n\t</Properties>\r\n\r\n\t<Dependencies>\r\n\t\t<TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.15063.0\" MaxVersionTested=\"10.0.26100.0\" />\r\n    <TargetDeviceFamily Name=\"Windows.Mobile\" MinVersion=\"10.0.15063.0\" MaxVersionTested=\"10.0.15254.0\"/>\r\n\t</Dependencies>\r\n\r\n\t<Resources>\r\n\t\t<Resource Language=\"x-generate\"/>\r\n\t</Resources>\r\n\r\n\t<Applications>\r\n\t\t<Application Id=\"App\"\r\n\t\t  Executable=\"$targetnametoken$.exe\"\r\n\t\t  EntryPoint=\"Unicord.Universal.App\">\r\n\t\t\t<uap:VisualElements\r\n\t\t\t  DisplayName=\"ms-resource:DevAppDisplayName\"\r\n\t\t\t  Square150x150Logo=\"Assets\\Store\\Square150x150Logo.png\"\r\n\t\t\t  Square44x44Logo=\"Assets\\Store\\Square44x44Logo.png\"\r\n\t\t\t  Description=\"Unicord.Universal\"\r\n\t\t\t  BackgroundColor=\"transparent\">\r\n\t\t\t\t<uap:DefaultTile Wide310x150Logo=\"Assets\\Store\\Wide310x150Logo.png\"/>\r\n\t\t\t\t<uap:SplashScreen Image=\"Assets\\Store\\SplashScreen.png\" uap5:Optional=\"true\" />\r\n\t\t\t\t<uap:LockScreen Notification=\"badge\" BadgeLogo=\"Assets\\Store\\BadgeLogo.png\"/>\r\n\t\t\t</uap:VisualElements>\r\n\t\t\t<Extensions>\r\n        <Extension Category=\"windows.backgroundTasks\" EntryPoint=\"Unicord.Universal.Background.Tasks.PeriodicNotificationsTask\">\r\n          <BackgroundTasks>\r\n            <Task Type=\"general\"/>\r\n            <Task Type=\"timer\"/>\r\n          </BackgroundTasks>\r\n        </Extension>\r\n        \r\n        <Extension Category=\"windows.backgroundTasks\" EntryPoint=\"Unicord.Universal.Background.Tasks.RealtimeNotificationsTask\">\r\n          <BackgroundTasks>\r\n            <Task Type=\"general\"/>\r\n            <Task Type=\"systemEvent\"/>\r\n            <Task Type=\"pushNotification\"/>\r\n          </BackgroundTasks>\r\n        </Extension>\r\n        \r\n\t\t\t\t<uap:Extension Category=\"windows.shareTarget\">\r\n\t\t\t\t\t<uap:ShareTarget Description=\"Share to Discord\">\r\n\t\t\t\t\t\t<uap:SupportedFileTypes>\r\n\t\t\t\t\t\t\t<uap:SupportsAnyFileType />\r\n\t\t\t\t\t\t</uap:SupportedFileTypes>\r\n\t\t\t\t\t\t<uap:DataFormat>StorageItem</uap:DataFormat>\r\n\t\t\t\t\t\t<uap:DataFormat>Bitmap</uap:DataFormat>\r\n\t\t\t\t\t\t<uap:DataFormat>Text</uap:DataFormat>\r\n\t\t\t\t\t\t<uap:DataFormat>WebLink</uap:DataFormat>\r\n\t\t\t\t\t</uap:ShareTarget>\r\n\t\t\t\t</uap:Extension>\r\n        \r\n        <uap4:Extension Category=\"windows.contactPanel\" />\r\n\r\n\t\t\t\t<uap:Extension Category=\"windows.protocol\">\r\n\t\t\t\t\t<uap:Protocol Name=\"ms-contact-profile\">\r\n\t\t\t\t\t\t<uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\r\n\t\t\t\t\t\t<uap:DisplayName>Unicord</uap:DisplayName>\r\n\t\t\t\t\t</uap:Protocol>\r\n\t\t\t\t</uap:Extension>\r\n\r\n\t\t\t\t<uap:Extension Category=\"windows.protocol\">\r\n\t\t\t\t\t<uap:Protocol Name=\"ms-ipmessaging\">\r\n\t\t\t\t\t\t<uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\r\n\t\t\t\t\t\t<uap:DisplayName>Unicord</uap:DisplayName>\r\n\t\t\t\t\t</uap:Protocol>\r\n\t\t\t\t</uap:Extension>\r\n\r\n\t\t\t\t<!-- voice background tasks -->\r\n\t\t\t\t<uap:Extension Category=\"windows.voipCall\"/>\r\n\t\t\t\t<uap:Extension Category=\"windows.appService\" EntryPoint=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\">\r\n\t\t\t\t\t<uap:AppService Name=\"com.wankerr.Unicord.Voice\" ServerName=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\" />\r\n\t\t\t\t</uap:Extension>\r\n\t\t\t\t<Extension Category=\"windows.backgroundTasks\" EntryPoint=\"Unicord.Universal.Voice.Background.VoiceBackgroundTask\">\r\n\t\t\t\t\t<BackgroundTasks ServerName=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\">\r\n\t\t\t\t\t\t<Task Type=\"general\"/>\r\n\t\t\t\t\t\t<Task Type=\"systemEvent\" />\r\n\t\t\t\t\t</BackgroundTasks>\r\n\t\t\t\t</Extension>\r\n\t\t\t</Extensions>\r\n\t\t</Application>\r\n\t</Applications>\r\n\r\n\t<Capabilities>\r\n\t\t<Capability Name=\"internetClient\" />\r\n\t\t<uap:Capability Name=\"videosLibrary\" />\r\n\t\t<uap:Capability Name=\"picturesLibrary\" />\r\n\t\t<uap:Capability Name=\"contacts\" />\r\n\t\t<uap:Capability Name=\"voipCall\" />\r\n\t\t<uap:Capability Name=\"phoneCall\" />\r\n    <rescap:Capability Name=\"extendedBackgroundTaskTime\"/>\r\n    <DeviceCapability Name=\"microphone\" />\r\n    <DeviceCapability Name=\"webcam\" />\r\n\t</Capabilities>\r\n\r\n\t<Extensions>\r\n\t\t<Extension Category=\"windows.activatableClass.inProcessServer\">\r\n\t\t\t<InProcessServer>\r\n\t\t\t\t<Path>Unicord.Universal.Voice.dll</Path>\r\n\t\t\t\t<ActivatableClass ActivatableClassId=\"Unicord.Universal.Voice.VoiceClientStats\" ThreadingModel=\"both\"/>\r\n\t\t\t\t<ActivatableClass ActivatableClassId=\"Unicord.Universal.Voice.VoiceClientOptions\" ThreadingModel=\"both\"/>\r\n\t\t\t\t<ActivatableClass ActivatableClassId=\"Unicord.Universal.Voice.VoiceClient\" ThreadingModel=\"both\"/>\r\n\t\t\t\t<ActivatableClass ActivatableClassId=\"Unicord.Universal.Voice.Background.VoiceBackgroundTask\" ThreadingModel=\"both\"/>\r\n\t\t\t\t<ActivatableClass ActivatableClassId=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\" ThreadingModel=\"both\"/>\r\n\t\t\t</InProcessServer>\r\n\t\t</Extension>\r\n\t</Extensions>\r\n</Package>"
  },
  {
    "path": "Unicord.Universal/Pages/ChannelPage.xaml",
    "content": "﻿<Page\r\n    x:Class=\"Unicord.Universal.Pages.ChannelPage\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n    xmlns:w1709=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 5)\"\r\n    xmlns:w1809=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)\" \r\n    xmlns:w1903=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 8)\" \r\n    xmlns:entities=\"using:DSharpPlus.Entities\"\r\n    xmlns:toolkit=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\r\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\r\n    xmlns:converters=\"using:Unicord.Universal.Converters\" \r\n    xmlns:controls=\"using:Unicord.Universal.Controls\"\r\n    xmlns:messages=\"using:Unicord.Universal.Controls.Messages\"\r\n    xmlns:presence=\"using:Unicord.Universal.Controls.Presence\" \r\n    xmlns:users=\"using:Unicord.Universal.Controls.Users\"\r\n    xmlns:channels=\"using:Unicord.Universal.Controls.Channels\"\r\n    xmlns:messages1=\"using:Unicord.Universal.Models.Messages\"\r\n    Loaded=\"Page_Loaded\"\r\n    AllowDrop=\"True\"\r\n    DragEnter=\"ChannelPage_OnDragEnter\"  \r\n    DragOver=\"ChannelPage_OnDragOver\" \r\n    DragLeave=\"ChannelPage_OnDragLeave\"\r\n    Drop=\"ChannelPage_OnDrop\"\r\n    mc:Ignorable=\"d\" x:DefaultBindMode=\"OneWay\">\r\n\r\n    <Page.Resources>\r\n        <ExponentialEase\r\n            x:Key=\"EaseIn\"\r\n            EasingMode=\"EaseOut\"\r\n            Exponent=\"7\" />\r\n        <ExponentialEase\r\n            x:Key=\"EaseOut\"\r\n            EasingMode=\"EaseIn\"\r\n            Exponent=\"4.5\" />\r\n\r\n        <CircleEase x:Key=\"EaseMovement\" EasingMode=\"EaseInOut\" />\r\n\r\n        <Flyout x:Key=\"EmoteFlyout\" x:Name=\"EmoteFlyout\" w1903:ShouldConstrainToRootBounds=\"False\">\r\n            <controls:EmotePicker x:Name=\"EmotePicker\" \r\n                                  Channel=\"{x:Bind ViewModel.Channel, Mode=OneWay}\" \r\n                                  Width=\"300\" \r\n                                  Height=\"300\" \r\n                                  HorizontalAlignment=\"Stretch\" \r\n                                  VerticalAlignment=\"Stretch\" \r\n                                  EmojiPicked=\"EmotePicker_EmojiPicked\"/>\r\n        </Flyout>\r\n\r\n        <Storyboard x:Name=\"ShowPhotoPicker\">\r\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PhotoPicker\" \r\n                                           Storyboard.TargetProperty=\"Visibility\">\r\n                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\" />\r\n            </ObjectAnimationUsingKeyFrames>\r\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"UploadItemsBackground\" \r\n                                           Storyboard.TargetProperty=\"BorderThickness\">\r\n                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0,0,0,1\" />\r\n            </ObjectAnimationUsingKeyFrames>\r\n            <DoubleAnimation\r\n                EasingFunction=\"{StaticResource EaseEnter}\"\r\n                Storyboard.TargetName=\"PhotoTransform\"\r\n                Storyboard.TargetProperty=\"Y\"\r\n                To=\"0\"\r\n                Duration=\"00:00:00.30\" />\r\n            <DoubleAnimation\r\n                EasingFunction=\"{StaticResource EaseExit}\"\r\n                Storyboard.TargetName=\"UploadsTransform\"\r\n                Storyboard.TargetProperty=\"Y\"\r\n                To=\"200\"\r\n                Duration=\"00:00:00.15\" />\r\n\r\n        </Storyboard>\r\n        <Storyboard x:Name=\"HidePhotoPicker\">\r\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"UploadItemsBackground\" \r\n                                           Storyboard.TargetProperty=\"BorderThickness\">\r\n                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0,0,0,0\" />\r\n            </ObjectAnimationUsingKeyFrames>\r\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PhotoPicker\" \r\n                                           Storyboard.TargetProperty=\"Visibility\"\r\n                                           BeginTime=\"00:00:00.30\">\r\n                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\" />\r\n            </ObjectAnimationUsingKeyFrames>\r\n            <DoubleAnimation\r\n                EasingFunction=\"{StaticResource EaseExit}\"\r\n                Storyboard.TargetName=\"PhotoTransform\"\r\n                Storyboard.TargetProperty=\"Y\"\r\n                To=\"200\"\r\n                Duration=\"00:00:00.15\" />\r\n            <DoubleAnimation\r\n                EasingFunction=\"{StaticResource EaseEnter}\"\r\n                Storyboard.TargetName=\"UploadsTransform\"\r\n                Storyboard.TargetProperty=\"Y\"\r\n                To=\"0\"\r\n                Duration=\"00:00:00.30\" />\r\n        </Storyboard>\r\n\r\n        <Storyboard x:Name=\"ShowUploadPanel\">\r\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"UploadItemsBackground\" \r\n                                           Storyboard.TargetProperty=\"BorderThickness\">\r\n                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0,0,0,1\" />\r\n            </ObjectAnimationUsingKeyFrames>\r\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"UploadItems\" \r\n                                           Storyboard.TargetProperty=\"Visibility\"\r\n                                           BeginTime=\"00:00:00.00\">\r\n                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\" />\r\n            </ObjectAnimationUsingKeyFrames>\r\n            <DoubleAnimation\r\n                EasingFunction=\"{StaticResource EaseEnter}\"\r\n                Storyboard.TargetName=\"UploadsTransform\"\r\n                Storyboard.TargetProperty=\"Y\"\r\n                To=\"0\"\r\n                Duration=\"00:00:00.30\" />\r\n        </Storyboard>\r\n        <Storyboard x:Name=\"HideUploadPanel\">\r\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"UploadItemsBackground\" \r\n                                           Storyboard.TargetProperty=\"BorderThickness\">\r\n                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0,0,0,0\" />\r\n            </ObjectAnimationUsingKeyFrames>\r\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"UploadItems\" \r\n                                           Storyboard.TargetProperty=\"Visibility\"\r\n                                           BeginTime=\"00:00:00.15\">\r\n                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\" />\r\n            </ObjectAnimationUsingKeyFrames>\r\n            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PhotoPicker\" \r\n                                           Storyboard.TargetProperty=\"Visibility\"\r\n                                           BeginTime=\"00:00:00.15\">\r\n                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Collapsed\" />\r\n            </ObjectAnimationUsingKeyFrames>\r\n            <DoubleAnimation\r\n                EasingFunction=\"{StaticResource EaseExit}\"\r\n                Storyboard.TargetName=\"UploadsTransform\"\r\n                Storyboard.TargetProperty=\"Y\"\r\n                To=\"200\"\r\n                Duration=\"00:00:00.15\" />\r\n        </Storyboard>\r\n\r\n        <Storyboard x:Key=\"OpenPaneStoryboard\" x:Name=\"OpenPaneStoryboard\">\r\n            <DoubleAnimation\r\n                EasingFunction=\"{StaticResource EaseIn}\"\r\n                Storyboard.TargetName=\"ContentTransform\"\r\n                Storyboard.TargetProperty=\"X\"\r\n                To=\"-276\"\r\n                Duration=\"00:00:00.33\" />\r\n        </Storyboard>\r\n\r\n        <Storyboard\r\n            x:Key=\"ClosePaneStoryboard\"\r\n            x:Name=\"ClosePaneStoryboard\">\r\n            <DoubleAnimation\r\n                EasingFunction=\"{StaticResource EaseIn}\"\r\n                Storyboard.TargetName=\"ContentTransform\"\r\n                Storyboard.TargetProperty=\"X\"\r\n                To=\"0\"\r\n                Duration=\"00:00:00.33\" />\r\n        </Storyboard>\r\n\r\n        <DataTemplate x:Key=\"DefaultMessageTemplate\" x:DataType=\"messages1:MessageViewModel\">\r\n            <messages:MessageControl MessageViewModel=\"{x:Bind}\" Background=\"Transparent\" />\r\n        </DataTemplate>\r\n\r\n        <DataTemplate x:Key=\"SystemMessageTemplate\" x:DataType=\"messages1:MessageViewModel\">\r\n            <messages:SystemMessageControl Background=\"{ThemeResource BackgroundTertiaryBrush}\" MessageViewModel=\"{x:Bind}\" />\r\n        </DataTemplate>\r\n\r\n        <DataTemplate x:Key=\"EditingMessageTemplate\" x:DataType=\"messages1:MessageViewModel\">\r\n            <messages:MessageControl\r\n                Background=\"Transparent\"\r\n                IsEnabled=\"False\"\r\n                MessageViewModel=\"{x:Bind}\"\r\n                Opacity=\"0.5\" />\r\n        </DataTemplate>\r\n\r\n        <converters:MessageTemplateSelector x:Key=\"MessageTemplateSelector\" \r\n                                            MessageTemplate=\"{StaticResource MessageContentTemplate}\" \r\n                                            SystemMessageTemplate=\"{StaticResource SystemMessageTemplate}\"/>\r\n\r\n        <converters:MessageTemplateSelector x:Key=\"EditingMessageTemplateSelector\" \r\n                                            MessageTemplate=\"{StaticResource EditingMessageTemplate}\" \r\n                                            SystemMessageTemplate=\"{StaticResource SystemMessageTemplate}\"/>\r\n    </Page.Resources>\r\n    <Grid x:Name=\"RootGrid\">\r\n        <Grid>\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"*\" />\r\n                <ColumnDefinition Width=\"Auto\" />\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <Grid.RenderTransform>\r\n                <TranslateTransform x:Name=\"ContentTransform\" />\r\n            </Grid.RenderTransform>\r\n            <Grid>\r\n                <Grid.RowDefinitions>\r\n                    <RowDefinition Height=\"Auto\" />\r\n                    <RowDefinition Height=\"*\" />\r\n                    <RowDefinition Height=\"Auto\" />\r\n                    <RowDefinition Height=\"Auto\" />\r\n                </Grid.RowDefinitions>\r\n\r\n                <channels:ChannelPageHeaderControl x:Name=\"Header\" \r\n                                                   ViewModel=\"{x:Bind ViewModel}\"/>\r\n\r\n                <Grid Grid.Row=\"1\">\r\n                    <ListView x:Name=\"MessageList\"\r\n                              ItemTemplateSelector=\"{StaticResource MessageTemplateSelector}\"\r\n                              ItemsSource=\"{x:Bind ViewModel.Messages}\"\r\n                              ReorderMode=\"Disabled\"\r\n                              SelectionChanged=\"MessageList_SelectionChanged\"\r\n                              ShowsScrollingPlaceholders=\"False\"\r\n                              SingleSelectionFollowsFocus=\"False\"\r\n                              SelectionMode=\"None\"\r\n                              Padding=\"0,0,0,12\">\r\n                        <ListView.ItemsPanel>\r\n                            <ItemsPanelTemplate>\r\n                                <ItemsStackPanel\r\n                                        VerticalAlignment=\"Bottom\"\r\n                                        CacheLength=\"4\"\r\n                                        ItemsUpdatingScrollMode=\"KeepLastItemInView\" />\r\n                            </ItemsPanelTemplate>\r\n                        </ListView.ItemsPanel>\r\n                        <ListView.ItemContainerStyle>\r\n                            <Style TargetType=\"ListViewItem\">\r\n                                <Setter Property=\"Padding\" Value=\"0\" />\r\n                                <Setter Property=\"Margin\" Value=\"0\" />\r\n                                <Setter Property=\"MinHeight\" Value=\"0\" />\r\n                                <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\r\n                                <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\r\n                                <Setter Property=\"Background\" Value=\"Transparent\" />\r\n                                <Setter Property=\"IsSelected\" Value=\"{Binding IsSelected}\"/>\r\n                            </Style>\r\n                        </ListView.ItemContainerStyle>\r\n                    </ListView>\r\n\r\n                    <StackPanel x:Name=\"NoMessages\"\r\n                                    Margin=\"16\"\r\n                                    HorizontalAlignment=\"Center\"\r\n                                    VerticalAlignment=\"Center\"\r\n                                    Visibility=\"Collapsed\">\r\n                        <TextBlock FontSize=\"110\" Text=\":(\" />\r\n                        <TextBlock x:Uid=\"/ChannelPage/NoMessagesHeader\" Style=\"{ThemeResource SubheaderTextBlockStyle}\"/>\r\n                        <TextBlock x:Uid=\"/ChannelPage/NoMessagesSubheader\" TextWrapping=\"Wrap\"/>\r\n                    </StackPanel>\r\n                </Grid>\r\n\r\n                <Grid Grid.Row=\"2\" \r\n                      Background=\"{ThemeResource ChannelPage_MessageInput_Background}\"\r\n                      BorderBrush=\"{ThemeResource ChannelPage_MessageInput_BorderBrush}\"                          \r\n                      BorderThickness=\"{ThemeResource ChannelPage_MessageInput_BorderThickness}\"\r\n                      CornerRadius=\"{ThemeResource ChannelPage_MessageInput_CornerRadius}\"\r\n                      Margin=\"{ThemeResource ChannelPage_MessageInput_Margin}\">\r\n\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition Height=\"Auto\"/>\r\n                        <RowDefinition Height=\"Auto\"/>\r\n                        <RowDefinition Height=\"Auto\"/>\r\n                        <RowDefinition Height=\"Auto\"/>\r\n                        <RowDefinition Height=\"Auto\"/>\r\n                    </Grid.RowDefinitions>\r\n\r\n                    <Grid x:Name=\"TypingGrid\"\r\n                              Grid.Row=\"1\" \r\n                              Visibility=\"Collapsed\"\r\n                              VerticalAlignment=\"Bottom\">\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"42\"/>\r\n                            <ColumnDefinition Width=\"*\"/>\r\n                        </Grid.ColumnDefinitions>\r\n\r\n                        <TextBlock VerticalAlignment=\"Center\"\r\n                                       HorizontalAlignment=\"Center\"\r\n                                       FontSize=\"18\"\r\n                                       Margin=\"0,-8,0,0\"\r\n                                       Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\">\r\n                                ...\r\n                        </TextBlock>\r\n\r\n                        <ItemsControl Grid.Column=\"1\"\r\n                                          Margin=\"4,4,4,4\"\r\n                                          ItemTemplate=\"{StaticResource TypingUserTemplate}\"\r\n                                          ItemsSource=\"{Binding TypingUsers}\"               \r\n                                          Height=\"16\">\r\n                            <ItemsControl.ItemsPanel>\r\n                                <ItemsPanelTemplate>\r\n                                    <ItemsStackPanel Orientation=\"Horizontal\" />\r\n                                </ItemsPanelTemplate>\r\n                            </ItemsControl.ItemsPanel>\r\n                        </ItemsControl>\r\n                    </Grid>\r\n\r\n                    <Grid Grid.Row=\"2\" \r\n                              x:Name=\"UploadItemsBackground\"\r\n                              BorderThickness=\"1\"\r\n                              BorderBrush=\"{ThemeResource DividerStrokeColorDefaultBrush}\">\r\n                        <controls:UploadItemsControl x:Name=\"UploadItems\"\r\n                                                         Height=\"150\"\r\n                                                         Visibility=\"Collapsed\"\r\n                                                         IsEnabled=\"{x:Bind ViewModel.ShowUploads}\">\r\n                            <controls:UploadItemsControl.RenderTransform>\r\n                                <TranslateTransform x:Name=\"UploadsTransform\" Y=\"250\" />\r\n                            </controls:UploadItemsControl.RenderTransform>\r\n                        </controls:UploadItemsControl>\r\n\r\n                        <Grid x:Name=\"PhotoPicker\"\r\n                                  Height=\"150\"\r\n                                  CornerRadius=\"4,4,0,0\"\r\n                                  Visibility=\"Collapsed\">\r\n                            <Grid.RenderTransform>\r\n                                <TranslateTransform x:Name=\"PhotoTransform\" Y=\"200\" />\r\n                            </Grid.RenderTransform>\r\n                            <Grid.ColumnDefinitions>\r\n                                <ColumnDefinition Width=\"Auto\" />\r\n                                <ColumnDefinition Width=\"*\" />\r\n                            </Grid.ColumnDefinitions>\r\n\r\n                            <Grid>\r\n                                <Grid.RowDefinitions>\r\n                                    <RowDefinition Height=\"*\" />\r\n                                    <RowDefinition Height=\"*\" />\r\n                                </Grid.RowDefinitions>\r\n                                <Button\r\n                                        x:Name=\"OpenPopoutButton\"\r\n                                        x:Uid=\"/ChannelPage/OpenPopoutButton\"\r\n                                        VerticalAlignment=\"Stretch\"\r\n                                        Click=\"OpenPopoutButton_Click\"\r\n                                        Content=\"&#xE722;\"\r\n                                        Style=\"{ThemeResource StretchyIconButtonStyle}\"\r\n                                        Margin=\"4,4,4,2\"/>\r\n                                <Button\r\n                                        x:Name=\"OpenLocalButton\"\r\n                                        x:Uid=\"/ChannelPage/OpenLocalButton\"\r\n                                        Grid.Row=\"2\"\r\n                                        VerticalAlignment=\"Stretch\"\r\n                                        Click=\"OnOpenLocalButtonClick\"\r\n                                        Content=\"&#xE8DA;\"\r\n                                        Margin=\"4,2,4,4\"\r\n                                        Style=\"{ThemeResource StretchyIconButtonStyle}\" />\r\n                            </Grid>\r\n\r\n                            <ListView x:Name=\"PhotosList\"\r\n                                        Grid.Column=\"1\"\r\n                                        ShowsScrollingPlaceholders=\"True\"\r\n                                        SingleSelectionFollowsFocus=\"False\"\r\n                                        SelectionMode=\"None\"\r\n                                        IsItemClickEnabled=\"True\"\r\n                                        ItemClick=\"PhotosList_ItemClick\"\r\n                                        ScrollViewer.HorizontalScrollBarVisibility=\"Auto\"\r\n                                        ScrollViewer.HorizontalScrollMode=\"Enabled\"\r\n                                        ScrollViewer.IsHorizontalRailEnabled=\"True\"\r\n                                        ScrollViewer.IsVerticalRailEnabled=\"False\"\r\n                                        ScrollViewer.VerticalScrollBarVisibility=\"Disabled\"\r\n                                        ScrollViewer.VerticalScrollMode=\"Disabled\">\r\n                                <ListView.ItemsPanel>\r\n                                    <ItemsPanelTemplate>\r\n                                        <ItemsStackPanel Orientation=\"Horizontal\" CacheLength=\"4\" />\r\n                                    </ItemsPanelTemplate>\r\n                                </ListView.ItemsPanel>\r\n                                <ListView.ItemContainerStyle>\r\n                                    <Style TargetType=\"ListViewItem\" BasedOn=\"{StaticResource UnicordListViewItemStyle}\">\r\n                                        <Setter Property=\"Padding\" Value=\"4\"/>\r\n                                    </Style>\r\n                                </ListView.ItemContainerStyle>\r\n                                <ListView.ItemTemplate>\r\n                                    <DataTemplate>\r\n                                        <Border CornerRadius=\"4\">\r\n                                            <toolkit:ImageEx Height=\"150\"\r\n                                                                 Opacity=\"{Binding IsAvailable, Converter={StaticResource BoolOpacityConverter}}\"\r\n                                                                 Source=\"{Binding Thumbnail, Converter={StaticResource ThumbnailImageConverter}}\"/>\r\n                                        </Border>\r\n                                    </DataTemplate>\r\n                                </ListView.ItemTemplate>\r\n                            </ListView>\r\n                        </Grid>\r\n                    </Grid>\r\n\r\n                    <Grid x:Name=\"FooterGrid\" Grid.Row=\"3\">\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"Auto\" />\r\n                            <RowDefinition Height=\"Auto\" />\r\n                            <RowDefinition Height=\"Auto\" />\r\n                            <RowDefinition Height=\"Auto\" />\r\n                            <RowDefinition Height=\"Auto\" />\r\n                        </Grid.RowDefinitions>\r\n                        <Grid.RenderTransform>\r\n                            <TranslateTransform x:Name=\"BottomGridTransform\"/>\r\n                        </Grid.RenderTransform>\r\n\r\n                        <ProgressBar x:Name=\"SlowModeTimeout\"\r\n                                         Grid.Row=\"2\"\r\n                                         Maximum=\"{x:Bind ViewModel.PerUserRateLimit}\"\r\n                                         Visibility=\"{x:Bind ViewModel.ShowSlowModeTimeout, Converter={StaticResource BoolVisibilityConverter}}\"\r\n                                         Value=\"{x:Bind ViewModel.SlowModeTimeout}\"\r\n                                         Margin=\"0,-2,0,0\"\r\n                                         w1809:CornerRadius=\"4,4,0,0\"/>\r\n\r\n                        <Grid x:Name=\"ReplyingToGrid\"\r\n                                  x:Load=\"{x:Bind ViewModel.ShowReply, Mode=OneWay}\"\r\n                                  Padding=\"4,4,4,0\"\r\n                                  Grid.Row=\"3\">\r\n\r\n                            <Grid.ColumnDefinitions>\r\n                                <ColumnDefinition Width=\"*\"/>\r\n                                <ColumnDefinition Width=\"Auto\"/>\r\n                                <ColumnDefinition Width=\"Auto\"/>\r\n                            </Grid.ColumnDefinitions>\r\n\r\n                            <Grid VerticalAlignment=\"Center\" \r\n                                      Padding=\"4,0\" \r\n                                      DataContext=\"{x:Bind ViewModel.ReplyTo, Mode=OneWay}\">\r\n                                <Grid.ColumnDefinitions>\r\n                                    <ColumnDefinition Width=\"Auto\"/>\r\n                                    <ColumnDefinition Width=\"Auto\"/>\r\n                                    <ColumnDefinition Width=\"*\"/>\r\n                                </Grid.ColumnDefinitions>\r\n                                <Grid.RowDefinitions>\r\n                                    <RowDefinition Height=\"Auto\"/>\r\n                                    <RowDefinition Height=\"Auto\"/>\r\n                                </Grid.RowDefinitions>\r\n\r\n                                <TextBlock Text=\"&#xE97A;\" Margin=\"4,0\" VerticalAlignment=\"Center\" FontSize=\"16\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Foreground=\"{ThemeResource SystemControlForegroundAccentBrush}\"/>\r\n                                <TextBlock x:Uid=\"/ChannelPage/ReplyingTo\" Margin=\"4,0\" Grid.Column=\"1\"/>\r\n                                <controls:UsernameControl FontWeight=\"Bold\" User=\"{Binding Author}\" Grid.Column=\"2\" FontSize=\"14\" IconSize=\"14\"/>\r\n\r\n                                <controls:MarkdownTextBlock x:Name=\"ReplyMarkdown\"\r\n                                                       Grid.Column=\"1\"\r\n                                                       Grid.ColumnSpan=\"3\"\r\n                                                       Grid.Row=\"1\"\r\n                                                       FontSize=\"12\"\r\n                                                       InlineOnly=\"True\"\r\n                                                       Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\"\r\n                                                       Channel=\"{Binding Channel.Channel}\"\r\n                                                       Text=\"{Binding Content}\" \r\n                                                       IsTextSelectionEnabled=\"False\"\r\n                                                       VerticalAlignment=\"Center\"\r\n                                                       Margin=\"4,2,0,0\" />\r\n                            </Grid>\r\n\r\n                            <ToggleButton x:Name=\"ReplyPingToggle\"\r\n                                              x:Uid=\"/ChannelPage/ReplyPingToggle\"\r\n                                              Grid.Column=\"1\"\r\n                                              Content=\"&#xE910;\"\r\n                                        Margin=\"4,0,0,0\"\r\n                                              IsChecked=\"{x:Bind ViewModel.ReplyPing, Mode=TwoWay}\"\r\n                                              Style=\"{ThemeResource IconToggleButtonStyle}\"/>\r\n\r\n                            <Button x:Name=\"ReplyCancel\"\r\n                                        x:Uid=\"/ChannelPage/ReplyCancel\"\r\n                                        Grid.Column=\"2\"\r\n                                        Content=\"&#xE711;\"\r\n                                        Margin=\"4,0,0,0\"\r\n                                        Command=\"{x:Bind ViewModel.ClearReplyCommand}\"\r\n                                        Style=\"{ThemeResource IconButtonStyle}\"/>\r\n                        </Grid>\r\n\r\n                        <Grid\r\n                                Grid.Row=\"4\"\r\n                                MinHeight=\"42\"\r\n                                MaxHeight=\"100\"\r\n                                Margin=\"4,0\">\r\n                            <Grid.ColumnDefinitions>\r\n                                <ColumnDefinition Width=\"Auto\" />\r\n                                <ColumnDefinition Width=\"*\" />\r\n                                <ColumnDefinition Width=\"Auto\" />\r\n                                <ColumnDefinition Width=\"Auto\" />\r\n                            </Grid.ColumnDefinitions>\r\n                            <Button x:Name=\"UploadButton\"\r\n                                        x:Load=\"{x:Bind ViewModel.CanUpload}\"\r\n                                        Click=\"uploadButton_Click\"\r\n                                        Content=\"&#xE898;\"\r\n                                        Style=\"{ThemeResource IconButtonStyle}\">\r\n                                <w1709:Button.KeyboardAccelerators>\r\n                                    <w1709:KeyboardAccelerator Modifiers=\"Control,Shift\" Key=\"U\"/>\r\n                                </w1709:Button.KeyboardAccelerators>\r\n                            </Button>\r\n\r\n                            <controls:MessageTextBox x:Name=\"MessageTextBox\" \r\n                                                          Grid.Column=\"1\"\r\n                                                          VerticalAlignment=\"Center\"\r\n                                                          Text=\"{x:Bind ViewModel.MessageText, Mode=TwoWay}\"\r\n                                                          PlaceholderText=\"{x:Bind ViewModel.ChannelPlaceholder, Mode=OneWay}\" \r\n                                                          Channel=\"{x:Bind ViewModel.Channel, Mode=OneWay}\"\r\n                                                          CurrentUser=\"{x:Bind ViewModel.CurrentUser, Mode=OneWay}\"\r\n                                                          SendButtonEnabled=\"{x:Bind ViewModel.CanSend, Mode=OneWay}\"\r\n                                                          BorderBrush=\"Transparent\"\r\n                                                          BorderThickness=\"0\"\r\n                                                          Background=\"Transparent\"\r\n                                                          Paste=\"OnMessageTextBoxPaste\"\r\n                                                          SendButtonVisibility=\"Visible\"\r\n                                                          SubmitButtonVisibility=\"Collapsed\"\r\n                                                          CancelButtonVisibility=\"Collapsed\"\r\n                                                          SendInvoked=\"MessageTextBox_SendInvoked\"\r\n                                                          EditInvoked=\"MessageTextBox_EditInvoked\"\r\n                                                          ShouldSendTyping=\"MessageTextBox_ShouldSendTyping\" />\r\n                        </Grid>\r\n                    </Grid>\r\n                </Grid>\r\n            </Grid>\r\n        </Grid>\r\n\r\n        <VisualStateManager.VisualStateGroups>\r\n            <VisualStateGroup x:Name=\"TypingGroup\">\r\n                <VisualState x:Name=\"IsTyping\">\r\n                    <VisualState.StateTriggers>\r\n                        <StateTrigger IsActive=\"{Binding ShowTypingContainer}\"/>\r\n                    </VisualState.StateTriggers>\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"UploadItemsBackground.CornerRadius\" Value=\"0\"/>\r\n                        <Setter Target=\"TypingGrid.Visibility\" Value=\"Visible\"/>\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n                <VisualState x:Name=\"NotTyping\">\r\n                    <VisualState.StateTriggers>\r\n                        <StateTrigger IsActive=\"{Binding HideTypingContainer}\"/>\r\n                    </VisualState.StateTriggers>\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"UploadItemsBackground.CornerRadius\" Value=\"4,4,0,0\"/>\r\n                        <Setter Target=\"TypingGrid.Visibility\" Value=\"Collapsed\"/>\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n            </VisualStateGroup>\r\n            <VisualStateGroup x:Name=\"EditModeGroup\">\r\n                <VisualState x:Name=\"EditMode\">\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"MessageList.SelectionMode\" Value=\"Multiple\"/>\r\n                        <Setter Target=\"MessageList.ItemTemplateSelector\" Value=\"{StaticResource EditingMessageTemplateSelector}\"/>\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n                <VisualState x:Name=\"NormalMode\">\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"MessageList.SelectionMode\" Value=\"None\"/>\r\n                        <Setter Target=\"MessageList.ItemTemplateSelector\" Value=\"{StaticResource MessageTemplateSelector}\"/>\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n            </VisualStateGroup>\r\n        </VisualStateManager.VisualStateGroups>\r\n    </Grid>\r\n</Page>\r\n"
  },
  {
    "path": "Unicord.Universal/Pages/ChannelPage.xaml.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.ComponentModel;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing DSharpPlus.Entities;\r\nusing Microsoft.AppCenter.Analytics;\r\nusing CommunityToolkit.Mvvm.Input;\r\nusing Unicord.Universal.Controls;\r\nusing Unicord.Universal.Integration;\r\nusing Unicord.Universal.Interop;\r\nusing Unicord.Universal.Models;\r\nusing Unicord.Universal.Models.Emoji;\r\nusing Unicord.Universal.Models.Messages;\r\nusing Unicord.Universal.Services;\r\nusing Unicord.Universal.Utilities;\r\nusing Windows.ApplicationModel;\r\nusing Windows.ApplicationModel.DataTransfer;\r\nusing Windows.Foundation.Metadata;\r\nusing Windows.Media.Capture;\r\nusing Windows.Storage;\r\nusing Windows.Storage.BulkAccess;\r\nusing Windows.Storage.FileProperties;\r\nusing Windows.Storage.Pickers;\r\nusing Windows.Storage.Search;\r\nusing Windows.Storage.Streams;\r\nusing Windows.System;\r\nusing Windows.UI.Core;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Input;\r\nusing Windows.UI.Xaml.Navigation;\r\nusing Windows.Foundation;\r\nusing Unicord.Universal.Extensions;\r\n\r\nnamespace Unicord.Universal.Pages\r\n{\r\n    public sealed partial class ChannelPage : Page, INotifyPropertyChanged\r\n    {\r\n        private readonly List<ChannelPageViewModel> _channelHistory\r\n            = new List<ChannelPageViewModel>();\r\n\r\n        public ChannelPageViewModel ViewModel\r\n        {\r\n            get => _viewModel;\r\n            private set\r\n            {\r\n                _viewModel = value;\r\n                PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(ViewModel)));\r\n            }\r\n        }\r\n\r\n        public bool IsPaneOpen { get; private set; }\r\n\r\n        private ChannelPageViewModel _viewModel;\r\n        private bool _scrollHandlerAdded;\r\n\r\n        public event PropertyChangedEventHandler PropertyChanged;\r\n\r\n        public ChannelPage()\r\n        {\r\n            InitializeComponent();\r\n            NavigationCacheMode = NavigationCacheMode.Enabled;\r\n\r\n            if (ApiInformation.IsApiContractPresent(typeof(UniversalApiContract).FullName, 5))\r\n            {\r\n                if (ApiInformation.IsApiContractPresent(typeof(UniversalApiContract).FullName, 6))\r\n                    KeyboardAcceleratorPlacementMode = KeyboardAcceleratorPlacementMode.Hidden;\r\n\r\n                this.AddAccelerator(VirtualKey.D, VirtualKeyModifiers.Control | VirtualKeyModifiers.Shift, EditMode_Invoked);\r\n            }\r\n\r\n            UploadItems.IsEnabledChanged += UploadItems_IsEnabledChanged;\r\n            MessageList.AddHandler(TappedEvent, new TappedEventHandler(MessageList_Tapped), true);\r\n\r\n            VisualStateManager.GoToState(this, \"NormalMode\", false);\r\n            VisualStateManager.GoToState(Header, \"NormalMode\", true);\r\n        }\r\n\r\n        private void OnSuspending(object sender, SuspendingEventArgs e)\r\n        {\r\n            foreach (var item in _channelHistory)\r\n            {\r\n                if (_viewModel != item)\r\n                    item.Dispose();\r\n            }\r\n\r\n            _channelHistory.RemoveAll(m => m != _viewModel);\r\n        }\r\n\r\n        protected override async void OnNavigatedTo(NavigationEventArgs e)\r\n        {\r\n            if (e.Parameter is not DiscordChannel chan)\r\n                return;\r\n\r\n            Application.Current.Suspending += OnSuspending;\r\n\r\n            var navigation = SystemNavigationManager.GetForCurrentView();\r\n            navigation.BackRequested += Navigation_BackRequested;\r\n\r\n            var enterEditMode = new RelayCommand<MessageViewModel>(EnterEditMode);\r\n            var exitEditMode = new RelayCommand(LeaveEditMode);\r\n\r\n            if (_viewModel?.IsEditMode == true)\r\n            {\r\n                LeaveEditMode();\r\n            }\r\n\r\n            var model = _channelHistory.FirstOrDefault(c => c.Channel.Id == chan.Id && !c.IsDisposed);\r\n            if (ViewModel != null)\r\n            {\r\n                await ViewModel.TruncateMessagesAsync();\r\n                _channelHistory.Add(ViewModel);\r\n            }\r\n\r\n            var windowHandle = WindowingService.Current.GetHandle(this);\r\n            if (model != null)\r\n            {\r\n                _channelHistory.Remove(model);\r\n            }\r\n            else\r\n            {\r\n                model = new ChannelPageViewModel(chan, windowHandle, enterEditMode, exitEditMode);\r\n            }\r\n\r\n            WindowingService.Current.SetWindowChannel(windowHandle, chan.Id);\r\n            await model.TruncateMessagesAsync();\r\n\r\n            ViewModel = model;\r\n            DataContext = ViewModel;\r\n\r\n            // TODO: this check should be for the input method, not platform\r\n            if (SystemPlatform.Desktop)\r\n                MessageTextBox.Focus(FocusState.Keyboard);\r\n\r\n            while (_channelHistory.Count > 10)\r\n            {\r\n                var oldModel = _channelHistory.ElementAt(0);\r\n                oldModel.Dispose();\r\n                _channelHistory.RemoveAt(0);\r\n            }\r\n\r\n            await Load().ConfigureAwait(false);\r\n        }\r\n\r\n        internal void FocusTextBox()\r\n        {\r\n            MessageTextBox.Focus();\r\n        }\r\n\r\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\r\n        {\r\n            Application.Current.Suspending -= OnSuspending;\r\n            var navigation = SystemNavigationManager.GetForCurrentView();\r\n            navigation.BackRequested -= Navigation_BackRequested;\r\n        }\r\n\r\n        private void Page_Loaded(object sender, RoutedEventArgs e)\r\n        {\r\n            if (!_scrollHandlerAdded)\r\n            {\r\n                var scrollViewer = MessageList.FindChild<ScrollViewer>(\"ScrollViewer\");\r\n                scrollViewer.ViewChanged += ScrollViewer_ViewChanged;\r\n                scrollViewer.HorizontalScrollMode = ScrollMode.Disabled;\r\n                scrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled;\r\n                scrollViewer.ManipulationMode = ManipulationModes.All;\r\n\r\n                var swipeService = SwipeOpenService.GetForCurrentView();\r\n                swipeService.AddAdditionalElement(MessageList);\r\n                swipeService.AddAdditionalElement(scrollViewer);\r\n\r\n                _scrollHandlerAdded = true;\r\n            }\r\n        }\r\n\r\n        private async void Navigation_BackRequested(object sender, BackRequestedEventArgs e)\r\n        {\r\n            if (e.Handled)\r\n                return;\r\n\r\n            FullscreenService.GetForCurrentView()?.LeaveFullscreen();\r\n            var last = _channelHistory.ElementAtOrDefault(_channelHistory.Count - 1);\r\n            if (last != null)\r\n            {\r\n                e.Handled = true;\r\n\r\n                _channelHistory.Remove(last);\r\n\r\n                var old = ViewModel;\r\n                ViewModel = last;\r\n                DataContext = ViewModel;\r\n\r\n                old.Dispose();\r\n\r\n                await Load().ConfigureAwait(false);\r\n            }\r\n        }\r\n\r\n        private async Task Load()\r\n        {\r\n            ViewModel.LastAccessed = DateTimeOffset.Now;\r\n            try\r\n            {\r\n                if (ViewModel.Channel.Guild?.IsSynced == false)\r\n                {\r\n                    await ViewModel.Channel.Guild.SyncAsync().ConfigureAwait(false);\r\n                }\r\n\r\n                await ViewModel.LoadMessagesAsync().ConfigureAwait(false);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                // TODO: port\r\n                Logger.LogError(ex);\r\n            }\r\n\r\n            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\r\n            {\r\n                if (ViewModel.ReadState.Unread == true)\r\n                {\r\n                    var id = ViewModel.ReadState.LastMessageId;\r\n                    var message = ViewModel.Messages.FirstOrDefault(m => m.Id == id) ?? ViewModel.Messages.FirstOrDefault();\r\n                    if (message != null)\r\n                    {\r\n                        MessageList.ScrollIntoView(message, ScrollIntoViewAlignment.Leading);\r\n                    }\r\n                }\r\n            });\r\n\r\n            await JumpListManager.AddToListAsync(_viewModel);\r\n        }\r\n\r\n        private async void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)\r\n        {\r\n            var scroll = sender as ScrollViewer;\r\n\r\n            var window = WindowingService.Current.GetHandle(this);\r\n            if (!WindowingService.Current.IsActive(window))\r\n                return;\r\n\r\n            if (!e.IsIntermediate)\r\n            {\r\n                if (scroll.VerticalOffset >= (scroll.ScrollableHeight - scroll.ViewportHeight) && ViewModel.ReadState.Unread != false)\r\n                {\r\n                    var message = ViewModel.Messages.LastOrDefault();\r\n                    if (message != null)\r\n                    {\r\n                        await message.Message.AcknowledgeAsync().ConfigureAwait(false);\r\n                    }\r\n                }\r\n                else if (scroll.VerticalOffset <= 150)\r\n                {\r\n                    await ViewModel.LoadMessagesBeforeAsync().ConfigureAwait(false);\r\n                }\r\n            }\r\n        }\r\n\r\n        private async void OnMessageTextBoxPaste(object sender, TextControlPasteEventArgs e)\r\n        {\r\n            try\r\n            {\r\n                var dataPackageView = Clipboard.GetContent();\r\n                if (dataPackageView.Contains(StandardDataFormats.StorageItems))\r\n                {\r\n                    Analytics.TrackEvent(\"ChannelPage_StorageItemsFromPaste\");\r\n                    e.Handled = true;\r\n\r\n                    if (PhotoPicker.Visibility == Visibility.Visible)\r\n                        HidePhotoPicker.Begin();\r\n\r\n                    var items = (await dataPackageView.GetStorageItemsAsync()).OfType<StorageFile>();\r\n                    foreach (var item in items)\r\n                    {\r\n                        await UploadItems.AddStorageFileAsync(item);\r\n                    }\r\n\r\n                    return;\r\n                }\r\n\r\n                if (dataPackageView.Contains(\"DeviceIndependentBitmapV5\"))\r\n                {\r\n                    try\r\n                    {\r\n                        var data = (IRandomAccessStream)await dataPackageView.GetDataAsync(\"DeviceIndependentBitmapV5\");\r\n                        var file = await BitmapInterop.GetFromRandomAccessStreamAsync(data);\r\n\r\n                        if (PhotoPicker.Visibility == Visibility.Visible)\r\n                            HidePhotoPicker.Begin();\r\n                        await UploadItems.AddStorageFileAsync(file, true);\r\n                        return;\r\n                    }\r\n                    catch\r\n                    {\r\n\r\n                    }\r\n                }\r\n\r\n                if (dataPackageView.Contains(StandardDataFormats.Bitmap))\r\n                {\r\n                    Analytics.TrackEvent(\"ChannelPage_ImageFromPaste\");\r\n                    e.Handled = true;\r\n\r\n                    if (PhotoPicker.Visibility == Visibility.Visible)\r\n                        HidePhotoPicker.Begin();\r\n\r\n                    var file = await Tools.GetImageFileFromDataPackage(dataPackageView);\r\n                    await UploadItems.AddStorageFileAsync(file, true);\r\n\r\n                    return;\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Logger.LogError(ex);\r\n                await UIUtilities.ShowErrorDialogAsync(\r\n                    \"Failed to upload.\",\r\n                    \"Whoops, something went wrong while uploading that file, sorry!\");\r\n            }\r\n        }\r\n\r\n        private async Task SendAsync()\r\n        {\r\n            try\r\n            {\r\n                await ViewModel.SendMessageAsync().ConfigureAwait(false);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                // just in case, should realistically never happen\r\n                Logger.LogError(ex);\r\n            }\r\n        }\r\n\r\n        private void UploadItems_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)\r\n        {\r\n            if ((bool)e.NewValue)\r\n            {\r\n                UploadItems.Visibility = Visibility.Visible;\r\n                HideUploadPanel.Stop();\r\n                ShowUploadPanel.Begin();\r\n            }\r\n            else\r\n            {\r\n                ShowUploadPanel.Stop();\r\n                HideUploadPanel.Begin();\r\n            }\r\n        }\r\n\r\n        private void uploadButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            if (PhotoPicker.Visibility == Visibility.Visible)\r\n            {\r\n                HidePhotoPicker.Begin();\r\n            }\r\n            else\r\n            {\r\n                ShowPhotoPicker.Begin();\r\n\r\n                try\r\n                {\r\n                    var queryOption = new QueryOptions(CommonFileQuery.OrderByDate, new string[] { \".jpg\", \".jpeg\", \".png\", \".mp4\", \".mov\", \".gif\" });\r\n                    queryOption.SetThumbnailPrefetch(ThumbnailMode.PicturesView, 256, ThumbnailOptions.UseCurrentScale);\r\n                    queryOption.FolderDepth = FolderDepth.Deep;\r\n                    queryOption.IndexerOption = IndexerOption.UseIndexerWhenAvailable;\r\n\r\n                    var photosQuery = KnownFolders.PicturesLibrary.CreateFileQueryWithOptions(queryOption);\r\n                    var factory = new FileInformationFactory(photosQuery, ThumbnailMode.PicturesView, 256, ThumbnailOptions.UseCurrentScale, true);\r\n                    PhotosList.ItemsSource = factory.GetVirtualizedFilesVector();\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    // TODO: Port\r\n                    Logger.LogError(ex);\r\n                }\r\n            }\r\n        }\r\n\r\n        private async void OpenPopoutButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            var capture = new CameraCaptureUI();\r\n            var file = await capture.CaptureFileAsync(CameraCaptureUIMode.PhotoOrVideo);\r\n            if (file != null)\r\n            {\r\n                var fileName = $\"Unicord_{DateTimeOffset.Now:yyyy-MM-dd_HH-mm-ss}{Path.GetExtension(file.Path)}\";\r\n                var folder = App.RoamingSettings.Read(\"SavePhotos\", true) ? KnownFolders.CameraRoll : ApplicationData.Current.TemporaryFolder;\r\n                await file.MoveAsync(folder, fileName, NameCollisionOption.GenerateUniqueName);\r\n\r\n                HidePhotoPicker.Begin();\r\n                await UploadItems.AddStorageFileAsync(file);\r\n            }\r\n        }\r\n\r\n        private async void PhotosList_ItemClick(object sender, ItemClickEventArgs e)\r\n        {\r\n            HidePhotoPicker.Begin();\r\n\r\n            if (e.ClickedItem is IStorageFile item)\r\n            {\r\n                Analytics.TrackEvent(\"ChannelPage_ImageFromPhotosList\");\r\n                await UploadItems.AddStorageFileAsync(item);\r\n            }\r\n        }\r\n\r\n        private void ChannelPage_OnDragEnter(object sender, DragEventArgs e)\r\n        {\r\n\r\n        }\r\n\r\n        private void ChannelPage_OnDragOver(object sender, DragEventArgs e)\r\n        {\r\n            if (ViewModel.CanUpload)\r\n            {\r\n                e.AcceptedOperation = DataPackageOperation.Copy;\r\n                e.DragUIOverride.Caption = $\"Send to {ViewModel.FullChannelName}\";\r\n                e.DragUIOverride.IsCaptionVisible = true;\r\n            }\r\n            else\r\n            {\r\n                e.AcceptedOperation = DataPackageOperation.None;\r\n            }\r\n        }\r\n\r\n        private void ChannelPage_OnDragLeave(object sender, DragEventArgs e)\r\n        {\r\n\r\n        }\r\n\r\n        private async void ChannelPage_OnDrop(object sender, DragEventArgs e)\r\n        {\r\n            if (!ViewModel.CanUpload)\r\n                return;\r\n\r\n            if (e.DataView.Contains(StandardDataFormats.Bitmap))\r\n            {\r\n                Analytics.TrackEvent(\"ChannelPage_ImageFromDrop\");\r\n\r\n                var file = await Tools.GetImageFileFromDataPackage(e.DataView);\r\n                await UploadItems.AddStorageFileAsync(file, true);\r\n\r\n                return;\r\n            }\r\n\r\n            if (e.DataView.Contains(StandardDataFormats.WebLink))\r\n            {\r\n                Analytics.TrackEvent(\"ChannelPage_LinkFromDrop\");\r\n\r\n                var link = await e.DataView.GetWebLinkAsync();\r\n                MessageTextBox.AppendText(link.ToString());\r\n\r\n                return;\r\n            }\r\n\r\n            if (e.DataView.Contains(StandardDataFormats.Text))\r\n            {\r\n                Analytics.TrackEvent(\"ChannelPage_TextFromDrop\");\r\n\r\n                var text = await e.DataView.GetTextAsync();\r\n                MessageTextBox.AppendText(text);\r\n\r\n                return;\r\n            }\r\n\r\n            if (e.DataView.Contains(StandardDataFormats.StorageItems))\r\n            {\r\n                Analytics.TrackEvent(\"ChannelPage_FilesFromDrop\");\r\n\r\n                var items = await e.DataView.GetStorageItemsAsync();\r\n                foreach (var item in items.OfType<IStorageFile>())\r\n                {\r\n                    await UploadItems.AddStorageFileAsync(item, false);\r\n                }\r\n            }\r\n        }\r\n\r\n        private async void OnOpenLocalButtonClick(object sender, RoutedEventArgs e)\r\n        {\r\n            try\r\n            {\r\n                var picker = new FileOpenPicker\r\n                {\r\n                    SuggestedStartLocation = PickerLocationId.DocumentsLibrary,\r\n                    CommitButtonText = $\"Upload to {_viewModel.FullChannelName}\",\r\n                    ViewMode = PickerViewMode.Thumbnail\r\n                };\r\n\r\n                picker.FileTypeFilter.Add(\"*\");\r\n\r\n                var files = await picker.PickMultipleFilesAsync();\r\n\r\n                HidePhotoPicker.Begin();\r\n                foreach (var file in files)\r\n                {\r\n                    Analytics.TrackEvent(\"ChannelPage_FilesFromPicker\");\r\n                    await UploadItems.AddStorageFileAsync(file);\r\n                }\r\n            }\r\n            catch { }\r\n        }\r\n\r\n        private void EnterEditMode(MessageViewModel message)\r\n        {\r\n            Analytics.TrackEvent(\"ChannelPage_EnterEditMode\");\r\n\r\n            _viewModel.IsEditMode = true;\r\n            VisualStateManager.GoToState(this, \"EditMode\", true);\r\n            VisualStateManager.GoToState(Header, \"EditMode\", true);\r\n\r\n            if (message != null)\r\n            {\r\n                MessageList.SelectedItems.Add(message);\r\n            }\r\n        }\r\n\r\n        private void LeaveEditMode()\r\n        {\r\n            Analytics.TrackEvent(\"ChannelPage_LeaveEditMode\");\r\n\r\n            _viewModel.IsEditMode = false;\r\n            VisualStateManager.GoToState(this, \"NormalMode\", true);\r\n            VisualStateManager.GoToState(Header, \"NormalMode\", true);\r\n        }\r\n\r\n        private void MessageList_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n        {\r\n            foreach (var item in e.AddedItems.OfType<MessageViewModel>())\r\n            {\r\n                if (!item.DeleteCommand.CanExecute(null))\r\n                {\r\n                    MessageList.SelectedItems.Remove(item);\r\n                }\r\n            }\r\n        }\r\n\r\n        private void MessageList_Tapped(object sender, TappedRoutedEventArgs e)\r\n        {\r\n            //var page = this.FindParent<DiscordPage>();\r\n            //if (page != null)\r\n            //{\r\n            //    page.CloseSplitPane();\r\n            //}\r\n\r\n            if (Window.Current.CoreWindow.GetKeyState(VirtualKey.Control) == CoreVirtualKeyStates.Down)\r\n            {\r\n                _viewModel.EnterEditModeCommand?.Execute(null);\r\n            }\r\n        }\r\n\r\n        private void EditMode_Invoked(KeyboardAccelerator sender, KeyboardAcceleratorInvokedEventArgs args)\r\n        {\r\n            if (!_viewModel.IsEditMode)\r\n            {\r\n                _viewModel.EnterEditModeCommand?.Execute(null);\r\n            }\r\n        }\r\n\r\n        private async void MessageTextBox_ShouldSendTyping(object sender, EventArgs e)\r\n        {\r\n            await ViewModel.TriggerTypingAsync().ConfigureAwait(false);\r\n        }\r\n\r\n        private void MessageTextBox_EditInvoked(object sender, EventArgs e)\r\n        {\r\n            var lastMessage = _viewModel.Messages.LastOrDefault(m => m.Author.IsCurrent);\r\n            if (lastMessage != null)\r\n            {\r\n                MessageList.ScrollIntoView(lastMessage, ScrollIntoViewAlignment.Leading);\r\n                lastMessage.IsEditing = true;\r\n            }\r\n        }\r\n\r\n        private async void MessageTextBox_SendInvoked(object sender, string e)\r\n        {\r\n            await SendAsync();\r\n        }\r\n\r\n        private MessageViewModel _reactionModel;\r\n        internal void ShowReactionPicker(MessageViewModel model)\r\n        {\r\n            var control = MessageList.ContainerFromItem(model);\r\n            if (control is not FrameworkElement element) return;\r\n\r\n            _reactionModel = model;\r\n            EmoteFlyout.ShowAt(element);\r\n        }\r\n\r\n        private void EmotePicker_EmojiPicked(object sender, EmojiViewModel e)\r\n        {\r\n            if (_reactionModel != null)\r\n            {\r\n                _reactionModel.ReactCommand.Execute(e);\r\n            }\r\n\r\n            if (Window.Current.CoreWindow.GetKeyState(VirtualKey.Shift) != CoreVirtualKeyStates.Down)\r\n            {\r\n                _reactionModel = null;\r\n                EmoteFlyout.Hide();\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Pages/DiscordPage.xaml",
    "content": "﻿<Page\r\n    x:Name=\"self\"\r\n    x:Class=\"Unicord.Universal.Pages.DiscordPage\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n    xmlns:controls=\"using:Unicord.Universal.Controls\"\r\n    xmlns:toolkit=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\r\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\r\n    xmlns:sub=\"using:Unicord.Universal.Pages.Subpages\"\r\n    xmlns:models=\"using:Unicord.Universal.Models\"\r\n    xmlns:messages=\"using:Unicord.Universal.Controls.Messages\"\r\n    xmlns:converters=\"using:Unicord.Universal.Converters\"\r\n    xmlns:voice=\"using:Unicord.Universal.Controls.Voice\"\r\n    xmlns:media=\"using:Microsoft.Toolkit.Uwp.UI.Media\"\r\n    xmlns:ui=\"using:Microsoft.Toolkit.Uwp.UI\" \r\n    xmlns:messagesVMs=\"using:Unicord.Universal.Models.Messages\"\r\n    xmlns:w1903=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,8)\"\r\n    NavigationCacheMode=\"Required\"\r\n    Loaded=\"Page_Loaded\"\r\n    Unloaded=\"Page_Unloaded\"\r\n    mc:Ignorable=\"d\">\r\n    <Page.DataContext>\r\n        <models:DiscordPageViewModel/>\r\n    </Page.DataContext>\r\n    <Page.Resources>\r\n        <CircleEase x:Key=\"Ease\" EasingMode=\"EaseInOut\" />\r\n\r\n        <Style x:Key=\"SeparatorStyle\" TargetType=\"Border\">\r\n            <Setter Property=\"Margin\" Value=\"16,8\"/>\r\n            <Setter Property=\"BorderThickness\" Value=\"0,1,0,0\"/>\r\n            <Setter Property=\"BorderBrush\" Value=\"{ThemeResource DiscordPage_Separator_BorderBrush}\"/>\r\n        </Style>\r\n    </Page.Resources>\r\n    <Grid>\r\n        <Grid x:Name=\"TitleBarGrid\"\r\n              VerticalAlignment=\"Top\" \r\n              Height=\"32\"\r\n              Background=\"{ThemeResource DiscordPage_PrimarySidebar_BackgroundBrush}\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"72\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <Grid x:Name=\"iconGrid\"\r\n                  VerticalAlignment=\"Center\"\r\n                  Visibility=\"Visible\">\r\n                <Image Width=\"18\"\r\n                       Height=\"18\"\r\n                       Source=\"{StaticResource DiscordClyde}\">\r\n                </Image>\r\n            </Grid>\r\n\r\n            <TextBlock x:Name=\"CaptionTextBlock\"\r\n                       Grid.Column=\"1\" \r\n                       VerticalAlignment=\"Center\"\r\n                       Margin=\"0,2,0,0\"\r\n                       Style=\"{ThemeResource CaptionTextBlockStyle}\">\r\n                <TextBlock.RenderTransform>\r\n                    <TranslateTransform x:Name=\"CaptionTransform\" />\r\n                </TextBlock.RenderTransform>\r\n                <Run Text=\"Unicord\"/>&#xA0;&#xA0;&#xA0;<Run x:Name=\"VersionText\" FontSize=\"10\" Foreground=\"{ThemeResource SystemControlForegroundBaseMediumLowBrush}\" Text=\"{Binding DisplayVersion}\"/>\r\n            </TextBlock>\r\n        </Grid>\r\n\r\n        <Grid x:Name=\"MainGrid\"\r\n              Margin=\"-292,0,-292,0\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"292\" />\r\n                <ColumnDefinition Width=\"*\" />\r\n                <ColumnDefinition Width=\"292\" />\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <Grid.RenderTransform>\r\n                <TransformGroup>\r\n                    <TranslateTransform x:Name=\"MainGridTransform\" />\r\n                </TransformGroup>\r\n            </Grid.RenderTransform>\r\n\r\n            <Grid x:Name=\"LeftSplitPane\"\r\n                  Width=\"292\"\r\n                  HorizontalAlignment=\"Left\">\r\n\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"64\" />\r\n                    <ColumnDefinition Width=\"*\" />\r\n                </Grid.ColumnDefinitions>\r\n\r\n                <Grid x:Name=\"sidebarMainGrid\" \r\n                      Margin=\"0,32,0,0\"\r\n                      Background=\"{ThemeResource DiscordPage_PrimarySidebar_BackgroundBrush}\">\r\n                    <ScrollViewer IsVerticalScrollChainingEnabled=\"True\">\r\n                        <StackPanel Padding=\"0,0,0,68\">\r\n                            <ListViewItem x:Name=\"CloseItem\"\r\n                                          MinWidth=\"0\"\r\n                                          Padding=\"0\"\r\n                                          HorizontalContentAlignment=\"Stretch\"\r\n                                          Tapped=\"CloseItem_Tapped\"\r\n                                          Style=\"{StaticResource UnicordListViewItemStyle}\">\r\n                                <FontIcon Width=\"36\" Height=\"36\" Glyph=\"&#xE700;\" />\r\n                            </ListViewItem>\r\n                            <ListViewItem x:Name=\"FriendsItem\"\r\n                                              MinWidth=\"0\"\r\n                                              Padding=\"0\"\r\n                                              Height=\"54\"\r\n                                              IsSelected=\"{Binding IsFriendsSelected}\"\r\n                                              HorizontalContentAlignment=\"Stretch\"\r\n                                              Tapped=\"friendsItem_Tapped\"\r\n                                              Style=\"{StaticResource UnicordListViewItemStyle}\">\r\n                                <SymbolIcon Width=\"36\" Height=\"36\" Symbol=\"People\" />\r\n                            </ListViewItem>\r\n\r\n                            <ListView ItemsSource=\"{Binding UnreadDMs}\"\r\n                                      SelectedItem=\"{Binding SelectedDM}\"\r\n                                      Visibility=\"{Binding UnreadDMs.Count, Converter={StaticResource BoolVisibilityConverter}}\"\r\n                                      ScrollViewer.VerticalScrollMode=\"Disabled\"\r\n                                      SingleSelectionFollowsFocus=\"False\"\r\n                                      SelectionChanged=\"UnreadDms_SelectionChanged\">\r\n                                <ListView.HeaderTemplate>\r\n                                    <DataTemplate>\r\n                                        <Border Style=\"{StaticResource SeparatorStyle}\"/>\r\n                                    </DataTemplate>\r\n                                </ListView.HeaderTemplate>\r\n                                <ListView.ItemContainerStyle>\r\n                                    <Style TargetType=\"ListViewItem\" BasedOn=\"{StaticResource UnicordListViewItemStyle}\">\r\n                                        <Setter Property=\"MinWidth\" Value=\"0\" />\r\n                                        <Setter Property=\"Padding\" Value=\"0\" />\r\n                                        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\r\n                                    </Style>\r\n                                </ListView.ItemContainerStyle>\r\n                                <ListView.ItemTemplate>\r\n                                    <DataTemplate>\r\n                                        <Grid>\r\n                                            <lib:PersonPicture Width=\"42\" \r\n                                                                   Height=\"42\"\r\n                                                                   Margin=\"0,4\"\r\n                                                                   DisplayName=\"{Binding Name}\"\r\n                                                                   ProfilePicture=\"{Binding IconUrl}\" />\r\n\r\n                                            <lib:InfoBadge VerticalAlignment=\"Top\"\r\n                                                               HorizontalAlignment=\"Right\"\r\n                                                               Margin=\"4\"\r\n                                                               MinWidth=\"8\"\r\n                                                               MinHeight=\"8\"\r\n                                                               Value=\"{Binding ReadState.MentionCount}\"/>\r\n                                        </Grid>\r\n                                    </DataTemplate>\r\n                                </ListView.ItemTemplate>\r\n                            </ListView>\r\n\r\n                            <Border Style=\"{StaticResource SeparatorStyle}\"/>\r\n\r\n                            <lib:TreeView x:Name=\"GuildsView\"\r\n                                          ItemsSource=\"{Binding Guilds}\"\r\n                                          ItemInvoked=\"TreeView_ItemInvoked\"\r\n                                          ScrollViewer.IsVerticalScrollChainingEnabled=\"True\">\r\n                                <lib:TreeView.ItemTemplateSelector>\r\n                                    <converters:GuildListTemplateSelector GuildTemplate=\"{StaticResource GuildsListTemplate}\" \r\n                                                                          GuildFolderTemplate=\"{StaticResource GuildsListFolderTemplate}\"/>\r\n                                </lib:TreeView.ItemTemplateSelector>\r\n                                <lib:TreeView.ItemContainerStyle>\r\n                                    <Style TargetType=\"lib:TreeViewItem\" BasedOn=\"{StaticResource UnicordListViewItemStyle}\">\r\n                                        <Setter Property=\"MinWidth\" Value=\"0\" />\r\n                                        <Setter Property=\"Padding\" Value=\"0\" />\r\n                                        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\r\n                                    </Style>\r\n                                </lib:TreeView.ItemContainerStyle>\r\n                            </lib:TreeView>\r\n\r\n                            <Border Style=\"{StaticResource SeparatorStyle}\"/>\r\n\r\n                            <ListViewItem x:Name=\"createServerItem\"\r\n                                          MinWidth=\"0\"\r\n                                          Padding=\"0\"\r\n                                          HorizontalContentAlignment=\"Stretch\"\r\n                                          Style=\"{StaticResource UnicordListViewItemStyle}\"\r\n                                          Height=\"56\">\r\n                                <SymbolIcon Width=\"36\" Height=\"36\" Symbol=\"Add\" />\r\n                            </ListViewItem>\r\n                            <ListViewItem x:Name=\"findServerIcon\"\r\n                                          MinWidth=\"0\"\r\n                                          Padding=\"0\"\r\n                                          HorizontalContentAlignment=\"Stretch\"\r\n                                          Style=\"{StaticResource UnicordListViewItemStyle}\"\r\n                                          Height=\"56\">\r\n                                <SymbolIcon Width=\"36\" Height=\"36\" Symbol=\"Find\" />\r\n                            </ListViewItem>\r\n\r\n                            <Border Style=\"{StaticResource SeparatorStyle}\"/>\r\n\r\n                            <ListViewItem x:Name=\"settingsItem\"\r\n                                          MinWidth=\"0\"\r\n                                          Padding=\"0\"\r\n                                          HorizontalContentAlignment=\"Stretch\"\r\n                                          Tapped=\"SettingsItem_Tapped\"\r\n                                          Style=\"{StaticResource UnicordListViewItemStyle}\"\r\n                                          Height=\"56\">\r\n                                <SymbolIcon Width=\"36\" Height=\"36\" Symbol=\"Setting\" />\r\n                            </ListViewItem>\r\n                        </StackPanel>\r\n                    </ScrollViewer>\r\n                </Grid>\r\n\r\n                <Grid x:Name=\"sidebarSecondaryGrid\"\r\n                      Style=\"{StaticResource DiscordPage_SidebarSecondaryStyle}\"\r\n                      Grid.Column=\"1\">\r\n                    <Grid Margin=\"{StaticResource DiscordPage_SecondaryGridMargin}\">\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"*\" />\r\n                            <RowDefinition Height=\"auto\" />\r\n                        </Grid.RowDefinitions>\r\n\r\n                        <Grid Background=\"{ThemeResource DiscordPage_SecondaryGrid_Background}\"\r\n                              BorderBrush=\"{ThemeResource DiscordPage_SecondaryGrid_BorderBrush}\"\r\n                              BorderThickness=\"{ThemeResource DiscordPage_SecondaryGrid_BorderThickness}\"\r\n                              CornerRadius=\"{ThemeResource DiscordPage_SecondaryGrid_CornerRadius}\"\r\n                              Margin=\"{ThemeResource DiscordPage_SecondaryGrid_SplitMargin}\">\r\n                            <Frame x:Name=\"leftSidebarFrame\"/>\r\n                        </Grid>\r\n\r\n                        <Grid Grid.Row=\"1\"\r\n                              Margin=\"{ThemeResource DiscordPage_SecondaryGrid_SplitMargin}\"\r\n                              Background=\"{ThemeResource DiscordPage_SecondaryGrid_Background}\"\r\n                              BorderBrush=\"{ThemeResource DiscordPage_SecondaryGrid_BorderBrush}\"\r\n                              BorderThickness=\"{ThemeResource DiscordPage_SecondaryGrid_BorderThickness}\"\r\n                              CornerRadius=\"{ThemeResource DiscordPage_SecondaryGrid_CornerRadius}\"\r\n                              Visibility=\"{Binding VoiceModel, Converter={StaticResource HideOnNullConverter}, FallbackValue=Collapsed}\">\r\n                            <voice:VoiceConnectionControl ConnectionModel=\"{Binding VoiceModel}\"/>\r\n                        </Grid>\r\n                    </Grid>\r\n                </Grid>\r\n\r\n                <!-- Floating user panel pill spanning both columns -->\r\n                <Grid Grid.ColumnSpan=\"2\"\r\n                      VerticalAlignment=\"Bottom\"\r\n                      Margin=\"8,8,12,8\"\r\n                      Background=\"{ThemeResource DiscordPage_UserPill_Background}\"\r\n                      BorderBrush=\"{ThemeResource DiscordPage_SecondaryGrid_BorderBrush}\"\r\n                      BorderThickness=\"{ThemeResource DiscordPage_SecondaryGrid_BorderThickness}\"\r\n                      CornerRadius=\"{ThemeResource DiscordPage_UserPill_CornerRadius}\"\r\n                      Padding=\"8,6\"\r\n                      Height=\"52\">\r\n                    <w1903:Grid.Shadow>\r\n                        <w1903:ThemeShadow />\r\n                    </w1903:Grid.Shadow>\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"Auto\"/>\r\n                        <ColumnDefinition Width=\"*\"/>\r\n                        <ColumnDefinition Width=\"Auto\"/>\r\n                    </Grid.ColumnDefinitions>\r\n\r\n                    <lib:PersonPicture Width=\"32\" Height=\"32\" ProfilePicture=\"{Binding CurrentUser.AvatarUrl}\" DisplayName=\"{Binding CurrentUser.DisplayName}\" />\r\n\r\n                    <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Center\" Margin=\"8,0\">\r\n                        <TextBlock Text=\"{Binding CurrentUser.DisplayName}\" FontSize=\"13\" FontWeight=\"SemiBold\" TextTrimming=\"CharacterEllipsis\"/>\r\n                        <TextBlock Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" \r\n                                   FontSize=\"11\" \r\n                                   FontFamily=\"{ThemeResource DiscordPage_UserPill_SecondaryFontFamily}\" \r\n                                   Margin=\"0,-2,0,0\" \r\n                                   Text=\"{Binding CurrentUser.Username}\"\r\n                                   TextTrimming=\"CharacterEllipsis\"/>\r\n                    </StackPanel>\r\n\r\n                    <Button x:Name=\"SettingsButton\"\r\n                            Grid.Column=\"2\"\r\n                            Style=\"{StaticResource IconButtonStyle}\"\r\n                            Width=\"32\"\r\n                            Height=\"32\"\r\n                            Padding=\"0\"\r\n                            Content=\"&#xE713;\"\r\n                            FontSize=\"16\"\r\n                            Command=\"{StaticResource SettingsCommand}\"/>\r\n                </Grid>\r\n            </Grid>\r\n\r\n            <Grid x:Name=\"MainContent\"\r\n                  Grid.Column=\"1\"\r\n                  MinWidth=\"250\"\r\n                  Style=\"{StaticResource DiscordPage_RightMainGridStyle}\"\r\n                  CornerRadius=\"{ThemeResource DiscordPage_MainContent_CornerRadius}\"\r\n                  Background=\"{ThemeResource DiscordPage_MainContent_Background}\"\r\n                  BorderBrush=\"{ThemeResource DiscordPage_MainContent_BorderBrush}\"\r\n                  BorderThickness=\"{ThemeResource DiscordPage_MainContent_BorderThickness}\">\r\n                <Frame x:Name=\"mainFrame\"\r\n                       HorizontalAlignment=\"Stretch\"\r\n                       Navigated=\"mainFrame_Navigated\"\r\n                       SourcePageType=\"sub:FriendsPage\" />\r\n\r\n                <Grid>\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition />\r\n                        <ColumnDefinition MinWidth=\"375\" MaxWidth=\"520\" />\r\n                    </Grid.ColumnDefinitions>\r\n\r\n                    <toolkit:InAppNotification x:Name=\"notification\"\r\n                                               Grid.Column=\"1\"\r\n                                               Margin=\"0,24,4,0\"\r\n                                               Padding=\"16\"\r\n                                               HorizontalAlignment=\"Stretch\"\r\n                                               VerticalAlignment=\"Top\"\r\n                                               AnimationDuration=\"00:00:00.3\"\r\n                                               StackMode=\"Replace\"\r\n                                               Tapped=\"Notification_Tapped\"\r\n                                               VerticalOffset=\"-120\"\r\n                                               MaxHeight=\"200\"\r\n                                               Style=\"{ThemeResource CustomInAppNotificationsStyle}\"\r\n                                               ContentTemplate=\"{StaticResource MessageContentTemplate}\"/>\r\n                </Grid>\r\n            </Grid>\r\n\r\n            <Grid x:Name=\"RightSplitPane\"\r\n                  HorizontalAlignment=\"Right\"\r\n                  Grid.Column=\"2\"                  \r\n                  Width=\"292\"\r\n                  Margin=\"0,32,0,0\">\r\n                <Grid Background=\"{ThemeResource DiscordPage_RightSplitPaneGrid_Background}\"\r\n                      BorderBrush=\"{ThemeResource DiscordPage_RightSplitPaneGrid_BorderBrush}\"\r\n                      BorderThickness=\"{ThemeResource DiscordPage_RightSplitPaneGrid_BorderThickness}\"\r\n                      CornerRadius=\"{ThemeResource DiscordPage_RightSplitPaneGrid_CornerRadius}\"\r\n                      Margin=\"{ThemeResource DiscordPage_RightSplitPaneGrid_Margin}\"\r\n                      Style=\"{ThemeResource DiscordPage_RightSplitPaneStyle}\">\r\n\r\n                    <Frame x:Name=\"rightSidebarFrame\" />\r\n                </Grid>\r\n            </Grid>\r\n        </Grid>\r\n\r\n        <VisualStateManager.VisualStateGroups>\r\n            <VisualStateGroup x:Name=\"PaneStates\">\r\n                <VisualState x:Name=\"SinglePaneLeft\">\r\n                    <VisualState.Storyboard>\r\n                        <Storyboard>\r\n                            <DoubleAnimation\r\n                                 EasingFunction=\"{StaticResource EaseEnter}\"\r\n                                 Storyboard.TargetName=\"MainGridTransform\"\r\n                                 Storyboard.TargetProperty=\"X\"\r\n                                 To=\"292\"\r\n                                 Duration=\"00:00:00.25\" />\r\n                            <DoubleAnimation\r\n                                 EasingFunction=\"{StaticResource EaseEnter}\"\r\n                                 Storyboard.TargetName=\"CaptionTransform\"\r\n                                 Storyboard.TargetProperty=\"X\"\r\n                                 To=\"12\"\r\n                                 Duration=\"00:00:00.25\" />\r\n                        </Storyboard>\r\n                    </VisualState.Storyboard>\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"CloseItem.Visibility\" Value=\"Visible\"/>\r\n                        <Setter Target=\"MainGrid.Margin\" Value=\"-292,0,-292,0\"/>\r\n                        <Setter Target=\"MainContent.CornerRadius\" Value=\"{StaticResource DiscordPage_MainContent_CornerRadius}\"/>\r\n                        <Setter Target=\"MainContent.BorderThickness\" Value=\"{StaticResource DiscordPage_MainContent_BorderThickness}\"/>\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n                <VisualState x:Name=\"SinglePaneCentre\">\r\n                    <VisualState.Storyboard>\r\n                        <Storyboard>\r\n                            <DoubleAnimation\r\n                                 EasingFunction=\"{StaticResource EaseEnter}\"\r\n                                 Storyboard.TargetName=\"MainGridTransform\"\r\n                                 Storyboard.TargetProperty=\"X\"\r\n                                 To=\"0\"\r\n                                 Duration=\"00:00:00.25\" />\r\n                            <DoubleAnimation\r\n                                 EasingFunction=\"{StaticResource EaseEnter}\"\r\n                                 Storyboard.TargetName=\"CaptionTransform\"\r\n                                 Storyboard.TargetProperty=\"X\"\r\n                                 To=\"0\"\r\n                                 Duration=\"00:00:00.25\" />\r\n                        </Storyboard>\r\n                    </VisualState.Storyboard>\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"CloseItem.Visibility\" Value=\"Visible\"/>\r\n                        <Setter Target=\"MainGrid.Margin\" Value=\"-292,0,-292,0\"/>\r\n                        <Setter Target=\"MainContent.CornerRadius\" Value=\"{StaticResource DiscordPage_MainContent_CornerRadius}\"/>\r\n                        <Setter Target=\"MainContent.BorderThickness\" Value=\"{StaticResource DiscordPage_MainContent_BorderThickness}\"/>\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n                <VisualState x:Name=\"SinglePaneRight\">\r\n                    <VisualState.Storyboard>\r\n                        <Storyboard>\r\n                            <DoubleAnimation\r\n                                 EasingFunction=\"{StaticResource EaseEnter}\"\r\n                                 Storyboard.TargetName=\"MainGridTransform\"\r\n                                 Storyboard.TargetProperty=\"X\"\r\n                                 To=\"-292\"\r\n                                 Duration=\"00:00:00.25\" />\r\n                        </Storyboard>\r\n                    </VisualState.Storyboard>\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"CloseItem.Visibility\" Value=\"Visible\"/>\r\n                        <Setter Target=\"MainGrid.Margin\" Value=\"-292,0,-292,0\"/>\r\n                        <Setter Target=\"CaptionTransform.X\" Value=\"12\"/>\r\n                        <Setter Target=\"MainContent.CornerRadius\" Value=\"{StaticResource DiscordPage_MainContent_CornerRadius}\"/>\r\n                        <Setter Target=\"MainContent.BorderThickness\" Value=\"{StaticResource DiscordPage_MainContent_BorderThickness}\"/>\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n                <VisualState x:Name=\"TwoPaneLeft\">\r\n                    <VisualState.Storyboard>\r\n                        <Storyboard>\r\n                            <DoubleAnimation\r\n                                 EasingFunction=\"{StaticResource EaseEnter}\"\r\n                                 Storyboard.TargetName=\"MainGridTransform\"\r\n                                 Storyboard.TargetProperty=\"X\"\r\n                                 To=\"0\"\r\n                                 Duration=\"00:00:00.25\" />\r\n                        </Storyboard>\r\n                    </VisualState.Storyboard>\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"CloseItem.Visibility\" Value=\"Collapsed\"/>\r\n                        <Setter Target=\"MainGrid.Margin\" Value=\"0,0,-292,0\"/>\r\n                        <Setter Target=\"CaptionTransform.X\" Value=\"12\"/>\r\n                        <Setter Target=\"MainContent.CornerRadius\" Value=\"{StaticResource DiscordPage_MainContent_CornerRadius_TwoPaneLeft}\"/>\r\n                        <Setter Target=\"MainContent.BorderThickness\" Value=\"{StaticResource DiscordPage_MainContent_BorderThickness_TwoPaneLeft}\"/>\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n                <VisualState x:Name=\"TwoPaneRight\">\r\n                    <VisualState.Storyboard>\r\n                        <Storyboard>\r\n                            <DoubleAnimation\r\n                                 EasingFunction=\"{StaticResource EaseEnter}\"\r\n                                 Storyboard.TargetName=\"MainGridTransform\"\r\n                                 Storyboard.TargetProperty=\"X\"\r\n                                 To=\"-292\"\r\n                                 Duration=\"00:00:00.25\" />\r\n                        </Storyboard>\r\n                    </VisualState.Storyboard>\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"CloseItem.Visibility\" Value=\"Collapsed\"/>\r\n                        <Setter Target=\"MainGrid.Margin\" Value=\"0,0,-292,0\"/>\r\n                        <Setter Target=\"CaptionTransform.X\" Value=\"12\"/>\r\n                        <Setter Target=\"MainContent.CornerRadius\" Value=\"{StaticResource DiscordPage_MainContent_CornerRadius_TwoPaneRight}\"/>\r\n                        <Setter Target=\"MainContent.BorderThickness\" Value=\"{StaticResource DiscordPage_MainContent_BorderThickness_TwoPaneRight}\"/>\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n                <VisualState x:Name=\"ThreePane\">\r\n                    <VisualState.Storyboard>\r\n                        <Storyboard>\r\n                            <DoubleAnimation\r\n                                 EasingFunction=\"{StaticResource EaseEnter}\"\r\n                                 Storyboard.TargetName=\"CaptionTransform\"\r\n                                 Storyboard.TargetProperty=\"X\"\r\n                                 To=\"0\"\r\n                                 Duration=\"00:00:00.25\" />\r\n                        </Storyboard>\r\n                    </VisualState.Storyboard>\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"CloseItem.Visibility\" Value=\"Collapsed\"/>\r\n                        <Setter Target=\"MainGridTransform.X\" Value=\"0\"/>\r\n                        <Setter Target=\"CaptionTransform.X\" Value=\"12\"/>\r\n                        <Setter Target=\"MainGrid.Margin\" Value=\"0,0,0,0\"/>\r\n                        <Setter Target=\"MainContent.CornerRadius\" Value=\"{StaticResource DiscordPage_MainContent_CornerRadius_ThreePane}\"/>\r\n                        <Setter Target=\"MainContent.BorderThickness\" Value=\"{StaticResource DiscordPage_MainContent_BorderThickness_ThreePane}\"/>\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n            </VisualStateGroup>\r\n        </VisualStateManager.VisualStateGroups>\r\n    </Grid>\r\n</Page>\r\n"
  },
  {
    "path": "Unicord.Universal/Pages/DiscordPage.xaml.cs",
    "content": "﻿using System;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing CommunityToolkit.Mvvm.Messaging;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.EventArgs;\r\nusing Microsoft.AppCenter.Analytics;\r\nusing Microsoft.Extensions.Logging;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Integration;\r\nusing Unicord.Universal.Models;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Unicord.Universal.Models.Guild;\r\nusing Unicord.Universal.Models.Messages;\r\nusing Unicord.Universal.Models.Voice;\r\nusing Unicord.Universal.Pages.Subpages;\r\nusing Unicord.Universal.Services;\r\nusing Unicord.Universal.Shared;\r\nusing Unicord.Universal.Utilities;\r\nusing Windows.Foundation.Metadata;\r\nusing Windows.UI.Core;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Input;\r\nusing Windows.UI.Xaml.Navigation;\r\nusing MUXC = Microsoft.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Pages\r\n{\r\n    public sealed partial class DiscordPage : Page\r\n    {\r\n        public Frame MainFrame => mainFrame;\r\n        public Frame LeftSidebarFrame => leftSidebarFrame;\r\n        public Frame RightSidebarFrame => rightSidebarFrame;\r\n\r\n        private ILogger<DiscordPage> _logger\r\n            = Logger.GetLogger<DiscordPage>();\r\n        private MainPageArgs _args;\r\n        private bool _loaded;\r\n        private bool _ready;\r\n\r\n        internal DiscordPageViewModel Model { get; }\r\n        internal bool IsWindowVisible { get; private set; }\r\n\r\n        public DiscordPage()\r\n        {\r\n            InitializeComponent();\r\n            Model = DataContext as DiscordPageViewModel;\r\n\r\n            IsWindowVisible = Window.Current.Visible;\r\n            Window.Current.VisibilityChanged += Current_VisibilityChanged;\r\n\r\n            WeakReferenceMessenger.Default.Register<DiscordPage, ReadyEventArgs>(this, (r, e) => r.OnReady(e.Event));\r\n            WeakReferenceMessenger.Default.Register<DiscordPage, MessageCreateEventArgs>(this, (r, e) => r.Notification_MessageCreated(e.Event));\r\n        }\r\n\r\n        private void Current_VisibilityChanged(object sender, VisibilityChangedEventArgs e)\r\n        {\r\n            IsWindowVisible = e.Visible;\r\n            UpdateTitleBar();\r\n        }\r\n\r\n        protected override async void OnNavigatedTo(NavigationEventArgs e)\r\n        {\r\n            UpdateTitleBar();\r\n            Analytics.TrackEvent(\"DiscordPage_NavigatedTo\");\r\n\r\n            if (e.Parameter is MainPageArgs args)\r\n            {\r\n                _args = args;\r\n\r\n                if (_loaded && _ready && _args.ChannelId != 0)\r\n                {\r\n                    if (DiscordManager.Discord.TryGetCachedChannel(_args.ChannelId, out var channel))\r\n                    {\r\n                        var service = DiscordNavigationService.GetForCurrentView();\r\n                        await service.NavigateAsync(channel);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        private async Task OnReady(ReadyEventArgs e)\r\n        {\r\n            if (_ready) return;\r\n\r\n            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, async () => await LoadAsync());\r\n        }\r\n\r\n        private async void Page_Loaded(object sender, RoutedEventArgs e)\r\n        {\r\n            if (DiscordManager.Discord == null)\r\n                return; // im not 100% sure why this gets called on logout but it does so\r\n\r\n            Analytics.TrackEvent(\"DiscordPage_Loaded\");\r\n\r\n            if (_loaded) return;\r\n            _loaded = true;\r\n\r\n            try\r\n            {\r\n                UpdateTitleBar();\r\n\r\n                SplitPaneService.GetForCurrentView()\r\n                    .ToggleLeftPane();\r\n\r\n                LeftSidebarFrame.Navigate(typeof(DMChannelsPage));\r\n                MainFrame.Navigate(typeof(FriendsPage));\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                _logger.LogError(ex, \"Something went wrong when loading DiscordPage\");\r\n                await UIUtilities.ShowErrorDialogAsync(\"An error has occured.\", ex.Message);\r\n            }\r\n        }\r\n\r\n        private async Task LoadAsync()\r\n        {\r\n            _ready = true;\r\n\r\n            this.FindParent<MainPage>()\r\n                .HideConnectingOverlay();\r\n            try\r\n            {\r\n                var service = DiscordNavigationService.GetForCurrentView();\r\n                if (_args != null && _args.ChannelId != 0 && DiscordManager.Discord.TryGetCachedChannel(_args.ChannelId, out var channel))\r\n                {\r\n                    Analytics.TrackEvent(\"DiscordPage_NavigateToSpecifiedChannel\");\r\n                    await service.NavigateAsync(channel);\r\n                }\r\n                else\r\n                {\r\n                    Analytics.TrackEvent(\"DiscordPage_NavigateToFriendsPage\");\r\n                    Model.IsFriendsSelected = true;\r\n                    //LeftSidebarFrame.Navigate(typeof(DMChannelsPage));\r\n                    //MainFrame.Navigate(typeof(FriendsPage));\r\n                }\r\n\r\n                var possibleConnection = await VoiceConnectionModel.FindExistingConnectionAsync();\r\n                if (possibleConnection != null)\r\n                {\r\n                    (DataContext as DiscordPageViewModel).VoiceModel = possibleConnection;\r\n                }\r\n\r\n                var notificationService = BackgroundNotificationService.GetForCurrentView();\r\n                await notificationService.StartupAsync();\r\n\r\n                _ = Task.Run(ContactListManager.UpdateContactsListAsync);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                _logger.LogError(ex, \"Failure when processing READY\");\r\n                await UIUtilities.ShowErrorDialogAsync(\"An error has occured.\", ex.Message);\r\n            }\r\n        }\r\n\r\n        private void Page_Unloaded(object sender, RoutedEventArgs e)\r\n        {\r\n            Analytics.TrackEvent(\"DiscordPage_Unloaded\");\r\n        }\r\n\r\n        private async Task Notification_MessageCreated(MessageCreateEventArgs e)\r\n        {\r\n            if (!WindowingService.Current.IsChannelVisible(e.Channel.Id) &&\r\n                NotificationUtils.WillShowToast(DiscordManager.Discord, e.Message) &&\r\n                IsWindowVisible)\r\n            {\r\n                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => ShowNotification(e.Message));\r\n            }\r\n        }\r\n\r\n        private void ShowNotification(DiscordMessage message)\r\n        {\r\n            notification.Show(new MessageViewModel(message), 7_000);\r\n        }\r\n\r\n        private async void Notification_Tapped(object sender, TappedRoutedEventArgs e)\r\n        {\r\n            //var message = (((InAppNotification)sender).Content as MessageControl)?.MessageViewModel;\r\n            var message = notification.Content as MessageViewModel;\r\n            if (message != null)\r\n            {\r\n                var service = DiscordNavigationService.GetForCurrentView();\r\n                await service.NavigateAsync(message.Channel.Channel);\r\n            }\r\n        }\r\n\r\n        private async void UnreadDms_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n        {\r\n            if (Model.Navigating)\r\n                return;\r\n\r\n            if (e.AddedItems.FirstOrDefault() is ChannelViewModel c)\r\n            {\r\n                await DiscordNavigationService.GetForCurrentView().NavigateAsync(c.Channel);\r\n            }\r\n        }\r\n\r\n        private void mainFrame_Navigated(object sender, NavigationEventArgs e)\r\n        {\r\n            var service = FullscreenService.GetForCurrentView();\r\n            if (service.IsFullscreenMode)\r\n            {\r\n                service.LeaveFullscreen();\r\n            }\r\n        }\r\n\r\n        private async void friendsItem_Tapped(object sender, TappedRoutedEventArgs e)\r\n        {\r\n            var service = DiscordNavigationService.GetForCurrentView();\r\n            await service.NavigateAsync(null);\r\n        }\r\n\r\n        private async void SettingsItem_Tapped(object sender, TappedRoutedEventArgs e)\r\n        {\r\n            var service = SettingsService.GetForCurrentView();\r\n            await service.OpenAsync();\r\n        }\r\n\r\n        private async void TreeView_ItemInvoked(MUXC.TreeView sender, MUXC.TreeViewItemInvokedEventArgs args)\r\n        {\r\n            if (args.InvokedItem is GuildListFolderViewModel viewModel)\r\n            {\r\n                viewModel.IsExpanded = !viewModel.IsExpanded;\r\n            }\r\n\r\n            if (args.InvokedItem is GuildListViewModel guildVM)\r\n            {\r\n                if (Model.Navigating)\r\n                    return;\r\n\r\n                if (!guildVM.Guild.IsUnavailable)\r\n                {\r\n                    if (App.LocalSettings.Read(Constants.ENABLE_GUILD_BROWSING, Constants.ENABLE_GUILD_BROWSING_DEFAULT))\r\n                    {\r\n                        LeftSidebarFrame.Navigate(typeof(GuildChannelListPage), guildVM.Guild);\r\n                    }\r\n                    else\r\n                    {\r\n                        var channelId = App.RoamingSettings.Read($\"GuildPreviousChannels::{guildVM.Guild.Id}\", 0UL);\r\n                        if (!guildVM.Guild.Channels.TryGetValue(channelId, out var channel) || (!channel.IsAccessible() || !channel.IsText()))\r\n                        {\r\n                            channel = guildVM.Guild.Channels.Values\r\n                                .Where(c => c.IsAccessible())\r\n                                .Where(c => c.IsText())\r\n                                .OrderBy(c => c.Position)\r\n                                .FirstOrDefault();\r\n                        }\r\n\r\n                        if (await WindowingService.Current.ActivateOtherWindowAsync(channel))\r\n                            LeftSidebarFrame.Navigate(typeof(GuildChannelListPage), guildVM.Guild);\r\n                        else\r\n                            await DiscordNavigationService.GetForCurrentView()\r\n                                .NavigateAsync(channel);\r\n                    }\r\n\r\n                    Model.IsFriendsSelected = false;\r\n\r\n                    // Close sidebar in narrow mode after guild selection\r\n                    if (Window.Current.Bounds.Width <= SplitPaneService.TWO_PANE_BREAKPOINT)\r\n                    {\r\n                        SplitPaneService.GetForCurrentView().ToggleLeftPane();\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    await UIUtilities.ShowErrorDialogAsync(\"ServerUnavailableTitle\", \"ServerUnavailableMessage\");\r\n                }\r\n            }\r\n\r\n            sender.SelectedItem = null;\r\n        }\r\n\r\n        private void CloseItem_Tapped(object sender, TappedRoutedEventArgs e)\r\n        {\r\n            SplitPaneService.GetForCurrentView()\r\n                .ToggleLeftPane();\r\n        }\r\n\r\n        internal void SetViewMode(ViewMode viewMode)\r\n        {\r\n            Debug.WriteLine(viewMode);\r\n            VisualStateManager.GoToState(this, viewMode.ToString(), true);\r\n        }\r\n\r\n        private void UpdateTitleBar()\r\n        {\r\n            if (ApiInformation.IsTypePresent(\"Windows.UI.ViewManagement.StatusBar\"))\r\n            {\r\n                WindowingService.Current.HandleTitleBarForControl(sidebarMainGrid, true);\r\n                WindowingService.Current.HandleTitleBarForControl(sidebarSecondaryGrid, true);\r\n                WindowingService.Current.HandleTitleBarForControl(MainContent, true);\r\n                TitleBarGrid.Visibility = Visibility.Collapsed;\r\n            }\r\n            else\r\n            {\r\n                WindowingService.Current.HandleTitleBarForControl(sidebarSecondaryGrid, true);\r\n                WindowingService.Current.HandleTitleBarForControl(MainContent, true);\r\n                TitleBarGrid.Visibility = Visibility.Visible;\r\n            }\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Pages/GameBar/GameBarChannelListPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.GameBar.GameBarChannelListPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.GameBar\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:entities=\"using:DSharpPlus.Entities\" \n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    mc:Ignorable=\"d\">\n\n    <Grid>\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"64\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>\n        <ListView x:Name=\"ChannelsList\"\n                  Background=\"{ThemeResource BackgroundSecondaryBrush}\"\n                  ItemContainerStyle=\"{ThemeResource CleanListViewItemStyle}\">\n            <ListView.ItemTemplate>\n                <DataTemplate x:DataType=\"entities:DiscordDmChannel\">\n                    <Grid Padding=\"0,4\" Opacity=\"{x:Bind Muted, Converter={StaticResource MutedConverter}}\" ContextFlyout=\"{StaticResource DirectMessageContextFlyout}\">\n\n                        <Canvas Margin=\"0,0,0,0\" Width=\"56\" Height=\"56\">\n                            <lib:PersonPicture Width=\"56\" Height=\"56\" DisplayName=\"{Binding Converter={StaticResource DMNameConverter}}\">\n                                <lib:PersonPicture.ProfilePicture>\n                                    <BitmapImage UriSource=\"{Binding Converter={StaticResource DMIconConverter}}\" DecodePixelWidth=\"28\" DecodePixelHeight=\"28\" DecodePixelType=\"Logical\" />\n                                </lib:PersonPicture.ProfilePicture>\n                            </lib:PersonPicture>\n                            <Ellipse Canvas.Left=\"16\" Canvas.Top=\"40\" Width=\"40\" Height=\"18\" StrokeThickness=\"2\" Stroke=\"{ThemeResource SystemControlPageBackgroundChromeLowBrush}\" Visibility=\"{Binding Recipient, Converter={StaticResource HideOnNullConverter}}\">\n                                <Ellipse.Fill>\n                                    <SolidColorBrush Color=\"{Binding Recipient.Presence, Converter={StaticResource PresenceColourConverter}}\"/>\n                                </Ellipse.Fill>\n                            </Ellipse>\n                        </Canvas>\n\n                        <Grid x:Name=\"unreadIndicator\" Visibility=\"{Binding Unread, Converter={StaticResource BoolVisibilityConverter}}\" MinWidth=\"4\" Margin=\"-12,0,0,0\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Stretch\" Background=\"{ThemeResource SystemControlBackgroundAccentBrush}\">\n                            <TextBlock Text=\"{Binding ReadState.MentionCount}\" Margin=\"2,0\" Foreground=\"{ThemeResource ComboBoxItemSelectedForegroundThemeBrush}\" FontSize=\"12\" VerticalAlignment=\"Center\"/>\n                        </Grid>\n                    </Grid>\n                </DataTemplate>\n            </ListView.ItemTemplate>\n        </ListView>\n\n        <Frame x:Name=\"ChannelFrame\"\n               Grid.Column=\"1\"\n               Background=\"{ThemeResource BackgroundTertiaryBrush}\"/>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/GameBar/GameBarChannelListPage.xaml.cs",
    "content": "﻿using Microsoft.Gaming.XboxGameBar;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\n\nnamespace Unicord.Universal.Pages.GameBar\n{\n    public sealed partial class GameBarChannelListPage : Page\n    {\n        private GameBarPageParameters _params;\n\n        public GameBarChannelListPage()\n        {\n            this.InitializeComponent();\n        }\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            _params = (GameBarPageParameters)e.Parameter;\n        \n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/GameBar/GameBarFriendsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.GameBar.GameBarFriendsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.GameBar\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:discord=\"using:DSharpPlus.Entities\"\n    mc:Ignorable=\"d\" d:DesignWidth=\"300\" d:DesignHeight=\"400\"\n    Background=\"{ThemeResource BackgroundTertiaryBrush}\"\n    Loaded=\"Page_Loaded\">\n\n    <Grid>\n        <ListView SelectionMode=\"None\" \n                  IsItemClickEnabled=\"True\" \n                  ItemsSource=\"{Binding All}\"\n                  ItemContainerStyle=\"{StaticResource CleanListViewItemStyle}\">\n            <ListView.Header>\n                <Grid x:Name=\"Header\"\n                      Background=\"{ThemeResource BackgroundSecondaryBrush}\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <Grid Margin=\"12\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Canvas Width=\"36\" Height=\"36\" Margin=\"0,0,8,0\" VerticalAlignment=\"Center\">\n                            <lib:PersonPicture  Width=\"36\" Height=\"36\" ProfilePicture=\"{Binding CurrentUser.AvatarUrl}\" DisplayName=\"{Binding CurrentUser.DisplayName}\" />\n\n                            <Ellipse Canvas.Left=\"22\" \n                                     Canvas.Top=\"22\" \n                                     Width=\"16\" \n                                     Height=\"16\"                                      \n                                     StrokeThickness=\"2\" \n                                     Stroke=\"{ThemeResource SystemControlPageBackgroundChromeLowBrush}\">\n                                <Ellipse.Fill>\n                                    <SolidColorBrush Color=\"{Binding CurrentUser.Presence, Converter={StaticResource PresenceColourConverter}}\"/>\n                                </Ellipse.Fill>\n                            </Ellipse>\n                        </Canvas>\n\n                        <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Center\">\n                            <TextBlock Text=\"{Binding CurrentUser.Username}\"/>\n                            <TextBlock Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" FontSize=\"12\">\n                                    #<Run Text=\"{Binding CurrentUser.Discriminator}\"/>\n                            </TextBlock>\n                        </StackPanel>\n                    </Grid>\n\n                    <Grid Grid.Row=\"1\" Height=\"36\" Margin=\"4,0,8,8\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"auto\"/>\n                        </Grid.ColumnDefinitions>\n                        \n                        <TextBox x:Name=\"SearchBox\" \n                                 PlaceholderText=\"Search for Friends\"\n                                 InputScope=\"Search\" \n                                 VerticalAlignment=\"Center\" \n                                 Style=\"{ThemeResource MessageTextBoxStyle}\" />\n                        \n                        <Button Grid.Column=\"1\" Style=\"{ThemeResource StretchyIconButtonStyle}\" Content=\"&#xE721;\" Width=\"36\" Height=\"36\" />\n                    </Grid>\n                </Grid>\n            </ListView.Header>\n            <ListView.ItemTemplate>\n                <DataTemplate x:DataType=\"discord:DiscordRelationship\">\n                    <Grid Margin=\"8,0\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Canvas Width=\"32\" Height=\"32\" Margin=\"4,6,8,6\">\n                            <lib:PersonPicture Width=\"32\" Height=\"32\" ProfilePicture=\"{Binding User.AvatarUrl}\" DisplayName=\"{Binding User.DisplayName}\"/>\n                            <Ellipse Canvas.Left=\"20\" \n                                     Canvas.Top=\"20\" \n                                     Width=\"14\" \n                                     Height=\"14\"                                      \n                                     StrokeThickness=\"2\" \n                                     Stroke=\"{ThemeResource SystemControlPageBackgroundChromeLowBrush}\">\n                                <Ellipse.Fill>\n                                    <SolidColorBrush Color=\"{Binding User.Presence, Converter={StaticResource PresenceColourConverter}}\"/>\n                                </Ellipse.Fill>\n                            </Ellipse>\n                        </Canvas>\n                        \n                        <TextBlock Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" Grid.Column=\"1\" Margin=\"4,0\" VerticalAlignment=\"Center\">\n                            <Run Text=\"{Binding User.Username, Mode=OneWay}\" Foreground=\"{ThemeResource ApplicationForegroundThemeBrush}\"/>#<Run Text=\"{Binding User.Discriminator, Mode=OneWay}\"/>\n                        </TextBlock>\n\n                        <Button x:Name=\"MessageButton\" Grid.Column=\"2\" Style=\"{ThemeResource IconButtonStyle}\" Click=\"MessageButton_Click\">&#xE8BD;</Button>\n                        <Button x:Name=\"CallButton\" Grid.Column=\"3\" Style=\"{ThemeResource IconButtonStyle}\" Margin=\"2,0,0,0\">&#xE717;</Button>\n                    </Grid>\n                </DataTemplate>\n            </ListView.ItemTemplate>\n        </ListView>\n        <lib:ProgressBar x:Name=\"ConnectingProgress\" Background=\"Transparent\" VerticalAlignment=\"Top\"  />\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/GameBar/GameBarFriendsPage.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing System.Threading.Tasks;\nusing DSharpPlus.Entities;\nusing DSharpPlus.EventArgs;\nusing Microsoft.Gaming.XboxGameBar;\nusing Microsoft.Toolkit.Uwp.Helpers;\nusing Unicord.Universal.Models;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.Security.Credentials;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace Unicord.Universal.Pages.GameBar\n{\n    public sealed partial class GameBarFriendsPage : Page\n    {\n        private GameBarPageParameters _params;\n        private XboxGameBarWidgetControl _control;\n\n        public GameBarFriendsPage()\n        {\n            this.InitializeComponent();\n        }\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            _params = (GameBarPageParameters)e.Parameter;\n            _control = new XboxGameBarWidgetControl(_params.Widget);\n        }\n\n        private void Page_Loaded(object sender, RoutedEventArgs e)\n        {\n            DataContext = new FriendsViewModel();\n        }\n\n        private async void MessageButton_Click(object sender, RoutedEventArgs e)\n        {\n            var rel = (sender as Button).DataContext as DiscordRelationship;\n            var uri = _control.CreateActivationUri(\"App\", \"unicord-channel\", $\"{rel.User.Id}\", \"\", \"\");\n            await _control.ActivateWithUriAsync(uri);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/GameBar/GameBarMainPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.GameBar.GameBarMainPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.GameBar\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    mc:Ignorable=\"d\" \n    Loaded=\"Page_Loaded\"\n    Background=\"{ThemeResource BackgroundPrimaryBrush}\">\n\n    <Grid VerticalAlignment=\"Center\" MaxWidth=\"300\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <Image Source=\"{ThemeResource DiscordWordMark}\"/>\n        <lib:ProgressBar Grid.Row=\"1\" Background=\"Transparent\" IsIndeterminate=\"True\" Margin=\"8\"  />\n        <TextBlock Grid.Row=\"2\" TextAlignment=\"Center\" Text=\"Connecting to Discord\"/>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/GameBar/GameBarMainPage.xaml.cs",
    "content": "﻿using DSharpPlus.EventArgs;\nusing Microsoft.Gaming.XboxGameBar;\nusing Microsoft.Toolkit.Uwp.Helpers;\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing System.Threading.Tasks;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.Security.Credentials;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace Unicord.Universal.Pages.GameBar\n{\n    public record GameBarPageParameters(XboxGameBarWidget Widget, Type PageType, Uri Url);\n\n    public sealed partial class GameBarMainPage : Page\n    {\n        private GameBarPageParameters _params;\n\n        public GameBarMainPage()\n        {\n            this.InitializeComponent();\n        }\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            _params = (GameBarPageParameters)e.Parameter;\n        }\n\n        private async void Page_Loaded(object sender, RoutedEventArgs e)\n        {\n            try\n            {\n                var vault = new PasswordVault();\n                var result = vault.FindAllByResource(Constants.TOKEN_IDENTIFIER).FirstOrDefault(t => t.UserName == \"Default\");\n\n                if (result != null)\n                {\n                    result.RetrievePassword();\n                    await App.LoginAsync(result.Password, OnFirstDiscordReady, OnLoginError, false);\n                    return;\n                }\n            }\n            catch (Exception ex)\n            {\n                Logger.LogError(ex);\n            }\n\n            Frame.Navigate(typeof(NotLoggedInPage));\n        }\n\n        private async Task OnFirstDiscordReady(ReadyEventArgs e)\n        {\n            await Dispatcher.AwaitableRunAsync(() => Frame.Navigate(_params.PageType, _params));\n        }\n\n        private async Task OnLoginError(Exception arg)\n        {\n            await Dispatcher.AwaitableRunAsync(() => Frame.Navigate(typeof(NotLoggedInPage)));\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/GameBar/NotLoggedInPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.GameBar.NotLoggedInPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.GameBar\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\"\n    Background=\"{ThemeResource BackgroundSecondaryBrush}\">\n\n    <Grid VerticalAlignment=\"Center\" MaxWidth=\"300\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <Image Source=\"{ThemeResource DiscordWordMark}\"/>\n        \n        <TextBlock Grid.Row=\"1\" TextAlignment=\"Center\">\n            To use Unicord in Game Bar you need to log in!\n        </TextBlock>\n        \n        <Button x:Name=\"OpenAppButton\"\n                Click=\"OpenAppButton_Click\"\n                Grid.Row=\"2\" \n                HorizontalAlignment=\"Center\"\n                Style=\"{ThemeResource TextBlockButtonStyle}\"\n                Content=\"Open the App!\"/>\n\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/GameBar/NotLoggedInPage.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing Windows.Foundation;\nusing Windows.Foundation.Collections;\nusing Windows.System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Data;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Navigation;\n\n// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace Unicord.Universal.Pages.GameBar\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class NotLoggedInPage : Page\n    {\n        public NotLoggedInPage()\n        {\n            this.InitializeComponent();\n        }\n\n        private async void OpenAppButton_Click(object sender, RoutedEventArgs e)\n        {\n            await Launcher.LaunchUriAsync(new Uri(\"unicord:\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/LoginPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.LoginPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    mc:Ignorable=\"d\"\n    Loaded=\"Page_Loaded\">\n    <Grid>\n        <StackPanel MaxWidth=\"400\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"20\">           \n            <Image Source=\"{ThemeResource DiscordWordMark}\" Margin=\"0,12\" />\n\n            <Button x:Name=\"TokenLoginButton\"\n                    x:Uid=\"/LoginPage/LoginWithTokenButton\"\n                    Content=\"Login with Token\"\n                    Click=\"TokenLoginButton_Click\"\n                    BorderThickness=\"0\"\n                    HorizontalAlignment=\"Stretch\"\n                    Style=\"{ThemeResource AccentButtonStyle}\">\n            </Button>\n        </StackPanel>\n     </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/LoginPage.xaml.cs",
    "content": "﻿using System;\r\nusing System.Threading.Tasks;\r\nusing DSharpPlus;\r\nusing DSharpPlus.EventArgs;\r\nusing Unicord.Universal.Dialogs;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Services;\r\nusing Unicord.Universal.Utilities;\r\nusing Windows.Security.Credentials;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Pages\r\n{\r\n    public sealed partial class LoginPage : Page\r\n    {\r\n        public LoginPage()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n\r\n        private async void TokenLoginButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            var mainPage = this.FindParent<MainPage>();\r\n            mainPage?.ShowConnectingOverlay();\r\n\r\n            var dialog = new TokenDialog();\r\n            await dialog.ShowAsync();\r\n\r\n            if (!string.IsNullOrWhiteSpace(dialog.Token))\r\n            {\r\n                await TryLoginAsync(dialog.Token);\r\n            }\r\n            else\r\n            {\r\n                mainPage?.HideConnectingOverlay();\r\n            }\r\n        }\r\n\r\n        private async Task TryLoginAsync(string token)\r\n        {\r\n            Task OnReady(DiscordClient client, ReadyEventArgs e)\r\n            {\r\n                var vault = new PasswordVault();\r\n                vault.Add(new PasswordCredential(Constants.TOKEN_IDENTIFIER, \"Default\", token));\r\n\r\n                return Task.CompletedTask;\r\n            }\r\n\r\n            var mainPage = this.FindParent<MainPage>();\r\n\r\n            try\r\n            {\r\n                token = token.Trim('\"').Trim();\r\n\r\n                if (string.IsNullOrWhiteSpace(token))\r\n                    throw new ArgumentException(\"Your token cannot be empty! If you were logging in via the browser, try using your token.\");\r\n\r\n                mainPage.ShowConnectingOverlay();\r\n                await DiscordManager.LoginAsync(token, OnReady, App.LoginError, false);\r\n\r\n                Frame.Navigate(typeof(DiscordPage));\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                await UIUtilities.ShowErrorDialogAsync(\"Failed to login!\", ex.Message);\r\n                mainPage.HideConnectingOverlay();\r\n            }\r\n        }\r\n\r\n        private void Page_Loaded(object sender, RoutedEventArgs e)\r\n        {\r\n            var mainPage = this.FindParent<MainPage>();\r\n            mainPage.HideConnectingOverlay();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Pages/Management/Channel/ChannelEditOverviewPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Management.Channel.ChannelEditOverviewPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Management.Channel\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid>\n        <StackPanel x:Name=\"mainGrid\" HorizontalAlignment=\"Stretch\" Margin=\"12,0\">\n            <TextBlock>Name</TextBlock>\n            <TextBox TextChanging=\"TextBox_TextChanging\" Margin=\"0,4,0,12\" PlaceholderText=\"something-witty\" Text=\"{Binding Name, Mode=TwoWay}\"/>\n\n            <StackPanel Visibility=\"{Binding IsText, Converter={StaticResource BoolVisibilityConverter}}\">\n                <TextBlock>Topic</TextBlock>\n                <TextBox Padding=\"8,6\" Margin=\"0,4,0,12\" AcceptsReturn=\"True\" TextWrapping=\"Wrap\" MinHeight=\"100\" IsSpellCheckEnabled=\"True\" MaxLength=\"1024\" PlaceholderText=\"What's this channel for?\" Text=\"{Binding Topic, Mode=TwoWay}\"/>\n\n                <Grid>\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"*\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                    </Grid.ColumnDefinitions>\n                    <StackPanel>\n                        <TextBlock Text=\"NSFW Channel\" VerticalAlignment=\"Center\"/>\n                        <TextBlock Style=\"{ThemeResource CaptionTextBlockStyle}\">People will need to confirm they're over 18 before viewing this channel, and the server wide content filter won't apply here.</TextBlock>\n                    </StackPanel>\n                    <ToggleSwitch Grid.Column=\"1\" Margin=\"12,0,0,0\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding NSFW, Mode=TwoWay}\" />\n                </Grid>\n            </StackPanel>\n\n            <StackPanel Visibility=\"{Binding IsVoice, Converter={StaticResource BoolVisibilityConverter}}\">\n                <Grid Margin=\"0,4\">\n                    <Grid.ColumnDefinitions>\n                        <ColumnDefinition Width=\"*\"/>\n                        <ColumnDefinition Width=\"Auto\"/>\n                    </Grid.ColumnDefinitions>\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n                    <TextBlock>Bitrate</TextBlock>\n                    <Slider x:Name=\"BitrateSlider\" Grid.Row=\"1\" Value=\"{Binding Bitrate, Mode=TwoWay}\" Minimum=\"8\" Maximum=\"96\" StepFrequency=\"4\" Width=\"{Binding ActualWidth, ElementName=StarColumn}\" />\n                    <TextBlock Grid.Column=\"1\" Grid.Row=\"1\" Margin=\"8,0,0,0\" VerticalAlignment=\"Center\" Width=\"{Binding ActualWidth, ElementName=AutoColumn}\">\n                            <Run Text=\"{Binding Value, ElementName=BitrateSlider}\"/>kbps\n                    </TextBlock>\n                    <TextBlock Grid.Row=\"2\" Margin=\"0,4,0,0\">User limit</TextBlock>\n                    <Slider x:Name=\"UserlimitSlider\" Grid.Row=\"3\" Value=\"{Binding Userlimit, Mode=TwoWay}\" Minimum=\"0\" Maximum=\"99\" Width=\"{Binding ActualWidth, ElementName=StarColumn}\" />\n                    <TextBlock Grid.Column=\"1\" Grid.Row=\"3\" Margin=\"8,0,0,0\" VerticalAlignment=\"Center\" Width=\"{Binding ActualWidth, ElementName=AutoColumn}\">\n                            <Run Text=\"{Binding Value, ElementName=UserlimitSlider}\"/> Users\n                    </TextBlock>\n                </Grid>\n            </StackPanel>\n        </StackPanel>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Management/Channel/ChannelEditOverviewPage.xaml.cs",
    "content": "﻿using DSharpPlus;\nusing Unicord.Universal.Models;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Pages.Management.Channel\n{\n    public sealed partial class ChannelEditOverviewPage : Page\n    {\n        public ChannelEditOverviewPage()\n        {\n            this.InitializeComponent();\n        }\n\n        private void TextBox_TextChanging(TextBox sender, TextBoxTextChangingEventArgs args)\n        {\n            var model = (DataContext as ChannelEditViewModel);\n            if (model.Channel.Type == ChannelType.Text)\n            {\n                sender.Text = sender.Text.Replace(' ', '-').ToLowerInvariant();\n                sender.Select(sender.Text.Length, 0);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Management/Channel/ChannelEditPermissionsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Management.Channel.ChannelEditPermissionsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Management.Channel\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:permissions=\"using:Unicord.Universal.Controls.Permissions\" xmlns:models=\"using:Unicord.Universal.Models\"\n    mc:Ignorable=\"d\">\n\n    <Page.Resources>\n        <DataTemplate x:DataType=\"models:ChannelPermissionViewModel\" \n                      x:Key=\"PermissionOverwriteTemplate\">\n            <CheckBox IsThreeState=\"True\"\n                      Margin=\"0,4\"\n                      IsChecked=\"{x:Bind Value}\"\n                      HorizontalAlignment=\"Stretch\">\n                <StackPanel>\n                    <TextBlock Text=\"{x:Bind Title}\"/>\n                    <TextBlock Style=\"{ThemeResource CaptionTextBlockStyle}\" Text=\"{x:Bind Subtitle}\"/>\n                </StackPanel>\n            </CheckBox>\n        </DataTemplate>\n    </Page.Resources>\n\n    <StackPanel Padding=\"12,0\">\n        <TextBlock Style=\"{ThemeResource SubtitleTextBlockStyle}\" Margin=\"0,0,0,8\">General Permissions</TextBlock>\n        <ItemsControl ItemsSource=\"{Binding General}\" ItemTemplate=\"{StaticResource PermissionOverwriteTemplate}\"/>\n\n        <TextBlock Style=\"{ThemeResource SubtitleTextBlockStyle}\" Margin=\"0,12,0,8\">Membership Permissions</TextBlock>\n        <ItemsControl ItemsSource=\"{Binding Membership}\" ItemTemplate=\"{StaticResource PermissionOverwriteTemplate}\"/>\n\n        <TextBlock Visibility=\"{Binding IsTextChannel, Converter={ThemeResource BoolVisibilityConverter}}\" Style=\"{ThemeResource SubtitleTextBlockStyle}\" Margin=\"0,12,0,8\">Text Permissions</TextBlock>\n        <ItemsControl Visibility=\"{Binding IsTextChannel, Converter={ThemeResource BoolVisibilityConverter}}\" ItemsSource=\"{Binding Text}\" ItemTemplate=\"{StaticResource PermissionOverwriteTemplate}\"/>\n\n        <TextBlock Visibility=\"{Binding IsVoiceChannel, Converter={ThemeResource BoolVisibilityConverter}}\" Style=\"{ThemeResource SubtitleTextBlockStyle}\" Margin=\"0,12,0,8\">Voice Permissions</TextBlock>\n        <ItemsControl Visibility=\"{Binding IsVoiceChannel, Converter={ThemeResource BoolVisibilityConverter}}\" ItemsSource=\"{Binding Voice}\" ItemTemplate=\"{StaticResource PermissionOverwriteTemplate}\"/>\n    </StackPanel>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Management/Channel/ChannelEditPermissionsPage.xaml.cs",
    "content": "﻿using Unicord.Universal.Models;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace Unicord.Universal.Pages.Management.Channel\n{\n    public sealed partial class ChannelEditPermissionsPage : Page\n    {\n        public ChannelEditPermissionsPage()\n        {\n            this.InitializeComponent();\n        }\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            if (e.Parameter is ChannelPermissionEditViewModel model)\n                DataContext = model;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Management/ChannelEditPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Management.ChannelEditPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Management\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:media=\"using:Microsoft.UI.Xaml.Media\"\n    NavigationCacheMode=\"Disabled\"\n    xmlns:pages=\"using:Unicord.Universal.Pages.Management.Channel\"\n    mc:Ignorable=\"d\" Loaded=\"Page_Loaded\">\n    <Page.Resources>\n        <Style x:Key=\"CustomPaneToggleButtonStyle\" BasedOn=\"{StaticResource IconButtonStyle}\" TargetType=\"Button\">\n            <Setter Property=\"Background\" Value=\"Transparent\"/>\n            <Setter Property=\"FontFamily\" Value=\"{StaticResource SymbolThemeFontFamily}\"/>\n            <Setter Property=\"FontSize\" Value=\"16\"/>\n            <Setter Property=\"BorderThickness\" Value=\"1\"/>\n            <Setter Property=\"UseLayoutRounding\" Value=\"True\"/>\n            <Setter Property=\"Padding\" Value=\"0\" />\n            <Setter Property=\"HorizontalAlignment\" Value=\"Left\" />\n            <Setter Property=\"VerticalAlignment\" Value=\"Top\" />\n            <Setter Property=\"MinHeight\" Value=\"{StaticResource PaneToggleButtonHeight}\" />\n            <Setter Property=\"MinWidth\" Value=\"{StaticResource PaneToggleButtonWidth}\" />\n            <Setter Property=\"Content\" Value=\"&#xE700;\"/>\n            <Setter Property=\"Template\">\n                <Setter.Value>\n                    <ControlTemplate TargetType=\"Button\">\n                        <Grid x:Name=\"LayoutRoot\"\n                        MinWidth=\"{TemplateBinding MinWidth}\"\n                        Height=\"{TemplateBinding MinHeight}\"\n                        Margin=\"{TemplateBinding Padding}\"\n                        Background=\"{TemplateBinding Background}\"\n                              HorizontalAlignment=\"Stretch\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"40\" />\n                                <ColumnDefinition Width=\"*\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <VisualStateManager.VisualStateGroups>\n                                <VisualStateGroup x:Name=\"CommonStates\">\n                                    <VisualState x:Name=\"Normal\">\n                                        <Storyboard>\n                                            <PointerUpThemeAnimation Storyboard.TargetName=\"LayoutRoot\"/>\n                                        </Storyboard>\n                                    </VisualState>\n                                    <VisualState x:Name=\"PointerOver\">\n                                        <VisualState.Setters>\n                                            <Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"PointerOver\"/>\n                                            <Setter Target=\"RevealBorder.Background\" Value=\"{ThemeResource ButtonRevealBackgroundPointerOver}\"/>\n                                            <Setter Target=\"RevealBorder.BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrushPointerOver}\"/>\n                                            <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource ButtonForegroundPointerOver}\"/>\n                                        </VisualState.Setters>\n                                        <Storyboard>\n                                            <PointerUpThemeAnimation Storyboard.TargetName=\"LayoutRoot\"/>\n                                        </Storyboard>\n                                    </VisualState>\n                                    <VisualState x:Name=\"Pressed\">\n                                        <VisualState.Setters>\n                                            <Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"Pressed\"/>\n                                            <Setter Target=\"RevealBorder.Background\" Value=\"{ThemeResource ButtonRevealBackgroundPressed}\"/>\n                                            <Setter Target=\"RevealBorder.BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrushPressed}\"/>\n                                            <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource ButtonForegroundPressed}\"/>\n                                        </VisualState.Setters>\n                                        <Storyboard>\n                                            <PointerDownThemeAnimation Storyboard.TargetName=\"LayoutRoot\"/>\n                                        </Storyboard>\n                                    </VisualState>\n                                    <VisualState x:Name=\"Disabled\">\n                                        <VisualState.Setters>\n                                            <Setter Target=\"RevealBorder.BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrushDisabled}\"/>\n                                            <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource ButtonForegroundDisabled}\"/>\n                                        </VisualState.Setters>\n                                    </VisualState>\n                                </VisualStateGroup>\n                            </VisualStateManager.VisualStateGroups>\n\n                            <TextBlock\n                                x:Name=\"Icon\"\n                                Text=\"&#xE700;\"\n                                HorizontalAlignment=\"Center\"\n                                VerticalAlignment=\"Center\"\n                                FontSize=\"{TemplateBinding FontSize}\"\n                                AutomationProperties.AccessibilityView=\"Raw\"/>\n\n                            <ContentPresenter\n                            x:Name=\"ContentPresenter\"\n                            VerticalContentAlignment=\"Center\"\n                            Content=\"{TemplateBinding Content}\"\n                            FontSize=\"{TemplateBinding FontSize}\"\n                            Grid.Column=\"1\"\n                            AutomationProperties.AccessibilityView=\"Raw\"/>\n\n                            <Border\n                            x:Name=\"RevealBorder\"\n                            BorderBrush=\"{TemplateBinding BorderBrush}\"\n                            BorderThickness=\"{TemplateBinding BorderThickness}\"\n                            Grid.ColumnSpan=\"2\"/>\n\n                        </Grid>\n                    </ControlTemplate>\n                </Setter.Value>\n            </Setter>\n        </Style>\n        <Style x:Key=\"NavigationBackButtonNormalStyle\" BasedOn=\"{StaticResource IconButtonStyle}\" TargetType=\"Button\">\n            <Setter Property=\"Content\" Value=\"&#xE72B;\"/>\n            <Setter Property=\"Height\" Value=\"42\"/>\n        </Style>\n        <Style x:Key=\"NavigationBackButtonSmallStyle\" BasedOn=\"{StaticResource IconButtonStyle}\" TargetType=\"Button\">\n            <Setter Property=\"Content\" Value=\"&#xE72B;\"/>\n            <Setter Property=\"Height\" Value=\"42\"/>\n        </Style>\n    </Page.Resources>\n    \n    <controls:DropShadowPanel Style=\"{ThemeResource DropShadowPanelStyle}\" Color=\"{ThemeResource SystemChromeBlackMediumColor}\">\n        <Grid x:Name=\"MainGrid\" Background=\"{ThemeResource SystemControlPageBackgroundChromeLowBrush}\">\n\n            <Grid x:Name=\"TopGrid\" VerticalAlignment=\"Top\" Background=\"{ThemeResource SystemControlBackgroundChromeMediumBrush}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"40\"/>\n                </Grid.ColumnDefinitions>\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"42\"/>\n                </Grid.RowDefinitions>\n\n                <TextBlock Margin=\"52,0,0,0\" VerticalAlignment=\"Center\" Style=\"{ThemeResource TitleTextBlockStyle}\" Text=\"Permissions for @everyone\"/>\n\n                <Button x:Name=\"AcceptButton\" Grid.Column=\"1\" Style=\"{ThemeResource IconButtonStyle}\" Click=\"AcceptButton_Click\">&#xE8FB;</Button>\n                <lib:ProgressRing x:Name=\"ProgressRing\" Grid.Column=\"1\" IsActive=\"False\" Margin=\"2\" Width=\"28\" Height=\"28\"/>\n            </Grid>\n\n            <lib:NavigationView x:Name=\"NavigationView\"\n                                IsBackEnabled=\"True\"\n                                IsBackButtonVisible=\"Visible\"\n                                IsSettingsVisible=\"False\"\n                                PaneDisplayMode=\"LeftCompact\"\n                                BackRequested=\"NavigationView_BackRequested\"\n                                ItemInvoked=\"NavigationView_ItemInvoked\"\n                                PaneToggleButtonStyle=\"{StaticResource CustomPaneToggleButtonStyle}\">\n                <lib:NavigationView.Resources>\n                </lib:NavigationView.Resources>\n                <lib:NavigationView.MenuItems>\n                    <lib:NavigationViewItem Content=\"Overview\" Tag=\"Overview\" IsSelected=\"True\">\n                        <lib:NavigationViewItem.Icon>\n                            <FontIcon Glyph=\"&#xE179;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                        </lib:NavigationViewItem.Icon>\n                    </lib:NavigationViewItem>\n                    <lib:NavigationViewItem MenuItemsSource=\"{Binding PermissionOverwrites}\" \n                                            Content=\"Permissions\"\n                                            Tag=\"Permissions\"\n                                            SelectsOnInvoked=\"False\">\n                        <lib:NavigationViewItem.Icon>\n                            <FontIcon Glyph=\"&#xE192;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                        </lib:NavigationViewItem.Icon>\n                    </lib:NavigationViewItem>\n                    <lib:NavigationViewItem Content=\"Invites\" Tag=\"Invites\">\n                        <lib:NavigationViewItem.Icon>\n                            <FontIcon Glyph=\"&#xE71B;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                        </lib:NavigationViewItem.Icon>\n                    </lib:NavigationViewItem>\n                    <lib:NavigationViewItem Content=\"Webhooks\" Tag=\"Webhooks\">\n                        <lib:NavigationViewItem.Icon>\n                            <FontIcon Glyph=\"&#xE12B;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                        </lib:NavigationViewItem.Icon>\n                    </lib:NavigationViewItem>\n                </lib:NavigationView.MenuItems>\n\n                <ContentControl x:Name=\"MainContent\" Margin=\"0,40,0,0\" IsEnabled=\"True\" HorizontalContentAlignment=\"Stretch\" Grid.Row=\"1\">\n                    <ScrollViewer>\n                        <Frame x:Name=\"MainFrame\" Margin=\"0,8,0,12\" SourcePageType=\"pages:ChannelEditOverviewPage\"/>\n                    </ScrollViewer>\n                </ContentControl>\n            </lib:NavigationView>\n        </Grid>\n    </controls:DropShadowPanel>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Management/ChannelEditPage.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing DSharpPlus.Entities;\nusing Unicord.Universal.Models;\nusing Unicord.Universal.Pages.Management.Channel;\nusing Unicord.Universal.Services;\nusing Windows.Foundation;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\nusing NavigationView = Microsoft.UI.Xaml.Controls.NavigationView;\nusing NavigationViewBackRequestedEventArgs = Microsoft.UI.Xaml.Controls.NavigationViewBackRequestedEventArgs;\nusing NavigationViewItemInvokedEventArgs = Microsoft.UI.Xaml.Controls.NavigationViewItemInvokedEventArgs;\n\nnamespace Unicord.Universal.Pages.Management\n{\n    public sealed partial class ChannelEditPage : Page, IOverlay\n    {\n        private static readonly IReadOnlyDictionary<string, Type> TypeMap\n            = new Dictionary<string, Type>()\n            {\n                [\"Overview\"] = typeof(ChannelEditOverviewPage)\n            };\n\n        private ChannelEditViewModel _viewModel;\n\n        public Size PreferredSize =>\n            new Size(1024, 768);\n\n        public ChannelEditPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            if (e.Parameter is DiscordChannel channel)\n            {\n                // TODO: check perms\n                _viewModel = new ChannelEditViewModel(channel);\n                DataContext = _viewModel;\n            }\n        }\n\n        private void Page_Loaded(object sender, RoutedEventArgs e)\n        {\n            WindowingService.Current.HandleTitleBarForControl(TopGrid);\n            WindowingService.Current.HandleTitleBarForControl(NavigationView, true);\n        }\n\n        private async void AcceptButton_Click(object sender, RoutedEventArgs e)\n        {\n            AcceptButton.Visibility = Visibility.Collapsed;\n            MainContent.IsEnabled = false;\n            ProgressRing.IsActive = true;\n\n            await _viewModel.SaveChangesAsync();\n\n            ProgressRing.IsActive = false;\n            OverlayService.GetForCurrentView().CloseOverlay();\n        }\n\n        private void NavigationView_BackRequested(NavigationView sender, NavigationViewBackRequestedEventArgs args)\n        {\n            OverlayService.GetForCurrentView().CloseOverlay();\n        }\n\n        private void NavigationView_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)\n        {\n            if (args.InvokedItemContainer.Tag is string str)\n            {\n                if (TypeMap.TryGetValue(str, out var type))\n                {\n                    MainFrame.Navigate(type);\n                }\n            }\n            else if (args.InvokedItemContainer.Tag is DiscordOverwrite overwrite)\n            {\n                MainFrame.Navigate(typeof(ChannelEditPermissionsPage), new ChannelPermissionEditViewModel(_viewModel.Channel, overwrite));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Overlay/AttachmentOverlayPage.xaml",
    "content": "﻿<Page\r\n    x:Class=\"Unicord.Universal.Pages.Overlay.AttachmentOverlayPage\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Pages.Overlay\"\r\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\" \r\n    xmlns:controls=\"using:Unicord.Universal.Controls\" \r\n    xmlns:media=\"using:Microsoft.Toolkit.Uwp.UI.Media\" \r\n    xmlns:toolkit=\"using:Microsoft.Toolkit.Uwp.UI.Controls\" \r\n    xmlns:ui=\"using:Microsoft.Toolkit.Uwp.UI\"\r\n    xmlns:w1709=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 5)\"\r\n    mc:Ignorable=\"d\">\r\n    <Page.Resources>\r\n        <ui:AttachedDropShadow x:Key=\"ErrorShadow\" CastTo=\"{x:Bind background}\" BlurRadius=\"16\" Opacity=\"1\" Color=\"Black\"/>\r\n    </Page.Resources>\r\n\r\n    <Grid x:Name=\"contentContainer\">\r\n        <Border x:Name=\"background\"\r\n                Tapped=\"contentContainer_Tapped\"\r\n                Background=\"Transparent\"/>\r\n\r\n        <Grid>\r\n            <ScrollViewer MinZoomFactor=\"1\" \r\n                          IsVerticalRailEnabled=\"False\"\r\n                          VerticalScrollBarVisibility=\"Auto\"\r\n                          VerticalScrollMode=\"Enabled\"\r\n                          IsHorizontalRailEnabled=\"False\"\r\n                          HorizontalScrollBarVisibility=\"Auto\"\r\n                          HorizontalScrollMode=\"Enabled\" \r\n                          HorizontalAlignment=\"Stretch\"\r\n                          VerticalAlignment=\"Stretch\"\r\n                          HorizontalContentAlignment=\"Stretch\"\r\n                          VerticalContentAlignment=\"Stretch\"\r\n                          ZoomMode=\"Enabled\"\r\n                          Tapped=\"contentContainer_Tapped\">\r\n\r\n                <controls:ScaledContentControl x:Name=\"scaledControl\" MaxWidth=\"Infinity\" MaxHeight=\"Infinity\">\r\n                    <Image x:Name=\"attachmentImage\"\r\n                           Tapped=\"attachmentImage_Tapped\">\r\n                        <Image.Source>\r\n                            <BitmapImage x:Name=\"AttachmentSource\" \r\n                                         DownloadProgress=\"AttachmentSource_DownloadProgress\" \r\n                                         ImageOpened=\"AttachmentSource_ImageOpened\"\r\n                                         ImageFailed=\"AttachmentSource_ImageFailed\"/>\r\n                        </Image.Source>\r\n                    </Image>\r\n                </controls:ScaledContentControl>\r\n            </ScrollViewer>\r\n\r\n            <Grid x:Name=\"contentContainerOverlay\" \r\n                  Grid.RowSpan=\"2\" \r\n                  Visibility=\"Visible\">\r\n\r\n                <lib:ProgressRing x:Name=\"overlayProgressRing\" Width=\"48\" Height=\"48\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" IsIndeterminate=\"False\"/>\r\n\r\n                <TextBlock x:Name=\"FailurePanel\"\r\n                           ui:Effects.Shadow=\"{StaticResource ErrorShadow}\" \r\n                           FontFamily=\"{StaticResource SymbolThemeFontFamily}\" \r\n                           Foreground=\"White\"\r\n                           FontSize=\"64\" \r\n                           HorizontalAlignment=\"Center\" \r\n                           VerticalAlignment=\"Center\">\r\n                        &#xE783;\r\n                </TextBlock>\r\n            </Grid>\r\n        </Grid>\r\n\r\n        <Grid Margin=\"8\" VerticalAlignment=\"Top\">\r\n            <Button Style=\"{ThemeResource IconButtonStyle}\" Content=\"&#xE72B;\" x:Name=\"backButton\" Click=\"backButton_Click\">\r\n                <w1709:Button.KeyboardAccelerators>\r\n                    <w1709:KeyboardAccelerator Key=\"Escape\"/>\r\n                </w1709:Button.KeyboardAccelerators>\r\n            </Button>\r\n        </Grid>\r\n    </Grid>\r\n</Page>"
  },
  {
    "path": "Unicord.Universal/Pages/Overlay/AttachmentOverlayPage.xaml.cs",
    "content": "﻿using System;\r\nusing Unicord.Universal.Models.Messages;\r\nusing Unicord.Universal.Services;\r\nusing Windows.Foundation;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Input;\r\nusing Windows.UI.Xaml.Media.Imaging;\r\nusing Windows.UI.Xaml.Navigation;\r\n\r\nnamespace Unicord.Universal.Pages.Overlay\r\n{\r\n    public sealed partial class AttachmentOverlayPage : Page, IOverlay\r\n    {\r\n        public AttachmentOverlayPage()\r\n        {\r\n            this.InitializeComponent();\r\n        }\r\n\r\n        public Size PreferredSize { get; }\r\n\r\n        protected override void OnNavigatedTo(NavigationEventArgs e)\r\n        {\r\n            contentContainerOverlay.Visibility = Visibility.Visible;\r\n            overlayProgressRing.Visibility = Visibility.Visible;\r\n            FailurePanel.Visibility = Visibility.Collapsed;\r\n\r\n            if (e.Parameter is AttachmentViewModel attachment)\r\n            {\r\n                scaledControl.TargetWidth = attachment.NaturalWidth;\r\n                scaledControl.TargetHeight = attachment.NaturalHeight;\r\n                attachmentImage.MaxWidth = attachment.NaturalWidth;\r\n                attachmentImage.MaxHeight = attachment.NaturalHeight;\r\n\r\n                AttachmentSource.UriSource = new Uri(attachment.ProxyUrl);\r\n            }\r\n\r\n            if (e.Parameter is EmbedImageViewModel thumbnail)\r\n            {\r\n                scaledControl.TargetWidth = thumbnail.NaturalWidth;\r\n                scaledControl.TargetHeight = thumbnail.NaturalHeight;\r\n                attachmentImage.MaxWidth = thumbnail.NaturalWidth;\r\n                attachmentImage.MaxHeight = thumbnail.NaturalHeight;\r\n\r\n                AttachmentSource.UriSource = new Uri(thumbnail.Url);\r\n            }\r\n        }\r\n\r\n        private void AttachmentSource_DownloadProgress(object sender, DownloadProgressEventArgs e)\r\n        {\r\n            overlayProgressRing.Value = e.Progress;\r\n        }\r\n\r\n        private void AttachmentSource_ImageOpened(object sender, RoutedEventArgs e)\r\n        {\r\n            contentContainerOverlay.Visibility = Visibility.Collapsed;\r\n        }\r\n\r\n        private void contentContainer_Tapped(object sender, TappedRoutedEventArgs e)\r\n        {\r\n            OverlayService.GetForCurrentView().CloseOverlay();\r\n        }\r\n\r\n        private void backButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            OverlayService.GetForCurrentView().CloseOverlay();\r\n        }\r\n\r\n        private void AttachmentSource_ImageFailed(object sender, ExceptionRoutedEventArgs e)\r\n        {\r\n            overlayProgressRing.Visibility = Visibility.Collapsed;\r\n            FailurePanel.Visibility = Visibility.Visible;\r\n        }\r\n\r\n        private void attachmentImage_Tapped(object sender, TappedRoutedEventArgs e)\r\n        {\r\n            e.Handled = true;\r\n        }\r\n    }\r\n}"
  },
  {
    "path": "Unicord.Universal/Pages/Overlay/UserInfoOverlayPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Overlay.UserInfoOverlayPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Overlay\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:dialogs=\"using:Unicord.Universal.Dialogs\"\n    mc:Ignorable=\"d\">\n\n\n    <dialogs:ProfileOverlay x:Name=\"userInfoOverlay\" Visibility=\"Visible\"/>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Overlay/UserInfoOverlayPage.xaml.cs",
    "content": "﻿using Unicord.Universal.Models.User;\nusing Unicord.Universal.Services;\nusing Windows.Foundation;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\n// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace Unicord.Universal.Pages.Overlay\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class UserInfoOverlayPage : Page, IOverlay\n    {\n        public UserInfoOverlayPage()\n        {\n            this.InitializeComponent();\n        }\n\n        public Size PreferredSize =>\n            new Size(550, 400);\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            base.OnNavigatedTo(e);\n\n            userInfoOverlay.User = (UserViewModel)e.Parameter;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/AboutSettingsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Settings.AboutSettingsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Settings\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:muxc=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:settings=\"using:SettingsControl\"\n    mc:Ignorable=\"d\">\n\n    <muxc:Expander Margin=\"0,8\" IsExpanded=\"True\" HorizontalAlignment=\"Stretch\" HorizontalContentAlignment=\"Stretch\" VerticalAlignment=\"Top\">\n        <muxc:Expander.Header>\n            <Grid HorizontalAlignment=\"Stretch\" Padding=\"0,12\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n                \n                <StackPanel Orientation=\"Horizontal\" Spacing=\"16\" Grid.Column=\"0\">\n                    <Image Source=\"{StaticResource DiscordClyde}\" \n                           Width=\"24\" \n                           Height=\"24\"\n                           VerticalAlignment=\"Center\"/>\n                    <StackPanel VerticalAlignment=\"Center\">\n                        <TextBlock x:Uid=\"AppDisplayNameText\"\n                                   Style=\"{ThemeResource BodyStrongTextBlockStyle}\"/>\n                        <TextBlock x:Uid=\"AppDisplayDescriptionText\"\n                                   Style=\"{ThemeResource CaptionTextBlockStyle}\"\n                                   Foreground=\"{ThemeResource TextFillColorSecondaryBrush}\"\n                                   TextWrapping=\"NoWrap\"/>\n                    </StackPanel>\n                </StackPanel>\n                \n                <TextBlock Text=\"{Binding DisplayVersion}\"\n                           Grid.Column=\"1\"\n                           VerticalAlignment=\"Center\"\n                           Margin=\"12,0,0,0\"\n                           IsTextSelectionEnabled=\"True\"/>\n            </Grid>\n        </muxc:Expander.Header>\n\n        <StackPanel Margin=\"0,8,0,0\">\n            <TextBlock x:Uid=\"AcknowledgementsText\"\n                       Text=\"Acknowledgements\"\n                       Margin=\"20,0,0,0\" />\n            <RichTextBlock Margin=\"20,8,20,0\">\n                    <Paragraph>\n                        <Bold>DSharpPlus</Bold>\n                        <Run>- A C# library for making bots using the Discord API.</Run>\n                    </Paragraph>\n                    <Paragraph>\n                        <Run>Copyright © 2015 Mike Santiago</Run>\n                        <LineBreak/>\n                        <Run>Copyright © 2016-2018 DSharpPlus Development Team</Run>\n                    </Paragraph>\n                    <Paragraph>Used under the\n                        <Hyperlink NavigateUri=\"https://github.com/DSharpPlus/DSharpPlus/blob/master/LICENSE\">MIT licence</Hyperlink>\n                    </Paragraph>\n\n                    <Paragraph/>\n\n                    <Paragraph>\n                        <Bold>Windows Community Toolkit</Bold>\n                        <Run>- A collection of helper functions, custom controls, and app services.</Run>\n                    </Paragraph>\n                    <Paragraph>\n                        <Run>Copyright © .NET Foundation and Contributors</Run>\n                    </Paragraph>\n                    <Paragraph>Used under the\n                        <Hyperlink NavigateUri=\"https://github.com/windows-toolkit/WindowsCommunityToolkit/blob/master/license.md\">MIT licence</Hyperlink>\n                    </Paragraph>\n\n                    <Paragraph/>\n\n                    <Paragraph>\n                        <Bold>ColorCode-Universal</Bold>\n                        <Run>- A port of ColorCode to .NET Standard.</Run>\n                    </Paragraph>\n                    <Paragraph>\n                        <Run>Copyright © Microsoft Corporation, William Bradley 2017</Run>\n                    </Paragraph>\n                    <Paragraph>Used under the\n                        <Hyperlink NavigateUri=\"https://github.com/WilliamABradley/ColorCode-Universal/blob/master/license.md\">Microsoft Public License</Hyperlink>\n                    </Paragraph>\n\n                    <Paragraph/>\n\n                    <Paragraph>\n                        <Bold>Newtonsoft.Json</Bold>\n                        <Run>- A popular high-performance JSON framework for .NET.</Run>\n                    </Paragraph>\n                    <Paragraph>\n                        <Run>Copyright © 2007 James Newton-King</Run>\n                    </Paragraph>\n                    <Paragraph>Used under the\n                        <Hyperlink NavigateUri=\"https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md\">MIT licence</Hyperlink>\n                    </Paragraph>\n\n                    <Paragraph/>\n\n                    <Paragraph>\n                        <Bold>libsodium</Bold>\n                        <Run>- A modern, portable, easy to use crypto library.</Run>\n                    </Paragraph>\n                    <Paragraph>\n                        <Run>Copyright © 2013-2018 Frank Denis &lt;j at pureftpd dot org&gt;</Run>\n                    </Paragraph>\n                    <Paragraph>Used under the\n                        <Hyperlink NavigateUri=\"https://github.com/jedisct1/libsodium/blob/master/LICENSE\">ISC License</Hyperlink>\n                    </Paragraph>\n\n                    <Paragraph/>\n\n                    <Paragraph>\n                        <Bold>libopus</Bold>\n                        <Run>- Modern audio compression for the internet.</Run>\n                    </Paragraph>\n                    <Paragraph>\n                        <Run>Copyright © 2001-2011 Xiph.Org, Skype Limited, Octasic, Jean-Marc Valin, Timothy B. Terriberry, CSIRO, Gregory Maxwell, Mark Borgerding, Erik de Castro Lopo</Run>\n                    </Paragraph>\n                    <Paragraph>Used under the\n                        <Hyperlink NavigateUri=\"https://github.com/xiph/opus/blob/master/LICENSE_PLEASE_READ.txt\">BSD License</Hyperlink>\n                    </Paragraph>\n\n                    <Paragraph/>\n\n                    <Paragraph>\n                        <Bold>QueryString.NET</Bold>\n                        <Run>- A QueryString library for generating and parsing query strings using C#.</Run>\n                    </Paragraph>\n                    <Paragraph>\n                        <Run>Copyright © 2015 Windows Notifications</Run>\n                    </Paragraph>\n                    <Paragraph>Used under the\n                        <Hyperlink NavigateUri=\"https://github.com/WindowsNotifications/QueryString.NET/blob/master/LICENSE\">MIT License</Hyperlink>\n                    </Paragraph>\n\n                    <Paragraph/>\n\n                    <Paragraph>\n                        <Bold>Unicode.NET</Bold>\n                        <Run>- A Unicode library for .NET, supporting UTF8, UTF16, and UTF32.</Run>\n                    </Paragraph>\n                    <Paragraph>\n                        <Run>Copyright © 2017 NeoSmart Technologies</Run>\n                        <Hyperlink NavigateUri=\"https://neosmart.net/\">https://neosmart.net/</Hyperlink>\n                    </Paragraph>\n                    <Paragraph>Used under the\n                        <Hyperlink NavigateUri=\"https://github.com/WindowsNotifications/QueryString.NET/blob/master/LICENSE\">MIT License</Hyperlink>\n                    </Paragraph>\n\n                    <Paragraph/>\n\n            </RichTextBlock>\n            \n            <Border BorderBrush=\"{ThemeResource CardStrokeColorDefaultBrush}\"\n                    BorderThickness=\"0,1.5,0,0\"\n                    Margin=\"-28,0,-28,0\"\n                    Padding=\"0,16,0,0\"/>\n            <StackPanel>\n                <TextBlock TextWrapping=\"Wrap\" Margin=\"20,0\">\n                        <Run>Discord, the Discord Logo, Clyde and so on are trademarks of Discord Inc. Unicord is in no way associated with nor endorced by these people, but they're cool!</Run>\n                </TextBlock>\n\n                <TextBlock Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\"\n                            Text=\"Hey you read all this? You're pretty cool too, hit me up! @WamWooWam#6402\"\n                            TextWrapping=\"Wrap\"\n                            Margin=\"20,12,20,0\"\n                            IsTextSelectionEnabled=\"True\"/>\n            </StackPanel>\n        </StackPanel>\n    </muxc:Expander>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/AboutSettingsPage.xaml.cs",
    "content": "﻿using Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Pages.Settings\n{\n    public sealed partial class AboutSettingsPage : Page\n    {\n        public AboutSettingsPage()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/AccountsSettingsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Settings.AccountsSettingsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Settings\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:toolkit=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:models=\"using:Unicord.Universal.Models\"\n    xmlns:presence=\"using:Unicord.Universal.Controls.Presence\"\n    xmlns:users=\"using:Unicord.Universal.Controls.Users\"\n    xmlns:settings=\"using:SettingsControl\"\n    mc:Ignorable=\"d\">\n    <Page.DataContext>\n        <models:AccountsSettingsModel />\n    </Page.DataContext>\n\n    <ScrollViewer>\n        <Grid>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <Border Background=\"{ThemeResource CardBackgroundFillColorDefaultBrush}\"\n                BorderBrush=\"{ThemeResource CardStrokeColorDefaultBrush}\"\n                BorderThickness=\"1\"\n                CornerRadius=\"{ThemeResource AccountsSettings_ProfileCard_CornerRadius}\">\n                <Grid>\n                    <Grid.RowDefinitions>\n                        <!-- Banner -->\n                        <RowDefinition Height=\"100\"/>\n                        <!-- Content -->\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n\n                    <!-- Banner area (visual only) -->\n                    <Border Grid.Row=\"0\"\n                        Background=\"{ThemeResource LayerFillColorAltBrush}\"\n                        CornerRadius=\"{ThemeResource AccountsSettings_ProfileCard_BannerCornerRadius}\" />\n\n                    <Button Grid.Row=\"0\"\n                            HorizontalAlignment=\"Right\"\n                            VerticalAlignment=\"Top\"\n                            Margin=\"0,8,8,0\"\n                            Padding=\"4\"\n                            Background=\"Transparent\"\n                            BorderBrush=\"Transparent\"\n                            ToolTipService.ToolTip=\"More\">\n                        <Button.Content>\n                            <FontIcon Glyph=\"&#xE10C;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                        </Button.Content>\n                        <Button.Flyout>\n                            <MenuFlyout>\n                                <MenuFlyoutItem Text=\"Copy User ID\" Command=\"{Binding CopyUserIdCommand}\">\n                                    <MenuFlyoutItem.Icon>\n                                        <FontIcon Glyph=\"&#xEC7A;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\"/>\n                                    </MenuFlyoutItem.Icon>\n                                </MenuFlyoutItem>\n                            </MenuFlyout>\n                        </Button.Flyout>\n                    </Button>\n\n                    <!-- Content area -->\n                    <Grid Grid.Row=\"1\" Margin=\"16\">\n                        <Grid.RowDefinitions>\n                            <!-- Avatar + name row (avatar overlaps banner) -->\n                            <RowDefinition Height=\"Auto\"/>\n                            <!-- Details grid -->\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n\n                        <Grid Grid.Row=\"0\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\"/>\n                                <ColumnDefinition Width=\"*\"/>\n                            </Grid.ColumnDefinitions>\n\n                            <Grid Width=\"88\" Height=\"88\" Margin=\"0,-44,0,0\">\n                                <Border CornerRadius=\"44\"\n                                    BorderBrush=\"{ThemeResource CardBackgroundFillColorDefaultBrush}\"\n                                    BorderThickness=\"6\"\n                                    Background=\"{ThemeResource CardBackgroundFillColorDefaultBrush}\" />\n\n                                <users:AvatarControl Margin=\"6\"\n                                    Style=\"{ThemeResource LargeAvatarWithPresenceStyle}\"\n                                    Source=\"{Binding User.AvatarUrl}\"\n                                    Presence=\"{Binding UserPresence, Mode=OneWay}\" />\n                            </Grid>\n\n                            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Top\" Margin=\"12,-4,0,0\">\n                                <TextBlock Style=\"{ThemeResource SubtitleTextBlockStyle}\"\n                                       Text=\"{Binding User.GlobalName, Mode=OneWay}\"\n                                       Visibility=\"{Binding User.GlobalName, Converter={StaticResource BoolVisibilityConverter}}\"\n                                       TextTrimming=\"CharacterEllipsis\"\n                                       IsTextSelectionEnabled=\"True\"/>\n                                <TextBlock Style=\"{ThemeResource SubtitleTextBlockStyle}\"\n                                       Text=\"{Binding User.Username, Mode=OneWay}\"\n                                       Visibility=\"{Binding User.GlobalName, Converter={StaticResource InverseBoolVisibilityConverter}}\"\n                                       TextTrimming=\"CharacterEllipsis\"\n                                       IsTextSelectionEnabled=\"True\"/>\n                            </StackPanel>\n                        </Grid>\n\n                        <Grid Grid.Row=\"1\" Margin=\"4,16,0,0\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <Grid Grid.Row=\"0\" Visibility=\"{Binding User.GlobalName, Converter={StaticResource BoolVisibilityConverter}}\">\n                                <StackPanel>\n                                    <TextBlock Text=\"Display Name\"\n                                           Style=\"{ThemeResource CaptionTextBlockStyle}\"\n                                           Foreground=\"{ThemeResource TextFillColorSecondaryBrush}\"\n                                           Margin=\"0,0,0,4\"/>\n                                    <TextBlock Style=\"{ThemeResource BodyTextBlockStyle}\"\n                                           FontWeight=\"SemiBold\"\n                                           Foreground=\"{ThemeResource TextFillColorPrimaryBrush}\"\n                                           Text=\"{Binding User.GlobalName, Mode=OneWay}\"\n                                           IsTextSelectionEnabled=\"True\"/>\n                                </StackPanel>\n                            </Grid>\n\n                            <StackPanel Grid.Row=\"1\" Margin=\"0,16,0,0\">\n                                <TextBlock Text=\"Username\"\n                                           Style=\"{ThemeResource CaptionTextBlockStyle}\"\n                                           Foreground=\"{ThemeResource TextFillColorSecondaryBrush}\"\n                                           Margin=\"0,0,0,4\"/>\n                                <TextBlock Style=\"{ThemeResource BodyTextBlockStyle}\"\n                                           FontWeight=\"SemiBold\"\n                                           Foreground=\"{ThemeResource TextFillColorPrimaryBrush}\"\n                                           Text=\"{Binding User.Username, Mode=OneWay}\"\n                                           IsTextSelectionEnabled=\"True\"/>\n                            </StackPanel>\n\n                            <StackPanel Grid.Row=\"2\" Margin=\"0,16,0,0\">\n                                <TextBlock Text=\"Email\"\n                                           Style=\"{ThemeResource CaptionTextBlockStyle}\"\n                                           Foreground=\"{ThemeResource TextFillColorSecondaryBrush}\"\n                                           Margin=\"0,0,0,4\"/>\n                                <StackPanel Orientation=\"Horizontal\">\n                                    <TextBlock x:Name=\"email\" \n                                                   VerticalAlignment=\"Center\" \n                                                   IsTextSelectionEnabled=\"True\" \n                                                   Style=\"{ThemeResource BodyTextBlockStyle}\"\n                                                   FontWeight=\"SemiBold\"\n                                                   Foreground=\"{ThemeResource TextFillColorPrimaryBrush}\"/>\n                                    <HyperlinkButton Name=\"EmailRevealButton\" Margin=\"8,0,0,0\" x:Uid=\"/AccountsSettingsPage/EmailRevealButton\" Style=\"{ThemeResource TextBlockButtonStyle}\" VerticalAlignment=\"Center\" Padding=\"2\" Visibility=\"Visible\" Click=\"EmailRevealButton_Click\"/>\n                                    <HyperlinkButton Name=\"EmailHideButton\" Margin=\"8,0,0,0\" x:Uid=\"/AccountsSettingsPage/EmailHideButton\" Style=\"{ThemeResource TextBlockButtonStyle}\" VerticalAlignment=\"Center\" Padding=\"2\" Visibility=\"Collapsed\" Click=\"EmailHideButton_Click\"/>\n                                </StackPanel>\n                            </StackPanel>\n                        </Grid>\n                    </Grid>\n                </Grid>\n            </Border>\n\n            <TextBlock x:Uid=\"/AccountsSettingsPage/FriendsText\" Grid.Row=\"1\" Style=\"{ThemeResource BaseTextBlockStyle}\" Margin=\"4,16\"/>\n\n            <StackPanel Grid.Row=\"2\">\n                <settings:SettingsBlockControl x:Uid=\"/AccountsSettingsPage/SyncContactsBlock\"\n                                               Visibility=\"{Binding IsSyncContactsVisible, Converter={StaticResource BoolVisibilityConverter}}\">\n                    <settings:SettingsBlockControl.Icon>\n                        <SymbolIcon Symbol=\"People\"/>\n                    </settings:SettingsBlockControl.Icon>\n                    <ToggleSwitch x:Name=\"syncContactsSwitch\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" />\n                </settings:SettingsBlockControl>\n\n                <settings:SettingsBlockControl x:Uid=\"/AccountsSettingsPage/BackgroundNotificationsBlock\"\n                                               Description=\"{Binding BackgroundNotificationDescription}\">\n                    <settings:SettingsBlockControl.Icon>\n                        <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"{Binding BackgroundNotificationIcon}\"/>\n                    </settings:SettingsBlockControl.Icon>\n                    <ToggleSwitch Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding BackgroundNotifications, Mode=TwoWay}\" />\n                </settings:SettingsBlockControl>\n            </StackPanel>\n\n            <TextBlock x:Uid=\"/AccountsSettingsPage/StatisticsText\" Grid.Row=\"3\" Style=\"{ThemeResource BaseTextBlockStyle}\" Margin=\"4,16\"/>\n\n            <settings:SettingsBlockControl x:Uid=\"/AccountsSettingsPage/StatisticsBlock\"\n                                           Grid.Row=\"4\"\n                                           IsExpanded=\"True\">\n                <settings:SettingsBlockControl.Icon>\n                    <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE9D9;\"/>\n                </settings:SettingsBlockControl.Icon>\n                <Button x:Name=\"CopyStatisticsButton\"\n                        x:Uid=\"/AccountsSettingsPage/CopyStatisticsButton\"\n                        Command=\"{Binding CopyStatisticsCommand}\"\n                        Margin=\"0,0,-12,0\">\n                    <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE8C8;\" FontSize=\"16\"/>\n                </Button>\n                <settings:SettingsBlockControl.ExpandableContent>\n                    <Grid Padding=\"20,8\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"24\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                            <RowDefinition Height=\"Auto\"/>\n                        </Grid.RowDefinitions>\n\n                        <TextBlock Grid.Row=\"0\" Text=\"Friends\" FontWeight=\"Normal\" IsTextSelectionEnabled=\"False\" />\n                        <TextBlock Grid.Row=\"0\" Grid.Column=\"2\" TextAlignment=\"Left\" HorizontalAlignment=\"Left\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" IsTextSelectionEnabled=\"True\" Text=\"{Binding FriendCountString}\"/>\n\n                        <TextBlock Grid.Row=\"1\" Text=\"Servers\" FontWeight=\"Normal\" IsTextSelectionEnabled=\"False\" Margin=\"0,8,0,0\" />\n                        <TextBlock Grid.Row=\"1\" Grid.Column=\"2\" TextAlignment=\"Left\" HorizontalAlignment=\"Left\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" IsTextSelectionEnabled=\"True\" Text=\"{Binding ServerCountString}\" Margin=\"0,8,0,0\"/>\n\n                        <TextBlock Grid.Row=\"2\" Text=\"Server Channels\" FontWeight=\"Normal\" IsTextSelectionEnabled=\"False\" Margin=\"0,8,0,0\" />\n                        <TextBlock Grid.Row=\"2\" Grid.Column=\"2\" TextAlignment=\"Left\" HorizontalAlignment=\"Left\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" IsTextSelectionEnabled=\"True\" Text=\"{Binding ChannelsCountString}\" Margin=\"0,8,0,0\"/>\n\n                        <TextBlock Grid.Row=\"3\" Text=\"Server Members\" FontWeight=\"Normal\" IsTextSelectionEnabled=\"False\" Margin=\"0,8,0,0\" />\n                        <TextBlock Grid.Row=\"3\" Grid.Column=\"2\" TextAlignment=\"Left\" HorizontalAlignment=\"Left\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" IsTextSelectionEnabled=\"True\" Text=\"{Binding MemberCountString}\" Margin=\"0,8,0,0\"/>\n\n                        <TextBlock Grid.Row=\"4\" Text=\"DM Channels\" FontWeight=\"Normal\" IsTextSelectionEnabled=\"False\" Margin=\"0,8,0,0\" />\n                        <TextBlock Grid.Row=\"4\" Grid.Column=\"2\" TextAlignment=\"Left\" HorizontalAlignment=\"Left\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" IsTextSelectionEnabled=\"True\" Text=\"{Binding OpenDMCountString}\" Margin=\"0,8,0,0\"/>\n\n                        <TextBlock Grid.Row=\"5\" Text=\"Synced Users\" FontWeight=\"Normal\" IsTextSelectionEnabled=\"False\" Margin=\"0,8,0,0\" />\n                        <TextBlock Grid.Row=\"5\" Grid.Column=\"2\" TextAlignment=\"Left\" HorizontalAlignment=\"Left\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" IsTextSelectionEnabled=\"True\" Text=\"{Binding SynchedUserCountString}\" Margin=\"0,8,0,0\"/>\n\n                        <TextBlock Grid.Row=\"6\" Text=\"Synced Presences\" FontWeight=\"Normal\" IsTextSelectionEnabled=\"False\" Margin=\"0,8,0,0\" />\n                        <TextBlock Grid.Row=\"6\" Grid.Column=\"2\" TextAlignment=\"Left\" HorizontalAlignment=\"Left\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" IsTextSelectionEnabled=\"True\" Text=\"{Binding SynchedPresenceCountString}\" Margin=\"0,8,0,0\"/>\n\n                        <TextBlock Grid.Row=\"7\" Text=\"Emotes\" FontWeight=\"Normal\" IsTextSelectionEnabled=\"False\" Margin=\"0,8,0,0\" />\n                        <TextBlock Grid.Row=\"7\" Grid.Column=\"2\" TextAlignment=\"Left\" HorizontalAlignment=\"Left\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\" IsTextSelectionEnabled=\"True\" Text=\"{Binding EmoteCountString}\" Margin=\"0,8,0,0\"/>\n                    </Grid>\n                </settings:SettingsBlockControl.ExpandableContent>\n            </settings:SettingsBlockControl>\n\n            <settings:SettingsBlockControl x:Uid=\"/AccountsSettingsPage/LogoutBlock\"\n                                       Grid.Row=\"6\">\n                <settings:SettingsBlockControl.Icon>\n                    <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xF3B1;\"/>\n                </settings:SettingsBlockControl.Icon>\n                <Button x:Uid=\"/AccountsSettingsPage/LogoutButton\" Click=\"LogoutButton_Click\" Foreground=\"Red\" />\n            </settings:SettingsBlockControl>\n        </Grid>\n    </ScrollViewer>\n</Page>"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/AccountsSettingsPage.xaml.cs",
    "content": "﻿using System;\nusing System.Text;\nusing Unicord.Universal.Controls;\nusing Unicord.Universal.Integration;\nusing Unicord.Universal.Parsers.Markdown;\nusing Unicord.Universal.Services;\nusing Unicord.Universal.Utilities;\nusing Windows.ApplicationModel.DataTransfer;\nusing Windows.ApplicationModel.Resources;\nusing Windows.System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing static Unicord.Constants;\n\nnamespace Unicord.Universal.Pages.Settings\n{\n    public sealed partial class AccountsSettingsPage : Page\n    {\n        public AccountsSettingsPage()\n        {\n            InitializeComponent();\n\n            email.Text = GetHiddenEmail(DiscordManager.Discord.CurrentUser.Email);\n\n            MarkdownDocument.KnownSchemes.Add(\"ms-people\");\n\n            syncContactsSwitch.IsOn = App.RoamingSettings.Read(SYNC_CONTACTS, true);\n            syncContactsSwitch.Toggled += SyncContactsSwitch_Toggled;\n        }\n\n        private async void SyncContactsSwitch_Toggled(object sender, RoutedEventArgs e)\n        {\n            syncContactsSwitch.IsEnabled = false;\n\n            var isEnabled = App.RoamingSettings.Read(SYNC_CONTACTS, true);\n            if (isEnabled)\n            {\n                await ContactListManager.ClearContactsAsync();\n            }\n            else\n            {\n                await ContactListManager.UpdateContactsListAsync();\n            }\n\n            App.RoamingSettings.Save(SYNC_CONTACTS, !isEnabled);\n\n            syncContactsSwitch.IsEnabled = true;\n        }\n\n        private async void LogoutButton_Click(object sender, RoutedEventArgs e)\n        {\n            var loader = ResourceLoader.GetForCurrentView(\"AccountsSettingsPage\");\n            if (await UIUtilities.ShowYesNoDialogAsync(loader.GetString(\"LogoutPromptTitle\"), loader.GetString(\"LogoutPromptMessage\"), \"\\xF3B1\"))\n            {\n                await App.LogoutAsync();\n            }\n        }\n\n        private async void OnMarkdownLinkClicked(object sender, LinkClickedEventArgs e)\n        {\n            await Launcher.LaunchUriAsync(new Uri(e.Link));\n        }\n\n        private void EmailRevealButton_Click(object sender, RoutedEventArgs e)\n        {\n            email.Text = DiscordManager.Discord.CurrentUser.Email;\n\n            EmailRevealButton.Visibility = Visibility.Collapsed;\n            EmailHideButton.Visibility = Visibility.Visible;\n        }\n\n        private void EmailHideButton_Click(object sender, RoutedEventArgs e)\n        {\n            email.Text = GetHiddenEmail(DiscordManager.Discord.CurrentUser.Email);\n\n            EmailHideButton.Visibility = Visibility.Collapsed;\n            EmailRevealButton.Visibility = Visibility.Visible;\n        }\n\n        private string GetHiddenEmail(string email)\n        {\n            var split = email.Split('@');\n            var start = split[0].TrimEnd('@');\n            var domain = split[1];\n\n            return $\"{new string('●', start.Length)}@{domain}\";\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/DebugSettingsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Settings.DebugSettingsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Settings\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    mc:Ignorable=\"d\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\" MaxHeight=\"500\"/>\n        </Grid.RowDefinitions>\n        <TextBlock Text=\"Debug\" Style=\"{ThemeResource SubheaderTextBlockStyle}\" Margin=\"0,0,0,12\"/>\n        \n\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/DebugSettingsPage.xaml.cs",
    "content": "﻿using Windows.UI.Xaml.Controls;\n\n// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace Unicord.Universal.Pages.Settings\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class DebugSettingsPage : Page\n    {\n        public DebugSettingsPage()\n        {\n            this.InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/MediaSettingsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Settings.MediaSettingsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Settings\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:models=\"using:Unicord.Universal.Models\"\n    xmlns:settings=\"using:SettingsControl\"\n    mc:Ignorable=\"d\" x:DefaultBindMode=\"TwoWay\">\n    <Page.DataContext>\n        <models:MediaSettingsModel/>\n    </Page.DataContext>\n\n    <StackPanel>\n        <settings:SettingsBlockControl x:Uid=\"/MediaSettingsPage/MediaCompressionBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xEA69;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <settings:SettingsBlockControl.ExpandableContent>\n                <StackPanel Margin=\"12\">\n                    <TextBlock Style=\"{ThemeResource BaseTextBlockStyle}\" x:Uid=\"/MediaSettingsPage/VideoOptionsHeader\" Text=\"Video Options\" />\n                    <ComboBox Margin=\"0,12\" x:Uid=\"/MediaSettingsPage/ResolutionBox\" ItemsSource=\"{Binding AvailableResolutions}\" SelectedValue=\"{Binding Resolution}\" SelectionChanged=\"ComboBox_SelectionChanged\" HorizontalAlignment=\"Stretch\"/>\n                    <Grid>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Slider x:Name=\"bitrateSlider\" x:Uid=\"/MediaSettingsPage/BitrateSlider\" TickFrequency=\"256\" StepFrequency=\"64\" Value=\"{Binding VideoBitrate, Mode=TwoWay}\" Minimum=\"256\" Maximum=\"4096\" />\n                        <TextBlock Grid.Column=\"1\" VerticalAlignment=\"Center\" MinWidth=\"60\" TextAlignment=\"Right\" Margin=\"4,20,0,0\">\n                            <Run Text=\"{Binding Value, ElementName=bitrateSlider}\"/>kbps\n                        </TextBlock>\n                    </Grid>\n                    <ComboBox HorizontalAlignment=\"Stretch\" x:Uid=\"/MediaSettingsPage/EncoderPriorityBox\" SelectedIndex=\"{Binding ProcessingAlgorithm, Mode=TwoWay}\" Margin=\"0,12\">\n                        <ComboBoxItem x:Uid=\"/MediaSettingsPage/EncoderPrioritySpeed\" />\n                        <ComboBoxItem x:Uid=\"/MediaSettingsPage/EncoderPriorityQuality\" />\n                    </ComboBox>\n                    \n                    <Border Background=\"{ThemeResource ExpanderHeaderBorderBrush}\" Height=\"1.5\" Margin=\"-28,16,-28,16\"/>\n                    \n                    <TextBlock Style=\"{ThemeResource BaseTextBlockStyle}\" x:Uid=\"/MediaSettingsPage/AudioOptionsHeader\" Margin=\"0,0,0,12\"/>\n                    <Grid>\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"Auto\"/>\n                        </Grid.ColumnDefinitions>\n                        <Slider x:Name=\"audioBitrateSlider\" x:Uid=\"/MediaSettingsPage/BitrateSlider\" TickFrequency=\"32\" StepFrequency=\"32\" Value=\"{Binding AudioBitrate, Mode=TwoWay}\" Minimum=\"32\" Maximum=\"320\" />\n                        <TextBlock Grid.Column=\"1\" VerticalAlignment=\"Center\" MinWidth=\"60\" TextAlignment=\"Right\" Margin=\"4,20,0,0\">\n                            <Run Text=\"{Binding Value, ElementName=audioBitrateSlider}\"/>kbps\n                        </TextBlock>\n                    </Grid>\n                </StackPanel>\n            </settings:SettingsBlockControl.ExpandableContent>\n            <ComboBox HorizontalAlignment=\"Stretch\" SelectedIndex=\"{Binding AutoTranscodeMedia, Mode=TwoWay}\" MinWidth=\"200\" Margin=\"0,0,-12,0\">\n                <ComboBoxItem x:Uid=\"/MediaSettingsPage/AlwaysCompress\"/>\n                <ComboBoxItem x:Uid=\"/MediaSettingsPage/CompressIfNeeded\"/>\n                <ComboBoxItem x:Uid=\"/MediaSettingsPage/NeverCompress\"/>\n            </ComboBox>\n        </settings:SettingsBlockControl>\n    </StackPanel>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/MediaSettingsPage.xaml.cs",
    "content": "﻿using System.Linq;\nusing Unicord.Universal.Models;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Pages.Settings\n{\n    public sealed partial class MediaSettingsPage : Page\n    {\n        public MediaSettingsPage()\n        {\n            InitializeComponent();\n            DataContext = new MediaSettingsModel();\n        }\n\n        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n        {\n            if (DataContext is MediaSettingsModel model && e.AddedItems.FirstOrDefault() is string str)\n            {\n                model.Resolution = str;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/MessagingSettingsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Settings.MessagingSettingsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Settings\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:controls1=\"using:Unicord.Universal.Controls\"\n    xmlns:models=\"using:Unicord.Universal.Models\"\n    xmlns:messages=\"using:Unicord.Universal.Controls.Messages\"\n    xmlns:settings=\"using:SettingsControl\"\n    xmlns:converters=\"using:Unicord.Universal.Converters\"\n    mc:Ignorable=\"d\">\n    <Page.DataContext>\n        <models:MessagingSettingsModel />\n    </Page.DataContext>\n\n    <StackPanel>\n        <!-- \n            Temporarily disabled for performance reasons\n        \n            <TextBlock Style=\"{ThemeResource SubtitleTextBlockStyle}\" Text=\"Message Style\"/>\n            <TextBlock TextWrapping=\"Wrap\" Text=\"How would you like your messages to look?\"/>\n            <ListBox ItemsSource=\"{Binding AvailableMessageStyles}\" SelectedItem=\"{Binding SelectedMessageStyle, Mode=TwoWay, UpdateSourceTrigger=LostFocus}\" Margin=\"0,4,0,8\">\n                <ListBox.ItemTemplate>\n                    <DataTemplate x:DataType=\"models:MessageStyle\">\n                        <messages:MessageControl x:Name=\"ExampleMessageControl\" BorderBrush=\"Transparent\" Style=\"{x:Bind Value}\" Message=\"{x:Bind ExampleMessage}\" IsEnabled=\"False\" Padding=\"0\" Margin=\"0\"/>\n                    </DataTemplate>\n                </ListBox.ItemTemplate>\n            </ListBox>\n        -->\n\n        \n        <TextBlock x:Uid=\"/MessagingSettingsPage/ChatHeader\"\n                   Style=\"{ThemeResource BaseTextBlockStyle}\"\n                   Margin=\"4,0,4,16\"/>\n\n        <settings:SettingsBlockControl x:Uid=\"/MessagingSettingsPage/AutoPlayGIFsBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xF4A9;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ToggleSwitch Grid.Column=\"1\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding AutoPlayGifs, Mode=TwoWay}\" />\n        </settings:SettingsBlockControl>\n\n        <settings:SettingsBlockControl x:Uid=\"/MessagingSettingsPage/EnableSpoilersBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE890;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ToggleSwitch Grid.Column=\"1\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding EnableSpoilers, Mode=TwoWay}\" />\n        </settings:SettingsBlockControl>\n\n        <settings:SettingsBlockControl x:Uid=\"/MessagingSettingsPage/PromptLinksBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE71B;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ToggleSwitch Grid.Column=\"1\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding WarnUnsafeLinks, Mode=TwoWay}\" />\n        </settings:SettingsBlockControl>\n\n        <settings:SettingsBlockControl x:Uid=\"/MessagingSettingsPage/ShowHugeEmojiBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xED54;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ToggleSwitch Grid.Column=\"1\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding ShowHugeEmoji, Mode=TwoWay}\" />\n        </settings:SettingsBlockControl>\n\n\n        <settings:SettingsBlockControl x:Uid=\"/MessagingSettingsPage/EnableWebPBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE158;\"/>\n            </settings:SettingsBlockControl.Icon>\n\n            <Grid>\n                <Button x:Uid=\"/MessagingSettingsPage/WebPDownloadButton\"\n                        Command=\"{Binding OpenWebPStoreLinkCommand}\"\n                        Style=\"{ThemeResource AccentButtonStyle}\"\n                        Visibility=\"{Binding CanUseWebP, Converter={StaticResource InverseBoolVisibilityConverter}}\"/>\n                <ToggleSwitch Style=\"{ThemeResource NoTextToggleSwitchStyle}\" \n                              IsOn=\"{Binding EnableWebP, Mode=TwoWay}\"\n                              Visibility=\"{Binding CanUseWebP, Converter={StaticResource BoolVisibilityConverter}}\"/>\n            </Grid>\n\n        </settings:SettingsBlockControl>\n        \n        <settings:SettingsBlockControl x:Uid=\"/MessagingSettingsPage/EnableGuildBrowsingBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xec4a;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ToggleSwitch Grid.Column=\"1\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding EnableGuildBrowsing, Mode=TwoWay}\" />\n        </settings:SettingsBlockControl>\n\n        <settings:SettingsBlockControl x:Uid=\"/MessagingSettingsPage/TimestampStyleBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xEC92;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ComboBox ItemsSource=\"{Binding TimestampStyles}\" \n                      SelectedIndex=\"{Binding TimestampStyle, Mode=TwoWay}\" \n                      SelectionChanged=\"ComboBox_SelectionChanged\" \n                      HorizontalAlignment=\"Right\"\n                      MinWidth=\"200\">\n                <ComboBox.ItemTemplate>\n                    <DataTemplate x:DataType=\"models:TimestampStyleModel\">\n                        <StackPanel Orientation=\"Horizontal\">\n                            <TextBlock Text=\"{x:Bind Style}\" />\n                            <TextBlock Text=\"{x:Bind converters:DateTimeConverter.Convert(Style, Timestamp)}\" \n                                       Margin=\"4,0\" \n                                       VerticalAlignment=\"Center\" \n                                       FontSize=\"12\"\n                                       Foreground=\"{StaticResource ApplicationSecondaryForegroundThemeBrush}\" />\n                        </StackPanel>\n                    </DataTemplate>\n                </ComboBox.ItemTemplate>\n            </ComboBox>\n        </settings:SettingsBlockControl>\n\n        <TextBlock x:Uid=\"/MessagingSettingsPage/AdjustRoleColoursHeader\"  \n                   Style=\"{ThemeResource BaseTextBlockStyle}\" \n                   Text=\"Accessibility\"\n                   Margin=\"4,16\"/>\n\n        <settings:SettingsBlockControl x:Uid=\"/MessagingSettingsPage/ShowStatusGlyphsBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE776;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ToggleSwitch Grid.Column=\"1\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding ShowStatusGlyphs, Mode=TwoWay}\" />\n        </settings:SettingsBlockControl>\n\n\n        <settings:SettingsBlockControl x:Uid=\"/MessagingSettingsPage/AdjustRoleColoursBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE790;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <settings:SettingsBlockControl.AdditionalDescriptionContent>\n                <Button x:Name=\"ContrastLearnMoreButton\"\n                        x:Uid=\"/MessagingSettingsPage/LearnMoreButton\"\n                        HorizontalAlignment=\"Left\"\n                        Style=\"{ThemeResource TextBlockButtonStyle}\"\n                        Margin=\"0\"\n                        Padding=\"0\"\n                        MinHeight=\"0\"\n                        MinWidth=\"0\"\n                        VerticalAlignment=\"Center\"\n                        Click=\"ContrastLearnMoreButton_Click\"/>\n            </settings:SettingsBlockControl.AdditionalDescriptionContent>\n            <settings:SettingsBlockControl.ExpandableContent>\n                <Grid Padding=\"20,8\">\n                    <Grid.RowDefinitions>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                        <RowDefinition Height=\"Auto\"/>\n                    </Grid.RowDefinitions>\n\n                    <Slider x:Name=\"MinimumContrastSlider\"\n                            x:Uid=\"/MessagingSettingsPage/MinimumContrastSlider\"\n                            Header=\"Minimum Contrast\"\n                            Value=\"{Binding MinimumContrast, Mode=TwoWay}\"\n                            IsEnabled=\"{Binding IsOn, ElementName=AdjustRoleColours}\"\n                            Minimum=\"1\"\n                            Maximum=\"21\"\n                            StepFrequency=\"0.5\"\n                            TickFrequency=\"1\"\n                            Grid.Row=\"1\"\n                            Grid.ColumnSpan=\"2\"\n                            Margin=\"0,8,0,0\"/>\n                </Grid>\n            </settings:SettingsBlockControl.ExpandableContent>\n            <ToggleSwitch Grid.Column=\"1\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding AdjustRoleColours, Mode=TwoWay}\" Margin=\"0,0,-24,0\" />\n        </settings:SettingsBlockControl>\n\n        \n\n    </StackPanel>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/MessagingSettingsPage.xaml.cs",
    "content": "﻿using System;\nusing Windows.System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Pages.Settings\n{\n    public sealed partial class MessagingSettingsPage : Page\n    {\n        public MessagingSettingsPage()\n        {\n            InitializeComponent();\n        }\n\n        private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n        {\n            // dirty hack to work around databinding fuckery\n            App.RoamingSettings.Save(Constants.TIMESTAMP_STYLE, (sender as ComboBox).SelectedIndex);\n        }\n\n        private async void ContrastLearnMoreButton_Click(object sender, RoutedEventArgs e)\n        {\n            await Launcher.LaunchUriAsync(new Uri(\"https://www.w3.org/TR/WCAG/#contrast-minimum\"));\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/NotificationsSettingsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Settings.NotificationsSettingsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Settings\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:models=\"using:Unicord.Universal.Models\"\n    xmlns:settings=\"using:SettingsControl\" \n    xmlns:controls=\"using:Unicord.Universal.Controls\"\n    mc:Ignorable=\"d\" x:DefaultBindMode=\"TwoWay\">\n    <Page.DataContext>\n        <models:NotificationsSettingsModel/>\n    </Page.DataContext>\n\n    <StackPanel>\n        <TextBlock x:Name=\"unavailableText\"\n                   x:Uid=\"/NotificationsSettingsPage/DesktopNotificationsUnavailable\"\n                   Margin=\"0,0,0,16\"\n                   Visibility=\"{Binding IsPageEnabled, Converter={StaticResource InverseBoolVisibilityConverter}}\"\n                   Foreground=\"{StaticResource ErrorTextForegroundBrush}\"\n                   TextWrapping=\"Wrap\"/>\n\n        <settings:SettingsBlockControl x:Uid=\"/NotificationsSettingsPage/EnableNotifications\"\n                                       Description=\"{Binding EnableNotificationsDescription}\"\n                                       IsEnabled=\"{Binding IsPageEnabled}\"\n                                       IsExpanded=\"True\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"{x:Bind NotificationGlyph, Mode=OneWay}\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ToggleSwitch Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding EnableNotifications, Mode=TwoWay}\" Margin=\"0,0,-24,0\"/>\n            <settings:SettingsBlockControl.ExpandableContent>\n                <StackPanel Margin=\"-16,-16,-16,-20\">\n                    <StackPanel.Resources>\n                        <SolidColorBrush x:Key=\"ExpanderHeaderBackground\" Color=\"Transparent\"/>\n                        <StaticResource x:Key=\"ExpanderHeaderBorderBrush\" ResourceKey=\"CardStrokeColorDefaultBrush\"/>\n                        <Thickness x:Key=\"ExpanderHeaderBorderThickness\">0,0,0,1.5</Thickness>\n                        <CornerRadius x:Key=\"ControlCornerRadius\">0</CornerRadius>\n                    </StackPanel.Resources>\n                    <settings:SettingsBlockControl x:Uid=\"/NotificationsSettingsPage/EnableDesktopNotifications\"\n                                                   Description=\"{Binding EnableDesktopNotificationsDescription}\"\n                                                   IsEnabled=\"{Binding IsPageAndNotificationsEnabled}\">\n                        <ToggleSwitch Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding EnableDesktopNotifications, Mode=TwoWay}\" />\n                    </settings:SettingsBlockControl>\n\n                    <settings:SettingsBlockControl x:Uid=\"/NotificationsSettingsPage/EnableLiveTiles\"\n                                                   Visibility=\"{Binding IsLiveTilesVisible, Converter={StaticResource BoolVisibilityConverter}}\"\n                                                   IsEnabled=\"{Binding IsPageAndNotificationsEnabled}\">\n                        <ToggleSwitch Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding EnableDesktopNotifications, Mode=TwoWay}\" />\n                    </settings:SettingsBlockControl>\n\n                    <settings:SettingsBlockControl x:Uid=\"/NotificationsSettingsPage/EnableBadgeCount\"\n                                                   IsEnabled=\"{Binding IsPageAndNotificationsEnabled}\">\n                        <ToggleSwitch Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding EnableDesktopNotifications, Mode=TwoWay}\" />\n                    </settings:SettingsBlockControl>\n\n                    <settings:SettingsBlockControl x:Uid=\"/NotificationsSettingsPage/EnableBadgeUnread\"\n                                                   IsEnabled=\"{Binding IsPageAndNotificationsEnabled}\">\n                        <ToggleSwitch Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding EnableDesktopNotifications, Mode=TwoWay}\" />\n                    </settings:SettingsBlockControl>\n                </StackPanel>\n            </settings:SettingsBlockControl.ExpandableContent>\n        </settings:SettingsBlockControl>\n\n    </StackPanel>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/NotificationsSettingsPage.xaml.cs",
    "content": "﻿using Microsoft.Toolkit.Uwp.Helpers;\nusing Windows.UI.Xaml.Controls;\n\n// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace Unicord.Universal.Pages.Settings\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class NotificationsSettingsPage : Page\n    {\n        public string NotificationGlyph { get; } = SystemInformation.Instance.OperatingSystemVersion.Build >= 22000 ? \"\\uEA8F\" : \"\\uE91C\";\n\n        public NotificationsSettingsPage()\n        {\n            this.InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/SecuritySettingsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Settings.SecuritySettingsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Settings\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:models=\"using:Unicord.Universal.Models\"\n    xmlns:settings=\"using:SettingsControl\"\n    xmlns:controls=\"using:Unicord.Universal.Controls\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    x:DefaultBindMode=\"TwoWay\"\n    Loaded=\"Page_Loaded\"\n    mc:Ignorable=\"d\">\n    <Page.DataContext>\n        <models:SecuritySettingsModel />\n    </Page.DataContext>\n\n    <StackPanel>\n\n        <lib:InfoBar\n            x:Name=\"unavailableText\"\n            Margin=\"0,4\"\n            Severity=\"Warning\"\n            IsClosable=\"False\"\n            IsOpen=\"False\"\n            Title=\"\">\n            <lib:InfoBar.ActionButton>\n                <Button x:Name=\"OpenSettingsButton\" x:Uid=\"/SecuritySettingsPage/OpenSettingsButton\" Click=\"OpenSettingsButton_Click\" HorizontalAlignment=\"Right\"/>\n            </lib:InfoBar.ActionButton>\n        </lib:InfoBar>\n\n        <settings:SettingsBlockControl x:Uid=\"/SecuritySettingsPage/DiagnosticDataBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE946;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ToggleSwitch Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding EnableAnalytics, Mode=TwoWay}\" />\n        </settings:SettingsBlockControl>\n        \n\n        <StackPanel Margin=\"4,16\">\n            <TextBlock x:Uid=\"/SecuritySettingsPage/WindowsHelloHeader\"\n                   Text=\"Windows Hello\"\n                   Grid.Row=\"3\"\n                   Style=\"{ThemeResource BaseTextBlockStyle}\"/>\n            <TextBlock x:Uid=\"/SecuritySettingsPage/WindowsHelloSubHeader\"\n                       FontSize=\"12\"\n                       Opacity=\"0.75\"/>\n        </StackPanel>\n\n        <ContentControl\n            x:Name=\"settingsContent\"\n            HorizontalContentAlignment=\"Stretch\">\n            <StackPanel>\n                <settings:SettingsBlockControl x:Uid=\"/SecuritySettingsPage/LoginBlock\">\n                    <ToggleSwitch Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding HelloForLogin, Mode=TwoWay}\" />\n                </settings:SettingsBlockControl>\n                <settings:SettingsBlockControl x:Uid=\"/SecuritySettingsPage/SettingsBlock\">\n                    <ToggleSwitch Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding HelloForSettings, Mode=TwoWay}\" />\n                </settings:SettingsBlockControl>\n                <settings:SettingsBlockControl x:Uid=\"/SecuritySettingsPage/AccessNSFWBlock\">\n                    <ToggleSwitch Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding HelloForNSFW, Mode=TwoWay}\" />\n                </settings:SettingsBlockControl>\n                <settings:SettingsBlockControl x:Uid=\"/SecuritySettingsPage/StayAuthenticatedBlock\">\n                    <TimePicker HorizontalAlignment=\"Stretch\" Time=\"{Binding AuthenticationTime, Mode=TwoWay}\" />\n                </settings:SettingsBlockControl>\n            </StackPanel>\n        </ContentControl>\n\n\n        <TextBlock Grid.Row=\"6\" Grid.ColumnSpan=\"2\"><Hyperlink>Privacy Policy</Hyperlink></TextBlock>\n    </StackPanel>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/SecuritySettingsPage.xaml.cs",
    "content": "﻿using System;\r\nusing Microsoft.AppCenter;\r\nusing Unicord.Universal.Models;\r\nusing Windows.ApplicationModel.Resources;\r\nusing Windows.Security.Credentials.UI;\r\nusing Windows.System;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Pages.Settings\r\n{\r\n    public sealed partial class SecuritySettingsPage : Page\r\n    {\r\n        public SecuritySettingsPage()\r\n        {\r\n            InitializeComponent();\r\n            DataContext = new SecuritySettingsModel();\r\n        }\r\n\r\n        private async void Page_Loaded(object sender, RoutedEventArgs e)\r\n        {\r\n            var resources = ResourceLoader.GetForCurrentView(\"SecuritySettingsPage\");\r\n            unavailableText.Title = resources.GetString(\"WindowsHelloUnavailable/Text\");\r\n            \r\n            var available = await UserConsentVerifier.CheckAvailabilityAsync();\r\n            if (available != UserConsentVerifierAvailability.Available)\r\n            {\r\n                unavailableText.IsOpen = true;\r\n                settingsContent.IsEnabled = false;\r\n            }\r\n            else\r\n            {\r\n                unavailableText.IsOpen = false;\r\n                settingsContent.IsEnabled = true;\r\n            }\r\n        }\r\n\r\n        private async void ToggleSwitch_Toggled(object sender, RoutedEventArgs e)\r\n        {\r\n            await AppCenter.SetEnabledAsync((sender as ToggleSwitch).IsOn);\r\n        }\r\n\r\n        private async void OpenSettingsButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            await Launcher.LaunchUriAsync(new Uri(\"ms-settings:privacy-deviceencryption\"));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/SettingsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Settings.SettingsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Settings\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:models=\"using:Unicord.Universal.Models\"\n    Loaded=\"Page_Loaded\"\n    mc:Ignorable=\"d\">\n\n    <Page.Resources>\n        <Thickness x:Key=\"NavigationViewHeaderMargin\">22,32,22,0</Thickness>\n        <Thickness x:Key=\"NavigationViewMinimalHeaderMargin\">-52,42,22,0</Thickness>\n    </Page.Resources>\n\n    <Page.DataContext>\n        <models:RootSettingsModel/>\n    </Page.DataContext>\n    <Border x:Name=\"MainBorder\"\n            Background=\"{ThemeResource SettingsPage_MainBorder_Background}\">\n        <lib:NavigationView x:Name=\"NavView\"\n                            Header=\"{Binding SelectedItem.Content, ElementName=NavView}\"\n                            IsSettingsVisible=\"False\"\n                            IsBackEnabled=\"True\"\n                            BackRequested=\"NavView_BackRequested\"\n                            SelectionChanged=\"NavView_SelectionChanged\"\n                            DisplayModeChanged=\"NavView_DisplayModeChanged\"\n                            PaneOpening=\"NavView_PaneOpening\"\n                            PaneOpened=\"NavView_PaneOpened\"\n                            PaneClosing=\"NavView_PaneClosing\">\n            <lib:NavigationView.Resources>\n                <StaticResource x:Key=\"NavigationViewContentBackground\" ResourceKey=\"LayerFillColorAltBrush\" />\n            </lib:NavigationView.Resources>\n\n            <lib:NavigationView.MenuItems>\n                <lib:NavigationViewItem x:Name=\"ProfileItem\"\n                                        SelectsOnInvoked=\"False\"\n                                        IsTabStop=\"True\"\n                                        Tapped=\"ProfileItem_Tapped\"\n                                        HorizontalContentAlignment=\"Stretch\"\n                                        Padding=\"0\"\n                                        Margin=\"0\">\n                    <Grid x:Name=\"ProfileContainer\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"Auto\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n                        <lib:PersonPicture x:Name=\"UserProfilePicture\"\n                                          Width=\"24\"\n                                          Height=\"24\"\n                                          Margin=\"10,8,10,8\"\n                                          HorizontalAlignment=\"Center\"\n                                          ProfilePicture=\"{Binding ProfileAvatarUrl}\"/>\n                        <StackPanel x:Name=\"ProfileDetails\" Grid.Column=\"1\" VerticalAlignment=\"Center\" Margin=\"0,8,16,8\">\n                            <TextBlock x:Name=\"UserDisplayName\"\n                                      FontWeight=\"SemiBold\"\n                                      TextTrimming=\"CharacterEllipsis\"\n                                      Text=\"{Binding ProfileDisplayName}\"/>\n                            <TextBlock x:Uid=\"/SettingsPage/EditProfileText\"\n                                      Text=\"Edit Profiles\"\n                                      FontSize=\"12\"\n                                      Foreground=\"{ThemeResource TextFillColorSecondaryBrush}\"\n                                      TextTrimming=\"CharacterEllipsis\"/>\n                        </StackPanel>\n                    </Grid>\n                </lib:NavigationViewItem>\n\n                <lib:NavigationViewItem x:Name=\"SearchItem\"\n                                        SelectsOnInvoked=\"False\"\n                                        IsTabStop=\"False\"\n                                        Tapped=\"SearchItem_Tapped\"\n                                        HorizontalContentAlignment=\"Stretch\"\n                                        Padding=\"0\"\n                                        Margin=\"0\">\n                    <lib:NavigationViewItem.Resources>\n                        <x:Double x:Key=\"NavigationViewCompactPaneLength\">0</x:Double>\n                        <Thickness x:Key=\"NavigationViewItemOnLeftIconBoxMargin\">0</Thickness>\n                        <Thickness x:Key=\"NavigationViewItemContentPresenterMargin\">0</Thickness>\n                        <Thickness x:Key=\"NavigationViewCompactItemContentPresenterMargin\">0</Thickness>\n                    </lib:NavigationViewItem.Resources>\n                    <Grid HorizontalAlignment=\"Stretch\">\n                        <!-- Full search box for expanded mode -->\n                        <Grid x:Name=\"SearchBoxContainer\" HorizontalAlignment=\"Stretch\" Margin=\"0\">\n                            <AutoSuggestBox x:Name=\"SearchBox\"\n                                           x:Uid=\"/SettingsPage/SearchBox\"\n                                           PlaceholderText=\"Search\"\n                                           QueryIcon=\"Find\"\n                                           Margin=\"0\"\n                                           Padding=\"0\"\n                                           HorizontalAlignment=\"Stretch\"\n                                           IsHitTestVisible=\"True\"\n                                           TextChanged=\"SearchBox_TextChanged\"\n                                           QuerySubmitted=\"SearchBox_QuerySubmitted\"/>\n                        </Grid>\n                        <!-- Search icon for compact mode (NavigationViewItem provides the background/visual states) -->\n                        <Grid x:Name=\"SearchIconContainer\"\n                              Visibility=\"Collapsed\"\n                              Width=\"40\"\n                              Height=\"40\"\n                              HorizontalAlignment=\"Center\"\n                              VerticalAlignment=\"Center\"\n                              IsHitTestVisible=\"False\">\n                            <FontIcon Glyph=\"&#xE721;\" FontSize=\"16\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Margin=\"0\"/>\n                        </Grid>\n                    </Grid>\n                </lib:NavigationViewItem>\n\n                <lib:NavigationViewItem Tag=\"Accounts\" x:Uid=\"/SettingsPage/AccountsItem\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"&#xE910;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n\n                <lib:NavigationViewItem Tag=\"Messaging\" x:Uid=\"/SettingsPage/MessagingItem\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"&#xE70F;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n\n                <lib:NavigationViewItem Tag=\"Notifications\" x:Uid=\"/SettingsPage/NotificationsItem\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"{Binding NotificationIconGlyph}\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n\n                <lib:NavigationViewItem Tag=\"Themes\" x:Uid=\"/SettingsPage/ThemesItem\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"&#xE771;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n\n                <lib:NavigationViewItem Tag=\"Media\" x:Uid=\"/SettingsPage/MediaItem\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"&#xEA69;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n\n                <lib:NavigationViewItem Tag=\"Voice\" x:Uid=\"/SettingsPage/VoiceItem\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"&#xE720;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n\n                <lib:NavigationViewItem Tag=\"Security\" x:Uid=\"/SettingsPage/SecurityItem\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"&#xE72E;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n\n            </lib:NavigationView.MenuItems>\n\n            <lib:NavigationView.FooterMenuItems>\n                <lib:NavigationViewItem Tag=\"About\" x:Uid=\"/SettingsPage/AboutItem\">\n                    <lib:NavigationViewItem.Icon>\n                        <FontIcon Glyph=\"&#xE946;\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" />\n                    </lib:NavigationViewItem.Icon>\n                </lib:NavigationViewItem>\n            </lib:NavigationView.FooterMenuItems>\n            \n            <ScrollViewer Margin=\"20,20,0,0\">\n                <Frame x:Name=\"MainFrame\" Margin=\"0,0,20,12\" />\n            </ScrollViewer>\n        </lib:NavigationView>\n\n\n        <VisualStateManager.VisualStateGroups>\n            <VisualStateGroup x:Name=\"AdaptiveStates\">\n                <VisualState x:Name=\"WideState\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"769\" />\n                    </VisualState.StateTriggers>\n\n                    <VisualState.Setters>\n                        <Setter Target=\"MainBorder.CornerRadius\" Value=\"8,8,0,0\" />\n                    </VisualState.Setters>\n                </VisualState>\n\n                <VisualState x:Name=\"NarrowState\">\n                    <VisualState.StateTriggers>\n                        <AdaptiveTrigger MinWindowWidth=\"0\" />\n                    </VisualState.StateTriggers>\n\n                    <VisualState.Setters>\n                        <Setter Target=\"MainBorder.Margin\" Value=\"0\" />\n                        <Setter Target=\"MainBorder.CornerRadius\" Value=\"0\" />\n                    </VisualState.Setters>\n                </VisualState>\n            </VisualStateGroup>\n        </VisualStateManager.VisualStateGroups>\n    </Border>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/SettingsPage.xaml.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing Unicord.Universal.Services;\nusing Windows.Foundation;\nusing Windows.Foundation.Metadata;\nusing Windows.UI;\nusing Windows.UI.Core;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Media.Animation;\nusing Windows.UI.Xaml.Media.Imaging;\nusing Windows.UI.Xaml.Navigation;\nusing Lib = Microsoft.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Pages.Settings\n{\n    \n    public interface INotifyOnExit\n    {\n        void OnClosing();\n    }\n\n    public sealed partial class SettingsPage : Page, IOverlay\n    {\n        private long _isPaneOpenCallbackToken;\n        private bool _isPaneOpening;\n        private bool _focusSearchOnNextPaneOpened;\n\n        // these should be kept in order as they appear in the UI,\n        // and in sync with Unicord.Universal.Services.SettingsPage\n        private static Dictionary<SettingsPageType, Type> _pages\n            = new Dictionary<SettingsPageType, Type>()\n            {\n                [SettingsPageType.Accounts] = typeof(AccountsSettingsPage),\n                [SettingsPageType.Messaging] = typeof(MessagingSettingsPage),\n                [SettingsPageType.Notifications] = typeof(NotificationsSettingsPage),\n                [SettingsPageType.Themes] = typeof(ThemesSettingsPage),\n                [SettingsPageType.Media] = typeof(MediaSettingsPage),\n                [SettingsPageType.Voice] = typeof(VoiceSettingsPage),\n                [SettingsPageType.Security] = typeof(SecuritySettingsPage),\n                [SettingsPageType.About] = typeof(AboutSettingsPage),\n            };\n\n#if STORE\n        public bool IsDebug => false;\n#else\n        public bool IsDebug => true;\n#endif\n\n        public Size PreferredSize { get; }\n\n        public SettingsPage()\n        {\n            InitializeComponent();\n            SelectNavItem(SettingsPageType.Accounts);\n\n            // Set initial display mode state\n            Loaded += (s, e) =>\n            {\n                if (_isPaneOpenCallbackToken == 0)\n                {\n                    _isPaneOpenCallbackToken = NavView.RegisterPropertyChangedCallback(\n                        Lib.NavigationView.IsPaneOpenProperty,\n                        (_, __) => UpdateSearchDisplayMode());\n                }\n\n                UpdateSearchDisplayMode();\n            };\n        }\n\n        private void SelectNavItem(SettingsPageType pageType)\n        {\n            if (NavView == null)\n                return;\n\n            var tag = pageType.ToString();\n            var item = NavView.MenuItems\n                .Concat(NavView.FooterMenuItems)\n                .OfType<Lib.NavigationViewItem>()\n                .FirstOrDefault(i => string.Equals(i.Tag?.ToString(), tag, StringComparison.OrdinalIgnoreCase));\n\n            if (item != null)\n                NavView.SelectedItem = item;\n        }\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            if (e.Parameter is SettingsPageType t)\n            {\n                SelectNavItem(t);\n            }\n\n            var manager = SystemNavigationManager.GetForCurrentView();\n            manager.BackRequested += OnBackRequested;\n        }\n\n        protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)\n        {\n            var manager = SystemNavigationManager.GetForCurrentView();\n            manager.BackRequested -= OnBackRequested;\n\n            if (_isPaneOpenCallbackToken != 0)\n            {\n                NavView.UnregisterPropertyChangedCallback(Lib.NavigationView.IsPaneOpenProperty, _isPaneOpenCallbackToken);\n                _isPaneOpenCallbackToken = 0;\n            }\n\n            MainFrame.Navigate(typeof(Page));\n        }\n\n        private void OnBackRequested(object sender, BackRequestedEventArgs e)\n        {\n            if (MainFrame.Content is INotifyOnExit notify)\n                notify.OnClosing();\n\n            OverlayService.GetForCurrentView().CloseOverlay();\n        }\n\n        private void Page_Loaded(object sender, RoutedEventArgs e)\n        {\n\n        }\n\n        private void SettingsCloseButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (MainFrame.Content is INotifyOnExit notify)\n                notify.OnClosing();\n\n            OverlayService.GetForCurrentView().CloseOverlay();\n        }\n\n        private void NavView_BackRequested(Lib.NavigationView sender, Lib.NavigationViewBackRequestedEventArgs args)\n        {\n            if (MainFrame.Content is INotifyOnExit notify)\n                notify.OnClosing();\n\n            OverlayService.GetForCurrentView().CloseOverlay();\n        }\n\n        private void NavView_SelectionChanged(Lib.NavigationView sender, Lib.NavigationViewSelectionChangedEventArgs args)\n        {\n            if (args.SelectedItemContainer.Tag is not string str || \n                !Enum.TryParse<SettingsPageType>(str, out var page) || \n                !_pages.TryGetValue(page, out var type))\n                return;\n\n            if (MainFrame.Content is INotifyOnExit notify)\n                notify.OnClosing();\n\n            var transitionInfo = args.RecommendedNavigationTransitionInfo;\n            if (ApiInformation.IsApiContractPresent(\"Windows.Foundation.UniversalApiContract\", 7))\n            {\n                transitionInfo = new SlideNavigationTransitionInfo() { Effect = SlideNavigationTransitionEffect.FromBottom };\n            }\n\n            MainFrame.Navigate(type, transitionInfo);\n        }\n\n        private void NavView_DisplayModeChanged(Lib.NavigationView sender, Lib.NavigationViewDisplayModeChangedEventArgs args)\n        {\n            UpdateSearchDisplayMode();\n        }\n\n        private void NavView_PaneOpening(Lib.NavigationView sender, object args)\n        {\n            // Hide compact UI immediately when opening begins.\n            // Also request focus for the search box once opening completes.\n            if (SearchIconContainer?.Visibility == Visibility.Visible)\n                _focusSearchOnNextPaneOpened = true;\n\n            _isPaneOpening = true;\n            UpdateSearchDisplayMode();\n        }\n\n        private void NavView_PaneOpened(Lib.NavigationView sender, object args)\n        {\n            _isPaneOpening = false;\n            UpdateSearchDisplayMode();\n\n            if (_focusSearchOnNextPaneOpened)\n            {\n                _focusSearchOnNextPaneOpened = false;\n                _ = Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\n                {\n                    SearchBox?.Focus(FocusState.Programmatic);\n                });\n            }\n        }\n\n        private void NavView_PaneClosing(Lib.NavigationView sender, Lib.NavigationViewPaneClosingEventArgs args)\n        {\n            _isPaneOpening = false;\n            UpdateSearchDisplayMode();\n        }\n\n        private void UpdateSearchDisplayMode()\n        {\n            // Icon-only UI when the pane is collapsed via the hamburger.\n            var paneOpen = NavView.IsPaneOpen;\n            var paneOpening = _isPaneOpening && !paneOpen;\n            var showCompact = !paneOpen && !paneOpening;\n\n            var theme = ThemeService.GetForCurrentView().GetTheme();\n\n            UpdateSpecialRowMargins(paneOpen, paneOpening);\n\n            // Suppress NavigationViewItem hover highlight only when the full search box is visible.\n            SetSearchRowHighlightSuppressed(paneOpen);\n\n            if (showCompact)\n            {\n                // Pane closed: show icons only\n                SearchBoxContainer.Visibility = Visibility.Collapsed;\n                SearchIconContainer.Visibility = Visibility.Visible;\n                ProfileDetails.Visibility = Visibility.Collapsed;\n                ProfileItem.Visibility = Visibility.Visible;\n\n                // Top (Sun Valley) Bottom (Fluent/Performance)\n                SearchIconContainer.Margin = theme == AppTheme.SunValley\n                    ? new Thickness(-8, 0, 0, 0)\n                    : new Thickness(-16, 0, 0, 0);\n                \n                Grid.SetColumnSpan(UserProfilePicture, 2);\n                UserProfilePicture.HorizontalAlignment = HorizontalAlignment.Center;\n                UserProfilePicture.Width = 24;\n                UserProfilePicture.Height = 24;\n                UserProfilePicture.Margin = theme == AppTheme.SunValley\n                    ? new Thickness(-8, 8, 0, 8)\n                    : new Thickness(-16, 8, 0, 8);\n            }\n            else if (paneOpening)\n            {\n                // Pane is animating open: hide compact icon immediately so it doesn't linger.\n                // The full search box will appear once the pane is actually open.\n                SearchBoxContainer.Visibility = Visibility.Collapsed;\n                SearchIconContainer.Visibility = Visibility.Collapsed;\n                ProfileDetails.Visibility = Visibility.Collapsed;\n                ProfileItem.Visibility = Visibility.Visible;\n\n                SearchIconContainer.Margin = theme == AppTheme.SunValley\n                    ? new Thickness(0)\n                    : new Thickness(-4, 0, 0, 0);\n                \n                Grid.SetColumnSpan(UserProfilePicture, 2);\n                UserProfilePicture.HorizontalAlignment = HorizontalAlignment.Center;\n                UserProfilePicture.Width = 24;\n                UserProfilePicture.Height = 24;\n                UserProfilePicture.Margin = theme == AppTheme.SunValley\n                    ? new Thickness(-3, 8, 0, 8)\n                    : new Thickness(-4, 8, 0, 8);\n            }\n            else\n            {\n                // Pane open: show full UI\n                SearchBoxContainer.Visibility = Visibility.Visible;\n                SearchIconContainer.Visibility = Visibility.Collapsed;\n                ProfileDetails.Visibility = Visibility.Visible;\n                ProfileItem.Visibility = Visibility.Visible;\n\n                SearchIconContainer.Margin = new Thickness(0);\n                \n                // Left align avatar in expanded mode and restore normal size\n                Grid.SetColumnSpan(UserProfilePicture, 1);\n                UserProfilePicture.HorizontalAlignment = HorizontalAlignment.Left;\n                UserProfilePicture.Width = 48;\n                UserProfilePicture.Height = 48;\n                UserProfilePicture.Margin = new Thickness(5, 8, 10, 8);\n            }\n        }\n\n        private void UpdateSpecialRowMargins(bool paneOpen, bool paneOpening)\n        {\n            if (SearchBoxContainer == null || ProfileContainer == null)\n                return;\n\n            // Never apply insets in compact/pane-opening states; it would offset the centered icons.\n            if (!paneOpen || paneOpening)\n            {\n                SearchBoxContainer.Margin = new Thickness(0);\n                ProfileContainer.Margin = new Thickness(0);\n                return;\n            }\n\n            var theme = ThemeService.GetForCurrentView().GetTheme();\n            switch (theme)\n            {\n                case AppTheme.SunValley:\n                    // SunValley\n                    SearchBoxContainer.Margin = new Thickness(0, 0, -6.5, 0);\n                    ProfileContainer.Margin = new Thickness(0);\n                    break;\n\n                case AppTheme.Fluent:\n                case AppTheme.Performance:\n                default:\n                    // Fluent/Performance\n                    SearchBoxContainer.Margin = new Thickness(-5, 0, 11, 0);\n                    ProfileContainer.Margin = new Thickness(-5, 0, 11, 0);\n                    break;\n            }\n        }\n\n        private void SetSearchRowHighlightSuppressed(bool suppress)\n        {\n            if (SearchItem == null)\n                return;\n\n            var keys = new[]\n            {\n                \"NavigationViewItemBackgroundPointerOver\",\n                \"NavigationViewItemBackgroundPressed\",\n                \"NavigationViewItemBackgroundCheckedPointerOver\",\n                \"NavigationViewItemBackgroundCheckedPressed\",\n                \"NavigationViewItemBackgroundSelectedPointerOver\",\n                \"NavigationViewItemBackgroundSelectedPressed\",\n            };\n\n            if (suppress)\n            {\n                var transparent = new SolidColorBrush(Colors.Transparent);\n                foreach (var key in keys)\n                    SearchItem.Resources[key] = transparent;\n            }\n            else\n            {\n                foreach (var key in keys)\n                {\n                    if (SearchItem.Resources.ContainsKey(key))\n                        SearchItem.Resources.Remove(key);\n                }\n            }\n        }\n\n        private void ProfileItem_Tapped(object sender, TappedRoutedEventArgs e)\n        {\n            if (SearchBox != null)\n            {\n                SearchBox.IsSuggestionListOpen = false;\n            }\n\n            if (sender is Control c)\n                c.Focus(FocusState.Pointer);\n            else\n                NavView?.Focus(FocusState.Pointer);\n\n            e.Handled = true;\n        }\n\n        private void SearchItem_Tapped(object sender, TappedRoutedEventArgs e)\n        {\n            // Only meaningful when pane is closed (compact/icon mode).\n            if (NavView?.IsPaneOpen == true || SearchIconContainer?.Visibility != Visibility.Visible)\n                return;\n\n            // Immediately show full UI and focus search box\n            SearchBoxContainer.Visibility = Visibility.Visible;\n            SearchIconContainer.Visibility = Visibility.Collapsed;\n            ProfileDetails.Visibility = Visibility.Visible;\n            \n            // Suppress NavigationViewItem hover highlight immediately\n            SetSearchRowHighlightSuppressed(true);\n            \n            // Force clear any pressed/selected visual state on SearchItem\n            SearchItem.IsEnabled = false;\n            SearchItem.IsEnabled = true;\n            \n            SearchBox.Focus(FocusState.Programmatic);\n            \n            NavView.IsPaneOpen = true;\n            e.Handled = true;\n        }\n\n        private void SearchBox_TextChanged(AutoSuggestBox sender, AutoSuggestBoxTextChangedEventArgs args)\n        {\n            if (args.Reason == AutoSuggestionBoxTextChangeReason.UserInput)\n            {\n                var searchTerm = sender.Text.ToLower();\n                if (string.IsNullOrWhiteSpace(searchTerm))\n                {\n                    sender.ItemsSource = null;\n                    return;\n                }\n\n                // Search through navigation items (skip items without tags)\n                var results = new List<Lib.NavigationViewItem>();\n                foreach (var item in NavView.MenuItems.Concat(NavView.FooterMenuItems).OfType<Lib.NavigationViewItem>())\n                {\n                    if (item.Tag == null) continue; // Skip profile/search items\n                    \n                    var content = item.Content?.ToString()?.ToLower() ?? \"\";\n                    if (content.Contains(searchTerm))\n                    {\n                        results.Add(item);\n                    }\n                }\n\n                sender.ItemsSource = results.Select(r => r.Content).ToList();\n            }\n        }\n\n        private void SearchBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)\n        {\n            if (args.ChosenSuggestion != null || !string.IsNullOrWhiteSpace(args.QueryText))\n            {\n                var searchText = (args.ChosenSuggestion?.ToString() ?? args.QueryText).ToLower();\n                var item = NavView.MenuItems.Concat(NavView.FooterMenuItems)\n                    .OfType<Lib.NavigationViewItem>()\n                    .Where(i => i.Tag != null) // Skip profile/search items\n                    .FirstOrDefault(i => i.Content?.ToString()?.ToLower() == searchText);\n\n                if (item != null)\n                {\n                    NavView.SelectedItem = item;\n                }\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/ThemesSettingsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Settings.ThemesSettingsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Settings\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:not1809=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,7)\"\n    xmlns:w1809=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,7)\"\n    xmlns:w1709=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,5)\"\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:universal=\"using:Unicord.Universal\"\n    xmlns:models=\"using:Unicord.Universal.Models\"\n    xmlns:settings=\"using:SettingsControl\"\n    mc:Ignorable=\"d\" x:DefaultBindMode=\"TwoWay\" d:DesignWidth=\"450\">\n    <Page.DataContext>\n        <models:ThemesSettingsModel/>\n    </Page.DataContext>\n\n    <StackPanel>\n\n        <!--<Border Padding=\"8\" \n                Margin=\"0,0,0,8\"\n                BorderBrush=\"{ThemeResource SystemFillColorCautionBackground}\"\n                BorderThickness=\"1\"\n                CornerRadius=\"4\"\n                Visibility=\"{Binding IsDirty, Converter={StaticResource BoolVisibilityConverter}}\">\n            <Border.Background>\n                <SolidColorBrush Color=\"{ThemeResource SystemFillColorCautionBackground}\" Opacity=\"0.66\"/>\n            </Border.Background>\n            <StackPanel Orientation=\"Horizontal\">\n                <TextBlock FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\n                           Text=\"&#xF167;\"\n                           Foreground=\"{ThemeResource SystemFillColorCautionBrush}\"\n                           FontSize=\"16\"\n                           VerticalAlignment=\"Center\"\n                           Margin=\"4,4,12,4\"/>\n                <TextBlock x:Uid=\"/ThemesSettingsPage/RelaunchRequired\"\n                           VerticalAlignment=\"Center\"/>\n            </StackPanel>\n        </Border>-->\n\n        <settings:SettingsBlockControl x:Uid=\"/ThemesSettingsPage/ColourSchemeBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE771;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ComboBox x:Name=\"ColorSchemeComboBox\" SelectedIndex=\"{Binding ColourScheme, Mode=TwoWay}\" MinWidth=\"200\" SelectionChanged=\"ColorSchemeComboBox_SelectionChanged\">\n                <ComboBoxItem x:Uid=\"/ThemesSettingsPage/ColourSchemeDefault\" />\n                <ComboBoxItem x:Uid=\"/ThemesSettingsPage/ColourSchemeLight\" />\n                <ComboBoxItem x:Uid=\"/ThemesSettingsPage/ColourSchemeDark\" />\n            </ComboBox>\n        </settings:SettingsBlockControl>\n\n        <settings:SettingsBlockControl x:Uid=\"/ThemesSettingsPage/AppThemeBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE790;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ComboBox x:Name=\"ApplicationThemeComboBox\" SelectedIndex=\"{Binding ApplicationTheme, Mode=TwoWay}\" MinWidth=\"200\" SelectionChanged=\"ApplicationThemeComboBox_SelectionChanged\">\n                <ComboBoxItem x:Uid=\"/ThemesSettingsPage/AppThemePerformance\" />\n                <ComboBoxItem x:Uid=\"/ThemesSettingsPage/AppThemeFluent\" />\n                <ComboBoxItem x:Uid=\"/ThemesSettingsPage/AppThemeSunValley\" IsEnabled=\"{Binding SunValleyThemeSupported}\" />\n            </ComboBox>\n        </settings:SettingsBlockControl>\n    </StackPanel>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/ThemesSettingsPage.xaml.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Unicord.Universal.Models;\nusing Unicord.Universal.Utilities;\nusing Windows.ApplicationModel.Core;\nusing Windows.ApplicationModel.Resources;\nusing Windows.Foundation.Metadata;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace Unicord.Universal.Pages.Settings\n{\n    public sealed partial class ThemesSettingsPage : Page, INotifyOnExit\n    {\n        private string _initialTheme;\n        private int _initialColour;\n        private bool _loaded;\n        private bool _dragging;\n        private bool _restartPromptShown;\n\n        public ThemesSettingsPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override async void OnNavigatingFrom(NavigatingCancelEventArgs e)\n        {\n            await OnClosingAsync();\n        }\n\n        private async void ColorSchemeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n        {\n            var comboBox = (ComboBox)sender;\n            var previousIndex = e.RemovedItems.Count > 0 ? ((ComboBox)sender).Items.IndexOf(e.RemovedItems[0]) : comboBox.SelectedIndex;\n            \n            ((ThemesSettingsModel)DataContext).ColourScheme = comboBox.SelectedIndex;\n            \n            if (!await OnClosingAsync())\n            {\n                // User clicked Cancel, revert the selection\n                comboBox.SelectionChanged -= ColorSchemeComboBox_SelectionChanged;\n                comboBox.SelectedIndex = previousIndex;\n                ((ThemesSettingsModel)DataContext).ColourScheme = previousIndex;\n                comboBox.SelectionChanged += ColorSchemeComboBox_SelectionChanged;\n            }\n        }\n\n        private async void ApplicationThemeComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\n        {\n            var comboBox = (ComboBox)sender;\n            var previousIndex = e.RemovedItems.Count > 0 ? ((ComboBox)sender).Items.IndexOf(e.RemovedItems[0]) : comboBox.SelectedIndex;\n            \n            ((ThemesSettingsModel)DataContext).ApplicationTheme = comboBox.SelectedIndex;\n            \n            if (!await OnClosingAsync())\n            {\n                // User clicked Cancel, revert the selection\n                comboBox.SelectionChanged -= ApplicationThemeComboBox_SelectionChanged;\n                comboBox.SelectedIndex = previousIndex;\n                ((ThemesSettingsModel)DataContext).ApplicationTheme = previousIndex;\n                comboBox.SelectionChanged += ApplicationThemeComboBox_SelectionChanged;\n            }\n        }\n\n        public async Task<bool> OnClosingAsync()\n        {\n            if (!((ThemesSettingsModel)DataContext).IsDirty || _restartPromptShown)\n                return true;\n\n            if (ApiInformation.IsMethodPresent(\"Windows.ApplicationModel.Core.CoreApplication\", \"RequestRestartAsync\"))\n            {\n                _restartPromptShown = true;\n                var resources = ResourceLoader.GetForCurrentView(\"ThemesSettingsPage\");\n                if (await UIUtilities.ShowYesNoDialogAsync(resources.GetString(\"ThemeChangedTitle\"), resources.GetString(\"ThemeChangedMessage\")))\n                {\n                    await CoreApplication.RequestRestartAsync(\"\");\n                    return true;\n                }\n                else\n                {\n                    _restartPromptShown = false;\n                    return false;\n                }\n            }\n            return true;\n        }\n\n        public async void OnClosing()\n        {\n            await OnClosingAsync();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/VoiceSettingsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Settings.VoiceSettingsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Settings\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:settings=\"using:SettingsControl\"\n    mc:Ignorable=\"d\" Loaded=\"Page_Loaded\"\n    d:DesignWidth=\"450\">\n    <Page.Resources>\n        <DataTemplate x:Key=\"DeviceTemplate\">\n            <TextBlock Text=\"{Binding Name, FallbackValue=Default, TargetNullValue=Default}\"/>\n        </DataTemplate>\n    </Page.Resources>\n\n    <StackPanel>\n        <TextBlock x:Uid=\"/VoiceSettingsPage/AudioDevicesHeader\" Style=\"{ThemeResource BaseTextBlockStyle}\" Text=\"Audio Devices\" Margin=\"4,0,0,16\"/>\n\n        <settings:SettingsBlockControl x:Uid=\"/VoiceSettingsPage/InputDeviceBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE720;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ComboBox ItemTemplate=\"{StaticResource DeviceTemplate}\" \n                      ItemsSource=\"{Binding AvailableInputDevices}\"\n                      SelectedItem=\"{Binding InputDevice, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                      HorizontalAlignment=\"Stretch\"\n                      MinWidth=\"200\"/>\n        </settings:SettingsBlockControl>\n\n        <settings:SettingsBlockControl x:Uid=\"/VoiceSettingsPage/OutputDeviceBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE7F5;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ComboBox ItemTemplate=\"{StaticResource DeviceTemplate}\" \n                      ItemsSource=\"{Binding AvailableOutputDevices}\" \n                      SelectedItem=\"{Binding OutputDevice, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}\" \n                      HorizontalAlignment=\"Stretch\"\n                      MinWidth=\"200\"/>\n        </settings:SettingsBlockControl>\n\n        <TextBlock x:Uid=\"/VoiceSettingsPage/AudioProcessingHeader\" Text=\"Audio Processing\" Style=\"{ThemeResource BaseTextBlockStyle}\" Margin=\"4,16\" />\n\n        <settings:SettingsBlockControl x:Uid=\"/VoiceSettingsPage/NoiseSuppressionBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xF61F;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ComboBox x:Name=\"NoiseSuppression\"\n                      SelectedIndex=\"{Binding SuppressionLevel, Mode=TwoWay}\"\n                      HorizontalAlignment=\"Stretch\"\n                      MinWidth=\"200\">\n                <ComboBoxItem x:Uid=\"/VoiceSettingsPage/NoiseSuppressionDisabled\" Content=\"Disabled\"/>\n                <ComboBoxItem x:Uid=\"/VoiceSettingsPage/NoiseSuppressionLow\" Content=\"Low\"/>\n                <ComboBoxItem x:Uid=\"/VoiceSettingsPage/NoiseSuppressionMedium\" Content=\"Medium\"/>\n                <ComboBoxItem x:Uid=\"/VoiceSettingsPage/NoiseSuppressionHigh\" Content=\"High\"/>\n            </ComboBox>\n        </settings:SettingsBlockControl>\n\n        <settings:SettingsBlockControl x:Uid=\"/VoiceSettingsPage/VoiceActivityBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xF12E;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ToggleSwitch Grid.Column=\"1\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding VoiceActivity, Mode=TwoWay}\" />\n        </settings:SettingsBlockControl>\n\n        <settings:SettingsBlockControl x:Uid=\"/VoiceSettingsPage/AutomaticGainControlBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xE767;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ToggleSwitch Grid.Column=\"1\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding AutomaticGainControl, Mode=TwoWay}\" />\n        </settings:SettingsBlockControl>\n\n        <settings:SettingsBlockControl x:Uid=\"/VoiceSettingsPage/EchoCancellationBlock\">\n            <settings:SettingsBlockControl.Icon>\n                <FontIcon FontFamily=\"{ThemeResource SymbolThemeFontFamily}\" Glyph=\"&#xEC72;\"/>\n            </settings:SettingsBlockControl.Icon>\n            <ToggleSwitch Grid.Column=\"1\" Style=\"{ThemeResource NoTextToggleSwitchStyle}\" IsOn=\"{Binding EchoCancellation, Mode=TwoWay}\" />\n        </settings:SettingsBlockControl>\n        \n    </StackPanel>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Settings/VoiceSettingsPage.xaml.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Unicord.Universal.Extensions;\nusing Unicord.Universal.Models;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\n// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace Unicord.Universal.Pages.Settings\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class VoiceSettingsPage : Page\n    {\n        private VoiceSettingsModel Model { get; set; }\n\n        public VoiceSettingsPage()\n        {\n            Model = new VoiceSettingsModel();\n            Model.PropertyChanged += Model_PropertyChanged;\n\n            InitializeComponent();\n        }\n\n        private async void Model_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)\n        {\n            await UpdateVoiceSettings();\n        }\n\n        private async void Page_Loaded(object sender, RoutedEventArgs e)\n        {\n            await Model.LoadAsync();\n            DataContext = Model;\n            Model.InvokePropertyChanged(\"\");\n        }\n\n        protected override async void OnNavigatedFrom(NavigationEventArgs e)\n        {\n            await Model.SaveAsync();\n            await UpdateVoiceSettings();\n        }\n\n        private async Task UpdateVoiceSettings()\n        {\n            try\n            {\n                if (this.FindParent<DiscordPage>()?.DataContext is DiscordPageViewModel model)\n                {\n                    var inputInfo = Model.InputDevice;\n                    var outputInfo = Model.OutputDevice;\n                    //await (model?.VoiceModel?.UpdatePreferredAudioDevicesAsync(outputInfo?.Id, inputInfo?.Id) ?? Task.CompletedTask);\n                }\n            }\n            catch { }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/SharePage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.SharePage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:w1809=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)\"\n    mc:Ignorable=\"d\" Loaded=\"Page_Loaded\"\n    Background=\"{ThemeResource BackgroundTertiaryBrush}\">\n    <Page.Resources>\n        <CollectionViewSource x:Key=\"channelsListSource\" x:Name=\"channelsListSource\" IsSourceGrouped=\"True\" />\n    </Page.Resources>\n\n    <Grid>\n        <Grid Margin=\"20\">\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n\n            <TextBlock Margin=\"0\" Style=\"{ThemeResource TitleTextBlockStyle}\">\n                Share to <Run x:Name=\"target\">Discord</Run>\n            </TextBlock>\n\n            <Grid Grid.Row=\"1\" Margin=\"0,10\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n\n                <Image x:Name=\"thumbnailImage\" Width=\"100\" Height=\"100\" Margin=\"0,0,20,0\"/>\n                <TextBox x:Name=\"captionText\" PlaceholderText=\"Say something... (optional)\" Padding=\"2\" MaxLength=\"2000\" VerticalAlignment=\"Top\" Style=\"{ThemeResource MessageTextBoxStyle}\" Grid.Column=\"1\" MaxHeight=\"150\" AcceptsReturn=\"True\" TextWrapping=\"Wrap\" />\n            </Grid>\n\n            <Grid x:Name=\"destinationGrid\" Grid.Row=\"2\">\n                <Grid.RowDefinitions>\n                    <RowDefinition Height=\"Auto\"/>\n                    <RowDefinition Height=\"Auto\"/>\n                </Grid.RowDefinitions>\n                <ComboBox x:Name=\"guildBox\" Header=\"Choose a server...\" SelectionChanged=\"guildBox_SelectionChanged\" HorizontalAlignment=\"Stretch\" Margin=\"0\">\n                    <ComboBox.ItemTemplate>\n                        <DataTemplate>\n                            <Grid>\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n                                <lib:PersonPicture DisplayName=\"{Binding Name}\" Width=\"28\" Height=\"28\" ProfilePicture=\"{Binding IconUrl}\" Margin=\"0,0,10,0\"/>\n                                <TextBlock Grid.Column=\"1\" Text=\"{Binding Name}\" VerticalAlignment=\"Center\"/>\n                            </Grid>\n                        </DataTemplate>\n                    </ComboBox.ItemTemplate>\n                </ComboBox>\n\n                <ComboBox x:Name=\"channelsBox\"\n                      Margin=\"0,10\"\n                      Grid.Row=\"1\" \n                      HorizontalAlignment=\"Stretch\" \n                      Header=\"And a channel...\"\n                      ItemsSource=\"{Binding Source={StaticResource channelsListSource}}\"\n                      Visibility=\"{Binding SelectedItem, Converter={StaticResource HideOnNullConverter}, ElementName=guildBox}\"/>\n            </Grid>\n\n            <Grid Grid.Row=\"3\" Visibility=\"{Binding SelectedItem, Converter={StaticResource HideOnNullConverter}, ElementName=channelsBox}\" Margin=\"0,10\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                </Grid.ColumnDefinitions>\n\n                <Button x:Name=\"cancelButton\" Content=\"Cancel\" HorizontalAlignment=\"Stretch\" Click=\"cancelButton_Click\" Margin=\"0,0,5,0\" />\n                <Button x:Name=\"sendButton\" Grid.Column=\"1\" HorizontalAlignment=\"Stretch\" Style=\"{ThemeResource AccentButtonStyle}\" Content=\"Send\" Click=\"sendButton_Click\" Margin=\"5,0,0,0\" />\n            </Grid>\n        </Grid>\n        <Grid x:Name=\"overlay\" Background=\"{ThemeResource OverlayBackdrop}\" Visibility=\"Collapsed\">\n            <StackPanel HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\">\n                <controls:RadialProgressBar x:Name=\"ring\" Width=\"96\" Height=\"96\" Value=\"0\" Maximum=\"100\" HorizontalAlignment=\"Center\" />\n                <TextBlock x:Name=\"subtext\" Text=\"Uploading\" Opacity=\"0\" Style=\"{StaticResource TitleTextBlockStyle}\" Margin=\"12\" HorizontalAlignment=\"Center\">\n                    <w1809:TextBlock.OpacityTransition>\n                        <w1809:ScalarTransition Duration=\"00:00:00.50\"/>\n                    </w1809:TextBlock.OpacityTransition>\n                </TextBlock>\n            </StackPanel>\n        </Grid>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/SharePage.xaml.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.Windows;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Services;\r\nusing Unicord.Universal.Utilities;\r\nusing Windows.ApplicationModel.DataTransfer;\r\nusing Windows.ApplicationModel.DataTransfer.ShareTarget;\r\nusing Windows.Storage;\r\nusing Windows.Storage.FileProperties;\r\nusing Windows.Storage.Streams;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Media.Imaging;\r\nusing Windows.UI.Xaml.Navigation;\r\n\r\nnamespace Unicord.Universal.Pages\r\n{\r\n    public sealed partial class SharePage : Page\r\n    {\r\n        private ShareOperation _shareOperation;\r\n        private StorageFile _file;\r\n\r\n        public SharePage()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n\r\n        protected override void OnNavigatedTo(NavigationEventArgs e)\r\n        {\r\n            if (e.Parameter is ShareOperation op)\r\n            {\r\n                _shareOperation = op;\r\n            }\r\n        }\r\n\r\n        private async void Page_Loaded(object sender, RoutedEventArgs e)\r\n        {\r\n            try\r\n            {\r\n                // BUGBUG: this is messy\r\n                var items = new List<object> { new { Name = \"Direct Messages\" } };\r\n                items.AddRange(DiscordManager.Discord.Guilds.Values.OrderBy(g => g.Name));\r\n                guildBox.ItemsSource = items;\r\n\r\n                channelsBox.ItemTemplateSelector = new ChannelTemplateSelector()\r\n                {\r\n                    ServerChannelTemplate = (DataTemplate)App.Current.Resources[\"NoIndicatorChannelListTemplate\"],\r\n                    DirectMessageTemplate = (DataTemplate)App.Current.Resources[\"NoIndicatorDMChannelTemplate\"]\r\n                };\r\n\r\n                _shareOperation.ReportStarted();\r\n\r\n                var data = _shareOperation.Data;\r\n                if (data.AvailableFormats.Contains(StandardDataFormats.StorageItems))\r\n                {\r\n                    _file = (await data.GetStorageItemsAsync()).FirstOrDefault() as StorageFile;\r\n\r\n                    var img = new BitmapImage();\r\n                    thumbnailImage.Source = img;\r\n                    await img.SetSourceAsync(await _file.GetThumbnailAsync(ThumbnailMode.SingleItem));\r\n\r\n                    return;\r\n                }\r\n                else if (data.AvailableFormats.Contains(StandardDataFormats.Bitmap))\r\n                {\r\n                    // do shit\r\n\r\n                    _file = await Tools.GetImageFileFromDataPackage(data);\r\n\r\n                    var img = new BitmapImage();\r\n                    thumbnailImage.Source = img;\r\n                    await img.SetSourceAsync(await _file.GetThumbnailAsync(ThumbnailMode.PicturesView));\r\n\r\n                    return;\r\n                }\r\n                else\r\n                {\r\n                    thumbnailImage.Visibility = Visibility.Collapsed;\r\n                    captionText.PlaceholderText = \"Type a message!\";\r\n                }\r\n\r\n                if (data.AvailableFormats.Contains(StandardDataFormats.Text))\r\n                {\r\n                    var text = await data.GetTextAsync();\r\n                    captionText.Text += text;\r\n                }\r\n\r\n                if (data.AvailableFormats.Contains(StandardDataFormats.WebLink))\r\n                {\r\n                    var text = await data.GetWebLinkAsync();\r\n                    captionText.Text += text;\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                _shareOperation.ReportDataRetrieved();\r\n                this.FindParent<MainPage>().HideConnectingOverlay();\r\n\r\n                if (_file != null)\r\n                {\r\n                    var maxSize = (ulong)(DiscordManager.Discord.CurrentUser.UploadLimit());\r\n                    var props = await _file.GetBasicPropertiesAsync();\r\n                    if (props.Size >= maxSize)\r\n                    {\r\n                        await UIUtilities.ShowErrorDialogAsync(\"This file is too big!\", $\"We're gonna need something under {Tools.ToFileSizeString(maxSize)} please!\");\r\n                        Window.Current.Close();\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        private void guildBox_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n        {\r\n            if (guildBox.SelectedIndex == 0)\r\n            {\r\n                channelsListSource.IsSourceGrouped = false;\r\n                channelsListSource.Source = DiscordManager.Discord.PrivateChannels.Values\r\n                    .OrderBy(c => c.Name ?? c.Recipients.FirstOrDefault()?.Username)\r\n                    .OrderByDescending(m => m.ReadState?.LastMessageId ?? 0);\r\n            }\r\n            else\r\n            {\r\n                var guild = guildBox.SelectedItem as DiscordGuild;\r\n                var user = guild.CurrentMember;\r\n                channelsListSource.Source = guild.Channels.Values\r\n                    .Where(c => c.PermissionsFor(user).HasFlag(Permissions.SendMessages))\r\n                    .OrderBy(c => c.Position);\r\n            }\r\n        }\r\n\r\n        private async void sendButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            try\r\n            {\r\n                if (channelsBox.SelectedItem is DiscordChannel channel)\r\n                {\r\n                    if (_file != null)\r\n                    {\r\n                        overlay.Visibility = Visibility.Visible;\r\n                        ring.Value = 0;\r\n                        subtext.Opacity = 1;\r\n\r\n                        var progress = new Progress<double?>(p => ring.Value = p ?? 0d);\r\n                        var stream = await _file.OpenReadAsync();\r\n                        var dictionary = new Dictionary<string, IInputStream>() { [_file.Name] = stream };\r\n                        await channel.SendFilesWithProgressAsync(Tools.HttpClient, captionText.Text, null, null, dictionary, progress);\r\n                    }\r\n                    else if (!string.IsNullOrWhiteSpace(captionText.Text))\r\n                    {\r\n                        await channel.SendMessageAsync(captionText.Text);\r\n                    }\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Logger.LogError(ex);\r\n                await UIUtilities.ShowErrorDialogAsync(\"Sending failed!\", ex.Message);\r\n                _shareOperation.ReportError(ex.Message);\r\n                return;\r\n            }\r\n\r\n            _shareOperation.ReportCompleted();\r\n            //_shareOperation.DismissUI();\r\n        }\r\n\r\n        private void cancelButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            Window.Current.Close();\r\n        }\r\n    }\r\n\r\n    public class  ChannelTemplateSelector : DataTemplateSelector\r\n    {\r\n        public DataTemplate DirectMessageTemplate { get; set; }\r\n        public DataTemplate ServerChannelTemplate { get; set; }\r\n\r\n        protected override DataTemplate SelectTemplateCore(object item)\r\n        {\r\n            if (item is DiscordDmChannel)\r\n            {\r\n                return DirectMessageTemplate;\r\n            }\r\n\r\n            return ServerChannelTemplate;\r\n        }\r\n\r\n        protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)\r\n        {\r\n            return SelectTemplateCore(item);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/AgeGatePage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Subpages.AgeGatePage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Subpages\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n\n    <Grid>\n        <StackPanel\n                MaxWidth=\"450\"\n                Margin=\"20\"\n                HorizontalAlignment=\"Center\"\n                VerticalAlignment=\"Center\">\n            <TextBlock\n                    FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\n                    FontSize=\"120\"\n                    Text=\"&#xE7BA;\" />\n            <TextBlock x:Uid=\"/AgeGatePage/ChannelWarningHeader\" Style=\"{ThemeResource SubheaderTextBlockStyle}\"/>\n            <TextBlock x:Uid=\"/AgeGatePage/ChannelWarningSubheader\" TextWrapping=\"Wrap\"/>\n\n            <Grid Margin=\"0,8,0,0\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"*\" />\n                    <ColumnDefinition Width=\"*\" />\n                </Grid.ColumnDefinitions>\n                <Button x:Uid=\"/AgeGatePage/BackButton\" \n                        HorizontalAlignment=\"Stretch\"\n                        Click=\"BackButton_Click\">\n                    <Button.Resources>\n                        <CornerRadius x:Key=\"ControlCornerRadius\">2,0,0,2</CornerRadius>\n                    </Button.Resources>\n                </Button>\n                <Button x:Uid=\"/AgeGatePage/ContinueButton\" \n                        Grid.Column=\"1\"\n                        HorizontalAlignment=\"Stretch\"\n                        Click=\"ContinueButton_Click\"\n                        Style=\"{ThemeResource AccentButtonStyle}\">\n                    <Button.Resources>\n                        <CornerRadius x:Key=\"ControlCornerRadius\">0,2,2,0</CornerRadius>\n                    </Button.Resources>\n                </Button>\n            </Grid>\n\n            <CheckBox x:Uid=\"/AgeGatePage/DontAskAgain\" \n                    x:Name=\"notAgain\"\n                    Margin=\"0,8\"\n                    Content=\"Don't ask me again!\" />\n        </StackPanel>\n    </Grid>\n</Page>"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/AgeGatePage.xaml.cs",
    "content": "﻿using DSharpPlus.Entities;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Media.Animation;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace Unicord.Universal.Pages.Subpages\n{\n    public sealed partial class AgeGatePage : Page\n    {\n        private DiscordChannel _channel;\n\n        public AgeGatePage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            if (e.Parameter is DiscordChannel c)\n            {\n                _channel = c;\n            }\n        }\n\n        private void BackButton_Click(object sender, RoutedEventArgs e)\n        {\n            if (Frame.CanGoBack)\n            {\n                Frame.GoBack();\n            }\n        }\n\n        private void ContinueButton_Click(object sender, RoutedEventArgs e)\n        {\n            App.RoamingSettings.Save($\"NSFW_{_channel.Id}\", true);\n\n            if (notAgain.IsChecked == true)\n            {\n                App.RoamingSettings.Save(\"NSFW_All\", true);\n            }\n\n            Frame.Navigate(typeof(ChannelPage), _channel, new DrillInNavigationTransitionInfo());\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/DMChannelsPage.xaml",
    "content": "﻿<Page\r\n    x:Name=\"Self\"\r\n    x:Uid=\"/DMChannelsPage/DirectMessageChannels\"\r\n    x:Class=\"Unicord.Universal.Pages.Subpages.DMChannelsPage\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n    xmlns:discord=\"using:DSharpPlus.Entities\"\r\n    xmlns:local=\"using:Unicord.Universal.Pages.Subpages\"\r\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n    xmlns:media=\"using:Microsoft.UI.Xaml.Controls\"\r\n    xmlns:models=\"using:Unicord.Universal.Models\" \r\n    xmlns:controls=\"using:Unicord.Universal.Controls\" \r\n    xmlns:converters=\"using:Unicord.Universal.Converters\"\r\n    NavigationCacheMode=\"Required\"\r\n    mc:Ignorable=\"d\">\r\n\r\n    <Page.Resources>\r\n        <converters:ChannelTypeTemplateSelector x:Key=\"ChannelTemplateSelector\"\r\n                                                DMChannelTemplate=\"{StaticResource DirectMessageChannelListContentTemplate}\"\r\n                                                GroupChannelTemplate=\"{StaticResource GroupChannelListContentTemplate}\" />\r\n    </Page.Resources>\r\n\r\n    <Page.DataContext>\r\n        <models:DMChannelsViewModel />\r\n    </Page.DataContext>\r\n\r\n    <Grid>\r\n        <Grid.RowDefinitions>\r\n            <RowDefinition Height=\"Auto\"/>\r\n            <RowDefinition Height=\"Auto\"/>\r\n            <RowDefinition Height=\"*\"/>\r\n        </Grid.RowDefinitions>\r\n\r\n        <Grid Height=\"42\">\r\n            <TextBlock\r\n                Margin=\"16,0,16,0\"\r\n                VerticalAlignment=\"Center\"\r\n                Style=\"{ThemeResource SubtitleTextBlockStyle}\"\r\n                FontFamily=\"Segoe UI Variable Display\"\r\n                TextTrimming=\"CharacterEllipsis\"\r\n                TextWrapping=\"NoWrap\"\r\n                Text=\"{Binding Tag, ElementName=Self}\"/>\r\n        </Grid>\r\n\r\n        <controls:SidebarSearchBox Grid.Row=\"1\" />\r\n\r\n        <ListView\r\n            x:Name=\"dmsList\"\r\n            Grid.Row=\"2\"\r\n            ItemsSource=\"{Binding DMChannels}\"\r\n            ItemTemplateSelector=\"{StaticResource ChannelTemplateSelector}\"\r\n            SelectedIndex=\"{Binding SelectedIndex, Mode=TwoWay}\"\r\n            SelectionChanged=\"dmsList_SelectionChanged\"\r\n            SingleSelectionFollowsFocus=\"False\"\r\n            ShowsScrollingPlaceholders=\"True\"\r\n            Padding=\"0,0,0,68\">\r\n            <ListView.ItemsPanel>\r\n                <ItemsPanelTemplate>\r\n                    <ItemsStackPanel ItemsUpdatingScrollMode=\"KeepItemsInView\" />\r\n                </ItemsPanelTemplate>\r\n            </ListView.ItemsPanel>\r\n            <ListView.ItemContainerStyle>\r\n                <Style TargetType=\"ListViewItem\" BasedOn=\"{StaticResource UnicordListViewItemStyle}\">\r\n                    <Style.Setters>\r\n                        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\r\n                        <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\r\n                        <Setter Property=\"Padding\" Value=\"12,0\" />\r\n                    </Style.Setters>\r\n                </Style>\r\n            </ListView.ItemContainerStyle>\r\n        </ListView>\r\n    </Grid>\r\n</Page>"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/DMChannelsPage.xaml.cs",
    "content": "﻿using System.Linq;\r\nusing DSharpPlus.Entities;\r\nusing Unicord.Universal.Models;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Unicord.Universal.Services;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Navigation;\r\n\r\nnamespace Unicord.Universal.Pages.Subpages\r\n{\r\n    public sealed partial class DMChannelsPage : Page\r\n    {\r\n        private DMChannelsViewModel _model;\r\n\r\n        public DMChannelsPage()\r\n        {\r\n            InitializeComponent();\r\n            _model = DataContext as DMChannelsViewModel;\r\n        }\r\n\r\n        protected override void OnNavigatedTo(NavigationEventArgs e)\r\n        {\r\n            _model.UpdatingIndex = true;\r\n\r\n            if (e.Parameter is DiscordDmChannel channel)\r\n            {\r\n                var model = _model.DMChannels.FirstOrDefault(m => m.Channel == channel);\r\n                if (model is not null)\r\n                    _model.SelectedIndex = _model.DMChannels.IndexOf(model);\r\n            }\r\n            else\r\n            {\r\n                _model.SelectedIndex = -1;\r\n            }\r\n\r\n            _model.UpdatingIndex = false;\r\n        }\r\n\r\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\r\n        {\r\n            _model.SelectedIndex = -1;\r\n        }\r\n\r\n        private async void dmsList_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n        {\r\n            var dataContext = DataContext as DMChannelsViewModel;\r\n            if (dataContext.UpdatingIndex)\r\n                return;\r\n\r\n            var channel = e.AddedItems.FirstOrDefault() as ChannelViewModel;\r\n            if (channel != null)\r\n            {\r\n                var service = DiscordNavigationService.GetForCurrentView();\r\n                await service.NavigateAsync(channel.Channel);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/ForumChannelPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Subpages.ForumChannelPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Subpages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:channelsVM=\"using:Unicord.Universal.Models.Channels\" \n    xmlns:controls=\"using:Unicord.Universal.Controls\" \n    xmlns:messages=\"using:Unicord.Universal.Controls.Messages\" \n    xmlns:channels=\"using:Unicord.Universal.Controls.Channels\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:toolkit=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:w1709=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 5)\" \n    x:DefaultBindMode=\"OneWay\"\n    mc:Ignorable=\"d\"\n    DataContext=\"{x:Bind ViewModel}\">\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n\n        <channels:ChannelPageHeaderControl x:Name=\"Header\"\n                                           ViewModel=\"{x:Bind ViewModel}\"/>\n\n        <GridView x:Name=\"ChannelsGrid\"\n                  Grid.Row=\"1\"\n                  Padding=\"8\"\n                  ItemsSource=\"{x:Bind ViewModel.ForumThreads}\"\n                  HorizontalContentAlignment=\"Stretch\"\n                  SelectionMode=\"None\"\n                  IsItemClickEnabled=\"True\"\n                  ItemClick=\"ChannelsGrid_ItemClick\">\n            <GridView.ItemContainerStyle>\n                <Style BasedOn=\"{StaticResource DefaultGridViewItemStyle}\" TargetType=\"GridViewItem\">\n                    <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\n                    <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\n                    <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"/>\n                    <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n                    <Setter Property=\"Margin\" Value=\"0,0,8,8\"/>\n                </Style>\n            </GridView.ItemContainerStyle>\n            <GridView.ItemTemplate>\n                <DataTemplate x:DataType=\"channelsVM:ForumThreadViewModel\">\n                    <Border BorderBrush=\"{ThemeResource CardStrokeColorDefaultBrush}\"\n                            Background=\"{ThemeResource CardBackgroundFillColorDefaultBrush}\"\n                            HorizontalAlignment=\"Stretch\"\n                            BorderThickness=\"1\"\n                            CornerRadius=\"4\"\n                            Height=\"400\">\n                        <Grid Padding=\"16\">\n                            <Grid.RowDefinitions>\n                                <RowDefinition Height=\"Auto\"/>\n                                <RowDefinition Height=\"*\"/>\n                                <RowDefinition Height=\"Auto\"/>\n                            </Grid.RowDefinitions>\n\n                            <Grid Margin=\"0,0,0,8\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\"/>\n                                    <ColumnDefinition Width=\"*\"/>\n                                </Grid.ColumnDefinitions>\n\n                                <Ellipse x:Name=\"ImageContainer\"\n                                         x:Load=\"{x:Bind HasValidCreator}\"\n                                         x:Phase=\"2\"\n                                         Width=\"32\"\n                                         Height=\"32\"\n                                         Margin=\"0,4,8,0\"\n                                         VerticalAlignment=\"Top\">\n                                    <Ellipse.Fill>\n                                        <ImageBrush x:Name=\"ProfileImageBrush\">\n                                            <ImageBrush.ImageSource>\n                                                <BitmapImage DecodePixelWidth=\"36\"\n                                                         DecodePixelHeight=\"36\"\n                                                         DecodePixelType=\"Logical\" \n                                                         UriSource=\"{Binding Creator.AvatarUrl}\" />\n                                            </ImageBrush.ImageSource>\n                                        </ImageBrush>\n                                    </Ellipse.Fill>\n                                </Ellipse>\n\n\n                                <StackPanel Grid.Column=\"1\">\n                                    <controls:UsernameControl x:Name=\"Username\"\n                                                              x:Phase=\"2\"\n                                                              x:Load=\"{x:Bind HasValidCreator}\"\n                                                              User=\"{x:Bind Creator}\" \n                                                              FontSize=\"12\"/>\n                                    <TextBlock FontSize=\"16\"\n                                               FontWeight=\"Bold\"\n                                               TextWrapping=\"Wrap\"\n                                               MaxLines=\"2\"\n                                               Text=\"{x:Bind Name}\"/>\n                                </StackPanel>\n                            </Grid>\n\n                            <Viewbox x:Name=\"AttachmentView\"\n                                     Grid.Row=\"1\"\n                                     MinHeight=\"300\"\n                                     Stretch=\"UniformToFill\"\n                                     HorizontalAlignment=\"Center\" \n                                     VerticalAlignment=\"Center\">\n                                <messages:AttachmentControl x:Name=\"Attachment\"\n                                                            x:Phase=\"3\"\n                                                            Visibility=\"{x:Bind DisplayAttachment, Converter={StaticResource HideOnNullConverter}}\"\n                                                            ViewModel=\"{x:Bind DisplayAttachment}\" />\n                            </Viewbox>\n\n                            <ItemsControl x:Name=\"Reactions\"\n                                          x:Phase=\"4\"\n                                          Visibility=\"{x:Bind FirstMessage.Reactions, Converter={StaticResource BoolVisibilityConverter}}\"\n                                          Grid.Row=\"2\"\n                                          Margin=\"0,8,0,0\"\n                                          ItemTemplate=\"{ThemeResource DefaultReactionTemplate}\" \n                                          ItemsSource=\"{Binding FirstMessage.Reactions}\">\n                                <ItemsControl.ItemsPanel>\n                                    <ItemsPanelTemplate>\n                                        <toolkit:WrapPanel Orientation=\"Horizontal\" HorizontalSpacing=\"4\" VerticalSpacing=\"4\"  />\n                                    </ItemsPanelTemplate>\n                                </ItemsControl.ItemsPanel>\n                            </ItemsControl>\n                        </Grid>\n                    </Border>\n                </DataTemplate>\n            </GridView.ItemTemplate>\n        </GridView>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/ForumChannelPage.xaml.cs",
    "content": "﻿using System;\nusing DSharpPlus.Entities;\nusing Microsoft.Toolkit.Uwp.UI.Animations;\nusing Unicord.Universal.Behaviours;\nusing Unicord.Universal.Models.Channels;\nusing Unicord.Universal.Services;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\n// The Blank Page item template is documented at https://go.microsoft.com/fwlink/?LinkId=234238\n\nnamespace Unicord.Universal.Pages.Subpages\n{\n    /// <summary>\n    /// An empty page that can be used on its own or navigated to within a Frame.\n    /// </summary>\n    public sealed partial class ForumChannelPage : Page\n    {\n        public ForumChannelViewModel ViewModel\n        {\n            get { return (ForumChannelViewModel)GetValue(ViewModelProperty); }\n            set { SetValue(ViewModelProperty, value); }\n        }\n\n        public static readonly DependencyProperty ViewModelProperty =\n            DependencyProperty.Register(\"ViewModel\", typeof(ForumChannelViewModel), typeof(ForumChannelPage), new PropertyMetadata(null));\n\n        public ForumChannelPage()\n        {\n            this.InitializeComponent();\n\n\n#if !(ARM && DEBUG)\n            ListViewBehaviour.SetMinItemWidth(this.ChannelsGrid, 400);\n            ItemsReorderAnimation.SetDuration(this.ChannelsGrid, TimeSpan.FromMilliseconds(250));\n#endif\n        }\n\n        protected override async void OnNavigatedTo(NavigationEventArgs e)\n        {\n            if (e.Parameter is not DiscordForumChannel forum)\n                return;\n\n            ViewModel = new ForumChannelViewModel(forum.Id);\n            await ViewModel.LoadPostData();\n        }\n\n        private async void ChannelsGrid_ItemClick(object sender, ItemClickEventArgs e)\n        {\n            if (e.ClickedItem is ForumThreadViewModel vm)\n            {\n                await DiscordNavigationService.GetForCurrentView()\n                    .NavigateAsync(vm.Channel);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/FriendsPage.xaml",
    "content": "﻿<Page\r\n    x:Class=\"Unicord.Universal.Pages.Subpages.FriendsPage\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Pages.Subpages\"\r\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\r\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"   \r\n    xmlns:b=\"using:Unicord.Universal.Behaviours\"\r\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\r\n    xmlns:animations=\"using:Microsoft.Toolkit.Uwp.UI.Animations\"\r\n    xmlns:commands=\"using:Unicord.Universal.Commands\"\r\n    xmlns:discord=\"using:DSharpPlus.Entities\"\r\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\r\n    xmlns:models=\"using:Unicord.Universal.Models\" \r\n    xmlns:presence=\"using:Unicord.Universal.Controls.Presence\"\r\n    xmlns:users=\"using:Unicord.Universal.Controls.Users\"\r\n    xmlns:relationships=\"using:Unicord.Universal.Models.Relationships\" xmlns:converters=\"using:Unicord.Universal.Converters\"\r\n    NavigationCacheMode=\"Required\"\r\n    mc:Ignorable=\"d\" x:DefaultBindMode=\"OneWay\">\r\n    <Page.DataContext>\r\n        <models:FriendsPageViewModel/>\r\n    </Page.DataContext>\r\n\r\n    <Page.Resources>        \r\n        <Style x:Key=\"RelationshipItemContainerStyle\" BasedOn=\"{StaticResource DefaultGridViewItemStyle}\" TargetType=\"GridViewItem\">\r\n            <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\r\n            <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\r\n            <Setter Property=\"Margin\" Value=\"0,0,8,8\"/>\r\n        </Style>\r\n\r\n        <!-- is there a way to simplify this? -->\r\n        <DataTemplate x:Key=\"FriendRelationshipTemplate\" x:DataType=\"relationships:RelationshipViewModel\">\r\n            <Grid Padding=\"8\"\r\n                  HorizontalAlignment=\"Stretch\" \r\n                  CornerRadius=\"{ThemeResource FriendsPage_RelationshipItem_CornerRadius}\"\r\n                  Background=\"{ThemeResource FriendsPage_RelationshipItem_Background}\"\r\n                  BorderBrush=\"{ThemeResource FriendsPage_RelationshipItem_BorderBrush}\"\r\n                  BorderThickness=\"1\">\r\n                <!--<Grid.Resources>\r\n                    <Storyboard x:Key=\"pointerEntered\" Duration=\"00:00:00.20\">\r\n                        <DoubleAnimation Storyboard.TargetName=\"mainContent\" Storyboard.TargetProperty=\"Opacity\" Duration=\"00:00:00.20\" To=\"0\"/>\r\n                        <DoubleAnimation Storyboard.TargetName=\"overlayContent\" Storyboard.TargetProperty=\"Opacity\" Duration=\"00:00:00.20\" To=\"1\"/>\r\n                    </Storyboard>\r\n                    <Storyboard x:Key=\"pointerLeft\" Duration=\"00:00:00.20\">\r\n                        <DoubleAnimation Storyboard.TargetName=\"mainContent\" Storyboard.TargetProperty=\"Opacity\" Duration=\"00:00:00.20\" To=\"1\"/>\r\n                        <DoubleAnimation Storyboard.TargetName=\"overlayContent\" Storyboard.TargetProperty=\"Opacity\" Duration=\"00:00:00.20\" To=\"0\"/>\r\n                    </Storyboard>\r\n                </Grid.Resources>-->\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"Auto\"/>\r\n                    <ColumnDefinition Width=\"*\"/>\r\n                </Grid.ColumnDefinitions>\r\n                <users:AvatarControl x:Phase=\"1\" Width=\"64\" Height=\"64\" Margin=\"0,0,12,0\" Style=\"{ThemeResource MediumAvatarWithPresenceStyle}\" Source=\"{x:Bind User.AvatarUrl}\" Presence=\"{x:Bind User.Presence}\" />\r\n                <Grid Grid.Column=\"1\" HorizontalAlignment=\"Stretch\">\r\n                    <Grid x:Name=\"mainContent\" VerticalAlignment=\"Center\" Opacity=\"1\">\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"Auto\"/>\r\n                            <RowDefinition Height=\"Auto\"/>\r\n                        </Grid.RowDefinitions>\r\n                        <TextBlock Name=\"text\" Text=\"{x:Bind User.DisplayName}\" FontSize=\"16\" FontWeight=\"SemiBold\" />\r\n                        <presence:InlinePresenceControl x:Name=\"PresenceControl\" x:Load=\"{x:Bind converters:Static.NotNull(User.Presence)}\" x:Phase=\"3\" Presence=\"{x:Bind User.Presence}\" TextWrapping=\"Wrap\" Grid.Row=\"1\" />\r\n                    </Grid>\r\n                    <!--<StackPanel x:Name=\"overlayContent\" x:Phase=\"4\" DataContext=\"{x:Bind}\" Orientation=\"Horizontal\" Opacity=\"0\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Right\">\r\n                        <Button Style=\"{ThemeResource IconButtonStyle}\" Margin=\"4,0\">\r\n                            <SymbolIcon Symbol=\"VideoChat\"/>\r\n                        </Button>\r\n                        <Button Style=\"{ThemeResource IconButtonStyle}\" Margin=\"4,0\">\r\n                            <SymbolIcon Symbol=\"Phone\"/>\r\n                        </Button>\r\n                        <Button Style=\"{ThemeResource IconButtonStyle}\" Command=\"{Binding User.MessageCommand}\" Margin=\"4,0\">\r\n                            <SymbolIcon Symbol=\"Message\"/>\r\n                        </Button>\r\n                    </StackPanel>-->\r\n                </Grid>\r\n            </Grid>\r\n        </DataTemplate>\r\n    </Page.Resources>\r\n    <Grid>\r\n        <Grid.RowDefinitions>\r\n            <RowDefinition Height=\"auto\"/>\r\n            <RowDefinition Height=\"auto\"/>\r\n            <RowDefinition Height=\"auto\"/>\r\n            <RowDefinition Height=\"*\"/>\r\n        </Grid.RowDefinitions>\r\n        <Grid Margin=\"12,12,12,0\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"Auto\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <Button x:Name=\"ShowSidebarButton\"\r\n                    Margin=\"8,0,8,0\"\r\n                    Click=\"ShowSidebarButton_Click\" \r\n                    VerticalAlignment=\"Center\"\r\n                    Style=\"{ThemeResource IconButtonStyle}\" \r\n                    Content=\"&#xE700;\"/>\r\n\r\n            <TextBlock x:Uid=\"/FriendsPage/FriendsHeader\" \r\n                       FontFamily=\"XamlAutoFontFamily\"\r\n                       Style=\"{ThemeResource TitleLargeTextBlockStyle}\"\r\n                       Grid.Column=\"1\"\r\n                       Margin=\"12\"\r\n                       Grid.Row=\"2\"/>\r\n        </Grid>\r\n        <Pivot Margin=\"12,-8,12,0\" \r\n               IsHeaderItemsCarouselEnabled=\"False\" \r\n               ManipulationMode=\"None\" \r\n               SelectedIndex=\"1\" \r\n               Grid.Row=\"3\">\r\n            <Pivot.Items>\r\n                <PivotItem x:Uid=\"/FriendsPage/FriendsAllItem\"\r\n                           Padding=\"0,8,0,0\">\r\n                    <GridView x:Name=\"AllView\"\r\n                              ItemsSource=\"{Binding All}\"\r\n                              SelectionMode=\"None\"\r\n                              IsItemClickEnabled=\"True\"\r\n                              ItemClick=\"OnItemClick\"\r\n                              ItemTemplate=\"{StaticResource FriendRelationshipTemplate}\"\r\n                              ItemContainerStyle=\"{ThemeResource RelationshipItemContainerStyle}\"/>\r\n                </PivotItem>\r\n                <PivotItem x:Uid=\"/FriendsPage/FriendsOnlineItem\"\r\n                           Padding=\"0,8,0,0\">\r\n                    <GridView x:Name=\"OnlineView\"\r\n                              ItemsSource=\"{Binding Online}\"\r\n                              SelectionMode=\"None\"\r\n                              IsItemClickEnabled=\"True\"\r\n                              ItemClick=\"OnItemClick\"\r\n                              ItemTemplate=\"{StaticResource FriendRelationshipTemplate}\"\r\n                              ItemContainerStyle=\"{ThemeResource RelationshipItemContainerStyle}\"/>\r\n                </PivotItem>\r\n                <!-- \r\n                        these two groups should use different templates \r\n                        for accepting/declining requests and unblocking \r\n                    -->\r\n                <PivotItem x:Uid=\"/FriendsPage/FriendsPendingItem\"\r\n                           Padding=\"0,8,0,0\">\r\n                    <GridView x:Name=\"PendingView\"\r\n                              ItemsSource=\"{Binding Pending}\"\r\n                              SelectionMode=\"None\"\r\n                              IsItemClickEnabled=\"True\"\r\n                              ItemClick=\"OnItemClick\"\r\n                              ItemTemplate=\"{StaticResource FriendRelationshipTemplate}\"\r\n                              ItemContainerStyle=\"{ThemeResource RelationshipItemContainerStyle}\"/>\r\n                </PivotItem>\r\n                <PivotItem x:Uid=\"/FriendsPage/FriendsBlockedItem\"\r\n                           Padding=\"0,8,0,0\">\r\n                    <GridView x:Name=\"BlockedView\"\r\n                              ItemsSource=\"{Binding Blocked}\"\r\n                              SelectionMode=\"None\"\r\n                              IsItemClickEnabled=\"True\"\r\n                              ItemClick=\"OnItemClick\"\r\n                              ItemTemplate=\"{StaticResource FriendRelationshipTemplate}\"\r\n                              ItemContainerStyle=\"{ThemeResource RelationshipItemContainerStyle}\"/>\r\n                </PivotItem>\r\n            </Pivot.Items>\r\n        </Pivot>\r\n\r\n        <VisualStateManager.VisualStateGroups>\r\n            <VisualStateGroup>\r\n                <VisualState x:Name=\"WideState\">\r\n                    <VisualState.StateTriggers>\r\n                        <AdaptiveTrigger MinWindowWidth=\"769\" />\r\n                    </VisualState.StateTriggers>\r\n\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"ShowSidebarButton.Visibility\" Value=\"Collapsed\" />\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n\r\n                <VisualState x:Name=\"NarrowState\">\r\n                    <VisualState.StateTriggers>\r\n                        <AdaptiveTrigger MinWindowWidth=\"0\" />\r\n                    </VisualState.StateTriggers>\r\n\r\n                    <VisualState.Setters>\r\n                        <Setter Target=\"ShowSidebarButton.Visibility\" Value=\"Visible\" />\r\n                    </VisualState.Setters>\r\n                </VisualState>\r\n            </VisualStateGroup>\r\n        </VisualStateManager.VisualStateGroups>\r\n    </Grid>\r\n</Page>\r\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/FriendsPage.xaml.cs",
    "content": "﻿using System;\r\nusing Microsoft.Toolkit.Uwp.UI.Animations;\r\nusing Unicord.Universal.Behaviours;\r\nusing Unicord.Universal.Models.Relationships;\r\nusing Unicord.Universal.Pages.Overlay;\r\nusing Unicord.Universal.Services;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Pages.Subpages\r\n{\r\n    public sealed partial class FriendsPage : Page\r\n    {\r\n        public FriendsPage()\r\n        {\r\n            InitializeComponent();\r\n\r\n#if !(ARM && DEBUG)\r\n            ListViewBehaviour.SetMinItemWidth(AllView, 300);\r\n            ListViewBehaviour.SetMinItemWidth(OnlineView, 300);\r\n            ListViewBehaviour.SetMinItemWidth(PendingView, 300);\r\n            ListViewBehaviour.SetMinItemWidth(BlockedView, 300);\r\n\r\n            ItemsReorderAnimation.SetDuration(AllView, TimeSpan.FromMilliseconds(250));\r\n            ItemsReorderAnimation.SetDuration(OnlineView, TimeSpan.FromMilliseconds(250));\r\n            ItemsReorderAnimation.SetDuration(PendingView, TimeSpan.FromMilliseconds(250));\r\n            ItemsReorderAnimation.SetDuration(BlockedView, TimeSpan.FromMilliseconds(250));\r\n#endif\r\n        }\r\n\r\n        private async void OnItemClick(object sender, ItemClickEventArgs e)\r\n        {\r\n            if (e.ClickedItem is RelationshipViewModel rel)\r\n            {\r\n                //this.FindParent<MainPage>().ShowUserOverlay(rel.User, true);\r\n                await OverlayService.GetForCurrentView()\r\n                    .ShowOverlayAsync<UserInfoOverlayPage>(rel.User);\r\n            }\r\n        }\r\n\r\n        private void ShowSidebarButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            SplitPaneService.GetForCurrentView()\r\n                .ToggleLeftPane();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/GuildChannelListPage.xaml",
    "content": "<Page\n    x:Class=\"Unicord.Universal.Pages.Subpages.GuildChannelListPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Subpages\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:controls=\"using:Unicord.Universal.Controls\" \n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\" \n    xmlns:flyouts=\"using:Unicord.Universal.Controls.Flyouts\"\n    xmlns:controls1=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:converters=\"using:Unicord.Universal.Converters\" xmlns:aurora=\"using:System.Windows.Shell.Aurora\"\n    mc:Ignorable=\"d\">\n    <Page.Resources>\n        <converters:ChannelTypeTemplateSelector x:Key=\"ChannelTemplateSelector\" \n                                                CategoryTemplate=\"{StaticResource ChannelListCategoryTemplate}\" \n                                                TextChannelTemplate=\"{StaticResource ChannelListContentTemplate}\" \n                                                ThreadTemplate=\"{StaticResource ThreadChannelListContentTemplate}\"\n                                                VoiceChannelTemplate=\"{StaticResource ChannelListVoiceTemplate}\"/>\n    </Page.Resources>\n    <Grid>\n        <!--<controls:SidebarSearchBox Grid.Row=\"1\" />-->\n\n        <ListView\n            x:Name=\"channelsList\"\n            IsSynchronizedWithCurrentItem=\"False\"\n            SelectionMode=\"Single\"\n            IsItemClickEnabled=\"True\"\n            ItemTemplateSelector=\"{StaticResource ChannelTemplateSelector}\"\n            ItemsSource=\"{Binding Channels}\"\n            ReorderMode=\"{Binding ReorderMode}\"\n            CanDrag=\"{Binding CanEdit}\"\n            CanDragItems=\"{Binding CanEdit}\"\n            CanReorderItems=\"{Binding CanEdit}\"\n            AllowDrop=\"{Binding CanEdit}\"\n            Padding=\"0,0,0,68\"\n            SelectionChanged=\"channelsList_SelectionChanged\"\n            SingleSelectionFollowsFocus=\"False\">\n            <ListView.Header>\n                <Grid x:Name=\"Header\">\n                    <FlyoutBase.AttachedFlyout>\n                        <flyouts:GuildContextFlyout>\n                            <flyouts:GuildContextFlyout.MenuFlyoutPresenterStyle>\n                                <Style TargetType=\"MenuFlyoutPresenter\">\n                                    <Setter Property=\"MinWidth\" Value=\"220\" />\n                                    <Setter Property=\"MaxWidth\" Value=\"220\" />\n                                    <Setter Property=\"Margin\" Value=\"4,0,0,0\"/>\n                                </Style>\n                            </flyouts:GuildContextFlyout.MenuFlyoutPresenterStyle>\n                        </flyouts:GuildContextFlyout>\n                    </FlyoutBase.AttachedFlyout>\n\n                    <Grid CornerRadius=\"4,4,0,0\"\n                          Visibility=\"{Binding HeaderImage, Converter={StaticResource HideOnNullConverter}}\">\n                        <controls1:ImageEx Source=\"{Binding HeaderImage}\" Height=\"128\" Stretch=\"UniformToFill\" HorizontalAlignment=\"Center\" />\n                        <Rectangle Fill=\"{ThemeResource BackgroundGradientBrush}\" IsHitTestVisible=\"False\" />\n                    </Grid>\n\n                    <Grid VerticalAlignment=\"Bottom\" Height=\"48\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition Width=\"*\"/>\n                            <ColumnDefinition Width=\"auto\"/>\n                        </Grid.ColumnDefinitions>\n\n                        <TextBlock Margin=\"16,0,0,4\"\n                                   VerticalAlignment=\"Center\"\n                                   Style=\"{ThemeResource SubtitleTextBlockStyle}\"\n                                   Text=\"{Binding Name}\"\n                                   FontFamily=\"Segoe UI Variable Display\"\n                                   TextTrimming=\"Clip\"\n                                   TextWrapping=\"NoWrap\"/>\n\n                        <Button Content=\"&#xE70D;\" \n                                Grid.Column=\"1\"\n                                Margin=\"4\"\n                                DataContext=\"{Binding Guild}\"\n                                Style=\"{StaticResource IconButtonStyle}\"\n                                Click=\"OnButtonClicked\">\n                        </Button>\n                    </Grid>\n                </Grid>\n            </ListView.Header>\n            <ListView.ItemContainerStyle>\n                <Style TargetType=\"ListViewItem\" BasedOn=\"{StaticResource UnicordListViewItemStyle}\">\n                    <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n                    <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\n                    <Setter Property=\"Padding\" Value=\"0,0\" />\n                    <Setter Property=\"Margin\" Value=\"0,0\" />\n                    <Setter Property=\"MinHeight\" Value=\"0\" />\n                </Style>\n            </ListView.ItemContainerStyle>\n        </ListView>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/GuildChannelListPage.xaml.cs",
    "content": "﻿using DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing System.Linq;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Unicord.Universal.Models.Guild;\r\nusing Unicord.Universal.Services;\r\nusing Windows.Foundation.Metadata;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Controls.Primitives;\r\nusing Windows.UI.Xaml.Navigation;\r\n\r\nnamespace Unicord.Universal.Pages.Subpages\r\n{\r\n    public sealed partial class GuildChannelListPage : Page\r\n    {\r\n        private bool _suspend = false;\r\n        public DiscordGuild Guild { get; private set; }\r\n\r\n        public GuildChannelListPage()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n\r\n        protected override void OnNavigatedTo(NavigationEventArgs e)\r\n        {\r\n            Guild = e.Parameter as DiscordGuild;\r\n            DataContext = new GuildChannelListViewModel(Guild);\r\n        }\r\n\r\n        private async void channelsList_SelectionChanged(object sender, SelectionChangedEventArgs e)\r\n        {\r\n            var viewModel = e.AddedItems.FirstOrDefault() as ChannelListViewModel;\r\n            if (viewModel != null && !_suspend)\r\n            {\r\n                if (viewModel.ChannelType is not (ChannelType.Text or ChannelType.Announcement or ChannelType.AnnouncementThread or ChannelType.GuildForum or ChannelType.PublicThread or ChannelType.PrivateThread))\r\n                {\r\n                    channelsList.SelectedItem = e.RemovedItems.FirstOrDefault();\r\n\r\n                    if (viewModel.ChannelType != ChannelType.Voice)\r\n                        return;\r\n                }\r\n\r\n                var service = DiscordNavigationService.GetForCurrentView();\r\n                await service.NavigateAsync(viewModel.Channel);\r\n            }\r\n        }\r\n\r\n        private void OnButtonClicked(object sender, RoutedEventArgs e)\r\n        {\r\n            var btn = sender as Button;\r\n            var flyout = FlyoutBase.GetAttachedFlyout(Header);\r\n            if (ApiInformation.IsTypePresent(\"Windows.UI.Xaml.Controls.Primitives.FlyoutShowOptions\"))\r\n            {\r\n                var options = new FlyoutShowOptions { Placement = FlyoutPlacementMode.BottomEdgeAlignedRight };\r\n                flyout.ShowAt(btn, options);\r\n            }\r\n            else\r\n            {\r\n                flyout.ShowAt(Header);\r\n            }\r\n        }\r\n\r\n        internal void SetSelectedChannel(DiscordChannel channel)\r\n        {\r\n            _suspend = true;\r\n            var viewModel = (GuildChannelListViewModel)DataContext;\r\n            var channelVM = viewModel.Channels.FirstOrDefault(c => c.Channel == channel);\r\n\r\n            channelsList.SelectedItem = channelVM;\r\n            _suspend = false;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/PinsPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Subpages.PinsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\n    xmlns:controls1=\"using:Unicord.Universal.Controls\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:entities=\"using:DSharpPlus.Entities\"\n    xmlns:insider=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Subpages\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:messages=\"using:Unicord.Universal.Controls.Messages\" \n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\" \n    xmlns:messages1=\"using:Unicord.Universal.Models.Messages\"\n    xmlns:models=\"using:Unicord.Universal.Models.Channels\"\n    mc:Ignorable=\"d\">\n    <d:Page.DataContext>\n        <models:PinsPageViewModel/>\n    </d:Page.DataContext>\n\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\" />\n            <RowDefinition Height=\"*\" />\n        </Grid.RowDefinitions>\n\n        <Grid x:Name=\"TopGrid\" Height=\"42\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n            <TextBlock\n                x:Uid=\"/PinsPage/PinsHeader\"\n                Grid.Column=\"0\"\n                Margin=\"{ThemeResource RightPaneHeader_Margin}\"\n                VerticalAlignment=\"Center\"\n                FontSize=\"16\"\n                FontWeight=\"Bold\"/>\n            <Button x:Name=\"CloseButton\" \n                    Grid.Column=\"1\" \n                    Content=\"&#xE711;\"\n                    FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\n                    Style=\"{ThemeResource IconButtonStyle}\"\n                    Margin=\"{ThemeResource RightPaneCloseButton_Margin}\"\n                    Padding=\"8\"\n                    Click=\"CloseButton_Click\" />\n        </Grid>\n\n        <StackPanel x:Name=\"noMessages\"\n                    Grid.Row=\"1\"\n                    Margin=\"15\"\n                    HorizontalAlignment=\"Center\"\n                    VerticalAlignment=\"Center\"\n                    Visibility=\"{Binding NoMessages, Converter={StaticResource BoolVisibilityConverter}}\">\n            <TextBlock FontSize=\"110\" Text=\":(\" />\n            <TextBlock x:Uid=\"/PinsPage/NoPinsHeader\" Style=\"{ThemeResource SubheaderTextBlockStyle}\"/>\n            <TextBlock x:Uid=\"/PinsPage/NoPinsSubheader\" TextWrapping=\"Wrap\"/>\n        </StackPanel>\n\n        <StackPanel x:Name=\"ratelimited\"\n                    Grid.Row=\"1\"\n                    Margin=\"15\"\n                    HorizontalAlignment=\"Center\"\n                    VerticalAlignment=\"Center\"\n                    Visibility=\"{Binding IsRateLimited, Converter={StaticResource BoolVisibilityConverter}}\">\n            <TextBlock FontSize=\"110\" Text=\":/\" />\n            <TextBlock x:Uid=\"/PinsPage/RatelimitedHeader\" Style=\"{ThemeResource SubheaderTextBlockStyle}\"/>\n            <TextBlock x:Uid=\"/PinsPage/RatelimitedSubheader\" TextWrapping=\"Wrap\"/>\n        </StackPanel>\n\n        <StackPanel x:Name=\"errored\"\n                    Grid.Row=\"1\"\n                    Margin=\"15\"\n                    HorizontalAlignment=\"Center\"\n                    VerticalAlignment=\"Center\"\n                    Visibility=\"{Binding IsErrored, Converter={StaticResource BoolVisibilityConverter}}\">\n            <TextBlock FontSize=\"110\" Text=\":/\" />\n            <TextBlock x:Uid=\"/PinsPage/ErroredHeader\" Style=\"{ThemeResource SubheaderTextBlockStyle}\"/>\n            <TextBlock x:Uid=\"/PinsPage/ErroredSubheader\" TextWrapping=\"Wrap\"/>\n        </StackPanel>\n\n        <ListView Grid.Row=\"1\"\n                  Padding=\"0,0,0,20\"\n                  IsItemClickEnabled=\"True\"\n                  SelectionMode=\"None\"\n                  ItemsSource=\"{Binding Messages}\">\n            <ListView.ItemContainerStyle>\n                <Style TargetType=\"ListViewItem\" BasedOn=\"{StaticResource UnicordListViewItemStyle}\">\n                    <Setter Property=\"Padding\" Value=\"0\" />\n                    <Setter Property=\"Margin\" Value=\"0\" />\n                    <Setter Property=\"MinHeight\" Value=\"0\" />\n                    <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\n                    <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n                </Style>\n            </ListView.ItemContainerStyle>\n            <ListView.ItemTemplate>\n                <DataTemplate x:DataType=\"messages1:MessageViewModel\">\n                    <messages:MessageControl\n                        Background=\"Transparent\"\n                        BorderBrush=\"Transparent\"\n                        IsEnabled=\"False\"\n                        MessageViewModel=\"{x:Bind}\" />\n                </DataTemplate>\n            </ListView.ItemTemplate>\n        </ListView>\n\n        <lib:ProgressRing x:Name=\"progress\"\n                          Grid.Row=\"1\"\n                          Width=\"48\"\n                          Height=\"48\"\n                          HorizontalAlignment=\"Center\"\n                          VerticalAlignment=\"Center\"\n                          IsActive=\"{Binding IsLoading}\"/>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/PinsPage.xaml.cs",
    "content": "﻿using Unicord.Universal.Models.Channels;\nusing Unicord.Universal.Services;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace Unicord.Universal.Pages.Subpages\n{\n    public sealed partial class PinsPage : Page\n    {\n        private ChannelViewModel _channel;\n\n        public PinsPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            if (e.Parameter is ChannelViewModel channel)\n            {\n                _channel = channel;\n                DataContext = new PinsPageViewModel(channel);\n            }\n        }\n\n        private void CloseButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)\n        {\n            SplitPaneService.GetForCurrentView().ToggleRightPane<PinsPage>(_channel);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/SearchPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Subpages.SearchPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Subpages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" \n    xmlns:messages=\"using:Unicord.Universal.Controls.Messages\" \n    xmlns:entities=\"using:DSharpPlus.Entities\" \n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\" xmlns:messages1=\"using:Unicord.Universal.Models.Messages\"\n    mc:Ignorable=\"d\"\n    d:DesignWidth=\"276\">\n\n    <Grid x:Name=\"Root\">\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"Auto\"/>\n        </Grid.RowDefinitions>\n\n        <!-- too much vertical space? idk -->\n\n        <Grid x:Name=\"TopGrid\" Height=\"42\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n            <Button x:Name=\"CloseButton\" \n                    Grid.Column=\"1\" \n                    Content=\"&#xE711;\"\n                    FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\n                    Style=\"{ThemeResource IconButtonStyle}\"\n                    Margin=\"{ThemeResource RightPaneCloseButton_Margin}\"\n                    Padding=\"8\"\n                    Click=\"CloseSearch_Click\" />\n            <TextBlock x:Uid=\"/SearchPage/SearchHeader\"\n                       Grid.Column=\"0\"\n                       Text=\"Search\"\n                       Margin=\"{ThemeResource RightPaneHeader_Margin}\"\n                       VerticalAlignment=\"Center\"\n                       FontSize=\"16\"\n                       FontWeight=\"Bold\"/>\n        </Grid>\n\n        <Grid Grid.Row=\"1\" \n              Margin=\"8,0,8,8\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <AutoSuggestBox x:Name=\"SearchBox\" \n                     x:Uid=\"/SearchPage/SearchBox\" \n                     VerticalAlignment=\"Center\"\n                     QueryIcon=\"Find\"\n                     QuerySubmitted=\"SearchBox_QuerySubmitted\"\n                     KeyDown=\"SearchBox_KeyDown\" />\n\n            <Button x:Name=\"SearchButton\" \n                    Grid.Column=\"1\" \n                    Margin=\"4,0,0,0\"\n                    Content=\"&#xE721;\"\n                    FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\n                    Padding=\"8\"\n                    Visibility=\"Collapsed\"\n                    Click=\"SearchButton_Click\" />\n\n            <Button x:Name=\"ExpandOptionsButton\" \n                    Grid.Column=\"2\" \n                    Margin=\"4,0,0,0\"\n                    FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\n                    Padding=\"8\"\n                    Content=\"&#xE70D;\"\n                    Visibility=\"Collapsed\" />\n        </Grid>\n\n        <Grid x:Name=\"ExtraOptionsGrid\"\n              Grid.Row=\"2\">\n        </Grid>\n\n        <StackPanel x:Name=\"noResults\"\n                    Grid.Row=\"3\"\n                    Margin=\"15\"\n                    HorizontalAlignment=\"Center\"\n                    VerticalAlignment=\"Center\"\n                    Visibility=\"{Binding NoResults, Converter={StaticResource BoolVisibilityConverter}}\">\n            <TextBlock FontSize=\"110\" Text=\":(\" />\n            <TextBlock x:Uid=\"/SearchPage/NoResultsHeader\" Style=\"{ThemeResource SubheaderTextBlockStyle}\"/>\n            <TextBlock x:Uid=\"/SearchPage/NoResultsSubheader\" TextWrapping=\"Wrap\"/>\n        </StackPanel>\n\n        <ListView x:Name=\"SearchResultsView\"\n                  BorderThickness=\"0,1\"\n                  BorderBrush=\"{ThemeResource ChannelPage_Header_BorderBrush}\"\n                  Grid.Row=\"3\"\n                  SelectionMode=\"None\"\n                  IsItemClickEnabled=\"True\"\n                  ItemsSource=\"{Binding ViewSource.View}\">\n\n            <ListView.ItemContainerStyle>\n                <Style TargetType=\"ListViewItem\" BasedOn=\"{StaticResource UnicordListViewItemStyle}\">\n                    <Setter Property=\"Padding\" Value=\"0\" />\n                    <Setter Property=\"Margin\" Value=\"0\" />\n                    <Setter Property=\"MinHeight\" Value=\"0\" />\n                    <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\n                    <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n                </Style>\n            </ListView.ItemContainerStyle>\n            <ListView.ItemTemplate>\n                <DataTemplate x:DataType=\"messages1:MessageViewModel\">\n                    <messages:MessageControl Background=\"Transparent\"\n                                             BorderBrush=\"Transparent\" \n                                             IsEnabled=\"False\" \n                                             Margin=\"0,4\"\n                                             MessageViewModel=\"{x:Bind}\" />\n                </DataTemplate>\n            </ListView.ItemTemplate>\n        </ListView>\n\n        <lib:ProgressRing\n            x:Name=\"Progress\"\n            Grid.Row=\"3\"\n            IsActive=\"{Binding IsSearching}\"\n            Width=\"48\"\n            Height=\"48\"\n            HorizontalAlignment=\"Center\"\n            VerticalAlignment=\"Center\" />\n\n        <Grid Grid.Row=\"4\" \n              Padding=\"4\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"Auto\"/>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n\n            <Button x:Name=\"PreviousButton\" \n                    Click=\"PreviousButton_Click\"\n                    Grid.Column=\"0\" \n                    Margin=\"2,0,0,0\"\n                    IsEnabled=\"{Binding CanGoBack}\"\n                    Style=\"{ThemeResource IconButtonStyle}\" \n                    Content=\"&#xE892;\" />\n\n\n            <TextBlock Grid.Column=\"1\"\n                       TextAlignment=\"Center\"\n                       HorizontalAlignment=\"Center\" \n                       VerticalAlignment=\"Top\"\n                       FontSize=\"14\">\n                <Span>\n                    <Run Text=\"{Binding CurrentPage, Mode=OneWay}\"/> / <Run Text=\"{Binding TotalPages, Mode=OneWay}\"/>\n                </Span>\n                <LineBreak/>\n                <Span FontSize=\"12\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\">\n                    <Run Text=\"{Binding TotalMessagesString, Mode=OneWay}\"/> <Run x:Uid=\"/SearchPage/ResultsText\"/>\n                </Span>\n            </TextBlock>\n\n            <Button x:Name=\"NextButton\" \n                    Click=\"NextButton_Click\"\n                    Grid.Column=\"2\" \n                    Margin=\"2,0,0,0\"\n                    IsEnabled=\"{Binding CanGoForward}\"\n                    Style=\"{ThemeResource IconButtonStyle}\" \n                    Content=\"&#xE893;\" />\n        </Grid>\n\n    </Grid>\n</Page>"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/SearchPage.xaml.cs",
    "content": "﻿using Unicord.Universal.Models.Channels;\nusing Unicord.Universal.Services;\nusing Windows.System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace Unicord.Universal.Pages.Subpages\n{\n    public sealed partial class SearchPage : Page\n    {\n        private ChannelViewModel _channel;\n        public SearchPageViewModel ViewModel { get; set; }\n\n        public SearchPage()\n        {\n            this.InitializeComponent();\n        }\n\n        protected override void OnNavigatedTo(NavigationEventArgs e)\n        {\n            if (e.Parameter is ChannelViewModel channel)\n            {\n                _channel = channel;\n                ViewModel = new SearchPageViewModel(channel);\n                Root.DataContext = ViewModel;\n            }\n            else\n            {\n                _channel = null;\n                ViewModel = null;\n                Root.DataContext = null;\n            }\n        }\n\n        private async void SearchButton_Click(object sender, RoutedEventArgs e)\n        {\n            ViewModel.CurrentPage = 1;\n            await ViewModel.SearchAsync(SearchBox.Text);\n        }\n\n        private async void NextButton_Click(object sender, RoutedEventArgs e)\n        {\n            ViewModel.CurrentPage++;\n            await ViewModel.SearchAsync(SearchBox.Text);\n        }\n\n        private async void PreviousButton_Click(object sender, RoutedEventArgs e)\n        {\n            ViewModel.CurrentPage--;\n            await ViewModel.SearchAsync(SearchBox.Text);\n        }\n\n        private async void SearchBox_KeyDown(object sender, KeyRoutedEventArgs e)\n        {\n            if (e.Key == VirtualKey.Enter)\n            {\n                e.Handled = true;\n                ViewModel.CurrentPage = 1;\n                await ViewModel.SearchAsync(SearchBox.Text);\n            }\n        }\n\n        private void CloseSearch_Click(object sender, RoutedEventArgs e)\n        {\n            SplitPaneService.GetForCurrentView().ToggleRightPane<SearchPage>(_channel);\n        }\n\n        private async void SearchBox_QuerySubmitted(AutoSuggestBox sender, AutoSuggestBoxQuerySubmittedEventArgs args)\n        {\n            await ViewModel.SearchAsync(SearchBox.Text);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/UserListPage.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.Subpages.UserListPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:entities=\"using:DSharpPlus.Entities\"\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:local=\"using:Unicord.Universal.Pages.Subpages\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    mc:Ignorable=\"d\">\n    <Page.Resources>\n        <CollectionViewSource\n            x:Key=\"ViewSource\"\n            x:Name=\"viewSource\"\n            IsSourceGrouped=\"True\" />\n    </Page.Resources>\n    <Grid>\n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"Auto\" />\n            <RowDefinition Height=\"Auto\" />\n            <RowDefinition Height=\"*\" />\n        </Grid.RowDefinitions>\n\n        <Grid x:Name=\"topGrid\" Height=\"42\">\n            <Grid.ColumnDefinitions>\n                <ColumnDefinition Width=\"*\"/>\n                <ColumnDefinition Width=\"Auto\"/>\n            </Grid.ColumnDefinitions>\n            <Button x:Name=\"CloseButton\" \n                    Grid.Column=\"1\" \n                    Content=\"&#xE711;\"\n                    FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\n                    Style=\"{ThemeResource IconButtonStyle}\"\n                    Margin=\"{ThemeResource RightPaneCloseButton_Margin}\"\n                    Padding=\"8\"\n                    Click=\"CloseButton_Click\" />\n            <TextBlock\n                x:Uid=\"/UserListPage/UserListHeader\"\n                Grid.Column=\"0\"\n                Margin=\"{ThemeResource RightPaneHeader_Margin}\"\n                VerticalAlignment=\"Center\"\n                FontSize=\"16\"\n                FontWeight=\"Bold\"/>\n        </Grid>\n\n        <AutoSuggestBox\n            x:Name=\"userSearch\"\n            x:Uid=\"/UserListPage/UserSearchBox\"\n            Grid.Row=\"1\"\n            Margin=\"8\"\n            BorderThickness=\"1\"\n            QueryIcon=\"Find\" />\n\n        <ListView\n            x:Name=\"userList\"\n            Grid.Row=\"2\"\n            Padding=\"0,0,0,20\"\n            ItemTemplate=\"{ThemeResource UserListTemplate}\"\n            IsSynchronizedWithCurrentItem=\"False\"\n            ItemsSource=\"{Binding Source={StaticResource ViewSource}}\"\n            IsItemClickEnabled=\"True\"\n            ItemClick=\"userList_ItemClick\">\n\n            <ListView.GroupStyle>\n                <GroupStyle HidesIfEmpty=\"True\">\n                    <GroupStyle.HeaderTemplate>\n                        <DataTemplate>\n                            <TextBlock\n                                FontSize=\"14\"\n                                FontWeight=\"Bold\"\n                                Text=\"{Binding Key.Name, FallbackValue=People}\"\n                                TextTrimming=\"CharacterEllipsis\"\n                                TextWrapping=\"NoWrap\" />\n                        </DataTemplate>\n                    </GroupStyle.HeaderTemplate>\n                </GroupStyle>\n            </ListView.GroupStyle>\n\n            <ListView.ItemContainerStyle>\n                <Style TargetType=\"ListViewItem\" BasedOn=\"{StaticResource UnicordListViewItemStyle}\">\n                    <Setter Property=\"Padding\" Value=\"8,4\" />\n                    <Setter Property=\"Margin\" Value=\"0\" />\n                    <Setter Property=\"MinHeight\" Value=\"0\" />\n                    <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\n                    <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n                </Style>\n            </ListView.ItemContainerStyle>\n        </ListView>\n\n        <lib:ProgressRing\n            x:Name=\"progress\"\n            Grid.Row=\"2\"\n            Width=\"48\"\n            Height=\"48\"\n            HorizontalAlignment=\"Center\"\n            VerticalAlignment=\"Center\" />\n\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/Subpages/UserListPage.xaml.cs",
    "content": "﻿using System;\nusing System.Linq;\nusing DSharpPlus.Entities;\nusing Unicord.Universal.Models.Channels;\nusing Unicord.Universal.Models.User;\nusing Unicord.Universal.Services;\nusing Windows.UI.Core;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Navigation;\n\nnamespace Unicord.Universal.Pages.Subpages\n{\n    public sealed partial class UserListPage : Page\n    {\n        private ChannelViewModel _channel;\n\n        public UserListPage()\n        {\n            InitializeComponent();\n        }\n\n        protected override async void OnNavigatedTo(NavigationEventArgs e)\n        {\n            try\n            {\n                progress.IsActive = true;\n                viewSource.Source = null;\n\n                if (e.Parameter is ChannelViewModel channel)\n                {\n                    _channel = channel;\n                    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\n                    {\n                        if (channel.Channel is DiscordDmChannel dm)\n                        {\n                            viewSource.IsSourceGrouped = false;\n                            viewSource.Source = dm.Recipients.OrderBy(r => r.DisplayName)\n                               .Select(s => new UserViewModel(s, channel.Guild.Id));\n                        }\n                        else\n                        {\n                            viewSource.IsSourceGrouped = true;\n                            viewSource.Source = channel.Channel.Users\n                               .Distinct()\n                               .OrderBy(g => g.DisplayName)\n                               .Select(s => new UserViewModel(s, channel.Guild.Id))\n                               .GroupBy(g => g.Member.Roles.OrderByDescending(r => r.Position).FirstOrDefault(r => r.IsHoisted))\n                               .OrderByDescending(g => g.Key?.Position);\n                        }\n\n                        progress.IsActive = false;\n                    });\n                }\n            }\n            catch\n            {\n                // TODO: Log\n            }\n        }\n\n        private void userList_ItemClick(object sender, ItemClickEventArgs e)\n        {\n            //var item = e.ClickedItem;\n            //if (item != null)\n            //{\n            //    var element = (sender as ListView).ContainerFromItem(item);\n            //    //AdaptiveFlyoutUtilities.ShowAdaptiveFlyout<UserFlyout>(item, element as FrameworkElement);\n            //    userList.SelectedItem = null;\n            //}\n        }\n\n        private void CloseButton_Click(object sender, Windows.UI.Xaml.RoutedEventArgs e)\n        {\n            SplitPaneService.GetForCurrentView().ToggleRightPane<UserListPage>(_channel);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Pages/VideoEditor.xaml",
    "content": "﻿<Page\n    x:Class=\"Unicord.Universal.Pages.VideoEditor\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Pages\"\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\"\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\n    xmlns:controls=\"using:Unicord.Universal.Controls\"\n    xmlns:controls1=\"using:Microsoft.Toolkit.Uwp.UI.Controls\" xmlns:w1903=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 8)\"\n    mc:Ignorable=\"d\" Loaded=\"Page_Loaded\" SizeChanged=\"Page_SizeChanged\">\n\n    <Page.Resources>\n        <ExponentialEase x:Key=\"Enter\" Exponent=\"7\" EasingMode=\"EaseOut\" />\n        <ExponentialEase x:Key=\"Exit\" Exponent=\"4.5\" EasingMode=\"EaseIn\" />\n\n        <Storyboard x:Key=\"OpenProcessingOverlay\" x:Name=\"OpenProcessingOverlay\">\n            <DoubleAnimation \n                To=\"1\"\n                Storyboard.TargetName=\"overlayContentScale\"\n                Storyboard.TargetProperty=\"ScaleX\"\n                Duration=\"00:00:00.50\"\n                EasingFunction=\"{StaticResource Enter}\"/>\n            <DoubleAnimation \n                To=\"1\"\n                Storyboard.TargetName=\"overlayContentScale\"\n                Storyboard.TargetProperty=\"ScaleY\"\n                Duration=\"00:00:00.50\"\n                EasingFunction=\"{StaticResource Enter}\"/>\n            <DoubleAnimation \n                To=\"1\"\n                Storyboard.TargetName=\"overlayGrid\"\n                Storyboard.TargetProperty=\"Opacity\"\n                Duration=\"00:00:00.50\"\n                EasingFunction=\"{StaticResource Enter}\"/>\n        </Storyboard>\n\n        <Storyboard x:Key=\"CloseProcessingOverlay\" x:Name=\"CloseProcessingOverlay\" Completed=\"CloseProcessingOverlay_Completed\">\n            <DoubleAnimation \n                To=\"0.9\"\n                Storyboard.TargetName=\"overlayContentScale\"\n                Storyboard.TargetProperty=\"ScaleX\"\n                BeginTime=\"00:00:00.50\"\n                Duration=\"00:00:00.50\"\n                EasingFunction=\"{StaticResource Exit}\"/>\n            <DoubleAnimation \n                To=\"0.9\"\n                Storyboard.TargetName=\"overlayContentScale\"\n                Storyboard.TargetProperty=\"ScaleY\"\n                BeginTime=\"00:00:00.50\"\n                Duration=\"00:00:00.50\"\n                EasingFunction=\"{StaticResource Exit}\"/>\n            <DoubleAnimation \n                To=\"0\"\n                Storyboard.TargetName=\"overlayGrid\"\n                Storyboard.TargetProperty=\"Opacity\"\n                BeginTime=\"00:00:00.50\"\n                Duration=\"00:00:00.50\"\n                EasingFunction=\"{StaticResource Exit}\"/>\n        </Storyboard>\n    </Page.Resources>\n\n    <Grid>\n        <Grid>\n            <Grid.RowDefinitions>\n                <RowDefinition Height=\"Auto\"/>\n                <RowDefinition Height=\"*\"/>\n                <RowDefinition Height=\"Auto\"/>\n            </Grid.RowDefinitions>\n            <Grid x:Name=\"topGrid\"\n                  BorderThickness=\"0,0,0,1\"\n                  BorderBrush=\"{ThemeResource ContentDialogSeparatorBorderBrush}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"Auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"Auto\"/>\n                </Grid.ColumnDefinitions>\n                <Button x:Name=\"backButton\" \n                        Margin=\"8\" \n                        Style=\"{ThemeResource IconButtonStyle}\"\n                        Click=\"BackButton_Click\">\n                    &#xE72B;\n                </Button>\n                \n                <TextBlock x:Uid=\"/VideoEditor/VideoEditorHeader\" \n                           Grid.Column=\"1\"\n                           Style=\"{ThemeResource SubtitleTextBlockStyle}\"\n                           VerticalAlignment=\"Center\"\n                           HorizontalAlignment=\"Center\"/>\n                \n                <Button x:Name=\"acceptButton\" \n                        Grid.Column=\"2\"\n                        Margin=\"8\" \n                        Style=\"{ThemeResource IconButtonStyle}\" \n                        Click=\"AcceptButton_Click\">\n                    &#xE8FB;\n                </Button>\n            </Grid>\n\n            <Grid x:Name=\"MediaGrid\" \n                  Grid.Row=\"1\" \n                  Margin=\"0\"\n                  Background=\"{ThemeResource LayerFillColorAltBrush}\">\n                <Viewbox>                    \n                    <MediaPlayerElement x:Name=\"mediaElement\"\n                                        Stretch=\"None\"/>\n                </Viewbox>\n            </Grid>\n\n            <Grid x:Name=\"selectorGrid\" \n                  VerticalAlignment=\"Bottom\" \n                  Grid.Row=\"2\" \n                  Padding=\"8\"\n                  BorderThickness=\"0,1,0,0\"\n                  BorderBrush=\"{ThemeResource ContentDialogSeparatorBorderBrush}\">\n                <Grid.ColumnDefinitions>\n                    <ColumnDefinition Width=\"auto\"/>\n                    <ColumnDefinition Width=\"auto\"/>\n                    <ColumnDefinition Width=\"auto\"/>\n                    <ColumnDefinition Width=\"*\"/>\n                    <ColumnDefinition Width=\"auto\"/>\n                    <ColumnDefinition Width=\"auto\"/>\n                    <ColumnDefinition Width=\"auto\"/>\n                    <ColumnDefinition Width=\"auto\"/>\n                </Grid.ColumnDefinitions>\n                <Button x:Name=\"playPauseButton\" Click=\"PlayPauseButton_Click\" Style=\"{ThemeResource IconButtonStyle}\" Content=\"&#xE768;\" Margin=\"0,0,2,0\"/>\n                <Button x:Name=\"snapStartButton\" Click=\"snapStartButton_Click\" Style=\"{ThemeResource IconButtonStyle}\" Content=\"&#xEDE1;\" Grid.Column=\"1\"/>\n\n                <TextBlock Margin=\"8,0,0,0\" VerticalAlignment=\"Center\" Grid.Column=\"2\">\n                     <Run x:Name=\"playheadPositionText\" Text=\"00:00\" />/<Run x:Name=\"startPointText\" Text=\"00:00\" />\n                </TextBlock>\n                <controls:RangeSelector VerticalAlignment=\"Center\" x:Name=\"rangeSelector\" Value=\"0.5\" Grid.Column=\"3\" StepFrequency=\"0.1\" ValueChanged=\"RangeSelector_ValueChanged\" RangeChanged=\"OnRangeChanged\" Grid.Row=\"2\" Margin=\"8,0\" />\n                <TextBlock x:Name=\"endPointText\" Margin=\"0,0,8,0\" Text=\"00:00\" Grid.Column=\"4\" VerticalAlignment=\"Center\"/>\n\n                <Button x:Name=\"snapEndButton\" Click=\"snapEndButton_Click\" Style=\"{ThemeResource IconButtonStyle}\" Content=\"&#xEDE2;\" Grid.Column=\"5\" Margin=\"0,0,2,0\"/>\n                <Button Grid.Column=\"6\" Style=\"{ThemeResource IconButtonStyle}\" Content=\"&#xE767;\">\n                    <Button.Flyout>\n                        <Flyout x:Name=\"VolumeFlyout\" w1903:ShouldConstrainToRootBounds=\"False\">\n                            <StackPanel Orientation=\"Horizontal\">\n                                <Button x:Name=\"AudioMuteButton\" Click=\"AudioMuteButton_Click\" Style=\"{ThemeResource IconButtonStyle}\" HorizontalAlignment=\"Center\" Margin=\"0,0,12,0\" VerticalAlignment=\"Center\">\n                                    <SymbolIcon x:Name=\"AudioMuteSymbol\" Symbol=\"Volume\"/>\n                                </Button>\n                                <Slider x:Name=\"VolumeSlider\" HorizontalAlignment=\"Center\" Value=\"85\" ValueChanged=\"VolumeSlider_ValueChanged\" IsThumbToolTipEnabled=\"False\" Margin=\"0\" VerticalAlignment=\"Center\" Width=\"{ThemeResource MTCHorizontalVolumeSliderWidth}\"/>\n                                <TextBlock x:Name=\"VolumeValue\" HorizontalAlignment=\"Center\" Margin=\"12,0,0,0\" Style=\"{ThemeResource MediaTextBlockStyle}\" Text=\"{Binding Value, ElementName=VolumeSlider}\" VerticalAlignment=\"Center\" Width=\"24\"/>\n                            </StackPanel>\n                        </Flyout>\n                    </Button.Flyout>\n                </Button>\n            </Grid>\n        </Grid>\n\n        <Grid x:Name=\"overlayGrid\" Opacity=\"0\" Background=\"{ThemeResource OverlayBackdrop}\" Visibility=\"Collapsed\">\n            <StackPanel x:Name=\"overlayContent\" RenderTransformOrigin=\"0.5,0.5\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\">\n                <StackPanel.RenderTransform>\n                    <ScaleTransform x:Name=\"overlayContentScale\" ScaleX=\"0.9\" ScaleY=\"0.9\"/>\n                </StackPanel.RenderTransform>\n\n                <Grid HorizontalAlignment=\"Center\" Width=\"128\" Height=\"128\" Margin=\"12\">\n                    <controls1:RadialProgressBar x:Name=\"progressRing\" Width=\"128\" Height=\"128\" Value=\"0\" Maximum=\"100\"/>\n                    <TextBlock x:Name=\"progressText\" Style=\"{ThemeResource HeaderTextBlockStyle}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" Text=\"0\"/>\n                    <TextBlock x:Name=\"completedText\" Visibility=\"Collapsed\" Width=\"64\" Height=\"64\" FontSize=\"64\" LineHeight=\"64\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Center\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\">\n                        &#xE8FB;\n                    </TextBlock>\n                </Grid>\n\n                <TextBlock x:Uid=\"/VideoEditor/ProcessingVideoHeader\" Style=\"{ThemeResource TitleTextBlockStyle}\" HorizontalAlignment=\"Center\" />\n                <Button x:Name=\"cancelButton\" Click=\"CancelButton_Click\" Style=\"{ThemeResource TextBlockButtonStyle}\" HorizontalAlignment=\"Center\" Content=\"Cancel\" />\n\n            </StackPanel>\n        </Grid>\n    </Grid>\n</Page>\n"
  },
  {
    "path": "Unicord.Universal/Pages/VideoEditor.xaml.cs",
    "content": "﻿using System;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing Microsoft.AppCenter.Analytics;\r\nusing Unicord.Universal.Models;\r\nusing Unicord.Universal.Services;\r\nusing Unicord.Universal.Utilities;\r\nusing Windows.ApplicationModel.Resources;\r\nusing Windows.Foundation;\r\nusing Windows.Foundation.Metadata;\r\nusing Windows.Graphics.Display;\r\nusing Windows.Media.Core;\r\nusing Windows.Media.Editing;\r\nusing Windows.Media.Playback;\r\nusing Windows.Media.Transcoding;\r\nusing Windows.Storage;\r\nusing Windows.Storage.Streams;\r\nusing Windows.System;\r\nusing Windows.UI.Core;\r\nusing Windows.UI.ViewManagement;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Controls.Primitives;\r\nusing Windows.UI.Xaml.Navigation;\r\n\r\nnamespace Unicord.Universal.Pages\r\n{\r\n    public sealed partial class VideoEditor : Page, IOverlay\r\n    {\r\n        public const string PLAY_GLYPH = \"\\xE768\";\r\n        public const string PAUSE_GLYPH = \"\\xE769\";\r\n\r\n        private DispatcherTimer _playTimer;\r\n        private EditedFileUploadModel _model;\r\n        private MediaStreamSource _mediaStreamSource;\r\n        private bool _ready;\r\n        private bool _succeeded;\r\n        private StorageFile _tempFile;\r\n        private IRandomAccessStream _tempStream;\r\n        private IAsyncActionWithProgress<double> _renderTask;\r\n\r\n        private bool _playing;\r\n        private bool _wasPlaying;\r\n        private bool _playbackSkip;\r\n        private bool _scrubSkip;\r\n        private DispatcherTimer _resizeTimer;\r\n        private double _startPosition;\r\n        private bool _createdNew;\r\n        private ResourceLoader _strings;\r\n\r\n        public Size PreferredSize =>\r\n            new Size(1280, 720);\r\n\r\n        public VideoEditor()\r\n        {\r\n            InitializeComponent();\r\n            _strings = ResourceLoader.GetForCurrentView(\"VideoEditor\");\r\n        }\r\n\r\n        protected override void OnNavigatedTo(NavigationEventArgs e)\r\n        {\r\n            if (e.Parameter is EditedFileUploadModel edited)\r\n            {\r\n                _model = edited;\r\n            }\r\n        }\r\n\r\n        protected override void OnNavigatedFrom(NavigationEventArgs e)\r\n        {\r\n            DoCleanup();\r\n        }\r\n\r\n        private async void Page_Loaded(object sender, RoutedEventArgs e)\r\n        {\r\n            var coreWindow = CoreWindow.GetForCurrentThread();\r\n            coreWindow.KeyUp += OnWindowKeyUp;\r\n\r\n\r\n            if (ApiInformation.IsTypePresent(\"Windows.UI.ViewManagement.StatusBar\"))\r\n            {\r\n                DisplayInformation.AutoRotationPreferences = DisplayOrientations.Landscape;\r\n                await StatusBar.GetForCurrentView().HideAsync();\r\n            }\r\n\r\n            if (_model.StorageFile == null)\r\n            {\r\n                await UIUtilities.ShowErrorDialogAsync(_strings.GetString(\"CannotEditClipTitle\"), _strings.GetString(\"CannotEditClipMessage\"));\r\n                Close();\r\n                return;\r\n            }\r\n\r\n            Analytics.TrackEvent(\"VideoEditor_Loaded\");\r\n\r\n            if (_model.Composition == null)\r\n            {\r\n                _createdNew = true;\r\n\r\n                var name = Path.ChangeExtension(_model.StorageFile.Name, \"uni-cmp\");\r\n                try\r\n                {\r\n                    _model.CompositionFile = _model.CompositionFile ?? await ApplicationData.Current.LocalFolder.GetFileAsync(name);\r\n                    if (await UIUtilities.ShowYesNoDialogAsync(_strings.GetString(\"LoadPreviousEditsTitle\"), _strings.GetString(\"LoadPreviousEditsMessage\")))\r\n                    {\r\n                        _model.Composition = await MediaComposition.LoadAsync(_model.CompositionFile);\r\n                    }\r\n                    else\r\n                    {\r\n                        _model.Composition = new MediaComposition();\r\n                    }\r\n                }\r\n                catch\r\n                {\r\n                    _model.Composition = new MediaComposition();\r\n                }\r\n            }\r\n\r\n\r\n            if (_model.Composition.Clips.Count == 0)\r\n            {\r\n                var clip = await MediaClip.CreateFromFileAsync(_model.StorageFile);\r\n\r\n                _model.Composition.Clips.Add(clip);\r\n                _model.Clip = clip;\r\n            }\r\n            else\r\n            {\r\n                _model.Clip = _model.Composition.Clips.First();\r\n            }\r\n\r\n            rangeSelector.Maximum = _model.Clip.OriginalDuration.TotalSeconds;\r\n            rangeSelector.RangeMin = _model.Clip.TrimTimeFromStart.TotalSeconds;\r\n            rangeSelector.RangeMax = _model.Clip.OriginalDuration.TotalSeconds - _model.Clip.TrimTimeFromEnd.TotalSeconds;\r\n            rangeSelector.Value = rangeSelector.RangeMin;\r\n\r\n            startPointText.Text = FormatTimeSpan(_model.Clip.TrimTimeFromStart);\r\n            endPointText.Text = FormatTimeSpan(_model.Clip.OriginalDuration - _model.Clip.TrimTimeFromEnd);\r\n\r\n            _ready = true;\r\n            UpdateMediaElementSource();\r\n        }\r\n\r\n        public string FormatTimeSpan(TimeSpan t)\r\n        {\r\n            return t.Hours > 0 ? t.ToString(\"hh\\\\:mm\\\\:ss\") : t.ToString(\"mm\\\\:ss\");\r\n        }\r\n\r\n        public void UpdateMediaElementSource()\r\n        {\r\n            if (!_ready || _model == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            if (mediaElement.MediaPlayer?.PlaybackSession != null)\r\n            {\r\n                mediaElement.MediaPlayer.PlaybackSession.PositionChanged -= PlaybackSession_PositionChanged;\r\n            }\r\n            \r\n            _mediaStreamSource = _model.Composition.GeneratePreviewMediaStreamSource(Math.Min((int)MediaGrid.ActualWidth, 1280), Math.Min((int)MediaGrid.ActualHeight, 720));\r\n            if (_mediaStreamSource != null)\r\n            {\r\n                mediaElement.Source = MediaSource.CreateFromMediaStreamSource(_mediaStreamSource);\r\n                mediaElement.MediaPlayer.Volume = VolumeSlider.Value;\r\n                mediaElement.MediaPlayer.PlaybackSession.Position = TimeSpan.FromSeconds(Math.Min(Math.Max(0, rangeSelector.Value - rangeSelector.RangeMin), rangeSelector.RangeMax));\r\n                mediaElement.MediaPlayer.PlaybackSession.PositionChanged += PlaybackSession_PositionChanged;\r\n            }\r\n        }\r\n\r\n        private async void BackButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            if (await UIUtilities.ShowYesNoDialogAsync(_strings.GetString(\"SaveChangesTitle\"), _strings.GetString(\"SaveChangesMessage\")))\r\n            {\r\n                await SaveComposition();\r\n            }\r\n\r\n            if (_createdNew)\r\n            {\r\n                _model.Composition = null;\r\n                _model.Clip = null;\r\n            }\r\n\r\n            Close();\r\n        }\r\n\r\n        private void Page_SizeChanged(object sender, SizeChangedEventArgs e)\r\n        {\r\n            ResizePreviewTimer();\r\n        }\r\n\r\n        private void OnRangeChanged(object sender, Controls.RangeChangedEventArgs e)\r\n        {\r\n            if (!_ready)\r\n            {\r\n                return;\r\n            }\r\n\r\n            if (_playing)\r\n            {\r\n                Pause();\r\n                _wasPlaying = true;\r\n            }\r\n\r\n            _scrubSkip = true;\r\n            _playbackSkip = true;\r\n\r\n            if (_startPosition == 0d)\r\n            {\r\n                _startPosition = _model.Clip.TrimTimeFromStart.TotalSeconds;\r\n            }\r\n\r\n            var value = 0d;\r\n            switch (e.ChangedRangeProperty)\r\n            {\r\n                case Controls.RangeSelectorProperty.MinimumValue:\r\n                    _model.Clip.TrimTimeFromStart = TimeSpan.FromSeconds(Math.Max(0, e.NewValue));\r\n                    rangeSelector.Value = rangeSelector.RangeMin;\r\n                    value = Math.Min(Math.Max(0, _startPosition - rangeSelector.RangeMin), rangeSelector.RangeMax);\r\n                    mediaElement.MediaPlayer.PlaybackSession.Position = TimeSpan.FromSeconds(value);\r\n                    break;\r\n                case Controls.RangeSelectorProperty.MaximumValue:\r\n                    _model.Clip.TrimTimeFromEnd = TimeSpan.FromSeconds(Math.Max(0, _model.Clip.OriginalDuration.TotalSeconds - e.NewValue));\r\n                    rangeSelector.Value = rangeSelector.RangeMax;\r\n                    value = Math.Max(Math.Min(rangeSelector.RangeMax, _model.Clip.TrimmedDuration.TotalSeconds), rangeSelector.RangeMin);\r\n                    mediaElement.MediaPlayer.PlaybackSession.Position = TimeSpan.FromSeconds(value - 0.1);\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n\r\n            startPointText.Text = FormatTimeSpan(TimeSpan.FromSeconds(Math.Max(0, rangeSelector.RangeMin)));\r\n            endPointText.Text = FormatTimeSpan(TimeSpan.FromSeconds(Math.Min(_model.Clip.OriginalDuration.TotalSeconds, rangeSelector.RangeMax)));\r\n\r\n            ResizePreviewTimer();\r\n        }\r\n\r\n        private void RangeSelector_ValueChanged(object sender, double e)\r\n        {\r\n            if (!_ready)\r\n            {\r\n                return;\r\n            }\r\n\r\n            if (_playing)\r\n            {\r\n                if (_playbackSkip)\r\n                {\r\n                    _playbackSkip = false;\r\n                    return;\r\n                }\r\n\r\n                Pause();\r\n                _wasPlaying = true;\r\n            }\r\n\r\n            _scrubSkip = true;\r\n\r\n            var playbackSession = mediaElement.MediaPlayer.PlaybackSession;\r\n            playbackSession.Position = TimeSpan.FromSeconds(Math.Min(Math.Max(0, e - rangeSelector.RangeMin), playbackSession.NaturalDuration.TotalSeconds));\r\n            RestartPlayTimer();\r\n        }\r\n\r\n        private async void AcceptButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            Pause();\r\n\r\n            progressText.Text = \"0\";\r\n            progressText.Visibility = Visibility.Visible;\r\n            completedText.Visibility = Visibility.Collapsed;\r\n\r\n            overlayGrid.Visibility = Visibility.Visible;\r\n            OpenProcessingOverlay.Begin();\r\n\r\n            Analytics.TrackEvent(\"VideoEditor_ExportStarted\");\r\n\r\n            await SaveComposition();\r\n\r\n            var transcoder = new MediaTranscoder() { VideoProcessingAlgorithm = (MediaVideoProcessingAlgorithm)App.RoamingSettings.Read(Constants.VIDEO_PROCESSING, (int)MediaVideoProcessingAlgorithm.Default) };\r\n            var props = await (_model.StorageFile as StorageFile).Properties.GetVideoPropertiesAsync();\r\n            var profile = MediaTranscoding.CreateVideoEncodingProfileFromProps(props);\r\n            var source = _model.Composition.GenerateMediaStreamSource();\r\n\r\n            if (_tempFile == null)\r\n            {\r\n                _tempFile = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(Path.ChangeExtension(_model.StorageFile.Name, \".mp4\"), CreationCollisionOption.GenerateUniqueName);\r\n            }\r\n\r\n            if (_tempStream != null)\r\n                _tempStream.Dispose();\r\n\r\n            _tempStream = await _tempFile.OpenAsync(FileAccessMode.ReadWrite);\r\n            var result = await transcoder.PrepareMediaStreamSourceTranscodeAsync(source, _tempStream, profile);\r\n            if (!result.CanTranscode)\r\n            {\r\n                await UIUtilities.ShowErrorDialogAsync(\"Unable to Transcode!\", $\"Returned {result.FailureReason}\");\r\n                return;\r\n            }\r\n\r\n            _renderTask = result.TranscodeAsync();\r\n            _renderTask.Progress = OnProgress;\r\n            _renderTask.Completed += OnCompleted;\r\n        }\r\n\r\n        private async Task SaveComposition()\r\n        {\r\n            Analytics.TrackEvent(\"VideoEditor_CompositionSaved\");\r\n\r\n            if (_model.CompositionFile == null)\r\n            {\r\n                _model.CompositionFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(Path.ChangeExtension(_model.StorageFile.Name, \"uni-cmp\"));\r\n            }\r\n\r\n            await _model.Composition.SaveAsync(_model.CompositionFile);\r\n        }\r\n\r\n        public async void OnProgress(IAsyncActionWithProgress<double> info, double progress)\r\n        {\r\n            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\r\n            {\r\n                progressRing.Value = progress;\r\n                progressText.Text = $\"{progress:F0}\";\r\n            });\r\n        }\r\n\r\n        private async void OnCompleted(IAsyncActionWithProgress<double> info, AsyncStatus status)\r\n        {\r\n            Analytics.TrackEvent(\"VideoEditor_ExportFinished\");\r\n            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\r\n            {\r\n                if (status == AsyncStatus.Canceled)\r\n                {\r\n                    CloseProcessingOverlay.Begin();\r\n                    return;\r\n                }\r\n\r\n                if (status != AsyncStatus.Completed)\r\n                {\r\n                    progressText.Visibility = Visibility.Collapsed;\r\n                    completedText.Text = \"\\xE711\";\r\n                    completedText.Visibility = Visibility.Visible;\r\n                }\r\n                else\r\n                {\r\n                    progressText.Visibility = Visibility.Collapsed;\r\n                    completedText.Text = \"\\xE8FB\";\r\n                    completedText.Visibility = Visibility.Visible;\r\n                    _succeeded = true;\r\n                }\r\n\r\n                CloseProcessingOverlay.Begin();\r\n            });\r\n\r\n            _tempStream.Dispose();\r\n            _tempStream = null;\r\n            _renderTask = null;\r\n        }\r\n\r\n        private void OnWindowKeyUp(CoreWindow sender, KeyEventArgs e)\r\n        {\r\n            var playbackSession = mediaElement.MediaPlayer.PlaybackSession;\r\n            if (playbackSession == null)\r\n                return;\r\n\r\n            var delta = 10d;\r\n            if (sender.GetKeyState(VirtualKey.Shift) == CoreVirtualKeyStates.Down)\r\n                delta = 1;\r\n\r\n            if (e.VirtualKey == VirtualKey.Left)\r\n                playbackSession.Position = TimeSpan.FromSeconds(Math.Max(playbackSession.Position.TotalSeconds - delta, 0));\r\n\r\n            if (e.VirtualKey == VirtualKey.Right)\r\n                playbackSession.Position = TimeSpan.FromSeconds(Math.Min(playbackSession.Position.TotalSeconds + delta, playbackSession.NaturalDuration.TotalSeconds));\r\n\r\n            if (e.VirtualKey == VirtualKey.Space)\r\n            {\r\n                e.Handled = true;\r\n                TogglePlayPause();\r\n            }\r\n        }\r\n\r\n\r\n        private async void CloseProcessingOverlay_Completed(object sender, object e)\r\n        {\r\n            overlayGrid.Visibility = Visibility.Collapsed;\r\n\r\n            if (_succeeded && _tempFile != null)\r\n            {\r\n                await _model.UpdateFromStorageFileAsync(_tempFile, isTemporary: true);\r\n                _model.SyncContext.Post((o) =>\r\n                {\r\n                    _model.Parent.FileUploads.Remove(_model);\r\n                    _model.Parent.FileUploads.Add(_model);\r\n                }, null);\r\n\r\n\r\n                Close();\r\n            }\r\n        }\r\n\r\n        private async void Close()\r\n        {\r\n            OverlayService.GetForCurrentView().CloseOverlay();\r\n            DoCleanup();\r\n        }\r\n\r\n        private async void DoCleanup()\r\n        {\r\n            try\r\n            {\r\n                var window = CoreWindow.GetForCurrentThread();\r\n                window.KeyUp -= OnWindowKeyUp;\r\n\r\n                mediaElement.Source = null;\r\n                _mediaStreamSource = null;\r\n                _playTimer?.Stop();\r\n                _model = null;\r\n                _renderTask = null;\r\n                _tempFile = null;\r\n\r\n                if (ApiInformation.IsTypePresent(\"Windows.UI.ViewManagement.StatusBar\"))\r\n                {\r\n                    DisplayInformation.AutoRotationPreferences = DisplayOrientations.Portrait;\r\n                    await StatusBar.GetForCurrentView().ShowAsync();\r\n                }\r\n                else\r\n                {\r\n                    DisplayInformation.AutoRotationPreferences = DisplayOrientations.None;\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Logger.LogError(ex);\r\n            }\r\n\r\n            GC.Collect();\r\n        }\r\n\r\n        private void CancelButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            _renderTask?.Cancel();\r\n        }\r\n\r\n        private void RestartPlayTimer()\r\n        {\r\n            if (_playTimer == null)\r\n            {\r\n                _playTimer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(50) };\r\n                _playTimer.Tick += _playTimer_Tick;\r\n            }\r\n\r\n            _playTimer.Start();\r\n        }\r\n\r\n        private void ResizePreviewTimer()\r\n        {\r\n            if (_resizeTimer == null)\r\n            {\r\n                _resizeTimer = new DispatcherTimer() { Interval = TimeSpan.FromMilliseconds(100) };\r\n                _resizeTimer.Tick += _resizeTimer_Tick;\r\n            }\r\n\r\n            _playTimer?.Stop();\r\n            _resizeTimer.Start();\r\n        }\r\n\r\n        private void _resizeTimer_Tick(object sender, object e)\r\n        {\r\n            if (_playing)\r\n            {\r\n                Pause();\r\n                _wasPlaying = true;\r\n            }\r\n\r\n            UpdateMediaElementSource();\r\n            RestartPlayTimer();\r\n\r\n            _resizeTimer.Stop();\r\n        }\r\n\r\n        private void _playTimer_Tick(object sender, object e)\r\n        {\r\n            if (!_ready || mediaElement.MediaPlayer == null || mediaElement.MediaPlayer.PlaybackSession == null)\r\n            {\r\n                return;\r\n            }\r\n\r\n            _scrubSkip = true;\r\n            mediaElement.MediaPlayer.PlaybackSession.Position = TimeSpan.FromSeconds(Math.Min(Math.Max(0, (_startPosition != 0 ? _startPosition : rangeSelector.Value) - rangeSelector.RangeMin), rangeSelector.RangeMax));\r\n\r\n            _startPosition = 0;\r\n\r\n            if (_wasPlaying)\r\n            {\r\n                _wasPlaying = false;\r\n                Play();\r\n            }\r\n\r\n            _playTimer.Stop();\r\n        }\r\n\r\n        private void Play()\r\n        {\r\n            _playing = true;\r\n            playPauseButton.Content = PAUSE_GLYPH;\r\n            mediaElement.MediaPlayer.Play();\r\n        }\r\n\r\n        private void Pause()\r\n        {\r\n            _playing = false;\r\n            playPauseButton.Content = PLAY_GLYPH;\r\n            mediaElement.MediaPlayer.Pause();\r\n        }\r\n\r\n        private void TogglePlayPause()\r\n        {\r\n            if (_playing)\r\n            {\r\n                Pause();\r\n            }\r\n            else\r\n            {\r\n                Play();\r\n            }\r\n        }\r\n\r\n        private void PlayPauseButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            TogglePlayPause();\r\n        }\r\n\r\n        private async void PlaybackSession_PositionChanged(MediaPlaybackSession sender, object args)\r\n        {\r\n            if (_scrubSkip)\r\n            {\r\n                _scrubSkip = false;\r\n                return;\r\n            }\r\n\r\n            await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\r\n            {\r\n                _playbackSkip = true;\r\n\r\n                var value = Math.Min(rangeSelector.RangeMin + sender.Position.TotalSeconds, rangeSelector.RangeMax);\r\n                playheadPositionText.Text = FormatTimeSpan(TimeSpan.FromSeconds(value));\r\n                rangeSelector.Value = value;\r\n            });\r\n        }\r\n\r\n        private void AudioMuteButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            if ((mediaElement.MediaPlayer.IsMuted = !mediaElement.MediaPlayer.IsMuted))\r\n            {\r\n                AudioMuteSymbol.Symbol = Symbol.Mute;\r\n                VolumeSlider.IsEnabled = false;\r\n                VolumeSlider.Value = 0;\r\n            }\r\n            else\r\n            {\r\n                AudioMuteSymbol.Symbol = Symbol.Volume;\r\n                VolumeSlider.IsEnabled = true;\r\n                VolumeSlider.Value = mediaElement.MediaPlayer.Volume * 100;\r\n            }\r\n        }\r\n\r\n        private void VolumeSlider_ValueChanged(object sender, RangeBaseValueChangedEventArgs e)\r\n        {\r\n            if (mediaElement.MediaPlayer != null && !mediaElement.MediaPlayer.IsMuted)\r\n            {\r\n                mediaElement.MediaPlayer.Volume = e.NewValue / 100d;\r\n            }\r\n        }\r\n\r\n        private void snapStartButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            var old = rangeSelector.RangeMin;\r\n            rangeSelector.RangeMin = rangeSelector.Value;\r\n\r\n            OnRangeChanged(rangeSelector, new Controls.RangeChangedEventArgs(old, rangeSelector.RangeMin, Controls.RangeSelectorProperty.MinimumValue));\r\n        }\r\n\r\n        private void snapEndButton_Click(object sender, RoutedEventArgs e)\r\n        {\r\n            var old = rangeSelector.RangeMax;\r\n            rangeSelector.RangeMax = rangeSelector.Value;\r\n\r\n            OnRangeChanged(rangeSelector, new Controls.RangeChangedEventArgs(old, rangeSelector.RangeMax, Controls.RangeSelectorProperty.MaximumValue));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Program.cs",
    "content": "﻿using Unicord.Universal.Services;\nusing Windows.UI.Xaml;\n\nnamespace Unicord.Universal\n{\n    public static class Program\n    {\n        public static void Main(string[] args)\n        {\n            // we wanna start connecting to Discord as early in the process as possible to\n            // optimise for TTI\n            if (args.Length > 0 && !args[0].Contains(\"Background\"))\n                DiscordManager.KickoffConnectionAsync();\n\n            Application.Start((c) => new App());\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Unicord.Universal\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Unicord.Universal\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2021\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n// You can specify all the values or you can default the Build and Revision Numbers \n// by using the '*' as shown below:\n// [assembly: AssemblyVersion(\"1.0.*\")]\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]"
  },
  {
    "path": "Unicord.Universal/Properties/Default.rd.xml",
    "content": "<!--\n    This file contains Runtime Directives used by .NET Native. The defaults here are suitable for most\n    developers. However, you can modify these parameters to modify the behavior of the .NET Native\n    optimizer.\n\n    Runtime Directives are documented at https://go.microsoft.com/fwlink/?LinkID=391919\n\n    To fully enable reflection for App1.MyClass and all of its public/private members\n    <Type Name=\"App1.MyClass\" Dynamic=\"Required All\"/>\n\n    To enable dynamic creation of the specific instantiation of AppClass<T> over System.Int32\n    <TypeInstantiation Name=\"App1.AppClass\" Arguments=\"System.Int32\" Activate=\"Required Public\" />\n\n    Using the Namespace directive to apply reflection policy to all the types in a particular namespace\n    <Namespace Name=\"DataClasses.ViewModels\" Serialize=\"All\" />\n-->\n\n<Directives xmlns=\"http://schemas.microsoft.com/netfx/2013/01/metadata\">\n  <Application>\n    <!-- Add your application specific runtime directives here. -->\n    <Assembly Name=\"Microsoft.Toolkit.Uwp.Notifications\" Dynamic=\"Required All\" />\n\n    <Namespace Name=\"DSharpPlus.Entities\" Serialize=\"Required PublicAndInternal\" />\n    <Namespace Name=\"DSharpPlus.Net\" Serialize=\"Required PublicAndInternal\" />\n    <Namespace Name=\"DSharpPlus.Net.Abstractions\" Serialize=\"Required PublicAndInternal\" />\n    <Namespace Name=\"Microsoft.Extensions.Options\" Activate=\"Required Public\" />\n    <Namespace Name=\"Microsoft.Extensions.Logging\" Activate=\"Required Public\" />\n\n    <Type Name=\"Unicord.Universal.Logger.WinRTLoggerProvider\" Activate=\"Required All\" />\n    <Type Name=\"Unicord.Universal.Logger.WinRTLoggerProvider.WinRTLogger\" Activate=\"Required All\" />\n  </Application>\n</Directives>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/AboutSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AcknowledgementsText.Text\" xml:space=\"preserve\">\n    <value>Acknowledgements</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/AccountsSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AccountsSettingsPage.Tag\" xml:space=\"preserve\">\n    <value>Accounts</value>\n  </data>\n  <data name=\"BackgroundNotificationsDescriptionWin10\" xml:space=\"preserve\">\n    <value>Allow Unicord to run in the background to show notifications &amp; update live tiles.</value>\n  </data>\n  <data name=\"BackgroundNotificationsDescriptionWin11\" xml:space=\"preserve\">\n    <value>Allow Unicord to run in the background to show notifications.</value>\n  </data>\n  <data name=\"BackgroundNotificationsBlock.Title\" xml:space=\"preserve\">\n    <value>Background Notifications</value>\n  </data>\n  <data name=\"ContactsUnavailable.Text\" xml:space=\"preserve\">\n    <value>Contact syncing is not available on this device.</value>\n  </data>\n  <data name=\"EmailHideButton.Content\" xml:space=\"preserve\">\n    <value>Hide</value>\n  </data>\n  <data name=\"EmailRevealButton.Content\" xml:space=\"preserve\">\n    <value>Reveal</value>\n  </data>\n  <data name=\"FriendsText.Text\" xml:space=\"preserve\">\n    <value>Friends</value>\n  </data>\n  <data name=\"Loading\" xml:space=\"preserve\">\n    <value>Loading...</value>\n  </data>\n  <data name=\"LogoutBlock.Title\" xml:space=\"preserve\">\n    <value>Log out</value>\n  </data>\n  <data name=\"LogoutButton.Content\" xml:space=\"preserve\">\n    <value>Log out</value>\n  </data>\n  <data name=\"LogoutPromptMessage\" xml:space=\"preserve\">\n    <value>Are you sure you want to logout?</value>\n  </data>\n  <data name=\"LogoutPromptTitle\" xml:space=\"preserve\">\n    <value>Are you sure?</value>\n  </data>\n  <data name=\"StatisticsText.Text\" xml:space=\"preserve\">\n    <value>Statistics</value>\n  </data>\n  <data name=\"StatisticsBlock.Title\" xml:space=\"preserve\">\n    <value>Statistics</value>\n  </data>\n  <data name=\"StatisticsBlock.Description\" xml:space=\"preserve\">\n    <value>View detailed statistics about your account</value>\n  </data>\n  <data name=\"CopyStatisticsButton.Content\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"CopyStatisticsButtonText.Text\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"SyncContactsBlock.Description\" xml:space=\"preserve\">\n    <value>Sync your Discord friends with the People app.</value>\n  </data>\n  <data name=\"SyncContactsBlock.Title\" xml:space=\"preserve\">\n    <value>Sync Contacts</value>\n  </data>\n  <data name=\"SyncPeopleText.Text\" xml:space=\"preserve\">\n    <value>Sync my friends with [Windows People](ms-people:)</value>\n    <comment>Markdown capable</comment>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/AgeGatePage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"BackButton.Content\" xml:space=\"preserve\">\n    <value>Back to safety!</value>\n  </data>\n  <data name=\"ChannelWarningHeader.Text\" xml:space=\"preserve\">\n    <value>NSFW Content Ahead!</value>\n  </data>\n  <data name=\"ChannelWarningSubheader.Text\" xml:space=\"preserve\">\n    <value>Hey! There's probably NSFW content ahead, so I'm legally obliged to make sure you're over 18.\n\nAre you over 18 and willing to see NSFW content?</value>\n  </data>\n  <data name=\"ContinueButton.Content\" xml:space=\"preserve\">\n    <value>Take me there!</value>\n  </data>\n  <data name=\"DontAskAgain.Content\" xml:space=\"preserve\">\n    <value>Don't ask me again!</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/ChannelPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ChannelReadonlyText\" xml:space=\"preserve\">\n    <value>This channel is read-only.</value>\n  </data>\n  <data name=\"CloseEditButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Close</value>\n  </data>\n  <data name=\"DeleteAllButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"ImmuneSlowModeFormat\" xml:space=\"preserve\">\n    <value>You're immune to the {0} slow mode in this channel!</value>\n  </data>\n  <data name=\"MassDeleteMessage\" xml:space=\"preserve\">\n    <value>Are you sure you wanna delete all these messages?</value>\n  </data>\n  <data name=\"MassDeleteTitle\" xml:space=\"preserve\">\n    <value>Delete these messages?</value>\n  </data>\n  <data name=\"MessageChannelFormat\" xml:space=\"preserve\">\n    <value>Message {0}{1}</value>\n    <comment>Message {ChannelPrefix}{ChannelName}</comment>\n  </data>\n  <data name=\"MoreOptionsButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>More</value>\n  </data>\n  <data name=\"MuteButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Mute</value>\n  </data>\n  <data name=\"NewWindowItem.Text\" xml:space=\"preserve\">\n    <value>Open in a New Window</value>\n  </data>\n  <data name=\"NewWindowNormal.Text\" xml:space=\"preserve\">\n    <value>Open in Normal Window</value>\n  </data>\n  <data name=\"NewWindowOverlay.Text\" xml:space=\"preserve\">\n    <value>Open in Overlay Window</value>\n  </data>\n  <data name=\"NoMessagesHeader.Text\" xml:space=\"preserve\">\n    <value>Nothing to see here!</value>\n  </data>\n  <data name=\"NoMessagesSubheader.Text\" xml:space=\"preserve\">\n    <value>I couldn't load any messages for this channel, sorry!</value>\n  </data>\n  <data name=\"OpenLocalButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Open</value>\n  </data>\n  <data name=\"OpenPopoutButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Take a Photo or Video</value>\n  </data>\n  <data name=\"PinsButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Pinned Messages</value>\n  </data>\n  <data name=\"PinToStart.Text\" xml:space=\"preserve\">\n    <value>Pin to Start</value>\n  </data>\n  <data name=\"ReplyCancel.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"ReplyingTo.Text\" xml:space=\"preserve\">\n    <value>Replying to</value>\n  </data>\n  <data name=\"ReplyPingToggle.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Toggle pinging the original author.</value>\n  </data>\n  <data name=\"SearchButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Search</value>\n  </data>\n  <data name=\"SlowModeFormat\" xml:space=\"preserve\">\n    <value>Messages can be sent every {0}!</value>\n  </data>\n  <data name=\"UnpinFromStart.Text\" xml:space=\"preserve\">\n    <value>Unpin from Start</value>\n  </data>\n  <data name=\"UserListButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>User List</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/Controls.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AttachmentCopyUrlButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Copy URL</value>\n  </data>\n  <data name=\"AttachmentDownloadFailedText\" xml:space=\"preserve\">\n    <value>Something went wrong downloading that, maybe try again later?</value>\n  </data>\n  <data name=\"AttachmentDownloadFailedTitle\" xml:space=\"preserve\">\n    <value>Failed to download attachment!</value>\n  </data>\n  <data name=\"AttachmentExtensionPlaceholder\" xml:space=\"preserve\">\n    <value>Attachment File Extension</value>\n  </data>\n  <data name=\"AttachmentSaveButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"AttachmentShareButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Share</value>\n  </data>\n  <data name=\"EditButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Edit this clip</value>\n  </data>\n  <data name=\"EmoteSearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Search emotes...</value>\n  </data>\n  <data name=\"RemoveButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Remove</value>\n  </data>\n  <data name=\"ReplyingTo.Text\" xml:space=\"preserve\">\n    <value>replying to</value>\n  </data>\n  <data name=\"SharingTitleFormat\" xml:space=\"preserve\">\n    <value>Sharing {0}</value>\n  </data>\n  <data name=\"SpoilerButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Mark as Spoiler</value>\n  </data>\n  <data name=\"TranscodeFailedButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Transcode failed!</value>\n  </data>\n  <data name=\"TranscodingCancelButton.Content\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"TranscodingProgressHeader.Text\" xml:space=\"preserve\">\n    <value>Transcoding</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/Converters.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ListeningStatus\" xml:space=\"preserve\">\n    <value>Listening to</value>\n  </data>\n  <data name=\"ListeningStatusFormat\" xml:space=\"preserve\">\n    <value>Listening to {0}</value>\n  </data>\n  <data name=\"PlayingStatus\" xml:space=\"preserve\">\n    <value>Playing</value>\n  </data>\n  <data name=\"PlayingStatusFormat\" xml:space=\"preserve\">\n    <value>Playing {0}</value>\n    <comment>these don't localise well</comment>\n  </data>\n  <data name=\"StreamingStatus\" xml:space=\"preserve\">\n    <value>Streaming</value>\n  </data>\n  <data name=\"StreamingStatusFormat\" xml:space=\"preserve\">\n    <value>Streaming {0}</value>\n    <comment>i'll refactor this at some point i promise</comment>\n  </data>\n  <data name=\"UserChannelIconChangeFormat\" xml:space=\"preserve\">\n    <value>{0} changed the channel icon.</value>\n  </data>\n  <data name=\"UserChannelNameChangeFormat\" xml:space=\"preserve\">\n    <value>(0} changed the channel name.</value>\n  </data>\n  <data name=\"UserJoinedGroupFormat\" xml:space=\"preserve\">\n    <value>{0} joined the group.</value>\n  </data>\n  <data name=\"UserLeftGroupFormat\" xml:space=\"preserve\">\n    <value>{0} left the group.</value>\n  </data>\n  <data name=\"UserMessagePinFormat\" xml:space=\"preserve\">\n    <value>{0} pinned a message to this channel.</value>\n  </data>\n  <data name=\"UserPremiumGuildSubscriptionFormat\" xml:space=\"preserve\">\n    <value>{0} boosted the server!</value>\n  </data>\n  <data name=\"UserPremiumGuildSubscriptionTierFormat\" xml:space=\"preserve\">\n    <value>{0} boosted the server to level {2}!</value>\n    <comment>user, boost level (number)</comment>\n  </data>\n  <data name=\"UserPremiumMultiGuildSubscriptionFormat\" xml:space=\"preserve\">\n    <value>{0} boosted the server **{1}** times!</value>\n  </data>\n  <data name=\"UserPremiumMultiGuildSubscriptionTierFormat\" xml:space=\"preserve\">\n    <value>{0} boosted the server **{1}** times to level {2}!</value>\n  </data>\n  <data name=\"UserStartedCallFormat\" xml:space=\"preserve\">\n    <value>{0} started a call.</value>\n  </data>\n  <data name=\"WatchingStatus\" xml:space=\"preserve\">\n    <value>Watching</value>\n  </data>\n  <data name=\"WatchingStatusFormat\" xml:space=\"preserve\">\n    <value>Watching {0}</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/DMChannelsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DirectMessageChannels.Tag\" xml:space=\"preserve\">\n    <value>Direct Messages</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/Dialogs.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"BanDeleteFromLastDay.Content\" xml:space=\"preserve\">\n    <value>From the last 24 hours</value>\n  </data>\n  <data name=\"BanDeleteFromLastWeek.Content\" xml:space=\"preserve\">\n    <value>From the last 7 days</value>\n  </data>\n  <data name=\"BanDeleteMessagesBox.Header\" xml:space=\"preserve\">\n    <value>Delete Messages</value>\n  </data>\n  <data name=\"BanDeleteNoMessages.Content\" xml:space=\"preserve\">\n    <value>Don't delete messages</value>\n  </data>\n  <data name=\"BanDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Yeah!</value>\n  </data>\n  <data name=\"BanDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Nah</value>\n  </data>\n  <data name=\"BanDialogHeaderFormat\" xml:space=\"preserve\">\n    <value>Ban @{0}#{1}?</value>\n  </data>\n  <data name=\"BanReason.Header\" xml:space=\"preserve\">\n    <value>Ban Reason</value>\n  </data>\n  <data name=\"ChangeNicknameDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"ChangeNicknameDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"ChangeNicknameSubtitle.Text\" xml:space=\"preserve\">\n    <value>Nicknames are visible to everyone, so don't be a twat with them yeah?</value>\n  </data>\n  <data name=\"ChangeNicknameTitle.Text\" xml:space=\"preserve\">\n    <value>Change Nickname</value>\n  </data>\n  <data name=\"ConfirmationDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Yes</value>\n  </data>\n  <data name=\"ConfirmationDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"DeleteMessageDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Yeah!</value>\n  </data>\n  <data name=\"DeleteMessageDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Nah</value>\n  </data>\n  <data name=\"DeleteMessageDialog.Title\" xml:space=\"preserve\">\n    <value>Delete this message?</value>\n  </data>\n  <data name=\"ErrorDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"InstallThemeBy.Text\" xml:space=\"preserve\">\n    <value>By</value>\n  </data>\n  <data name=\"InstallThemeDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Install</value>\n  </data>\n  <data name=\"InstallThemeDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"InvalidThemeFileNotFound\" xml:space=\"preserve\">\n    <value>The supplied theme file couldn't be found!</value>\n  </data>\n  <data name=\"InvalidThemeFileNoThemesFound\" xml:space=\"preserve\">\n    <value>The supplied theme file doesn't appear to actually contain any themes!</value>\n  </data>\n  <data name=\"InvalidThemeFileTitle\" xml:space=\"preserve\">\n    <value>Invalid theme file!</value>\n  </data>\n  <data name=\"KickDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Yeah!</value>\n  </data>\n  <data name=\"KickDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Nah</value>\n  </data>\n  <data name=\"KickDialogHeaderFormat\" xml:space=\"preserve\">\n    <value>Kick @{0}#{1}?</value>\n  </data>\n  <data name=\"KickReason.Header\" xml:space=\"preserve\">\n    <value>Kick Reason</value>\n  </data>\n  <data name=\"PinMessageDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Hell yeah!</value>\n  </data>\n  <data name=\"PinMessageDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Maybe not</value>\n  </data>\n  <data name=\"PinMessageDialog.Title\" xml:space=\"preserve\">\n    <value>Pin this message?</value>\n  </data>\n  <data name=\"ProfileConnections.Header\" xml:space=\"preserve\">\n    <value>Connections</value>\n  </data>\n  <data name=\"ProfileJoinedServer.Text\" xml:space=\"preserve\">\n    <value>Joined Server</value>\n  </data>\n  <data name=\"ProfileMutualServers.Header\" xml:space=\"preserve\">\n    <value>Mutual Servers</value>\n  </data>\n  <data name=\"ProfileRoles.Text\" xml:space=\"preserve\">\n    <value>Roles</value>\n  </data>\n  <data name=\"ThemeInstallFailure\" xml:space=\"preserve\">\n    <value>Failed to install theme!</value>\n  </data>\n  <data name=\"TokenDialog.CloseButtonText\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"TokenDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Login</value>\n  </data>\n  <data name=\"TokenDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Load from File</value>\n  </data>\n  <data name=\"TokenSubtitle.Text\" xml:space=\"preserve\">\n    <value>Don't know where to look? [Click here for a guide.](https://example.com/)</value>\n  </data>\n  <data name=\"TokenTitle.Text\" xml:space=\"preserve\">\n    <value>Enter your Discord Token</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/Flyouts.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AddReaction.Text\" xml:space=\"preserve\">\n    <value>Add Reaction</value>\n  </data>\n  <data name=\"Ban.Text\" xml:space=\"preserve\">\n    <value>Ban</value>\n  </data>\n  <data name=\"ChangeNickname.Text\" xml:space=\"preserve\">\n    <value>Change Nickname</value>\n  </data>\n  <data name=\"Copy.Text\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"CopyID.Text\" xml:space=\"preserve\">\n    <value>Copy ID</value>\n  </data>\n  <data name=\"CopyLink.Text\" xml:space=\"preserve\">\n    <value>Copy URL</value>\n  </data>\n  <data name=\"CreateServerSubtitle.Text\" xml:space=\"preserve\">\n    <value>It's free!</value>\n  </data>\n  <data name=\"CreateServerTitle.Text\" xml:space=\"preserve\">\n    <value>Create a new server</value>\n  </data>\n  <data name=\"Delete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Edit.Text\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"EditMode.Text\" xml:space=\"preserve\">\n    <value>Edit Mode</value>\n  </data>\n  <data name=\"JoinExistingServerSubtitle.Text\" xml:space=\"preserve\">\n    <value>Use your invites!</value>\n  </data>\n  <data name=\"JoinExistingServerTitle.Text\" xml:space=\"preserve\">\n    <value>Join an existing server</value>\n  </data>\n  <data name=\"Kick.Text\" xml:space=\"preserve\">\n    <value>Kick</value>\n  </data>\n  <data name=\"LeaveServer.Text\" xml:space=\"preserve\">\n    <value>Leave Server</value>\n  </data>\n  <data name=\"MarkAsRead.Text\" xml:space=\"preserve\">\n    <value>Mark as Read</value>\n  </data>\n  <data name=\"Message.Text\" xml:space=\"preserve\">\n    <value>Message</value>\n  </data>\n  <data name=\"Mute.Text\" xml:space=\"preserve\">\n    <value>Mute</value>\n  </data>\n  <data name=\"NewWindow.Text\" xml:space=\"preserve\">\n    <value>Open in a new Window</value>\n  </data>\n  <data name=\"Pin.Text\" xml:space=\"preserve\">\n    <value>Pin Message</value>\n  </data>\n  <data name=\"PinToStart.Text\" xml:space=\"preserve\">\n    <value>Pin to Start</value>\n  </data>\n  <data name=\"Profile.Text\" xml:space=\"preserve\">\n    <value>Profile</value>\n  </data>\n  <data name=\"Reply.Text\" xml:space=\"preserve\">\n    <value>Reply</value>\n  </data>\n  <data name=\"SendMessage.Text\" xml:space=\"preserve\">\n    <value>Send Message</value>\n  </data>\n  <data name=\"ShowFullProfile.Text\" xml:space=\"preserve\">\n    <value>Show Full Profile</value>\n  </data>\n  <data name=\"Unmute.Text\" xml:space=\"preserve\">\n    <value>Unmute</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/FriendsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"FriendsAllItem.Header\" xml:space=\"preserve\">\n    <value>All</value>\n  </data>\n  <data name=\"FriendsBlockedItem.Header\" xml:space=\"preserve\">\n    <value>Blocked</value>\n  </data>\n  <data name=\"FriendsHeader.Text\" xml:space=\"preserve\">\n    <value>Friends</value>\n  </data>\n  <data name=\"FriendsOnlineItem.Header\" xml:space=\"preserve\">\n    <value>Online</value>\n  </data>\n  <data name=\"FriendsPendingItem.Header\" xml:space=\"preserve\">\n    <value>Pending</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/LoginPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"LoadFileButton.Content\" xml:space=\"preserve\">\n    <value>Load from file...</value>\n  </data>\n  <data name=\"LoginButton.Content\" xml:space=\"preserve\">\n    <value>Login</value>\n  </data>\n  <data name=\"LoginWithDiscordButton.Content\" xml:space=\"preserve\">\n    <value>Login with Discord</value>\n  </data>\n  <data name=\"LoginWithTokenButton.Content\" xml:space=\"preserve\">\n    <value>Login with Token</value>\n  </data>\n  <data name=\"TokenTextBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Discord Token</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/MediaSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AdvancedHeader.Header\" xml:space=\"preserve\">\n    <value>Advanced</value>\n  </data>\n  <data name=\"AlwaysCompress.Content\" xml:space=\"preserve\">\n    <value>Always compress before sending</value>\n  </data>\n  <data name=\"AudioOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>Audio Options</value>\n  </data>\n  <data name=\"BitrateSlider.Header\" xml:space=\"preserve\">\n    <value>Bitrate</value>\n  </data>\n  <data name=\"CompressIfNeeded.Content\" xml:space=\"preserve\">\n    <value>Compress if the file is above your upload limit</value>\n  </data>\n  <data name=\"EncoderPriorityBox.Header\" xml:space=\"preserve\">\n    <value>Encoder Priority</value>\n  </data>\n  <data name=\"EncoderPriorityQuality.Content\" xml:space=\"preserve\">\n    <value>Prioritise quality, smaller file sizes</value>\n  </data>\n  <data name=\"EncoderPrioritySpeed.Content\" xml:space=\"preserve\">\n    <value>Prioritise speed, larger file sizes</value>\n  </data>\n  <data name=\"LargePresetItem.Text\" xml:space=\"preserve\">\n    <value>Large</value>\n  </data>\n  <data name=\"LargePresetSubheader.Text\" xml:space=\"preserve\">\n    <value>720p, ~1536kbps</value>\n  </data>\n  <data name=\"MediaCompressionBlock.Description\" xml:space=\"preserve\">\n    <value>Unicord can automatically compress audio, video and images to fit within your upload limit.</value>\n  </data>\n  <data name=\"MediaCompressionBlock.Title\" xml:space=\"preserve\">\n    <value>Automatically Compress Media</value>\n  </data>\n  <data name=\"MediumPresetItem.Text\" xml:space=\"preserve\">\n    <value>Medium</value>\n  </data>\n  <data name=\"MediumPresetSubheader.Text\" xml:space=\"preserve\">\n    <value>480p, ~768kbps</value>\n  </data>\n  <data name=\"NeverCompress.Content\" xml:space=\"preserve\">\n    <value>Never compress media</value>\n  </data>\n  <data name=\"ResolutionBox.Header\" xml:space=\"preserve\">\n    <value>Resolution</value>\n  </data>\n  <data name=\"SmallPresetItem.Text\" xml:space=\"preserve\">\n    <value>Small</value>\n  </data>\n  <data name=\"SmallPresetSubheader.Text\" xml:space=\"preserve\">\n    <value>360p, ~512kbps</value>\n  </data>\n  <data name=\"TinyPresetItem.Text\" xml:space=\"preserve\">\n    <value>Tiny</value>\n  </data>\n  <data name=\"TinyPresetSubheader.Text\" xml:space=\"preserve\">\n    <value>144p, ~256kbps</value>\n  </data>\n  <data name=\"Title.Text\" xml:space=\"preserve\">\n    <value>Audio and Video</value>\n  </data>\n  <data name=\"VideoOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>Video Options</value>\n  </data>\n  <data name=\"VideoOptionsSubheader.Text\" xml:space=\"preserve\">\n    <value>If you know what you're doing, you can adjust the quality, bitrate and resolution of the video output.</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/MessagingSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AdjustRoleColoursBlock.Title\" xml:space=\"preserve\">\n    <value>Adjust User Colours for Readability</value>\n  </data>\n  <data name=\"AdjustRoleColoursHeader.Text\" xml:space=\"preserve\">\n    <value>Contrast Adjustment</value>\n  </data>\n  <data name=\"AutoPlayGIFsBlock.Title\" xml:space=\"preserve\">\n    <value>Automatically Play GIFs</value>\n  </data>\n  <data name=\"ChatHeader.Text\" xml:space=\"preserve\">\n    <value>Messages</value>\n  </data>\n  <data name=\"EnableSpoilersBlock.Title\" xml:space=\"preserve\">\n    <value>Hide Spoilered Content</value>\n  </data>\n  <data name=\"LearnMoreButton.Content\" xml:space=\"preserve\">\n    <value>More about contrast</value>\n  </data>\n  <data name=\"MessagingSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Text and Images</value>\n  </data>\n  <data name=\"MinimumContrastSlider.Header\" xml:space=\"preserve\">\n    <value>Minimum Contrast</value>\n  </data>\n  <data name=\"PromptLinksBlock.Description\" xml:space=\"preserve\">\n    <value>With this option enabled, you will be prompted by Windows before opening insecure links.</value>\n    <comment>Tooltip for previous text</comment>\n  </data>\n  <data name=\"PromptLinksBlock.Title\" xml:space=\"preserve\">\n    <value>Prompt for Untrusted Links</value>\n  </data>\n  <data name=\"ShowHugeEmojiBlock.Title\" xml:space=\"preserve\">\n    <value>Huge Emoji</value>\n  </data>\n  <data name=\"ShowStatusGlyphsBlock.Title\" xml:space=\"preserve\">\n    <value>Colourblind-friendly Status Indicators</value>\n  </data>\n  <data name=\"TimestampsSubheader.Text\" xml:space=\"preserve\">\n    <value>How do you want timestamps on messages to appear?</value>\n  </data>\n  <data name=\"TimestampStyleAbsolute.Text\" xml:space=\"preserve\">\n    <value>Absolute</value>\n  </data>\n  <data name=\"TimestampStyleBlock.Title\" xml:space=\"preserve\">\n    <value>Timestamp Style</value>\n  </data>\n  <data name=\"TimestampStyleBoth.Text\" xml:space=\"preserve\">\n    <value>Both</value>\n  </data>\n  <data name=\"TimestampStyleRelative.Text\" xml:space=\"preserve\">\n    <value>Relative</value>\n  </data>\n  <data name=\"EnableGuildBrowsingBlock.Title\" xml:space=\"preserve\">\n    <value>Restore Last Accessed Channel on Server Click</value>\n  </data>\n  <data name=\"EnableGuildBrowsingBlock.Description\" xml:space=\"preserve\">\n    <value>In previous versions of Unicord, clicking a server didn't return to the last accessed channel. Disable this setting to restore that behaviour.</value>\n  </data>\n  <data name=\"EnableWebPBlock.Title\" xml:space=\"preserve\">\n    <value>Use Webp Where Possible</value>\n  </data>\n  <data name=\"EnableWebPBlock.Description\" xml:space=\"preserve\">\n    <value>Reduce bandwidth with a more efficient image codec, may be slower on older devices!</value>\n  </data>\n  <data name=\"WebPDownloadButton.Content\" xml:space=\"preserve\">\n    <value>Get from the Microsoft Store</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/NotificationsSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DesktopNotificationsUnavailable.Text\" xml:space=\"preserve\">\n    <value>Notifications are not supported on this platform.</value>\n  </data>\n  <data name=\"EnableBadgeCount.Description\" xml:space=\"preserve\">\n    <value>Show the number of unread Mentions in the Taskbar</value>\n  </data>\n  <data name=\"EnableBadgeCount.Title\" xml:space=\"preserve\">\n    <value>Enable Mentions Badge</value>\n  </data>\n  <data name=\"EnableBadgeUnread.Description\" xml:space=\"preserve\">\n    <value>Show an icon in the Taskbar to indicate unread messages</value>\n  </data>\n  <data name=\"EnableBadgeUnread.Title\" xml:space=\"preserve\">\n    <value>Enable Unread Badge</value>\n  </data>\n  <data name=\"EnableDesktopNotifications.Description\" xml:space=\"preserve\">\n    <value>Show notifications for Mentions and Direct Messages on the Desktop and in Notification Center</value>\n  </data>\n  <data name=\"EnableDesktopNotifications.Title\" xml:space=\"preserve\">\n    <value>Enable Desktop Notifications</value>\n  </data>\n  <data name=\"EnableLiveTiles.Description\" xml:space=\"preserve\">\n    <value>Show Discord messages on Tiles pinned to Start</value>\n  </data>\n  <data name=\"EnableLiveTiles.Title\" xml:space=\"preserve\">\n    <value>Enable Live Tiles</value>\n  </data>\n  <data name=\"EnableNotificationsDescriptionWin10\" xml:space=\"preserve\">\n    <value>Show notifications for Discord messages in Start, Action Centre, and the Taskbar</value>\n  </data>\n  <data name=\"EnableNotificationsDescriptionWin11\" xml:space=\"preserve\">\n    <value>Show notifications for Discord messages in Notification Center and on the Taskbar</value>\n  </data>\n  <data name=\"EnableNotifications.Title\" xml:space=\"preserve\">\n    <value>Enable Notifications</value>\n  </data>\n  <data name=\"EnableDesktopNotificationsDescriptionWin10\" xml:space=\"preserve\">\n    <value>Show notifications for Mentions and Direct Messages on the Desktop and in Action Centre</value>\n  </data>\n  <data name=\"EnableDesktopNotificationsDescriptionWin11\" xml:space=\"preserve\">\n    <value>Show notifications for Mentions and Direct Messages on the Desktop and in Notification Center</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/Permissions.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AccessChannelsSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to view this channel by default. Disabling this will make the channel private.</value>\n  </data>\n  <data name=\"AccessChannelsTitle\" xml:space=\"preserve\">\n    <value>View Channel</value>\n  </data>\n  <data name=\"AddReactionsSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to add new reactions to a message in this channel.</value>\n  </data>\n  <data name=\"AddReactionsTitle\" xml:space=\"preserve\">\n    <value>Allow Reactions</value>\n  </data>\n  <data name=\"AttachFilesSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to upload files or media in this channel.</value>\n  </data>\n  <data name=\"AttachFilesTitle\" xml:space=\"preserve\">\n    <value>Attach Files</value>\n  </data>\n  <data name=\"CreateInstantInviteSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to create invite links for this channel.</value>\n  </data>\n  <data name=\"CreateInstantInviteTitle\" xml:space=\"preserve\">\n    <value>Create Invite</value>\n  </data>\n  <data name=\"DeafenMembersSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to server deafen other members in this voice channel.</value>\n  </data>\n  <data name=\"DeafenMembersTitle\" xml:space=\"preserve\">\n    <value>Deafen Members</value>\n  </data>\n  <data name=\"EmbedLinksSubtitle\" xml:space=\"preserve\">\n    <value>Allows generating embedded contents for links posted in this channel.</value>\n  </data>\n  <data name=\"EmbedLinksTitle\" xml:space=\"preserve\">\n    <value>Embed Links</value>\n  </data>\n  <data name=\"ManageChannelsSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to delete this channel, as well as cahnge it's name, description and settings.</value>\n  </data>\n  <data name=\"ManageChannelsTitle\" xml:space=\"preserve\">\n    <value>Manage Channel</value>\n  </data>\n  <data name=\"ManageMessagesSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to delete and pin messages.</value>\n  </data>\n  <data name=\"ManageMessagesTitle\" xml:space=\"preserve\">\n    <value>Manage Messages</value>\n  </data>\n  <data name=\"ManageRolesSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to change this channel's permissions.</value>\n  </data>\n  <data name=\"ManageRolesTitle\" xml:space=\"preserve\">\n    <value>Manage Permissions</value>\n  </data>\n  <data name=\"ManageWebhooksSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to manage webhooks in this channel.</value>\n  </data>\n  <data name=\"ManageWebhooksTitle\" xml:space=\"preserve\">\n    <value>Manage Webhooks</value>\n  </data>\n  <data name=\"MentionEveryoneSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to use @everyone and @here in this channel, and @mention all roles.</value>\n  </data>\n  <data name=\"MentionEveryoneTitle\" xml:space=\"preserve\">\n    <value>Mention @everyone, @here, and All Roles</value>\n  </data>\n  <data name=\"MoveMembersSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to move other members to and from this voice channel, or disconnect them.</value>\n  </data>\n  <data name=\"MoveMembersTitle\" xml:space=\"preserve\">\n    <value>Move Members</value>\n  </data>\n  <data name=\"MuteMembersSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to server mute other members in this voice channel.</value>\n  </data>\n  <data name=\"MuteMembersTitle\" xml:space=\"preserve\">\n    <value>Mute Members</value>\n  </data>\n  <data name=\"PrioritySpeakerSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to be more easily heard in this voice channel when using their Push to Talk (Priority) keybind.</value>\n  </data>\n  <data name=\"PrioritySpeakerTitle\" xml:space=\"preserve\">\n    <value>Priority Speaker</value>\n  </data>\n  <data name=\"ReadMessageHistorySubtitle\" xml:space=\"preserve\">\n    <value>Allows members to read previous messages sent in this channel. Without this permission, members can only see messages sent when they're viewing this channel.</value>\n  </data>\n  <data name=\"ReadMessageHistoryTitle\" xml:space=\"preserve\">\n    <value>Read Message History</value>\n  </data>\n  <data name=\"SendMessagesSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to send messages in this channel.</value>\n  </data>\n  <data name=\"SendMessagesTitle\" xml:space=\"preserve\">\n    <value>Send Messages</value>\n  </data>\n  <data name=\"SendTtsMessagesSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to send text-to-speech messages in this channel.</value>\n  </data>\n  <data name=\"SendTtsMessagesTitle\" xml:space=\"preserve\">\n    <value>Send Text-to-Speech Messages</value>\n  </data>\n  <data name=\"SpeakSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to talk in this voice channel. Disable this and Access Channels to create a private voice channel.</value>\n  </data>\n  <data name=\"SpeakTitle\" xml:space=\"preserve\">\n    <value>Speak</value>\n  </data>\n  <data name=\"StreamSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to use their webcam, screen share, or Go Live in this channel.</value>\n  </data>\n  <data name=\"StreamTitle\" xml:space=\"preserve\">\n    <value>Video</value>\n  </data>\n  <data name=\"UseExternalEmojisSubtitle\" xml:space=\"preserve\">\n    <value>Allows Discord Nitro members to use emoji from other servers.</value>\n  </data>\n  <data name=\"UseExternalEmojisTitle\" xml:space=\"preserve\">\n    <value>Use External Emoji</value>\n  </data>\n  <data name=\"UseVoiceDetectionSubtitle\" xml:space=\"preserve\">\n    <value>Disabling this permission enforces the use of push-to-talk in this channel.</value>\n  </data>\n  <data name=\"UseVoiceDetectionTitle\" xml:space=\"preserve\">\n    <value>Use Voice Activity</value>\n  </data>\n  <data name=\"UseVoiceSubtitle\" xml:space=\"preserve\">\n    <value>Allows members to join this voice channel and hear others.</value>\n  </data>\n  <data name=\"UseVoiceTitle\" xml:space=\"preserve\">\n    <value>Connect</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/PinsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"NoPinsHeader.Text\" xml:space=\"preserve\">\n    <value>No pins!</value>\n  </data>\n  <data name=\"NoPinsSubheader.Text\" xml:space=\"preserve\">\n    <value>This channel has no pins! If you have the permissions, go pin something!</value>\n  </data>\n  <data name=\"PinsHeader.Text\" xml:space=\"preserve\">\n    <value>Pinned Messages</value>\n  </data>\n  <data name=\"RatelimitedHeader.Text\" xml:space=\"preserve\">\n    <value>Whoops!</value>\n  </data>\n  <data name=\"RatelimitedSubheader.Text\" xml:space=\"preserve\">\n    <value>Hey! Slow down there, you're being ratelimited!</value>\n  </data>\n  <data name=\"ErroredHeader.Text\" xml:space=\"preserve\">\n    <value>Whoops!</value>\n  </data>\n  <data name=\"ErroredSubheader.Text\" xml:space=\"preserve\">\n    <value>Something went wrong loading pinned messages.</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/Resources.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AppDisplayDescription\" xml:space=\"preserve\">\n    <value>A free, open source Discord Client for Windows 10 and Windows 10 Mobile, that tries to provide a fast, efficient, native feeling Discord experience.</value>\n  </data>\n  <data name=\"AppDisplayDescriptionText.Text\" xml:space=\"preserve\">\n    <value>A Discord client for the Universal Windows Platform</value>\n  </data>\n  <data name=\"AppDisplayName\" xml:space=\"preserve\">\n    <value>Unicord</value>\n  </data>\n  <data name=\"AppDisplayNameText.Text\" xml:space=\"preserve\">\n    <value>Unicord</value>\n  </data>\n  <data name=\"DevAppDisplayName\" xml:space=\"preserve\">\n    <value>Unicord Canary</value>\n  </data>\n  <data name=\"LoginFailedDialogMessage\" xml:space=\"preserve\">\n    <value>Something went wrong logging you in! Check your details and try again!</value>\n  </data>\n  <data name=\"LoginFailedDialogTitle\" xml:space=\"preserve\">\n    <value>Unable to login!</value>\n  </data>\n  <data name=\"RecentChannelsJumpListGroup\" xml:space=\"preserve\">\n    <value>Recent Channels</value>\n  </data>\n  <data name=\"RecentPeopleJumpListGroup\" xml:space=\"preserve\">\n    <value>Recent People</value>\n  </data>\n  <data name=\"ServerUnavailableMessage\" xml:space=\"preserve\">\n    <value>It seems this server is having some problems, and is currently unavailable, sorry!</value>\n  </data>\n  <data name=\"ServerUnavailableTitle\" xml:space=\"preserve\">\n    <value>This server is unavailable!</value>\n  </data>\n  <data name=\"VerifyLoginDisplayReason\" xml:space=\"preserve\">\n    <value>Verify your identitiy to login to Unicord!</value>\n  </data>\n  <data name=\"VerifyNSFWDisplayReason\" xml:space=\"preserve\">\n    <value>Verify your identity to access this channel!</value>\n  </data>\n  <data name=\"VerifySettingsDisplayReason\" xml:space=\"preserve\">\n    <value>Verify your identity to open settings!</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/SearchPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ResultsText.Text\" xml:space=\"preserve\">\n    <value>results</value>\n  </data>\n  <data name=\"NoResultsHeader.Text\" xml:space=\"preserve\">\n    <value>We searched far and wide.</value>\n  </data>\n  <data name=\"NoResultsSubheader.Text\" xml:space=\"preserve\">\n    <value>Unfortunately, no results were found.</value>\n  </data>\n  <data name=\"SearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Search...</value>\n  </data>\n  <data name=\"SearchHeader.Text\" xml:space=\"preserve\">\n    <value>Search</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/SecuritySettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AccessNSFWBlock.Title\" xml:space=\"preserve\">\n    <value>Access NSFW channels</value>\n  </data>\n  <data name=\"DiagnosticDataBlock.Title\" xml:space=\"preserve\">\n    <value>Send Diagnostic and Usage Data</value>\n  </data>\n  <data name=\"DiagnosticDataHeader.Text\" xml:space=\"preserve\">\n    <value>Diagnostic and Usage data</value>\n  </data>\n  <data name=\"LoginBlock.Title\" xml:space=\"preserve\">\n    <value>Login</value>\n  </data>\n  <data name=\"SecuritySettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Security and Privacy</value>\n  </data>\n  <data name=\"SettingsBlock.Title\" xml:space=\"preserve\">\n    <value>Change Settings</value>\n  </data>\n  <data name=\"StayAuthenticatedBlock.Title\" xml:space=\"preserve\">\n    <value>Keep me authenticated for</value>\n  </data>\n  <data name=\"WindowsHelloHeader.Text\" xml:space=\"preserve\">\n    <value>Windows Hello</value>\n  </data>\n  <data name=\"WindowsHelloOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>Require Windows Hello authentication to:</value>\n  </data>\n  <data name=\"WindowsHelloSubHeader.Text\" xml:space=\"preserve\">\n    <value>Require Windows Hello authentication to:</value>\n  </data>\n  <data name=\"WindowsHelloToggle.Text\" xml:space=\"preserve\">\n    <value />\n  </data>\n  <data name=\"WindowsHelloUnavailable.Text\" xml:space=\"preserve\">\n    <value>Windows Hello is not available on this device. Wanna change that?</value>\n  </data>\n  <data name=\"OpenSettingsButton.Content\" xml:space=\"preserve\">\n    <value>Open Settings</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/SettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AboutItem.Content\" xml:space=\"preserve\">\n    <value>About</value>\n  </data>\n  <data name=\"AccountsItem.Content\" xml:space=\"preserve\">\n    <value>Accounts</value>\n  </data>\n  <data name=\"MediaItem.Content\" xml:space=\"preserve\">\n    <value>Audio and Video</value>\n  </data>\n  <data name=\"MessagingItem.Content\" xml:space=\"preserve\">\n    <value>Text and Images</value>\n  </data>\n  <data name=\"NotificationsItem.Content\" xml:space=\"preserve\">\n    <value>Notifications</value>\n  </data>\n  <data name=\"SecurityItem.Content\" xml:space=\"preserve\">\n    <value>Security and Privacy</value>\n  </data>\n  <data name=\"ThemesItem.Content\" xml:space=\"preserve\">\n    <value>Appearence and Themes</value>\n  </data>\n  <data name=\"VoiceItem.Content\" xml:space=\"preserve\">\n    <value>Voice Calls</value>\n  </data>\n  <data name=\"SearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Search</value>\n  </data>\n  <data name=\"EditProfileText.Text\" xml:space=\"preserve\">\n    <value>Edit Profiles</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/ThemesSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AppThemeBlock.Description\" xml:space=\"preserve\">\n    <value>Unicord supports a number of different visual styles to enhance your experience.</value>\n  </data>\n  <data name=\"AppThemeBlock.Title\" xml:space=\"preserve\">\n    <value>App Theme</value>\n  </data>\n  <data name=\"AppThemeFluent.Content\" xml:space=\"preserve\">\n    <value>Fluent</value>\n  </data>\n  <data name=\"AppThemePerformance.Content\" xml:space=\"preserve\">\n    <value>Performance</value>\n  </data>\n  <data name=\"AppThemeSunValley.Content\" xml:space=\"preserve\">\n    <value>Sun Valley (Windows 11)</value>\n  </data>\n  <data name=\"CloseButton.Content\" xml:space=\"preserve\">\n    <value>Close</value>\n  </data>\n  <data name=\"ColourSchemeBlock.Description\" xml:space=\"preserve\">\n    <value>This setting won't be synchronised with Discord.</value>\n  </data>\n  <data name=\"ColourSchemeBlock.Title\" xml:space=\"preserve\">\n    <value>Colour Scheme</value>\n  </data>\n  <data name=\"ColourSchemeDark.Content\" xml:space=\"preserve\">\n    <value>Dark</value>\n  </data>\n  <data name=\"ColourSchemeDefault.Content\" xml:space=\"preserve\">\n    <value>System Default</value>\n  </data>\n  <data name=\"ColourSchemeLight.Content\" xml:space=\"preserve\">\n    <value>Light</value>\n  </data>\n  <data name=\"EnableAfterInstallationCheckBox.Content\" xml:space=\"preserve\">\n    <value>Enable theme after installation</value>\n  </data>\n  <data name=\"InstallButton.Content\" xml:space=\"preserve\">\n    <value>Install</value>\n  </data>\n  <data name=\"MainThemeHeader.Text\" xml:space=\"preserve\">\n    <value>Themes</value>\n  </data>\n  <data name=\"MainThemeSubheader.Text\" xml:space=\"preserve\">\n    <value>Wanna spice things up? Download some themes or learn how to make your own!</value>\n  </data>\n  <data name=\"RelaunchRequired.Text\" xml:space=\"preserve\">\n    <value>Your changes will take effect once Unicord has been restarted.</value>\n  </data>\n  <data name=\"ThemeAlreadyInstalledMessage\" xml:space=\"preserve\">\n    <value>This theme is already installed, do you want to overwrite it?</value>\n  </data>\n  <data name=\"ThemeAlreadyInstalledTitle\" xml:space=\"preserve\">\n    <value>Theme already installed!</value>\n  </data>\n  <data name=\"ThemeChangedMessage\" xml:space=\"preserve\">\n    <value>In order to update your theme, Unicord must restart. Do you want to restart now?</value>\n  </data>\n  <data name=\"ThemeChangedTitle\" xml:space=\"preserve\">\n    <value>Theme changed!</value>\n  </data>\n  <data name=\"ThemeInvalidDoesNotExist\" xml:space=\"preserve\">\n    <value>Tried to load a theme that doesn't exist on disk. The theme has been uninstalled.</value>\n  </data>\n  <data name=\"ThemeInvalidNoJson\" xml:space=\"preserve\">\n    <value>This file does not appear to be a Unicord theme, missing theme.json!</value>\n  </data>\n  <data name=\"ThemeInvalidNoLogo\" xml:space=\"preserve\">\n    <value>This theme specifies a logo file that doesn't exist!</value>\n  </data>\n  <data name=\"ThemeLoadFailedFormat\" xml:space=\"preserve\">\n    <value>Loading your currently selected theme failed!\n{0}</value>\n  </data>\n  <data name=\"ThemePreInstallCheckFailed\" xml:space=\"preserve\">\n    <value>A pre-install check failed! This probably means your device or the version of Windows you're running is not supported by this theme. Sorry!</value>\n  </data>\n  <data name=\"ThemesSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Appearance</value>\n  </data>\n  <data name=\"ThemeUnsupportedWindowsVersion\" xml:space=\"preserve\">\n    <value>The version of Windows you're running is not supported by this theme. Sorry!</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/UserListPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"UserListHeader.Text\" xml:space=\"preserve\">\n    <value>Users</value>\n  </data>\n  <data name=\"UserSearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Search Users</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/VideoEditor.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"CannotEditClipMessage\" xml:space=\"preserve\">\n    <value>Currently, you can only edit video clips from files. Sorry!</value>\n  </data>\n  <data name=\"CannotEditClipTitle\" xml:space=\"preserve\">\n    <value>This clip cannot be edited.</value>\n  </data>\n  <data name=\"LoadPreviousEditsMessage\" xml:space=\"preserve\">\n    <value>It looks like you've edited this file before, do you want to load your previous edits?</value>\n  </data>\n  <data name=\"LoadPreviousEditsTitle\" xml:space=\"preserve\">\n    <value>Load previous edit?</value>\n  </data>\n  <data name=\"ProcessingVideoHeader.Text\" xml:space=\"preserve\">\n    <value>Processing Video </value>\n  </data>\n  <data name=\"SaveChangesMessage\" xml:space=\"preserve\">\n    <value>Do you want to save your changes? They'll be loaded the next time you edit this clip.</value>\n  </data>\n  <data name=\"SaveChangesTitle\" xml:space=\"preserve\">\n    <value>Save your changes?</value>\n  </data>\n  <data name=\"VideoEditorHeader.Text\" xml:space=\"preserve\">\n    <value>Trim Video</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/Voice.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ConnectedStateFormat\" xml:space=\"preserve\">\n    <value>Connected to {0}!</value>\n  </data>\n  <data name=\"ConnectionState1\" xml:space=\"preserve\">\n    <value>Starting voice process...</value>\n  </data>\n  <data name=\"ConnectionState2\" xml:space=\"preserve\">\n    <value>Closing current connection...</value>\n  </data>\n  <data name=\"ConnectionState3\" xml:space=\"preserve\">\n    <value>Talking with Discord...</value>\n  </data>\n  <data name=\"ConnectionState4Format\" xml:space=\"preserve\">\n    <value>Connecting to {0}...</value>\n  </data>\n  <data name=\"DisconnectedState\" xml:space=\"preserve\">\n    <value>Disconnected</value>\n  </data>\n  <data name=\"InitialConnectionState\" xml:space=\"preserve\">\n    <value>Getting ready...</value>\n  </data>\n  <data name=\"ReconnectingState\" xml:space=\"preserve\">\n    <value>Reconnecting...</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-GB/VoiceSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AudioDevicesHeader.Text\" xml:space=\"preserve\">\n    <value>Audio Devices</value>\n  </data>\n  <data name=\"AudioDevicesSubheader.Text\" xml:space=\"preserve\">\n    <value>Here you can choose the audio devices you want to use for voice calls.</value>\n  </data>\n  <data name=\"AudioProcessingHeader.Text\" xml:space=\"preserve\">\n    <value>Audio Processing</value>\n  </data>\n  <data name=\"AutomaticGainControlBlock.Title\" xml:space=\"preserve\">\n    <value>Automatic Gain Control</value>\n  </data>\n  <data name=\"EchoCancellationBlock.Title\" xml:space=\"preserve\">\n    <value>Echo Cancellation</value>\n  </data>\n  <data name=\"InputDeviceBlock.Title\" xml:space=\"preserve\">\n    <value>Input Device</value>\n  </data>\n  <data name=\"InputDevices.Header\" xml:space=\"preserve\">\n    <value>Input Device</value>\n  </data>\n  <data name=\"NoiseSuppressionBlock.Description\" xml:space=\"preserve\">\n    <value>Automatically removes background hiss from your microphone.</value>\n  </data>\n  <data name=\"NoiseSuppressionBlock.Title\" xml:space=\"preserve\">\n    <value>Noise Suppression</value>\n  </data>\n  <data name=\"NoiseSuppressionDisabled.Content\" xml:space=\"preserve\">\n    <value>Disabled</value>\n  </data>\n  <data name=\"NoiseSuppressionHigh.Content\" xml:space=\"preserve\">\n    <value>High</value>\n  </data>\n  <data name=\"NoiseSuppressionLow.Content\" xml:space=\"preserve\">\n    <value>Low</value>\n  </data>\n  <data name=\"NoiseSuppressionMedium.Content\" xml:space=\"preserve\">\n    <value>Medium</value>\n  </data>\n  <data name=\"OutputDeviceBlock.Title\" xml:space=\"preserve\">\n    <value>Output Device</value>\n  </data>\n  <data name=\"OutputDevices.Header\" xml:space=\"preserve\">\n    <value>Output Device</value>\n  </data>\n  <data name=\"VoiceActivityBlock.Title\" xml:space=\"preserve\">\n    <value>Voice Activity</value>\n  </data>\n  <data name=\"VoiceSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Voice</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/AboutSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AcknowledgementsText.Text\" xml:space=\"preserve\">\n    <value>Acknowledgements</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/AccountsSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"BackgroundNotifications.Text\" xml:space=\"preserve\">\n    <value>Background Notifications</value>\n  </data>\n  <data name=\"ContactsUnavailable.Text\" xml:space=\"preserve\">\n    <value>Contact syncing is not available on this device.</value>\n  </data>\n  <data name=\"FriendsText.Text\" xml:space=\"preserve\">\n    <value>Friends</value>\n  </data>\n  <data name=\"LogoutButton.Content\" xml:space=\"preserve\">\n    <value>Logout</value>\n  </data>\n  <data name=\"LogoutPromptMessage\" xml:space=\"preserve\">\n    <value>Are you sure you want to logout?</value>\n  </data>\n  <data name=\"LogoutPromptTitle\" xml:space=\"preserve\">\n    <value>Are you sure?</value>\n  </data>\n  <data name=\"StatisticsText.Text\" xml:space=\"preserve\">\n    <value>Statistics</value>\n  </data>\n  <data name=\"StatisticsBlock.Title\" xml:space=\"preserve\">\n    <value>Statistics</value>\n  </data>\n  <data name=\"StatisticsBlock.Description\" xml:space=\"preserve\">\n    <value>View detailed statistics about your account</value>\n  </data>\n  <data name=\"CopyStatisticsButton.Content\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"CopyStatisticsButtonText.Text\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"SyncPeopleText.Text\" xml:space=\"preserve\">\n    <value>Sync my friends with [Windows People](ms-people:)</value>\n    <comment>Markdown capable</comment>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/AgeGatePage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"BackButton.Content\" xml:space=\"preserve\">\n    <value>Back to safety!</value>\n  </data>\n  <data name=\"ChannelWarningHeader.Text\" xml:space=\"preserve\">\n    <value>NSFW Content Ahead!</value>\n  </data>\n  <data name=\"ChannelWarningSubheader.Text\" xml:space=\"preserve\">\n    <value>Hey! There's probably NSFW content ahead, so I'm legally obliged to make sure you're over 18.\n\nAre you over 18 and willing to see NSFW content?</value>\n  </data>\n  <data name=\"ContinueButton.Content\" xml:space=\"preserve\">\n    <value>Take me there!</value>\n  </data>\n  <data name=\"DontAskAgain.Content\" xml:space=\"preserve\">\n    <value>Don't ask me again!</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/ChannelPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ChannelReadonlyText\" xml:space=\"preserve\">\n    <value>This channel is read-only.</value>\n  </data>\n  <data name=\"CloseEditButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Close</value>\n  </data>\n  <data name=\"DeleteAllButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"ImmuneSlowModeFormat\" xml:space=\"preserve\">\n    <value>You're immune to the {0} slow mode in this channel!</value>\n  </data>\n  <data name=\"MassDeleteMessage\" xml:space=\"preserve\">\n    <value>Are you sure you wanna delete all these messages?</value>\n  </data>\n  <data name=\"MassDeleteTitle\" xml:space=\"preserve\">\n    <value>Delete these messages?</value>\n  </data>\n  <data name=\"MessageChannelFormat\" xml:space=\"preserve\">\n    <value>Message {0}{1}</value>\n    <comment>Message {ChannelPrefix}{ChannelName}</comment>\n  </data>\n  <data name=\"MoreOptionsButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>More</value>\n  </data>\n  <data name=\"MuteButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Mute</value>\n  </data>\n  <data name=\"NewWindowItem.Text\" xml:space=\"preserve\">\n    <value>Open in a New Window</value>\n  </data>\n  <data name=\"NewWindowNormal.Text\" xml:space=\"preserve\">\n    <value>Open in Normal Window</value>\n  </data>\n  <data name=\"NewWindowOverlay.Text\" xml:space=\"preserve\">\n    <value>Open in Overlay Window</value>\n  </data>\n  <data name=\"NoMessagesHeader.Text\" xml:space=\"preserve\">\n    <value>Nothing to see here!</value>\n  </data>\n  <data name=\"NoMessagesSubheader.Text\" xml:space=\"preserve\">\n    <value>I couldn't load any messages for this channel, sorry!</value>\n  </data>\n  <data name=\"OpenLocalButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Open</value>\n  </data>\n  <data name=\"OpenPopoutButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Take a Photo or Video</value>\n  </data>\n  <data name=\"PinsButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Pinned Messages</value>\n  </data>\n  <data name=\"PinToStart.Text\" xml:space=\"preserve\">\n    <value>Pin to Start</value>\n  </data>\n  <data name=\"ReplyCancel.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"ReplyingTo.Text\" xml:space=\"preserve\">\n    <value>Replying to</value>\n  </data>\n  <data name=\"ReplyPingToggle.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Toggle pinging the original author.</value>\n  </data>\n  <data name=\"SearchButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Search</value>\n  </data>\n  <data name=\"SlowModeFormat\" xml:space=\"preserve\">\n    <value>Messages can be sent every {0}!</value>\n  </data>\n  <data name=\"UnpinFromStart.Text\" xml:space=\"preserve\">\n    <value>Unpin from Start</value>\n  </data>\n  <data name=\"UserListButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>User List</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/Controls.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AttachmentCopyUrlButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Copy URL</value>\n  </data>\n  <data name=\"AttachmentDownloadFailedText\" xml:space=\"preserve\">\n    <value>Something went wrong downloading that. Maybe try again later?</value>\n  </data>\n  <data name=\"AttachmentDownloadFailedTitle\" xml:space=\"preserve\">\n    <value>Failed to download!</value>\n  </data>\n  <data name=\"AttachmentExtensionFormat\" xml:space=\"preserve\">\n    <value>Attachment Extension (*{0})</value>\n  </data>\n  <data name=\"AttachmentSaveButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"AttachmentShareButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Share</value>\n  </data>\n  <data name=\"EditButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Edit this clip</value>\n  </data>\n  <data name=\"EmoteSearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Search emotes...</value>\n  </data>\n  <data name=\"RemoveButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Remove</value>\n  </data>\n  <data name=\"ReplyingTo.Text\" xml:space=\"preserve\">\n    <value>replying to</value>\n  </data>\n  <data name=\"SharingTitleFormat\" xml:space=\"preserve\">\n    <value>Sharing {0}</value>\n  </data>\n  <data name=\"SpoilerButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Mark as Spoiler</value>\n  </data>\n  <data name=\"TranscodeFailedButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Transcode failed!</value>\n  </data>\n  <data name=\"TranscodingCancelButton.Content\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"TranscodingProgressHeader.Text\" xml:space=\"preserve\">\n    <value>Transcoding</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/Converters.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ListeningStatus\" xml:space=\"preserve\">\n    <value>Listening to</value>\n  </data>\n  <data name=\"ListeningStatusFormat\" xml:space=\"preserve\">\n    <value>Listening to {0}</value>\n  </data>\n  <data name=\"PlayingStatus\" xml:space=\"preserve\">\n    <value>Playing</value>\n  </data>\n  <data name=\"PlayingStatusFormat\" xml:space=\"preserve\">\n    <value>Playing {0}</value>\n    <comment>these don't localize well</comment>\n  </data>\n  <data name=\"StreamingStatus\" xml:space=\"preserve\">\n    <value>Streaming</value>\n  </data>\n  <data name=\"StreamingStatusFormat\" xml:space=\"preserve\">\n    <value>Streaming {0}</value>\n    <comment>i'll refactor this at some point i promise</comment>\n  </data>\n  <data name=\"UserChannelIconChangeFormat\" xml:space=\"preserve\">\n    <value>{0} changed the channel icon.</value>\n  </data>\n  <data name=\"UserChannelNameChangeFormat\" xml:space=\"preserve\">\n    <value>(0} changed the channel name.</value>\n  </data>\n  <data name=\"UserJoinedGroupFormat\" xml:space=\"preserve\">\n    <value>{0} joined the group.</value>\n  </data>\n  <data name=\"UserLeftGroupFormat\" xml:space=\"preserve\">\n    <value>{0} left the group.</value>\n  </data>\n  <data name=\"UserMessagePinFormat\" xml:space=\"preserve\">\n    <value>{0} pinned a message to this channel.</value>\n  </data>\n  <data name=\"UserPremiumGuildSubscriptionFormat\" xml:space=\"preserve\">\n    <value>{0} boosted the server!</value>\n  </data>\n  <data name=\"UserPremiumGuildSubscriptionTierFormat\" xml:space=\"preserve\">\n    <value>{0} boosted the server to level {2}!</value>\n    <comment>user, boost level (number)</comment>\n  </data>\n  <data name=\"UserPremiumMultiGuildSubscriptionFormat\" xml:space=\"preserve\">\n    <value>{0} boosted the server **{1}** times!</value>\n  </data>\n  <data name=\"UserPremiumMultiGuildSubscriptionTierFormat\" xml:space=\"preserve\">\n    <value>{0} boosted the server **{1}** times to level {2}!</value>\n  </data>\n  <data name=\"UserStartedCallFormat\" xml:space=\"preserve\">\n    <value>{0} started a call.</value>\n  </data>\n  <data name=\"WatchingStatus\" xml:space=\"preserve\">\n    <value>Watching</value>\n  </data>\n  <data name=\"WatchingStatusFormat\" xml:space=\"preserve\">\n    <value>Watching {0}</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/DMChannelsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DirectMessageChannels.Tag\" xml:space=\"preserve\">\n    <value>Direct Messages</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/Dialogs.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"BanDeleteFromLastDay.Content\" xml:space=\"preserve\">\n    <value>From the last 24 hours</value>\n  </data>\n  <data name=\"BanDeleteFromLastWeek.Content\" xml:space=\"preserve\">\n    <value>From the last 7 days</value>\n  </data>\n  <data name=\"BanDeleteMessagesBox.Header\" xml:space=\"preserve\">\n    <value>Delete Messages</value>\n  </data>\n  <data name=\"BanDeleteNoMessages.Content\" xml:space=\"preserve\">\n    <value>Don't delete messages</value>\n  </data>\n  <data name=\"BanDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Yeah!</value>\n  </data>\n  <data name=\"BanDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Nah</value>\n  </data>\n  <data name=\"BanDialogHeaderFormat\" xml:space=\"preserve\">\n    <value>Ban @{0}#{1}?</value>\n  </data>\n  <data name=\"BanReason.Header\" xml:space=\"preserve\">\n    <value>Ban Reason</value>\n  </data>\n  <data name=\"ChangeNicknameDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Save</value>\n  </data>\n  <data name=\"ChangeNicknameDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"ChangeNicknameSubtitle.Text\" xml:space=\"preserve\">\n    <value>Nicknames are visible to everyone, so don't be a goofball with them please.</value>\n  </data>\n  <data name=\"ChangeNicknameTitle.Text\" xml:space=\"preserve\">\n    <value>Change Nickname</value>\n  </data>\n  <data name=\"ConfirmationDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Yes</value>\n  </data>\n  <data name=\"ConfirmationDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"DeleteMessageDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Yeah!</value>\n  </data>\n  <data name=\"DeleteMessageDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Nah</value>\n  </data>\n  <data name=\"DeleteMessageDialog.Title\" xml:space=\"preserve\">\n    <value>Delete this message?</value>\n  </data>\n  <data name=\"ErrorDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"InstallThemeBy.Text\" xml:space=\"preserve\">\n    <value>By</value>\n  </data>\n  <data name=\"InstallThemeDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Install</value>\n  </data>\n  <data name=\"InstallThemeDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Cancel</value>\n  </data>\n  <data name=\"InvalidThemeFileNotFound\" xml:space=\"preserve\">\n    <value>The supplied theme file couldn't be found!</value>\n  </data>\n  <data name=\"InvalidThemeFileNoThemesFound\" xml:space=\"preserve\">\n    <value>The supplied theme file doesn't appear to actually contain any themes!</value>\n  </data>\n  <data name=\"InvalidThemeFileTitle\" xml:space=\"preserve\">\n    <value>Invalid theme file!</value>\n  </data>\n  <data name=\"KickDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Yeah!</value>\n  </data>\n  <data name=\"KickDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Nah</value>\n  </data>\n  <data name=\"KickDialogHeaderFormat\" xml:space=\"preserve\">\n    <value>Kick @{0}#{1}?</value>\n  </data>\n  <data name=\"KickReason.Header\" xml:space=\"preserve\">\n    <value>Kick Reason</value>\n  </data>\n  <data name=\"PinMessageDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Hell yeah!</value>\n  </data>\n  <data name=\"PinMessageDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Maybe not</value>\n  </data>\n  <data name=\"PinMessageDialog.Title\" xml:space=\"preserve\">\n    <value>Pin this message?</value>\n  </data>\n  <data name=\"ProfileConnections.Header\" xml:space=\"preserve\">\n    <value>Connections</value>\n  </data>\n  <data name=\"ProfileJoinedServer.Text\" xml:space=\"preserve\">\n    <value>Joined Server</value>\n  </data>\n  <data name=\"ProfileMutualServers.Header\" xml:space=\"preserve\">\n    <value>Mutual Servers</value>\n  </data>\n  <data name=\"ProfileRoles.Text\" xml:space=\"preserve\">\n    <value>Roles</value>\n  </data>\n  <data name=\"ThemeInstallFailure\" xml:space=\"preserve\">\n    <value>Failed to install theme!</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/Flyouts.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AddReaction.Text\" xml:space=\"preserve\">\n    <value>Add Reaction</value>\n  </data>\n  <data name=\"Ban.Text\" xml:space=\"preserve\">\n    <value>Ban</value>\n  </data>\n  <data name=\"ChangeNickname.Text\" xml:space=\"preserve\">\n    <value>Change Nickname</value>\n  </data>\n  <data name=\"Copy.Text\" xml:space=\"preserve\">\n    <value>Copy</value>\n  </data>\n  <data name=\"CopyID.Text\" xml:space=\"preserve\">\n    <value>Copy ID</value>\n  </data>\n  <data name=\"CopyLink.Text\" xml:space=\"preserve\">\n    <value>Copy URL</value>\n  </data>\n  <data name=\"CreateServerSubtitle.Text\" xml:space=\"preserve\">\n    <value>It's free!</value>\n  </data>\n  <data name=\"CreateServerTitle.Text\" xml:space=\"preserve\">\n    <value>Create a new server</value>\n  </data>\n  <data name=\"Delete.Text\" xml:space=\"preserve\">\n    <value>Delete</value>\n  </data>\n  <data name=\"Edit.Text\" xml:space=\"preserve\">\n    <value>Edit</value>\n  </data>\n  <data name=\"EditMode.Text\" xml:space=\"preserve\">\n    <value>Edit Mode</value>\n  </data>\n  <data name=\"JoinExistingServerSubtitle.Text\" xml:space=\"preserve\">\n    <value>Use your invites!</value>\n  </data>\n  <data name=\"JoinExistingServerTitle.Text\" xml:space=\"preserve\">\n    <value>Join an existing server</value>\n  </data>\n  <data name=\"Kick.Text\" xml:space=\"preserve\">\n    <value>Kick</value>\n  </data>\n  <data name=\"LeaveServer.Text\" xml:space=\"preserve\">\n    <value>Leave Server</value>\n  </data>\n  <data name=\"MarkAsRead.Text\" xml:space=\"preserve\">\n    <value>Mark as Read</value>\n  </data>\n  <data name=\"Message.Text\" xml:space=\"preserve\">\n    <value>Message</value>\n  </data>\n  <data name=\"Mute.Text\" xml:space=\"preserve\">\n    <value>Mute</value>\n  </data>\n  <data name=\"NewWindow.Text\" xml:space=\"preserve\">\n    <value>Open in a new Window</value>\n  </data>\n  <data name=\"Pin.Text\" xml:space=\"preserve\">\n    <value>Pin Message</value>\n  </data>\n  <data name=\"PinToStart.Text\" xml:space=\"preserve\">\n    <value>Pin to Start</value>\n  </data>\n  <data name=\"Profile.Text\" xml:space=\"preserve\">\n    <value>Profile</value>\n  </data>\n  <data name=\"Reply.Text\" xml:space=\"preserve\">\n    <value>Reply</value>\n  </data>\n  <data name=\"SendMessage.Text\" xml:space=\"preserve\">\n    <value>Send Message</value>\n  </data>\n  <data name=\"ShowFullProfile.Text\" xml:space=\"preserve\">\n    <value>Show Full Profile</value>\n  </data>\n  <data name=\"Unmute.Text\" xml:space=\"preserve\">\n    <value>Unmute</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/FriendsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"FriendsAllItem.Header\" xml:space=\"preserve\">\n    <value>All</value>\n  </data>\n  <data name=\"FriendsBlockedItem.Header\" xml:space=\"preserve\">\n    <value>Blocked</value>\n  </data>\n  <data name=\"FriendsHeader.Text\" xml:space=\"preserve\">\n    <value>Friends</value>\n  </data>\n  <data name=\"FriendsOnlineItem.Header\" xml:space=\"preserve\">\n    <value>Online</value>\n  </data>\n  <data name=\"FriendsPendingItem.Header\" xml:space=\"preserve\">\n    <value>Pending</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/LoginPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"LoadFileButton.Content\" xml:space=\"preserve\">\n    <value>Load from file...</value>\n  </data>\n  <data name=\"LoginButton.Content\" xml:space=\"preserve\">\n    <value>Login</value>\n  </data>\n  <data name=\"TokenTextBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Discord Token</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/MediaSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AdvancedHeader.Header\" xml:space=\"preserve\">\n    <value>Advanced</value>\n  </data>\n  <data name=\"AlwaysCompress.Content\" xml:space=\"preserve\">\n    <value>Always compress before sending</value>\n  </data>\n  <data name=\"AudioOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>Audio Options</value>\n  </data>\n  <data name=\"BitrateSlider.Header\" xml:space=\"preserve\">\n    <value>Bitrate</value>\n  </data>\n  <data name=\"CompressIfNeeded.Content\" xml:space=\"preserve\">\n    <value>Compress if the file is above your upload limit</value>\n  </data>\n  <data name=\"EncoderPriorityBox.Header\" xml:space=\"preserve\">\n    <value>Encoder Priority</value>\n  </data>\n  <data name=\"EncoderPriorityQuality.Content\" xml:space=\"preserve\">\n    <value>Prioritize quality, smaller file sizes</value>\n  </data>\n  <data name=\"EncoderPrioritySpeed.Content\" xml:space=\"preserve\">\n    <value>Prioritize speed, larger file sizes</value>\n  </data>\n  <data name=\"LargePresetItem.Text\" xml:space=\"preserve\">\n    <value>Large</value>\n  </data>\n  <data name=\"LargePresetSubheader.Text\" xml:space=\"preserve\">\n    <value>720p, ~1536kbps</value>\n  </data>\n  <data name=\"MediaCompressionHeader.Text\" xml:space=\"preserve\">\n    <value>Media Compression</value>\n  </data>\n  <data name=\"MediaCompressionSubheader.Text\" xml:space=\"preserve\">\n    <value>Unicord can automatically compress video to fit within your upload limit!</value>\n  </data>\n  <data name=\"MediumPresetItem.Text\" xml:space=\"preserve\">\n    <value>Medium</value>\n  </data>\n  <data name=\"MediumPresetSubheader.Text\" xml:space=\"preserve\">\n    <value>480p, ~768kbps</value>\n  </data>\n  <data name=\"NeverCompress.Content\" xml:space=\"preserve\">\n    <value>Never compress media</value>\n  </data>\n  <data name=\"ResolutionBox.Header\" xml:space=\"preserve\">\n    <value>Resolution</value>\n  </data>\n  <data name=\"SmallPresetItem.Text\" xml:space=\"preserve\">\n    <value>Small</value>\n  </data>\n  <data name=\"SmallPresetSubheader.Text\" xml:space=\"preserve\">\n    <value>360p, ~512kbps</value>\n  </data>\n  <data name=\"TinyPresetItem.Text\" xml:space=\"preserve\">\n    <value>Tiny</value>\n  </data>\n  <data name=\"TinyPresetSubheader.Text\" xml:space=\"preserve\">\n    <value>144p, ~256kbps</value>\n  </data>\n  <data name=\"Title.Text\" xml:space=\"preserve\">\n    <value>Audio and Video</value>\n  </data>\n  <data name=\"VideoOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>Video Options</value>\n  </data>\n  <data name=\"VideoOptionsSubheader.Text\" xml:space=\"preserve\">\n    <value>If you need to, you can adjust the output resolution and quality of the compressed video here.</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/MessagingSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AdjustRoleColours.Text\" xml:space=\"preserve\">\n    <value>Adjust User Colors for Readability</value>\n  </data>\n  <data name=\"AdjustRoleColoursHeader.Text\" xml:space=\"preserve\">\n    <value>Contrast Adjustment</value>\n  </data>\n  <data name=\"AutoPlayGIFs.Text\" xml:space=\"preserve\">\n    <value>Automatically Play GIFs</value>\n  </data>\n  <data name=\"ChatHeader.Text\" xml:space=\"preserve\">\n    <value>Chat</value>\n  </data>\n  <data name=\"EnableSpoilers.Text\" xml:space=\"preserve\">\n    <value>Enable Spoilers</value>\n  </data>\n  <data name=\"LearnMoreButton.Content\" xml:space=\"preserve\">\n    <value>More about contrast</value>\n  </data>\n  <data name=\"MessagingSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Text and Images</value>\n  </data>\n  <data name=\"MinimumContrastSlider.Header\" xml:space=\"preserve\">\n    <value>Minimum Contrast</value>\n  </data>\n  <data name=\"PromptLinks.Text\" xml:space=\"preserve\">\n    <value>Prompt for Untrusted Links</value>\n  </data>\n  <data name=\"PromptLinks.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>With this option enabled, you will be prompted by Windows before opening insecure links.</value>\n    <comment>Tooltip for previous text</comment>\n  </data>\n  <data name=\"ShowHugeEmoji.Text\" xml:space=\"preserve\">\n    <value>Huge Emoji</value>\n  </data>\n  <data name=\"ShowStatusGlyphs.Text\" xml:space=\"preserve\">\n    <value>Colorblind Friendly Status Indicators</value>\n  </data>\n  <data name=\"TimestampsHeader.Text\" xml:space=\"preserve\">\n    <value>Timestamps</value>\n  </data>\n  <data name=\"TimestampsSubheader.Text\" xml:space=\"preserve\">\n    <value>How do you want timestamps on messages to appear?</value>\n  </data>\n  <data name=\"TimestampStyleAbsolute.Text\" xml:space=\"preserve\">\n    <value>Absolute</value>\n  </data>\n  <data name=\"TimestampStyleBoth.Text\" xml:space=\"preserve\">\n    <value>Both</value>\n  </data>\n  <data name=\"TimestampStyleRelative.Text\" xml:space=\"preserve\">\n    <value>Relative</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/PinsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"NoPinsHeader.Text\" xml:space=\"preserve\">\n    <value>No pins!</value>\n  </data>\n  <data name=\"NoPinsSubheader.Text\" xml:space=\"preserve\">\n    <value>This channel has no pins! If you have the permissions, go pin something!</value>\n  </data>\n  <data name=\"PinsHeader.Text\" xml:space=\"preserve\">\n    <value>Pinned Messages</value>\n  </data>\n  <data name=\"RatelimitedHeader.Text\" xml:space=\"preserve\">\n    <value>Whoops!</value>\n  </data>\n  <data name=\"RatelimitedSubheader.Text\" xml:space=\"preserve\">\n    <value>Hey! Slow down there, you're being ratelimited!</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/Resources.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AppDisplayDescription\" xml:space=\"preserve\">\n    <value>A free, open source Discord Client for Windows 10 and Windows 10 Mobile, that tries to provide a fast, efficient, native feeling Discord experience.</value>\n  </data>\n  <data name=\"AppDisplayDescriptionText.Text\" xml:space=\"preserve\">\n    <value>A Discord client for the Universal Windows Platform</value>\n  </data>\n  <data name=\"AppDisplayName\" xml:space=\"preserve\">\n    <value>Unicord</value>\n  </data>\n  <data name=\"AppDisplayNameText.Text\" xml:space=\"preserve\">\n    <value>Unicord</value>\n  </data>\n  <data name=\"DevAppDisplayName\" xml:space=\"preserve\">\n    <value>Unicord Canary</value>\n  </data>\n  <data name=\"LoginFailedDialogMessage\" xml:space=\"preserve\">\n    <value>Something went wrong logging you in! Check your details and try again!</value>\n  </data>\n  <data name=\"LoginFailedDialogTitle\" xml:space=\"preserve\">\n    <value>Unable to login!</value>\n  </data>\n  <data name=\"RecentChannelsJumpListGroup\" xml:space=\"preserve\">\n    <value>Recent Channels</value>\n  </data>\n  <data name=\"RecentPeopleJumpListGroup\" xml:space=\"preserve\">\n    <value>Recent People</value>\n  </data>\n  <data name=\"ServerUnavailableMessage\" xml:space=\"preserve\">\n    <value>It seems this server is having some problems, and is currently unavailable, sorry!</value>\n  </data>\n  <data name=\"ServerUnavailableTitle\" xml:space=\"preserve\">\n    <value>This server is unavailable!</value>\n  </data>\n  <data name=\"VerifyLoginDisplayReason\" xml:space=\"preserve\">\n    <value>Verify your identitiy to login to Unicord!</value>\n  </data>\n  <data name=\"VerifyNSFWDisplayReason\" xml:space=\"preserve\">\n    <value>Verify your identity to access this channel!</value>\n  </data>\n  <data name=\"VerifySettingsDisplayReason\" xml:space=\"preserve\">\n    <value>Verify your identity to open settings!</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/SearchPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ResultsText.Text\" xml:space=\"preserve\">\n    <value>results</value>\n  </data>\n  <data name=\"NoResultsHeader.Text\" xml:space=\"preserve\">\n    <value>We searched far and wide.</value>\n  </data>\n  <data name=\"NoResultsSubheader.Text\" xml:space=\"preserve\">\n    <value>Unfortunately, no results were found.</value>\n  </data>\n  <data name=\"SearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Search...</value>\n  </data>\n  <data name=\"SearchHeader.Text\" xml:space=\"preserve\">\n    <value>Search</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/SecuritySettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DiagnosticDataHeader.Text\" xml:space=\"preserve\">\n    <value>Diagnostic and Usage data</value>\n  </data>\n  <data name=\"DiagnosticDataToggle.Text\" xml:space=\"preserve\">\n    <value>Send Diagnostic and Usage data</value>\n  </data>\n  <data name=\"SecuritySettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Security and Privacy</value>\n  </data>\n  <data name=\"WindowsHelloAuthenticationTimeout.Header\" xml:space=\"preserve\">\n    <value>Keep me authenticated for</value>\n  </data>\n  <data name=\"WindowsHelloHeader.Text\" xml:space=\"preserve\">\n    <value>Windows Hello</value>\n  </data>\n  <data name=\"WindowsHelloLogin.Text\" xml:space=\"preserve\">\n    <value>Login</value>\n  </data>\n  <data name=\"WindowsHelloNSFW.Text\" xml:space=\"preserve\">\n    <value>Access NSFW channels</value>\n  </data>\n  <data name=\"WindowsHelloOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>Require Windows Hello authentication to:</value>\n  </data>\n  <data name=\"WindowsHelloSettings.Text\" xml:space=\"preserve\">\n    <value>Change settings</value>\n  </data>\n  <data name=\"WindowsHelloToggle.Text\" xml:space=\"preserve\">\n    <value />\n  </data>\n  <data name=\"WindowsHelloUnavailable.Text\" xml:space=\"preserve\">\n    <value>Windows Hello is not available on this device. Wanna change that?</value>\n  </data>\n  <data name=\"OpenSettingsButton.Content\" xml:space=\"preserve\">\n    <value>Open Settings</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/SettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AboutItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>About Unicord</value>\n  </data>\n  <data name=\"HomeItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Home</value>\n  </data>\n  <data name=\"MediaItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Audio and Video</value>\n  </data>\n  <data name=\"MessagingItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Text and Images</value>\n  </data>\n  <data name=\"SecurityItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Security and Privacy</value>\n  </data>\n  <data name=\"ThemesItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Themes</value>\n  </data>\n  <data name=\"VoiceItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Voice</value>\n  </data>\n  <data name=\"SearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Search</value>\n  </data>\n  <data name=\"EditProfileText.Text\" xml:space=\"preserve\">\n    <value>Edit Profiles</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/ThemesSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"CloseButton.Content\" xml:space=\"preserve\">\n    <value>Close</value>\n  </data>\n  <data name=\"ColourScheme.Text\" xml:space=\"preserve\">\n    <value>Color Scheme</value>\n  </data>\n  <data name=\"ColourSchemeCaption.Text\" xml:space=\"preserve\">\n    <value>This setting won't be synchronized with Discord.</value>\n  </data>\n  <data name=\"ColourSchemeDark.Content\" xml:space=\"preserve\">\n    <value>Dark</value>\n  </data>\n  <data name=\"ColourSchemeDefault.Content\" xml:space=\"preserve\">\n    <value>System Default</value>\n  </data>\n  <data name=\"ColourSchemeLight.Content\" xml:space=\"preserve\">\n    <value>Light</value>\n  </data>\n  <data name=\"EnableAfterInstallationCheckBox.Content\" xml:space=\"preserve\">\n    <value>Enable theme after installation</value>\n  </data>\n  <data name=\"InstallButton.Content\" xml:space=\"preserve\">\n    <value>Install</value>\n  </data>\n  <data name=\"MainThemeHeader.Text\" xml:space=\"preserve\">\n    <value>Themes</value>\n  </data>\n  <data name=\"MainThemeSubheader.Text\" xml:space=\"preserve\">\n    <value>Wanna spice things up? Download some themes or learn how to make your own!</value>\n  </data>\n  <data name=\"RelaunchRequired.Text\" xml:space=\"preserve\">\n    <value>To apply theme changes, Unicord will need to relaunch.</value>\n  </data>\n  <data name=\"ThemeAlreadyInstalledMessage\" xml:space=\"preserve\">\n    <value>This theme is already installed. Do you want to overwrite it?</value>\n  </data>\n  <data name=\"ThemeAlreadyInstalledTitle\" xml:space=\"preserve\">\n    <value>Theme already installed!</value>\n  </data>\n  <data name=\"ThemeChangedMessage\" xml:space=\"preserve\">\n    <value>In order to update your theme, Unicord must restart. Do you want to restart now?</value>\n  </data>\n  <data name=\"ThemeChangedTitle\" xml:space=\"preserve\">\n    <value>Theme changed!</value>\n  </data>\n  <data name=\"ThemeInvalidDoesNotExist\" xml:space=\"preserve\">\n    <value>Tried to load a theme that doesn't exist on disk. The theme has been uninstalled.</value>\n  </data>\n  <data name=\"ThemeInvalidNoJson\" xml:space=\"preserve\">\n    <value>This file does not appear to be a Unicord theme, missing theme.json!</value>\n  </data>\n  <data name=\"ThemeInvalidNoLogo\" xml:space=\"preserve\">\n    <value>This theme specifies a logo file that doesn't exist!</value>\n  </data>\n  <data name=\"ThemeLoadFailedFormat\" xml:space=\"preserve\">\n    <value>Loading your currently selected theme failed!\n{0}</value>\n  </data>\n  <data name=\"ThemePreInstallCheckFailed\" xml:space=\"preserve\">\n    <value>A pre-install check failed! This probably means your device or the version of Windows you're running is not supported by this theme. Sorry!</value>\n  </data>\n  <data name=\"ThemesSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Appearance</value>\n  </data>\n  <data name=\"ThemeUnsupportedWindowsVersion\" xml:space=\"preserve\">\n    <value>The version of Windows you're running is not supported by this theme. Sorry!</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/UserListPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"UserListHeader.Text\" xml:space=\"preserve\">\n    <value>Users</value>\n  </data>\n  <data name=\"UserSearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Search Users</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/VideoEditor.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!--\n    Microsoft ResX Schema\n\n    Version 2.0\n\n    The primary goals of this format is to allow a simple XML format\n    that is mostly human readable. The generation and parsing of the\n    various data types are done through the TypeConverter classes\n    associated with the data types.\n\n    Example:\n\n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n\n    There are any number of \"resheader\" rows that contain simple\n    name/value pairs.\n\n    Each data row contains a name, and value. The row also contains a\n    type or mimetype. Type corresponds to a .NET class that support\n    text/value conversion through the TypeConverter architecture.\n    Classes that don't support this are serialized and stored with the\n    mimetype set.\n\n    The mimetype is used for serialized objects, and tells the\n    ResXResourceReader how to depersist the object. This is currently not\n    extensible. For a given mimetype the value must be set accordingly:\n\n    Note - application/x-microsoft.net.object.binary.base64 is the format\n    that the ResXResourceWriter will generate, however the reader can\n    read any of the formats listed below.\n\n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array\n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"CannotEditClipMessage\" xml:space=\"preserve\">\n    <value>Currently, you can only edit video clips from files. Sorry!</value>\n  </data>\n  <data name=\"CannotEditClipTitle\" xml:space=\"preserve\">\n    <value>This clip cannot be edited.</value>\n  </data>\n  <data name=\"LoadPreviousEditsMessage\" xml:space=\"preserve\">\n    <value>It looks like you've edited this file before. Do you want to load your previous edits?</value>\n  </data>\n  <data name=\"LoadPreviousEditsTitle\" xml:space=\"preserve\">\n    <value>Load previous edit?</value>\n  </data>\n  <data name=\"ProcessingVideoHeader.Text\" xml:space=\"preserve\">\n    <value>Processing Video </value>\n  </data>\n  <data name=\"SaveChangesMessage\" xml:space=\"preserve\">\n    <value>Do you want to save your changes? They'll be loaded the next time you edit this clip.</value>\n  </data>\n  <data name=\"SaveChangesTitle\" xml:space=\"preserve\">\n    <value>Save your changes?</value>\n  </data>\n  <data name=\"VideoEditorHeader.Text\" xml:space=\"preserve\">\n    <value>Trim Video</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/Voice.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ConnectedStateFormat\" xml:space=\"preserve\">\n    <value>Connected to {0}!</value>\n  </data>\n  <data name=\"ConnectionState1\" xml:space=\"preserve\">\n    <value>Starting voice process...</value>\n  </data>\n  <data name=\"ConnectionState2\" xml:space=\"preserve\">\n    <value>Closing current connection...</value>\n  </data>\n  <data name=\"ConnectionState3\" xml:space=\"preserve\">\n    <value>Talking with Discord...</value>\n  </data>\n  <data name=\"ConnectionState4Format\" xml:space=\"preserve\">\n    <value>Connecting to {0}...</value>\n  </data>\n  <data name=\"DisconnectedState\" xml:space=\"preserve\">\n    <value>Disconnected</value>\n  </data>\n  <data name=\"InitialConnectionState\" xml:space=\"preserve\">\n    <value>Getting ready...</value>\n  </data>\n  <data name=\"ReconnectingState\" xml:space=\"preserve\">\n    <value>Reconnecting...</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/en-US/VoiceSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AudioDevicesHeader.Text\" xml:space=\"preserve\">\n    <value>Audio Devices</value>\n  </data>\n  <data name=\"AudioDevicesSubheader.Text\" xml:space=\"preserve\">\n    <value>Here you can choose the audio devices you want to use for voice calls.</value>\n  </data>\n  <data name=\"AutomaticGainControl.Text\" xml:space=\"preserve\">\n    <value>Automatic Gain Control</value>\n  </data>\n  <data name=\"EchoCancellation.Text\" xml:space=\"preserve\">\n    <value>Echo Cancellation</value>\n  </data>\n  <data name=\"InputDevices.Header\" xml:space=\"preserve\">\n    <value>Input Device</value>\n  </data>\n  <data name=\"NoiseSuppressionDisabled.Content\" xml:space=\"preserve\">\n    <value>Disabled</value>\n  </data>\n  <data name=\"NoiseSuppressionHeader.Text\" xml:space=\"preserve\">\n    <value>Noise Suppression</value>\n  </data>\n  <data name=\"NoiseSuppressionHigh.Content\" xml:space=\"preserve\">\n    <value>High</value>\n  </data>\n  <data name=\"NoiseSuppressionLow.Content\" xml:space=\"preserve\">\n    <value>Low</value>\n  </data>\n  <data name=\"NoiseSuppressionMedium.Content\" xml:space=\"preserve\">\n    <value>Medium</value>\n  </data>\n  <data name=\"NoiseSuppressionSubheader.Text\" xml:space=\"preserve\">\n    <value>Unicord can dynamically reduce the amount of noise or hiss on your microphone if needed.</value>\n  </data>\n  <data name=\"OutputDevices.Header\" xml:space=\"preserve\">\n    <value>Output Device</value>\n  </data>\n  <data name=\"VoiceActivity.Text\" xml:space=\"preserve\">\n    <value>Voice Activity</value>\n  </data>\n  <data name=\"VoiceSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Voice</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/fr/AboutSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AcknowledgementsText.Text\" xml:space=\"preserve\">\n    <value>Remerciements</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/AccountsSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ContactsUnavailable.Text\" xml:space=\"preserve\">\n    <value>La synchronisation des contacts n'est pas disponible sur cet appareil.</value>\n  </data>\n  <data name=\"FriendsText.Text\" xml:space=\"preserve\">\n    <value>Amis</value>\n  </data>\n  <data name=\"LogoutButton.Content\" xml:space=\"preserve\">\n    <value>Se déconnecter</value>\n  </data>\n  <data name=\"LogoutPromptMessage\" xml:space=\"preserve\">\n    <value>Êtes-vous sûr de vouloir vous déconnecter?</value>\n  </data>\n  <data name=\"LogoutPromptTitle\" xml:space=\"preserve\">\n    <value>Êtes-vous sûr?</value>\n  </data>\n  <data name=\"StatisticsText.Text\" xml:space=\"preserve\">\n    <value>Statistiques</value>\n  </data>\n  <data name=\"StatisticsBlock.Title\" xml:space=\"preserve\">\n    <value>Statistiques</value>\n  </data>\n  <data name=\"StatisticsBlock.Description\" xml:space=\"preserve\">\n    <value>Voir les statistiques détaillées de votre compte</value>\n  </data>\n  <data name=\"CopyStatisticsButton.Content\" xml:space=\"preserve\">\n    <value>Copier</value>\n  </data>\n  <data name=\"CopyStatisticsButtonText.Text\" xml:space=\"preserve\">\n    <value>Copier</value>\n  </data>\n  <data name=\"SyncPeopleText.Text\" xml:space=\"preserve\">\n    <value>Synchroniser mes amis avec [Windows People](ms-people:)</value>\n    <comment>Markdown capable</comment>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/AgeGatePage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"BackButton.Content\" xml:space=\"preserve\">\n    <value>Retournons en sécurité !</value>\n  </data>\n  <data name=\"ChannelWarningHeader.Text\" xml:space=\"preserve\">\n    <value>NSFW en vue!</value>\n  </data>\n  <data name=\"ChannelWarningSubheader.Text\" xml:space=\"preserve\">\n    <value>Salut ! Il y a des contenus réservés au majeurs, et je suis obligé m'assurer que vous êtes majeur.\nÊtes-vous majeur et conscient du contenu disponible sur ce canal ?</value>\n  </data>\n  <data name=\"ContinueButton.Content\" xml:space=\"preserve\">\n    <value>Amenez moi là bas !</value>\n  </data>\n  <data name=\"DontAskAgain.Content\" xml:space=\"preserve\">\n    <value>Ne me le demandez plus!</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/ChannelPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ChannelReadonlyText\" xml:space=\"preserve\">\n    <value>Ce canal est en lecture seule.</value>\n  </data>\n  <data name=\"CloseEditButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Fermer</value>\n  </data>\n  <data name=\"DeleteAllButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Supprimer</value>\n  </data>\n  <data name=\"ImmuneSlowModeFormat\" xml:space=\"preserve\">\n    <value>Vous êtes immunisé contre le slowmode de {0} dans ce canal!</value>\n  </data>\n  <data name=\"MassDeleteMessage\" xml:space=\"preserve\">\n    <value>Êtes vous sur de supprimer tous ces messages ?</value>\n  </data>\n  <data name=\"MassDeleteTitle\" xml:space=\"preserve\">\n    <value>Supprimer ces messages?</value>\n  </data>\n  <data name=\"MessageChannelFormat\" xml:space=\"preserve\">\n    <value>Message {0}{1}</value>\n    <comment>Message {ChannelPrefix}{ChannelName}</comment>\n  </data>\n  <data name=\"MuteButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Rendre muet</value>\n  </data>\n  <data name=\"NewWindowButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Ouvrir dans une nouvelle fênetre</value>\n  </data>\n  <data name=\"NewWindowNormal.Text\" xml:space=\"preserve\">\n    <value>Fenêtre normale</value>\n  </data>\n  <data name=\"NewWindowOverlay.Text\" xml:space=\"preserve\">\n    <value>Overlay</value>\n  </data>\n  <data name=\"NoMessagesHeader.Text\" xml:space=\"preserve\">\n    <value>Il n'y a rien à voir ici !</value>\n  </data>\n  <data name=\"NoMessagesSubheader.Text\" xml:space=\"preserve\">\n    <value>Je n'ai pas pu trouver de messages pour ce canal, désolé !</value>\n  </data>\n  <data name=\"OpenLocalButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Ouvrir</value>\n  </data>\n  <data name=\"OpenPopoutButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Prendre une photo ou une vidéo</value>\n  </data>\n  <data name=\"PinsButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Messages épinglés</value>\n  </data>\n  <data name=\"SearchButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Chercher</value>\n  </data>\n  <data name=\"SlowModeFormat\" xml:space=\"preserve\">\n    <value>Tu ne peux envoyer un message que toute les {0}!</value>\n  </data>\n  <data name=\"UserListButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Liste des utilisateurs</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/Controls.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AttachmentCopyUrlButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Copier l'URL</value>\n  </data>\n  <data name=\"AttachmentDownloadFailedText\" xml:space=\"preserve\">\n    <value>Une erreur s'est produite lors du téléchargement, peut-être réessayer plus tard?</value>\n  </data>\n  <data name=\"AttachmentDownloadFailedTitle\" xml:space=\"preserve\">\n    <value>Échec lors du téléchargement!</value>\n  </data>\n  <data name=\"AttachmentExtensionFormat\" xml:space=\"preserve\">\n    <value>Extension de la pièce jointe (*{0})</value>\n  </data>\n  <data name=\"AttachmentSaveButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Sauvegarder</value>\n  </data>\n  <data name=\"AttachmentShareButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Partager</value>\n  </data>\n  <data name=\"EditButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Modifier ce clip</value>\n  </data>\n  <data name=\"EmoteSearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Rechercher une emote...</value>\n  </data>\n  <data name=\"RemoveButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Supprimer</value>\n  </data>\n  <data name=\"SharingTitleFormat\" xml:space=\"preserve\">\n    <value>Partage en cours de {0}</value>\n  </data>\n  <data name=\"SpoilerButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Marquer comme spoiler</value>\n  </data>\n  <data name=\"TranscodeFailedButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>La conversion à échoué!</value>\n  </data>\n  <data name=\"TranscodingCancelButton.Content\" xml:space=\"preserve\">\n    <value>Annuler</value>\n  </data>\n  <data name=\"TranscodingProgressHeader.Text\" xml:space=\"preserve\">\n    <value>Conversion</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/Converters.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ListeningStatus\" xml:space=\"preserve\">\n    <value>Écoute {0}</value>\n  </data>\n  <data name=\"PlayingStatusFormat\" xml:space=\"preserve\">\n    <value>Joue à {0}</value>\n    <comment>these don't localise well</comment>\n  </data>\n  <data name=\"StreamingStatus\" xml:space=\"preserve\">\n    <value>Streame {0}</value>\n    <comment>i'll refactor this at some point i promise</comment>\n  </data>\n  <data name=\"UserChannelIconChangeFormat\" xml:space=\"preserve\">\n    <value>{0} à changé l’icône du canal.</value>\n  </data>\n  <data name=\"UserChannelNameChangeFormat\" xml:space=\"preserve\">\n    <value>{0} à changé l’icône du canal.</value>\n  </data>\n  <data name=\"UserJoinedGroupFormat\" xml:space=\"preserve\">\n    <value>{0} à rejoint le groupe.</value>\n  </data>\n  <data name=\"UserLeftGroupFormat\" xml:space=\"preserve\">\n    <value>{0} à quitté le groupe.</value>\n  </data>\n  <data name=\"UserMessagePinFormat\" xml:space=\"preserve\">\n    <value>{0} à épinglé un message dans ce canal.</value>\n  </data>\n  <data name=\"UserStartedCallFormat\" xml:space=\"preserve\">\n    <value>{0} à lancé un appel.</value>\n  </data>\n  <data name=\"WatchingStatus\" xml:space=\"preserve\">\n    <value>Regarde {0}</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/DMChannelsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DirectMessageChannels.Tag\" xml:space=\"preserve\">\n    <value>Messages Privés</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/Dialogs.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"BanDeleteFromLastDay.Content\" xml:space=\"preserve\">\n    <value>Dans les dernières 24 heures</value>\n  </data>\n  <data name=\"BanDeleteFromLastWeek.Content\" xml:space=\"preserve\">\n    <value>Dans la semaine</value>\n  </data>\n  <data name=\"BanDeleteMessagesBox.Header\" xml:space=\"preserve\">\n    <value>Supprimer les messages</value>\n  </data>\n  <data name=\"BanDeleteNoMessages.Content\" xml:space=\"preserve\">\n    <value>Ne pas supprimer les messages</value>\n  </data>\n  <data name=\"BanDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Super !</value>\n  </data>\n  <data name=\"BanDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Nope</value>\n  </data>\n  <data name=\"BanDialogHeaderFormat\" xml:space=\"preserve\">\n    <value>Bannir @{0}#{1} ?</value>\n  </data>\n  <data name=\"BanReason.Header\" xml:space=\"preserve\">\n    <value>Raison du ban</value>\n  </data>\n  <data name=\"ChangeNicknameDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Sauvegarder</value>\n  </data>\n  <data name=\"ChangeNicknameDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Annuler</value>\n  </data>\n  <data name=\"ChangeNicknameSubtitle.Text\" xml:space=\"preserve\">\n    <value>Les surnoms sont visible de tous, donc ne fais pas n'importe quoi d'accord ?</value>\n  </data>\n  <data name=\"ChangeNicknameTitle.Text\" xml:space=\"preserve\">\n    <value>Changer de surnom</value>\n  </data>\n  <data name=\"ConfirmationDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Oui</value>\n  </data>\n  <data name=\"ConfirmationDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Annuler</value>\n  </data>\n  <data name=\"DeleteMessageDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Super !</value>\n  </data>\n  <data name=\"DeleteMessageDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Nope</value>\n  </data>\n  <data name=\"DeleteMessageDialog.Title\" xml:space=\"preserve\">\n    <value>Supprimer ce message ?</value>\n  </data>\n  <data name=\"ErrorDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"InstallThemeBy.Text\" xml:space=\"preserve\">\n    <value>Par</value>\n  </data>\n  <data name=\"InstallThemeDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Installer</value>\n  </data>\n  <data name=\"InstallThemeDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Annuler</value>\n  </data>\n  <data name=\"KickDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Super !</value>\n  </data>\n  <data name=\"KickDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Nope</value>\n  </data>\n  <data name=\"KickDialogHeaderFormat\" xml:space=\"preserve\">\n    <value>Expulser @{0}#{1} ?</value>\n  </data>\n  <data name=\"KickReason.Header\" xml:space=\"preserve\">\n    <value>Raison de l'expulsion</value>\n  </data>\n  <data name=\"PinMessageDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Oh que oui !</value>\n  </data>\n  <data name=\"PinMessageDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Peut-être pas</value>\n  </data>\n  <data name=\"PinMessageDialog.Title\" xml:space=\"preserve\">\n    <value>Épingler ce message?</value>\n  </data>\n  <data name=\"ProfileConnections.Header\" xml:space=\"preserve\">\n    <value>Profils connectés</value>\n  </data>\n  <data name=\"ProfileJoinedServer.Text\" xml:space=\"preserve\">\n    <value>Serveurs rejoints</value>\n  </data>\n  <data name=\"ProfileMutualServers.Header\" xml:space=\"preserve\">\n    <value>Serveurs en commun</value>\n  </data>\n  <data name=\"ProfileRoles.Text\" xml:space=\"preserve\">\n    <value>Rôles</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/Flyouts.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AddReaction.Text\" xml:space=\"preserve\">\n    <value>Ajouter une réaction</value>\n  </data>\n  <data name=\"Ban.Text\" xml:space=\"preserve\">\n    <value>Bannir</value>\n  </data>\n  <data name=\"ChangeNickname.Text\" xml:space=\"preserve\">\n    <value>Changer de surnom</value>\n  </data>\n  <data name=\"Copy.Text\" xml:space=\"preserve\">\n    <value>Copier</value>\n  </data>\n  <data name=\"CopyID.Text\" xml:space=\"preserve\">\n    <value>Copier l'ID</value>\n  </data>\n  <data name=\"CopyLink.Text\" xml:space=\"preserve\">\n    <value>Copier l'URL</value>\n  </data>\n  <data name=\"CreateServerSubtitle.Text\" xml:space=\"preserve\">\n    <value>C'est gratuit !</value>\n  </data>\n  <data name=\"CreateServerTitle.Text\" xml:space=\"preserve\">\n    <value>Créer un nouveau serveur</value>\n  </data>\n  <data name=\"Delete.Text\" xml:space=\"preserve\">\n    <value>Supprimer</value>\n  </data>\n  <data name=\"Edit.Text\" xml:space=\"preserve\">\n    <value>Modifier</value>\n  </data>\n  <data name=\"EditMode.Text\" xml:space=\"preserve\">\n    <value>Mode d'édition</value>\n  </data>\n  <data name=\"JoinExistingServerSubtitle.Text\" xml:space=\"preserve\">\n    <value>Utilisez vos invitations !</value>\n  </data>\n  <data name=\"JoinExistingServerTitle.Text\" xml:space=\"preserve\">\n    <value>Rejoindre un serveur existant</value>\n  </data>\n  <data name=\"Kick.Text\" xml:space=\"preserve\">\n    <value>Kick</value>\n  </data>\n  <data name=\"LeaveServer.Text\" xml:space=\"preserve\">\n    <value>Quitter le serveur</value>\n  </data>\n  <data name=\"MarkAsRead.Text\" xml:space=\"preserve\">\n    <value>Marquer comme lu</value>\n  </data>\n  <data name=\"Message.Text\" xml:space=\"preserve\">\n    <value>Message</value>\n  </data>\n  <data name=\"Mute.Text\" xml:space=\"preserve\">\n    <value>Rendre muet</value>\n  </data>\n  <data name=\"NewWindow.Text\" xml:space=\"preserve\">\n    <value>Ouvrir dans une nouvelle fênetre</value>\n  </data>\n  <data name=\"Pin.Text\" xml:space=\"preserve\">\n    <value>Épingler le message</value>\n  </data>\n  <data name=\"Profile.Text\" xml:space=\"preserve\">\n    <value>Profil</value>\n  </data>\n  <data name=\"SendMessage.Text\" xml:space=\"preserve\">\n    <value>Envoyer un message</value>\n  </data>\n  <data name=\"ShowFullProfile.Text\" xml:space=\"preserve\">\n    <value>Afficher le profil complet</value>\n  </data>\n  <data name=\"Unmute.Text\" xml:space=\"preserve\">\n    <value>Rétablir la voix</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/FriendsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"FriendsAllItem.Header\" xml:space=\"preserve\">\n    <value>Tous</value>\n  </data>\n  <data name=\"FriendsBlockedItem.Header\" xml:space=\"preserve\">\n    <value>Bloqués</value>\n  </data>\n  <data name=\"FriendsHeader.Text\" xml:space=\"preserve\">\n    <value>Amis</value>\n  </data>\n  <data name=\"FriendsOnlineItem.Header\" xml:space=\"preserve\">\n    <value>En ligne</value>\n  </data>\n  <data name=\"FriendsPendingItem.Header\" xml:space=\"preserve\">\n    <value>En attente</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/LoginPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"LoadFileButton.Content\" xml:space=\"preserve\">\n    <value>Ouvrir...</value>\n  </data>\n  <data name=\"LoginButton.Content\" xml:space=\"preserve\">\n    <value>Se connecter</value>\n  </data>\n  <data name=\"TokenTextBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Token Discord</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/MediaSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AdvancedHeader.Header\" xml:space=\"preserve\">\n    <value>Avancé</value>\n  </data>\n  <data name=\"AlwaysCompress.Content\" xml:space=\"preserve\">\n    <value>Toujours compresser avant d'envoyer</value>\n  </data>\n  <data name=\"AudioOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>Paramètres sonores</value>\n  </data>\n  <data name=\"BitrateSlider.Header\" xml:space=\"preserve\">\n    <value>Bitrate</value>\n  </data>\n  <data name=\"CompressIfNeeded.Content\" xml:space=\"preserve\">\n    <value>Compresser si le fichier est au dessus de la limite d'upload</value>\n  </data>\n  <data name=\"EncoderPriorityBox.Header\" xml:space=\"preserve\">\n    <value>Priorité de l'encodeur</value>\n  </data>\n  <data name=\"EncoderPriorityQuality.Content\" xml:space=\"preserve\">\n    <value>Prioriser la qualité, fichiers plus petits</value>\n  </data>\n  <data name=\"EncoderPrioritySpeed.Content\" xml:space=\"preserve\">\n    <value>Prioriser la vitesse, fichiers plus larges</value>\n  </data>\n  <data name=\"MediaCompressionHeader.Text\" xml:space=\"preserve\">\n    <value>Compression des médias</value>\n  </data>\n  <data name=\"MediaCompressionSubheader.Text\" xml:space=\"preserve\">\n    <value>Cette fonction réduit automatiquement les fichiers audio et vidéo afin de rentrer dans les quotas d'envoi de fichiers!</value>\n  </data>\n  <data name=\"NeverCompress.Content\" xml:space=\"preserve\">\n    <value>Ne jamais compresser les médias</value>\n  </data>\n  <data name=\"ResolutionBox.Header\" xml:space=\"preserve\">\n    <value>Résolution</value>\n  </data>\n  <data name=\"Title.Text\" xml:space=\"preserve\">\n    <value>Audio et Vidéo</value>\n  </data>\n  <data name=\"VideoOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>Paramètres vidéo</value>\n  </data>\n  <data name=\"VideoOptionsSubheader.Text\" xml:space=\"preserve\">\n    <value>Si vous avez besoin, vous pouvez ajuster ici la résolution de sortie ainsi que la qualité de la vidéo compressée.</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/MessagingSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AutoPlayGIFs.Text\" xml:space=\"preserve\">\n    <value>Jouer automatiquement les GIFs</value>\n  </data>\n  <data name=\"ChatHeader.Text\" xml:space=\"preserve\">\n    <value>Chat</value>\n  </data>\n  <data name=\"EnableSpoilers.Text\" xml:space=\"preserve\">\n    <value>Activer les spoilers</value>\n  </data>\n  <data name=\"MessagingSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Texte et Images</value>\n  </data>\n  <data name=\"PromptLinks.Text\" xml:space=\"preserve\">\n    <value>Demander pour les liens non reconnus</value>\n  </data>\n  <data name=\"PromptLinks.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Avec cette option activée, vous serez prévenu par Windows avant d’ouvrir les liens non reconnus.</value>\n    <comment>Tooltip for previous text</comment>\n  </data>\n  <data name=\"TimestampsHeader.Text\" xml:space=\"preserve\">\n    <value>Horodatage</value>\n  </data>\n  <data name=\"TimestampsSubheader.Text\" xml:space=\"preserve\">\n    <value>Comment voulez vous afficher l'heure des messages ?</value>\n  </data>\n  <data name=\"TimestampStyleAbsolute.Text\" xml:space=\"preserve\">\n    <value>Absolu</value>\n  </data>\n  <data name=\"TimestampStyleBoth.Text\" xml:space=\"preserve\">\n    <value>Les deux</value>\n  </data>\n  <data name=\"TimestampStyleRelative.Text\" xml:space=\"preserve\">\n    <value>Relatif</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/PinsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"NoPinsHeader.Text\" xml:space=\"preserve\">\n    <value>Pas de messages épinglés!</value>\n  </data>\n  <data name=\"NoPinsSubheader.Text\" xml:space=\"preserve\">\n    <value>Ce canal n'a pas de messages épinglés ! Si vous avez les permissions, allez épingler quelque chose !</value>\n  </data>\n  <data name=\"PinsHeader.Text\" xml:space=\"preserve\">\n    <value>Messages épinglés</value>\n  </data>\n  <data name=\"RatelimitedHeader.Text\" xml:space=\"preserve\">\n    <value>Oups !</value>\n  </data>\n  <data name=\"RatelimitedSubheader.Text\" xml:space=\"preserve\">\n    <value>Hey ! Ralentissez, vous êtes en train d'être bloqué !</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/Resources.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AppDisplayDescription\" xml:space=\"preserve\">\n    <value>Un client Discord gratuit, open source pour Windows 10 et Windows 10 mobile, qui essaye de fournir une expérience Discord rapide, performante et simple.</value>\n  </data>\n  <data name=\"AppDisplayDescriptionText.Text\" xml:space=\"preserve\">\n    <value>Un client discord pour la plateforme Windows Universel</value>\n  </data>\n  <data name=\"AppDisplayName\" xml:space=\"preserve\">\n    <value>Unicord</value>\n  </data>\n  <data name=\"AppDisplayNameText.Text\" xml:space=\"preserve\">\n    <value>Unicord</value>\n  </data>\n  <data name=\"DevAppDisplayName\" xml:space=\"preserve\">\n    <value>Unicord Canary</value>\n  </data>\n  <data name=\"LoginFailedDialogMessage\" xml:space=\"preserve\">\n    <value>Une erreur est survenue lors de la connexion ! Vérifiez vos identifiants et réessayez !</value>\n  </data>\n  <data name=\"LoginFailedDialogTitle\" xml:space=\"preserve\">\n    <value>Impossible de se connecter !</value>\n  </data>\n  <data name=\"RecentChannelsJumpListGroup\" xml:space=\"preserve\">\n    <value>Canaux récents</value>\n  </data>\n  <data name=\"RecentPeopleJumpListGroup\" xml:space=\"preserve\">\n    <value>Personnes récentes</value>\n  </data>\n  <data name=\"ServerUnavailableMessage\" xml:space=\"preserve\">\n    <value>Il semble que ce serveur rencontre quelques problèmes, et n'est pas disponible, désolé !</value>\n  </data>\n  <data name=\"ServerUnavailableTitle\" xml:space=\"preserve\">\n    <value>Ce serveur n'est pas disponible!</value>\n  </data>\n  <data name=\"VerifyLoginDisplayReason\" xml:space=\"preserve\">\n    <value>Vérifiez votre identité pour vous connecter à Unicord!</value>\n  </data>\n  <data name=\"VerifyNSFWDisplayReason\" xml:space=\"preserve\">\n    <value>Vérifiez votre identité pour accéder à ce canal!</value>\n  </data>\n  <data name=\"VerifySettingsDisplayReason\" xml:space=\"preserve\">\n    <value>Vérifiez votre identité pour ouvrir les paramètres!</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/SecuritySettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DiagnosticDataHeader.Text\" xml:space=\"preserve\">\n    <value>Données de diagnostic et d'utilisation</value>\n  </data>\n  <data name=\"DiagnosticDataToggle.Text\" xml:space=\"preserve\">\n    <value>Envoyer les données de diagnostic et d'utilisation</value>\n  </data>\n  <data name=\"SecuritySettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Sécurité et Confidentialité</value>\n  </data>\n  <data name=\"WindowsHelloAuthenticationTimeout.Header\" xml:space=\"preserve\">\n    <value>Me garder authentifié pour</value>\n  </data>\n  <data name=\"WindowsHelloHeader.Text\" xml:space=\"preserve\">\n    <value>Windows Hello</value>\n  </data>\n  <data name=\"WindowsHelloLogin.Text\" xml:space=\"preserve\">\n    <value>Se connecter</value>\n  </data>\n  <data name=\"WindowsHelloNSFW.Text\" xml:space=\"preserve\">\n    <value>Accéder aux canaux NSFW</value>\n  </data>\n  <data name=\"WindowsHelloOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>Exiger l'authentification Windows Hello pour:</value>\n  </data>\n  <data name=\"WindowsHelloSettings.Text\" xml:space=\"preserve\">\n    <value>Modifier les paramètres</value>\n  </data>\n  <data name=\"WindowsHelloToggle.Text\" xml:space=\"preserve\">\n    <value></value>\n  </data>\n  <data name=\"WindowsHelloUnavailable.Text\" xml:space=\"preserve\">\n    <value>Windows Hello n'est pas disponible sur cet appareil. Voulez-vous changer cela?</value>\n  </data>\n  <data name=\"OpenSettingsButton.Content\" xml:space=\"preserve\">\n    <value>Ouvrir les paramétres</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/SettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AboutItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>A propos d'Unicord</value>\n  </data>\n  <data name=\"HomeItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Accueil</value>\n  </data>\n  <data name=\"MediaItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Audio et Vidéo</value>\n  </data>\n  <data name=\"MessagingItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Texte et Images</value>\n  </data>\n  <data name=\"SecurityItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Sécurité et Confidentialité</value>\n  </data>\n  <data name=\"ThemesItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Thèmes</value>\n  </data>\n  <data name=\"VoiceItem.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>Voix</value>\n  </data>\n  <data name=\"SearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Rechercher</value>\n  </data>\n  <data name=\"EditProfileText.Text\" xml:space=\"preserve\">\n    <value>Modifier les profils</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/ThemesSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ColourScheme.Text\" xml:space=\"preserve\">\n    <value>Palette de couleurs</value>\n  </data>\n  <data name=\"ColourSchemeCaption.Text\" xml:space=\"preserve\">\n    <value>Ce paramètre ne sera pas synchronisé avec Discord.</value>\n  </data>\n  <data name=\"ColourSchemeDark.Content\" xml:space=\"preserve\">\n    <value>Sombre</value>\n  </data>\n  <data name=\"ColourSchemeDefault.Content\" xml:space=\"preserve\">\n    <value>Paramètres par défaut du système</value>\n  </data>\n  <data name=\"ColourSchemeLight.Content\" xml:space=\"preserve\">\n    <value>Clair</value>\n  </data>\n  <data name=\"MainThemeHeader.Text\" xml:space=\"preserve\">\n    <value>Thème principal</value>\n  </data>\n  <data name=\"MainThemeSubheader.Text\" xml:space=\"preserve\">\n    <value>Vous voulez pimenter les choses? Téléchargez des thèmes ou apprenez à créer les vôtres!</value>\n  </data>\n  <data name=\"RelaunchRequired.Text\" xml:space=\"preserve\">\n    <value>Pour appliquer les modification, Unicord doit redémarrer.</value>\n  </data>\n  <data name=\"ThemeAlreadyInstalledMessage\" xml:space=\"preserve\">\n    <value>Ce thème est déjà installé, voulez-vous l'écraser?</value>\n  </data>\n  <data name=\"ThemeAlreadyInstalledTitle\" xml:space=\"preserve\">\n    <value>Ce thème est déjà installé!</value>\n  </data>\n  <data name=\"ThemeChangedMessage\" xml:space=\"preserve\">\n    <value>Afin de mettre à jour vôtre thème, Unicord doit redémarrer. Voulez-vous le redémarrer maintenant ?</value>\n  </data>\n  <data name=\"ThemeChangedTitle\" xml:space=\"preserve\">\n    <value>Thème changé!</value>\n  </data>\n  <data name=\"ThemeInvalidDoesNotExist\" xml:space=\"preserve\">\n    <value>J'ai essayé de charger un thème qui n'existe pas sur le disque. Le thème a été désinstallé.</value>\n  </data>\n  <data name=\"ThemeInvalidNoJson\" xml:space=\"preserve\">\n    <value>Ce fichier ne semble pas être un thème Unicord, il manque le fichier theme.json!</value>\n  </data>\n  <data name=\"ThemeInvalidNoLogo\" xml:space=\"preserve\">\n    <value>Ce thème mentionne un fichier logo qui n'existe pas!</value>\n  </data>\n  <data name=\"ThemeLoadFailedFormat\" xml:space=\"preserve\">\n    <value>Le chargement du thème actuellement sélectionné a échoué\n{0}</value>\n  </data>\n  <data name=\"ThemePreInstallCheckFailed\" xml:space=\"preserve\">\n    <value>La vérification de la pré installation à échoué! Cela veut dire que votre appareil ou votre version de Windows n'est pas supporté par ce thème. Désolé !</value>\n  </data>\n  <data name=\"ThemesSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Apparence</value>\n  </data>\n  <data name=\"ThemeUnsupportedWindowsVersion\" xml:space=\"preserve\">\n    <value>La version de Windows que vous utilisez n'est pas supportée par ce thème. Désolé !</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/UserListPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"UserListHeader.Text\" xml:space=\"preserve\">\n    <value>Utilisateurs</value>\n  </data>\n  <data name=\"UserSearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Rechercher des utilisateurs</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/VideoEditor.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"CannotEditClipMessage\" xml:space=\"preserve\">\n    <value>Actuellement, vous ne pouvez éditer que des clips vidéo à partir de fichiers. Désolé !</value>\n  </data>\n  <data name=\"CannotEditClipTitle\" xml:space=\"preserve\">\n    <value>Ce clip ne peut être édité.</value>\n  </data>\n  <data name=\"LoadPreviousEditsMessage\" xml:space=\"preserve\">\n    <value>Il semble que vous ayez déjà modifié ce fichier. Voulez-vous charger vos modifications précédentes?</value>\n  </data>\n  <data name=\"LoadPreviousEditsTitle\" xml:space=\"preserve\">\n    <value>Charger les modifications précédentes ?</value>\n  </data>\n  <data name=\"ProcessingVideoHeader.Text\" xml:space=\"preserve\">\n    <value>Traitement de la vidéo </value>\n  </data>\n  <data name=\"SaveChangesMessage\" xml:space=\"preserve\">\n    <value>Voulez-vous enregistrer vos modifications? Elles seront présentes la prochaine fois que vous modifierez ce clip.</value>\n  </data>\n  <data name=\"SaveChangesTitle\" xml:space=\"preserve\">\n    <value>Enregistrer vos modifications?</value>\n  </data>\n  <data name=\"VideoEditorHeader.Text\" xml:space=\"preserve\">\n    <value>Rogner la vidéo</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/Voice.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ConnectedStateFormat\" xml:space=\"preserve\">\n    <value>Connecté à {0}!</value>\n  </data>\n  <data name=\"ConnectionState1\" xml:space=\"preserve\">\n    <value>Démarrage en cours...</value>\n  </data>\n  <data name=\"ConnectionState2\" xml:space=\"preserve\">\n    <value>Déconnexion...</value>\n  </data>\n  <data name=\"ConnectionState3\" xml:space=\"preserve\">\n    <value>Discussion avec Discord...</value>\n  </data>\n  <data name=\"ConnectionState4Format\" xml:space=\"preserve\">\n    <value>Connexion à {0}...</value>\n  </data>\n  <data name=\"DisconnectedState\" xml:space=\"preserve\">\n    <value>Déconnecté</value>\n  </data>\n  <data name=\"InitialConnectionState\" xml:space=\"preserve\">\n    <value>Mise en place...</value>\n  </data>\n  <data name=\"ReconnectingState\" xml:space=\"preserve\">\n    <value>Reconnexion...</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/fr/VoiceSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" id=\"root\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\"/>\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\"/>\n              <xsd:attribute name=\"name\" type=\"xsd:string\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\"/>\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\"/>\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\"/>\n              <xsd:attribute ref=\"xml:space\"/>\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\"/>\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\"/>\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AudioDevicesHeader.Text\" xml:space=\"preserve\">\n    <value>Périphériques audio</value>\n  </data>\n  <data name=\"AudioDevicesSubheader.Text\" xml:space=\"preserve\">\n    <value>Ici, vous pouvez choisir les appareils audio que vous souhaitez utiliser pour les appels vocaux.</value>\n  </data>\n  <data name=\"InputDevices.Header\" xml:space=\"preserve\">\n    <value>Périphérique d'entrée</value>\n  </data>\n  <data name=\"OutputDevices.Header\" xml:space=\"preserve\">\n    <value>Périphérique de sortie</value>\n  </data>\n  <data name=\"VoiceSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Voix</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/AboutSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AcknowledgementsText.Text\" xml:space=\"preserve\">\n    <value>謝辞</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/AccountsSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AccountsSettingsPage.Tag\" xml:space=\"preserve\">\n    <value>アカウント</value>\n  </data>\n  <data name=\"BackgroundNotificationsDescriptionWin10\" xml:space=\"preserve\">\n    <value>通知の表示とライブタイル更新のためにUnicordへバックグラウンド処理の許可を与える。</value>\n  </data>\n  <data name=\"BackgroundNotificationsDescriptionWin11\" xml:space=\"preserve\">\n    <value>通知の表示のためにUnicordへバックグラウンド処理の許可を与える。</value>\n  </data>\n  <data name=\"BackgroundNotificationsBlock.Title\" xml:space=\"preserve\">\n    <value>バックグラウンド通知</value>\n  </data>\n  <data name=\"ContactsUnavailable.Text\" xml:space=\"preserve\">\n    <value>連絡先の同期はこのデバイスでは利用できません。</value>\n  </data>\n  <data name=\"EmailHideButton.Content\" xml:space=\"preserve\">\n    <value>隠す</value>\n  </data>\n  <data name=\"EmailRevealButton.Content\" xml:space=\"preserve\">\n    <value>表示する</value>\n  </data>\n  <data name=\"FriendsText.Text\" xml:space=\"preserve\">\n    <value>フレンド</value>\n  </data>\n  <data name=\"Loading\" xml:space=\"preserve\">\n    <value>読み込み中...</value>\n  </data>\n  <data name=\"LogoutBlock.Title\" xml:space=\"preserve\">\n    <value>ログアウト</value>\n  </data>\n  <data name=\"LogoutButton.Content\" xml:space=\"preserve\">\n    <value>ログアウト</value>\n  </data>\n  <data name=\"LogoutPromptMessage\" xml:space=\"preserve\">\n    <value>本当にログアウトしますか？</value>\n  </data>\n  <data name=\"LogoutPromptTitle\" xml:space=\"preserve\">\n    <value>本気ですか？</value>\n  </data>\n  <data name=\"StatisticsText.Text\" xml:space=\"preserve\">\n    <value>統計</value>\n  </data>\n  <data name=\"StatisticsBlock.Title\" xml:space=\"preserve\">\n    <value>統計</value>\n  </data>\n  <data name=\"StatisticsBlock.Description\" xml:space=\"preserve\">\n    <value>アカウントに関する詳細な統計情報を表示します</value>\n  </data>\n  <data name=\"CopyStatisticsButton.Content\" xml:space=\"preserve\">\n    <value>コピー</value>\n  </data>\n  <data name=\"CopyStatisticsButtonText.Text\" xml:space=\"preserve\">\n    <value>コピー</value>\n  </data>\n  <data name=\"SyncContactsBlock.Description\" xml:space=\"preserve\">\n    <value>DiscordとPeopleアプリの連絡先を同期します。</value>\n  </data>\n  <data name=\"SyncContactsBlock.Title\" xml:space=\"preserve\">\n    <value>連絡先を同期</value>\n  </data>\n  <data name=\"SyncPeopleText.Text\" xml:space=\"preserve\">\n    <value>[Windows People](ms-people:)間でフレンドを同期</value>\n    <comment>Markdown capable</comment>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/AgeGatePage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"BackButton.Content\" xml:space=\"preserve\">\n    <value>表示しない</value>\n  </data>\n  <data name=\"ChannelWarningHeader.Text\" xml:space=\"preserve\">\n    <value>成人向けコンテンツ警告</value>\n  </data>\n  <data name=\"ChannelWarningSubheader.Text\" xml:space=\"preserve\">\n    <value>この先には成人向けのコンテンツがあると思われるため、私(Unicord作者であるWam)にはあなたが18歳以上であることを確認する法的な義務があります。\t.\n\nあなたは18歳以上で、かつ成人向けのコンテンツを表示しますか？</value>\n  </data>\n  <data name=\"ContinueButton.Content\" xml:space=\"preserve\">\n    <value>表示する</value>\n  </data>\n  <data name=\"DontAskAgain.Content\" xml:space=\"preserve\">\n    <value>再び尋ねない</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/ChannelPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ChannelReadonlyText\" xml:space=\"preserve\">\n    <value>このチャンネルは読み取り専用です。</value>\n  </data>\n  <data name=\"CloseEditButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>閉じる</value>\n  </data>\n  <data name=\"DeleteAllButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>削除</value>\n  </data>\n  <data name=\"ImmuneSlowModeFormat\" xml:space=\"preserve\">\n    <value>あなたはこのチャンネルにおいて {0} 低速モードの対象外です!</value>\n  </data>\n  <data name=\"MassDeleteMessage\" xml:space=\"preserve\">\n    <value>これらのメッセージを全て削除しますか？</value>\n  </data>\n  <data name=\"MassDeleteTitle\" xml:space=\"preserve\">\n    <value>メッセージを削除</value>\n  </data>\n  <data name=\"MessageChannelFormat\" xml:space=\"preserve\">\n    <value>メッセージ {0}{1}</value>\n    <comment>メッセージ {ChannelPrefix}{ChannelName}</comment>\n  </data>\n  <data name=\"MoreOptionsButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>さらに表示</value>\n  </data>\n  <data name=\"MuteButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>ミュート</value>\n  </data>\n  <data name=\"NewWindowItem.Text\" xml:space=\"preserve\">\n    <value>新しいウィンドウで開く</value>\n  </data>\n  <data name=\"NewWindowNormal.Text\" xml:space=\"preserve\">\n    <value>通常ウィンドウで開く</value>\n  </data>\n  <data name=\"NewWindowOverlay.Text\" xml:space=\"preserve\">\n    <value>オーバーレイで開く</value>\n  </data>\n  <data name=\"NoMessagesHeader.Text\" xml:space=\"preserve\">\n    <value>表示するものがありません</value>\n  </data>\n  <data name=\"NoMessagesSubheader.Text\" xml:space=\"preserve\">\n    <value>申し訳ありません。このチャンネル内のメッセージを読み込むことができませんでした。</value>\n  </data>\n  <data name=\"OpenLocalButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>ローカルの画像を参照する</value>\n  </data>\n  <data name=\"OpenPopoutButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>写真や動画を撮影する</value>\n  </data>\n  <data name=\"PinsButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>ピン止めされたメッセージ</value>\n  </data>\n  <data name=\"PinToStart.Text\" xml:space=\"preserve\">\n    <value>スタートにピン止めする</value>\n  </data>\n  <data name=\"ReplyCancel.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>キャンセル</value>\n  </data>\n  <data name=\"ReplyingTo.Text\" xml:space=\"preserve\">\n    <value>返信</value>\n  </data>\n  <data name=\"ReplyPingToggle.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>作者からの返信を強調表示する</value>\n  </data>\n  <data name=\"SearchButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>検索</value>\n  </data>\n  <data name=\"SlowModeFormat\" xml:space=\"preserve\">\n    <value>メッセージは{0}おきに送信できます!</value>\n  </data>\n  <data name=\"UnpinFromStart.Text\" xml:space=\"preserve\">\n    <value>スタートからピン止めを外す</value>\n  </data>\n  <data name=\"UserListButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>ユーザーリスト</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/Controls.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AttachmentCopyUrlButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>URLをコピー</value>\n  </data>\n  <data name=\"AttachmentDownloadFailedText\" xml:space=\"preserve\">\n    <value>ダウンロード中に問題が発生しました。後ほど試してください。</value>\n  </data>\n  <data name=\"AttachmentDownloadFailedTitle\" xml:space=\"preserve\">\n    <value>添付ファイルの保存に失敗しました!</value>\n  </data>\n  <data name=\"AttachmentExtensionPlaceholder\" xml:space=\"preserve\">\n    <value>添付ファイルの拡張子</value>\n  </data>\n  <data name=\"AttachmentSaveButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>保存</value>\n  </data>\n  <data name=\"AttachmentShareButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>共有</value>\n  </data>\n  <data name=\"EditButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>このクリップを編集</value>\n  </data>\n  <data name=\"EmoteSearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>エモートを検索...</value>\n  </data>\n  <data name=\"RemoveButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>削除</value>\n  </data>\n  <data name=\"ReplyingTo.Text\" xml:space=\"preserve\">\n    <value>返信</value>\n  </data>\n  <data name=\"SharingTitleFormat\" xml:space=\"preserve\">\n    <value>{0}を共有</value>\n  </data>\n  <data name=\"SpoilerButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>ネタバレとしてマーク</value>\n  </data>\n  <data name=\"TranscodeFailedButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\n    <value>変換に失敗しました!</value>\n  </data>\n  <data name=\"TranscodingCancelButton.Content\" xml:space=\"preserve\">\n    <value>キャンセル</value>\n  </data>\n  <data name=\"TranscodingProgressHeader.Text\" xml:space=\"preserve\">\n    <value>変換中です</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/Converters.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ListeningStatus\" xml:space=\"preserve\">\n    <value>再生中の音楽</value>\n  </data>\n  <data name=\"ListeningStatusFormat\" xml:space=\"preserve\">\n    <value>{0}を再生中</value>\n  </data>\n  <data name=\"PlayingStatus\" xml:space=\"preserve\">\n    <value>プレイ中のゲーム</value>\n  </data>\n  <data name=\"PlayingStatusFormat\" xml:space=\"preserve\">\n    <value>{0}をプレイ中</value>\n    <comment>these don't localise well</comment>\n  </data>\n  <data name=\"StreamingStatus\" xml:space=\"preserve\">\n    <value>配信中</value>\n  </data>\n  <data name=\"StreamingStatusFormat\" xml:space=\"preserve\">\n    <value>{0}を配信中</value>\n    <comment>i'll refactor this at some point i promise</comment>\n  </data>\n  <data name=\"UserChannelIconChangeFormat\" xml:space=\"preserve\">\n    <value>{0}がチャンネルアイコンを変更しました。</value>\n  </data>\n  <data name=\"UserChannelNameChangeFormat\" xml:space=\"preserve\">\n    <value>(0}がチャンネル名を変更しました。</value>\n  </data>\n  <data name=\"UserJoinedGroupFormat\" xml:space=\"preserve\">\n    <value>{0}がグループに参加しました。</value>\n  </data>\n  <data name=\"UserLeftGroupFormat\" xml:space=\"preserve\">\n    <value>{0}がグループから脱退しました。</value>\n  </data>\n  <data name=\"UserMessagePinFormat\" xml:space=\"preserve\">\n    <value>{0}がこのチャンネルでメッセージをピン止めしました。</value>\n  </data>\n  <data name=\"UserPremiumGuildSubscriptionFormat\" xml:space=\"preserve\">\n    <value>{0}がサーバーをブーストしました!</value>\n  </data>\n  <data name=\"UserPremiumGuildSubscriptionTierFormat\" xml:space=\"preserve\">\n    <value>{0}がサーバーを{2}レベルにブーストしました!!</value>\n    <comment>user, boost level (number)</comment>\n  </data>\n  <data name=\"UserPremiumMultiGuildSubscriptionFormat\" xml:space=\"preserve\">\n    <value>{0}がサーバーを**{1}** 回ブーストしました!</value>\n  </data>\n  <data name=\"UserPremiumMultiGuildSubscriptionTierFormat\" xml:space=\"preserve\">\n    <value>{0}がサーバーを**{1}** 回ブーストしてレベル{2}に到達させました!</value>\n  </data>\n  <data name=\"UserStartedCallFormat\" xml:space=\"preserve\">\n    <value>{0}が通話を開始しました。</value>\n  </data>\n  <data name=\"WatchingStatus\" xml:space=\"preserve\">\n    <value>視聴中</value>\n  </data>\n  <data name=\"WatchingStatusFormat\" xml:space=\"preserve\">\n    <value>{0}を視聴中</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/DMChannelsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DirectMessageChannels.Tag\" xml:space=\"preserve\">\n    <value>ダイレクトメッセージ</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/Dialogs.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"BanDeleteFromLastDay.Content\" xml:space=\"preserve\">\n    <value>直近24時間</value>\n  </data>\n  <data name=\"BanDeleteFromLastWeek.Content\" xml:space=\"preserve\">\n    <value>直近7日間</value>\n  </data>\n  <data name=\"BanDeleteMessagesBox.Header\" xml:space=\"preserve\">\n    <value>メッセージを削除する</value>\n  </data>\n  <data name=\"BanDeleteNoMessages.Content\" xml:space=\"preserve\">\n    <value>メッセージを削除しない</value>\n  </data>\n  <data name=\"BanDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>はい</value>\n  </data>\n  <data name=\"BanDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>いいえ</value>\n  </data>\n  <data name=\"BanDialogHeaderFormat\" xml:space=\"preserve\">\n    <value>@{0}#{1}をBanしますか?</value>\n  </data>\n  <data name=\"BanReason.Header\" xml:space=\"preserve\">\n    <value>Banの理由</value>\n  </data>\n  <data name=\"ChangeNicknameDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>保存</value>\n  </data>\n  <data name=\"ChangeNicknameDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>キャンセル</value>\n  </data>\n  <data name=\"ChangeNicknameSubtitle.Text\" xml:space=\"preserve\">\n    <value>ニックネームは全員に公開されるため、社会通念上望ましいものにしてください！</value>\n  </data>\n  <data name=\"ChangeNicknameTitle.Text\" xml:space=\"preserve\">\n    <value>ニックネームを変更</value>\n  </data>\n  <data name=\"ConfirmationDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>はい</value>\n  </data>\n  <data name=\"ConfirmationDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>キャンセル</value>\n  </data>\n  <data name=\"DeleteMessageDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>はい</value>\n  </data>\n  <data name=\"DeleteMessageDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>いいえ</value>\n  </data>\n  <data name=\"DeleteMessageDialog.Title\" xml:space=\"preserve\">\n    <value>このメッセージを削除しますか？</value>\n  </data>\n  <data name=\"ErrorDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>OK</value>\n  </data>\n  <data name=\"InstallThemeBy.Text\" xml:space=\"preserve\">\n    <value>By</value>\n  </data>\n  <data name=\"InstallThemeDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>インストール</value>\n  </data>\n  <data name=\"InstallThemeDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>キャンセル</value>\n  </data>\n  <data name=\"InvalidThemeFileNotFound\" xml:space=\"preserve\">\n    <value>指定されたテーマファイルが見つかりませんでした。</value>\n  </data>\n  <data name=\"InvalidThemeFileNoThemesFound\" xml:space=\"preserve\">\n    <value>指定されたテーマファイルの中にはテーマが含まれていないようです。</value>\n  </data>\n  <data name=\"InvalidThemeFileTitle\" xml:space=\"preserve\">\n    <value>無効なテーマファイルです！</value>\n  </data>\n  <data name=\"KickDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>はい</value>\n  </data>\n  <data name=\"KickDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>いいえ</value>\n  </data>\n  <data name=\"KickDialogHeaderFormat\" xml:space=\"preserve\">\n    <value>@{0}#{1}を追放しますか？?</value>\n  </data>\n  <data name=\"KickReason.Header\" xml:space=\"preserve\">\n    <value>追放の理由</value>\n  </data>\n  <data name=\"PinMessageDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>はい</value>\n  </data>\n  <data name=\"PinMessageDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>いいえ</value>\n  </data>\n  <data name=\"PinMessageDialog.Title\" xml:space=\"preserve\">\n    <value>このメッセージをピン止めしますか？</value>\n  </data>\n  <data name=\"ProfileConnections.Header\" xml:space=\"preserve\">\n    <value>連携</value>\n  </data>\n  <data name=\"ProfileJoinedServer.Text\" xml:space=\"preserve\">\n    <value>サーバー参加日</value>\n  </data>\n  <data name=\"ProfileMutualServers.Header\" xml:space=\"preserve\">\n    <value>共通のサーバー</value>\n  </data>\n  <data name=\"ProfileRoles.Text\" xml:space=\"preserve\">\n    <value>ロール</value>\n  </data>\n  <data name=\"ThemeInstallFailure\" xml:space=\"preserve\">\n    <value>インストールに失敗しました!</value>\n  </data>\n  <data name=\"TokenDialog.CloseButtonText\" xml:space=\"preserve\">\n    <value>キャンセル</value>\n  </data>\n  <data name=\"TokenDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>ログイン</value>\n  </data>\n  <data name=\"TokenDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>ファイルから読み込む</value>\n  </data>\n  <data name=\"TokenSubtitle.Text\" xml:space=\"preserve\">\n    <value>トークンの入手方法がわかりませんか? [こちらをクリック](https://example.com/)</value>\n  </data>\n  <data name=\"TokenTitle.Text\" xml:space=\"preserve\">\n    <value>あなたのDiscordトークンを入力してください</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/Flyouts.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AddReaction.Text\" xml:space=\"preserve\">\n    <value>リアクションを付ける</value>\n  </data>\n  <data name=\"Ban.Text\" xml:space=\"preserve\">\n    <value>Ban</value>\n  </data>\n  <data name=\"ChangeNickname.Text\" xml:space=\"preserve\">\n    <value>ニックネームを変更</value>\n  </data>\n  <data name=\"Copy.Text\" xml:space=\"preserve\">\n    <value>コピー</value>\n  </data>\n  <data name=\"CopyID.Text\" xml:space=\"preserve\">\n    <value>IDをコピー</value>\n  </data>\n  <data name=\"CopyLink.Text\" xml:space=\"preserve\">\n    <value>URLをコピー</value>\n  </data>\n  <data name=\"CreateServerSubtitle.Text\" xml:space=\"preserve\">\n    <value>無料です！</value>\n  </data>\n  <data name=\"CreateServerTitle.Text\" xml:space=\"preserve\">\n    <value>サーバーを作成</value>\n  </data>\n  <data name=\"Delete.Text\" xml:space=\"preserve\">\n    <value>削除</value>\n  </data>\n  <data name=\"Edit.Text\" xml:space=\"preserve\">\n    <value>編集</value>\n  </data>\n  <data name=\"EditMode.Text\" xml:space=\"preserve\">\n    <value>編集モード</value>\n  </data>\n  <data name=\"JoinExistingServerSubtitle.Text\" xml:space=\"preserve\">\n    <value>既に招待されている場合</value>\n  </data>\n  <data name=\"JoinExistingServerTitle.Text\" xml:space=\"preserve\">\n    <value>サーバーを追加</value>\n  </data>\n  <data name=\"Kick.Text\" xml:space=\"preserve\">\n    <value>追放</value>\n  </data>\n  <data name=\"LeaveServer.Text\" xml:space=\"preserve\">\n    <value>サーバーから脱退</value>\n  </data>\n  <data name=\"MarkAsRead.Text\" xml:space=\"preserve\">\n    <value>既読にする</value>\n  </data>\n  <data name=\"Message.Text\" xml:space=\"preserve\">\n    <value>メッセージ</value>\n  </data>\n  <data name=\"Mute.Text\" xml:space=\"preserve\">\n    <value>通知オフにする</value>\n  </data>\n  <data name=\"NewWindow.Text\" xml:space=\"preserve\">\n    <value>新しいウィンドウで開く</value>\n  </data>\n  <data name=\"Pin.Text\" xml:space=\"preserve\">\n    <value>メッセージをピン止めする</value>\n  </data>\n  <data name=\"PinToStart.Text\" xml:space=\"preserve\">\n    <value>スタートにピン止めする</value>\n  </data>\n  <data name=\"Profile.Text\" xml:space=\"preserve\">\n    <value>プロファイル</value>\n  </data>\n  <data name=\"Reply.Text\" xml:space=\"preserve\">\n    <value>返信</value>\n  </data>\n  <data name=\"SendMessage.Text\" xml:space=\"preserve\">\n    <value>メッセージを送信</value>\n  </data>\n  <data name=\"ShowFullProfile.Text\" xml:space=\"preserve\">\n    <value>すべてのプロファイルを表示</value>\n  </data>\n  <data name=\"Unmute.Text\" xml:space=\"preserve\">\n    <value>通知オンにする</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/FriendsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"FriendsAllItem.Header\" xml:space=\"preserve\">\n    <value>すべて表示</value>\n  </data>\n  <data name=\"FriendsBlockedItem.Header\" xml:space=\"preserve\">\n    <value>ブロック中</value>\n  </data>\n  <data name=\"FriendsHeader.Text\" xml:space=\"preserve\">\n    <value>フレンド</value>\n  </data>\n  <data name=\"FriendsOnlineItem.Header\" xml:space=\"preserve\">\n    <value>オンライン</value>\n  </data>\n  <data name=\"FriendsPendingItem.Header\" xml:space=\"preserve\">\n    <value>保留中</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/LoginPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"LoadFileButton.Content\" xml:space=\"preserve\">\n    <value>ファイルから読み込む</value>\n  </data>\n  <data name=\"LoginButton.Content\" xml:space=\"preserve\">\n    <value>ログイン</value>\n  </data>\n  <data name=\"LoginWithDiscordButton.Content\" xml:space=\"preserve\">\n    <value>Discordからログイン</value>\n  </data>\n  <data name=\"LoginWithTokenButton.Content\" xml:space=\"preserve\">\n    <value>トークンでログイン</value>\n  </data>\n  <data name=\"TokenTextBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Discordのトークン</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/MediaSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AdvancedHeader.Header\" xml:space=\"preserve\">\n    <value>高度</value>\n  </data>\n  <data name=\"AlwaysCompress.Content\" xml:space=\"preserve\">\n    <value>常に圧縮する</value>\n  </data>\n  <data name=\"AudioOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>オーディオ設定</value>\n  </data>\n  <data name=\"BitrateSlider.Header\" xml:space=\"preserve\">\n    <value>ビットレート</value>\n  </data>\n  <data name=\"CompressIfNeeded.Content\" xml:space=\"preserve\">\n    <value>サイズ上限を超えているときのみ圧縮する</value>\n  </data>\n  <data name=\"EncoderPriorityBox.Header\" xml:space=\"preserve\">\n    <value>エンコードの設定</value>\n  </data>\n  <data name=\"EncoderPriorityQuality.Content\" xml:space=\"preserve\">\n    <value>画質優先(より長い処理時間)</value>\n  </data>\n  <data name=\"EncoderPrioritySpeed.Content\" xml:space=\"preserve\">\n    <value>速度優先(より大きなファイルサイズ)</value>\n  </data>\n  <data name=\"LargePresetItem.Text\" xml:space=\"preserve\">\n    <value>大</value>\n  </data>\n  <data name=\"LargePresetSubheader.Text\" xml:space=\"preserve\">\n    <value>720p, ~1536kbps</value>\n  </data>\n  <data name=\"MediaCompressionBlock.Description\" xml:space=\"preserve\">\n    <value>Unicordは、サイズ上限に合致させるために動画を自動的に圧縮することができます。</value>\n  </data>\n  <data name=\"MediaCompressionBlock.Title\" xml:space=\"preserve\">\n    <value>メディアを自動的に圧縮する</value>\n  </data>\n  <data name=\"MediumPresetItem.Text\" xml:space=\"preserve\">\n    <value>中</value>\n  </data>\n  <data name=\"MediumPresetSubheader.Text\" xml:space=\"preserve\">\n    <value>480p, ~768kbps</value>\n  </data>\n  <data name=\"NeverCompress.Content\" xml:space=\"preserve\">\n    <value>メディアを圧縮しない</value>\n  </data>\n  <data name=\"ResolutionBox.Header\" xml:space=\"preserve\">\n    <value>解像度</value>\n  </data>\n  <data name=\"SmallPresetItem.Text\" xml:space=\"preserve\">\n    <value>小</value>\n  </data>\n  <data name=\"SmallPresetSubheader.Text\" xml:space=\"preserve\">\n    <value>360p, ~512kbps</value>\n  </data>\n  <data name=\"TinyPresetItem.Text\" xml:space=\"preserve\">\n    <value>最小</value>\n  </data>\n  <data name=\"TinyPresetSubheader.Text\" xml:space=\"preserve\">\n    <value>144p, ~256kbps</value>\n  </data>\n  <data name=\"Title.Text\" xml:space=\"preserve\">\n    <value>音声とビデオ</value>\n  </data>\n  <data name=\"VideoOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>ビデオ設定</value>\n  </data>\n  <data name=\"VideoOptionsSubheader.Text\" xml:space=\"preserve\">\n    <value>高度な知識を持つ方向けの、解像度とビットレートのオプションです。</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/MessagingSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AdjustRoleColoursBlock.Title\" xml:space=\"preserve\">\n    <value>視認性向上のためユーザーカラーを使用する</value>\n  </data>\n  <data name=\"AdjustRoleColoursHeader.Text\" xml:space=\"preserve\">\n    <value>コントラストの補正</value>\n  </data>\n  <data name=\"AutoPlayGIFsBlock.Title\" xml:space=\"preserve\">\n    <value>GIFを自動的に再生する</value>\n  </data>\n  <data name=\"ChatHeader.Text\" xml:space=\"preserve\">\n    <value>メッセージ</value>\n  </data>\n  <data name=\"EnableSpoilersBlock.Title\" xml:space=\"preserve\">\n    <value>ネタバレコンテンツを隠す</value>\n  </data>\n  <data name=\"LearnMoreButton.Content\" xml:space=\"preserve\">\n    <value>詳細</value>\n  </data>\n  <data name=\"MessagingSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>テキストと画像</value>\n  </data>\n  <data name=\"MinimumContrastSlider.Header\" xml:space=\"preserve\">\n    <value>コントラストの最小値</value>\n  </data>\n  <data name=\"PromptLinksBlock.Description\" xml:space=\"preserve\">\n    <value>この設定が有効な場合、 信頼されていないリンクを開く際にWindowsから確認が取られます。</value>\n    <comment>Tooltip for previous text</comment>\n  </data>\n  <data name=\"PromptLinksBlock.Title\" xml:space=\"preserve\">\n    <value>信頼されていないリンクをクリックした際に警告を表示する</value>\n  </data>\n  <data name=\"ShowHugeEmojiBlock.Title\" xml:space=\"preserve\">\n    <value>絵文字を大きく表示する</value>\n  </data>\n  <data name=\"ShowStatusGlyphsBlock.Title\" xml:space=\"preserve\">\n    <value>色覚異常の方に向けたステータスを表示する</value>\n  </data>\n  <data name=\"TimestampsSubheader.Text\" xml:space=\"preserve\">\n    <value>メッセージに表示されるタイムスタンプの形式を指定できます</value>\n  </data>\n  <data name=\"TimestampStyleAbsolute.Text\" xml:space=\"preserve\">\n    <value>絶対表示</value>\n  </data>\n  <data name=\"TimestampStyleBlock.Title\" xml:space=\"preserve\">\n    <value>タイムスタンプ</value>\n  </data>\n  <data name=\"TimestampStyleBoth.Text\" xml:space=\"preserve\">\n    <value>両方</value>\n  </data>\n  <data name=\"TimestampStyleRelative.Text\" xml:space=\"preserve\">\n    <value>相対表示</value>\n  </data>\n<data name=\"EnableGuildBrowsingBlock.Title\" xml:space=\"preserve\">\n    <value>最後に閲覧したチャンネルを記憶する</value>\n  </data>\n  <data name=\"EnableGuildBrowsingBlock.Description\" xml:space=\"preserve\">\n    <value>以前のUnicordでは、サーバーをクリックしても最後に閲覧していたチャンネルへは推移していませんでした。 このオプションを無効にすると従来の挙動に戻ります。</value>\n  </data>\n  <data name=\"EnableWebPBlock.Title\" xml:space=\"preserve\">\n    <value>可能な場合にWebPコーデックを使用する</value>\n  </data>\n  <data name=\"EnableWebPBlock.Description\" xml:space=\"preserve\">\n    <value>高効率な画像コーデックを使用して帯域幅を節約できますが、古い端末では動作が遅くなる可能性があります。</value>\n  </data>\n  <data name=\"WebPDownloadButton.Content\" xml:space=\"preserve\">\n    <value>Microsoft Storeから入手</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/NotificationsSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DesktopNotificationsUnavailable.Text\" xml:space=\"preserve\">\n    <value>お使いの環境では通知機能は利用できません。</value>\n  </data>\n  <data name=\"EnableBadgeCount.Description\" xml:space=\"preserve\">\n    <value>未読のメンション数をタスクバー上のバッジに表示します。</value>\n  </data>\n  <data name=\"EnableBadgeCount.Title\" xml:space=\"preserve\">\n    <value>メンション数をバッジで表示する</value>\n  </data>\n  <data name=\"EnableBadgeUnread.Description\" xml:space=\"preserve\">\n    <value>未読のDMがある場合、タスクバー上にアイコンを表示します。</value>\n  </data>\n  <data name=\"EnableBadgeUnread.Title\" xml:space=\"preserve\">\n    <value>未読のDM数をバッジで表示する</value>\n  </data>\n  <data name=\"EnableDesktopNotifications.Description\" xml:space=\"preserve\">\n    <value>メンションやDMが来た際に、デスクトップ上と通知センター内に通知を表示します。</value>\n  </data>\n  <data name=\"EnableDesktopNotifications.Title\" xml:space=\"preserve\">\n    <value>デスクトップ通知を有効にする</value>\n  </data>\n  <data name=\"EnableLiveTiles.Description\" xml:space=\"preserve\">\n    <value>スタート画面にピン留めされたタイルにDiscordのメッセージを表示します。</value>\n  </data>\n  <data name=\"EnableLiveTiles.Title\" xml:space=\"preserve\">\n    <value>ライブタイルを有効にする</value>\n  </data>\n  <data name=\"EnableNotificationsDescriptionWin10\" xml:space=\"preserve\">\n    <value>スタート画面やアクションセンター、タスクバーにメッセージに関する通知を表示します。</value>\n  </data>\n  <data name=\"EnableNotificationsDescriptionWin11\" xml:space=\"preserve\">\n    <value>通知センターやタスクバーにメッセージに関する通知を表示します。</value>\n  </data>\n  <data name=\"EnableNotifications.Title\" xml:space=\"preserve\">\n    <value>通知を有効にする</value>\n  </data>\n  <data name=\"EnableDesktopNotificationsDescriptionWin10\" xml:space=\"preserve\">\n    <value>メンションやDMが来た際に、デスクトップ上とアクションセンター内に通知を表示します。</value>\n  </data>\n  <data name=\"EnableDesktopNotificationsDescriptionWin11\" xml:space=\"preserve\">\n    <value>メンションやDMが来た際に、デスクトップ上と通知センター内に通知を表示します。</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/Permissions.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AccessChannelsSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーにチャンネルの閲覧を既定で許可します。無効にした場合、チャンネルはプライベートになります。</value>\n  </data>\n  <data name=\"AccessChannelsTitle\" xml:space=\"preserve\">\n    <value>チャンネルを見る</value>\n  </data>\n  <data name=\"AddReactionsSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーがチャンネル上のメッセージに新しくリアクションを追加することを許可します。</value>\n  </data>\n  <data name=\"AddReactionsTitle\" xml:space=\"preserve\">\n    <value>リアクションの許可</value>\n  </data>\n  <data name=\"AttachFilesSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーがファイルやメディアをこのチャンネルへ送信することを許可します。</value>\n  </data>\n  <data name=\"AttachFilesTitle\" xml:space=\"preserve\">\n    <value>ファイルの送信</value>\n  </data>\n  <data name=\"CreateInstantInviteSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーがこのチャンネルの招待リンクを作成することを許可します。</value>\n  </data>\n  <data name=\"CreateInstantInviteTitle\" xml:space=\"preserve\">\n    <value>招待の作成</value>\n  </data>\n  <data name=\"DeafenMembersSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーがボイスチャンネル内で他メンバーを全員に対してミュートすることを許可します。</value>\n  </data>\n  <data name=\"DeafenMembersTitle\" xml:space=\"preserve\">\n    <value>メンバーのミュート</value>\n  </data>\n  <data name=\"EmbedLinksSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーが埋め込みコンテンツを表示するリンクを送信することを許可します。</value>\n  </data>\n  <data name=\"EmbedLinksTitle\" xml:space=\"preserve\">\n    <value>リンクの埋め込み</value>\n  </data>\n  <data name=\"ManageChannelsSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーがこのチャンネルの名称・説明・設定を変更すること、そしてチャンネルを削除することを許可します。</value>\n  </data>\n  <data name=\"ManageChannelsTitle\" xml:space=\"preserve\">\n    <value>チャンネルの管理</value>\n  </data>\n  <data name=\"ManageMessagesSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーがメッセージを削除・ピン留めすることを許可します。</value>\n  </data>\n  <data name=\"ManageMessagesTitle\" xml:space=\"preserve\">\n    <value>メッセージの管理</value>\n  </data>\n  <data name=\"ManageRolesSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーがこのチャンネルの権限を変更することを許可します。</value>\n  </data>\n  <data name=\"ManageRolesTitle\" xml:space=\"preserve\">\n    <value>権限の管理</value>\n  </data>\n  <data name=\"ManageWebhooksSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーがチャンネル内のWebhookを管理することを許可します。</value>\n  </data>\n  <data name=\"ManageWebhooksTitle\" xml:space=\"preserve\">\n    <value>Webhookの管理</value>\n  </data>\n  <data name=\"MentionEveryoneSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーが@everyone(サーバー内の全員)、@here(チャンネル内のオンラインのメンバーのみ)を使用し、すべてのロールに@mentionすることを許可します。</value>\n  </data>\n  <data name=\"MentionEveryoneTitle\" xml:space=\"preserve\">\n    <value>@everyone、@here、 全てのロールにメンション</value>\n  </data>\n  <data name=\"MoveMembersSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーが他メンバーを切断、あるいはほかのボイスチャンネルへ移動することを許可します。</value>\n  </data>\n  <data name=\"MoveMembersTitle\" xml:space=\"preserve\">\n    <value>メンバーの移動</value>\n  </data>\n  <data name=\"MuteMembersSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーがボイスチャンネルでメンバーをミュートすることを許可します。このミュートをされると誰にも話すことはできません。</value>\n  </data>\n  <data name=\"MuteMembersTitle\" xml:space=\"preserve\">\n    <value>メンバーをミュート</value>\n  </data>\n  <data name=\"PrioritySpeakerSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーはボイスチャンネルで声が聴き取られやすくなります。この機能を利用するには、キーバインド「プッシュトゥトーク(優先)」を使用してください。</value>\n  </data>\n  <data name=\"PrioritySpeakerTitle\" xml:space=\"preserve\">\n    <value>優先スピーカー</value>\n  </data>\n  <data name=\"ReadMessageHistorySubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーが過去にチャンネルへ送られたメッセージを読むことを許可します。無効にした場合、メンバーは当該チャンネルにフォーカスしている時に送られたメッセージのみ読むことができます。</value>\n  </data>\n  <data name=\"ReadMessageHistoryTitle\" xml:space=\"preserve\">\n    <value>メッセージ履歴を読む</value>\n  </data>\n  <data name=\"SendMessagesSubtitle\" xml:space=\"preserve\">\n    <value>メンバーがテキストチャンネルでメッセージを送信することを許可します。</value>\n  </data>\n  <data name=\"SendMessagesTitle\" xml:space=\"preserve\">\n    <value>メッセージを送信</value>\n  </data>\n  <data name=\"SendTtsMessagesSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーがテキスト読み上げを利用したメッセージを送信することを許可します。これらのメッセージはチャンネルにフォーカスしていれば誰も聞くことができます。</value>\n  </data>\n  <data name=\"SendTtsMessagesTitle\" xml:space=\"preserve\">\n    <value>テキスト読み上げメッセージを送信する</value>\n  </data>\n  <data name=\"SpeakSubtitle\" xml:space=\"preserve\">\n    <value>メンバーがボイスチャンネルで話すことを許可します。無効にした場合、メンバーはデフォルトでミュートになります。</value>\n  </data>\n  <data name=\"SpeakTitle\" xml:space=\"preserve\">\n    <value>話す</value>\n  </data>\n  <data name=\"StreamSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つメンバーがWebカメラを使用すること、画面を共有すること、そしてゲームを配信することを許可します。</value>\n  </data>\n  <data name=\"StreamTitle\" xml:space=\"preserve\">\n    <value>ビデオ</value>\n  </data>\n  <data name=\"UseExternalEmojisSubtitle\" xml:space=\"preserve\">\n    <value>権限を持つDiscord Nitroメンバーが外部サーバーの絵文字を使用することを許可します。</value>\n  </data>\n  <data name=\"UseExternalEmojisTitle\" xml:space=\"preserve\">\n    <value>外部絵文字の使用</value>\n  </data>\n  <data name=\"UseVoiceDetectionSubtitle\" xml:space=\"preserve\">\n    <value>この権限を無効にした場合、ボイスチャンネルで話す際にプッシュトゥトークの使用が必須となります。騒音やうるさい人への対処に便利です。</value>\n  </data>\n  <data name=\"UseVoiceDetectionTitle\" xml:space=\"preserve\">\n    <value>音声検出を使用</value>\n  </data>\n  <data name=\"UseVoiceSubtitle\" xml:space=\"preserve\">\n    <value>この権限を持つメンバーはボイスチャンネルに接続して会話を聞くことができます。</value>\n  </data>\n  <data name=\"UseVoiceTitle\" xml:space=\"preserve\">\n    <value>接続</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/PinsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"NoPinsHeader.Text\" xml:space=\"preserve\">\n    <value>何もピン止めされていません!</value>\n  </data>\n  <data name=\"NoPinsSubheader.Text\" xml:space=\"preserve\">\n    <value>このチャンネルにピン止めされたメッセージはありません。 権限をお持ちなら、何かピン止めしてみましょう!</value>\n  </data>\n  <data name=\"PinsHeader.Text\" xml:space=\"preserve\">\n    <value>ピン止めされたメッセージ</value>\n  </data>\n  <data name=\"RatelimitedHeader.Text\" xml:space=\"preserve\">\n    <value>おっと!</value>\n  </data>\n  <data name=\"RatelimitedSubheader.Text\" xml:space=\"preserve\">\n    <value>少し落ち着いてください！APIの利用制限に引っかかっています！</value>\n  </data>\n  <data name=\"ErroredHeader.Text\" xml:space=\"preserve\">\n    <value>おっと!</value>\n  </data>\n  <data name=\"ErroredSubheader.Text\" xml:space=\"preserve\">\n    <value>ピン止めされたメッセージを読み込む際にエラーが発生しました。</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/Resources.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AppDisplayDescription\" xml:space=\"preserve\">\n    <value>高速で効率的、そしてネイティブアプリのような使い心地を提供する無料でオープンソースな、Windows 10&amp;Windows 10 Mobileで動くDiscordクライアント</value>\n  </data>\n  <data name=\"AppDisplayDescriptionText.Text\" xml:space=\"preserve\">\n    <value>Universal Windows Platform上に構築されたDiscordクライアント</value>\n  </data>\n  <data name=\"AppDisplayName\" xml:space=\"preserve\">\n    <value>Unicord</value>\n  </data>\n  <data name=\"AppDisplayNameText.Text\" xml:space=\"preserve\">\n    <value>Unicord</value>\n  </data>\n  <data name=\"DevAppDisplayName\" xml:space=\"preserve\">\n    <value>Unicord Canary</value>\n  </data>\n  <data name=\"LoginFailedDialogMessage\" xml:space=\"preserve\">\n    <value>ログインする際に問題が発生しました。 再度お試しください。</value>\n  </data>\n  <data name=\"LoginFailedDialogTitle\" xml:space=\"preserve\">\n    <value>ログインに失敗しました</value>\n  </data>\n  <data name=\"RecentChannelsJumpListGroup\" xml:space=\"preserve\">\n    <value>直近のチャンネル</value>\n  </data>\n  <data name=\"RecentPeopleJumpListGroup\" xml:space=\"preserve\">\n    <value>直近のフレンド</value>\n  </data>\n  <data name=\"ServerUnavailableMessage\" xml:space=\"preserve\">\n    <value>このサーバーには何らかの問題が発生しており、現在利用できません。</value>\n  </data>\n  <data name=\"ServerUnavailableTitle\" xml:space=\"preserve\">\n    <value>このサーバーは利用できません。</value>\n  </data>\n  <data name=\"VerifyLoginDisplayReason\" xml:space=\"preserve\">\n    <value>Unicordにログインするためには認証が必要です！</value>\n  </data>\n  <data name=\"VerifyNSFWDisplayReason\" xml:space=\"preserve\">\n    <value>このチャンネルにアクセスするためには認証が必要です！</value>\n  </data>\n  <data name=\"VerifySettingsDisplayReason\" xml:space=\"preserve\">\n    <value>設定を開くためには認証が必要です！</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/SearchPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ResultsText.Text\" xml:space=\"preserve\">\n    <value>検索結果</value>\n  </data>\n  <data name=\"NoResultsHeader.Text\" xml:space=\"preserve\">\n    <value>あちこち探しました。</value>\n  </data>\n  <data name=\"NoResultsSubheader.Text\" xml:space=\"preserve\">\n    <value>残念ながら、結果が見つかりませんでした。</value>\n  </data>\n  <data name=\"SearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>検索...</value>\n  </data>\n  <data name=\"SearchHeader.Text\" xml:space=\"preserve\">\n    <value>検索</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/SecuritySettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AccessNSFWBlock.Title\" xml:space=\"preserve\">\n    <value>成人向けチャンネルにアクセスする時</value>\n  </data>\n  <data name=\"DiagnosticDataBlock.Title\" xml:space=\"preserve\">\n    <value>利用データと診断情報を送信する</value>\n  </data>\n  <data name=\"DiagnosticDataHeader.Text\" xml:space=\"preserve\">\n    <value>利用データと診断情報</value>\n  </data>\n  <data name=\"LoginBlock.Title\" xml:space=\"preserve\">\n    <value>ログインする時</value>\n  </data>\n  <data name=\"SecuritySettingsHeader.Text\" xml:space=\"preserve\">\n    <value>セキュリティとプライバシー</value>\n  </data>\n  <data name=\"SettingsBlock.Title\" xml:space=\"preserve\">\n    <value>設定を変更する時</value>\n  </data>\n  <data name=\"StayAuthenticatedBlock.Title\" xml:space=\"preserve\">\n    <value>再び認証を必要とするまでの時間</value>\n  </data>\n  <data name=\"WindowsHelloHeader.Text\" xml:space=\"preserve\">\n    <value>Windows Hello</value>\n  </data>\n  <data name=\"WindowsHelloOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>Windows Helloによる認証を要求する:</value>\n  </data>\n  <data name=\"WindowsHelloSubHeader.Text\" xml:space=\"preserve\">\n    <value>Windows Helloによる認証を要求する:</value>\n  </data>\n  <data name=\"WindowsHelloToggle.Text\" xml:space=\"preserve\">\n    <value />\n  </data>\n  <data name=\"WindowsHelloUnavailable.Text\" xml:space=\"preserve\">\n    <value>このデバイスでは Windows Hello が利用できません。有効にしますか?</value>\n  </data>\n  <data name=\"OpenSettingsButton.Content\" xml:space=\"preserve\">\n    <value>設定を開く</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/SettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AboutItem.Content\" xml:space=\"preserve\">\n    <value>Unicordについて</value>\n  </data>\n  <data name=\"AccountsItem.Content\" xml:space=\"preserve\">\n    <value>アカウント</value>\n  </data>\n  <data name=\"MediaItem.Content\" xml:space=\"preserve\">\n    <value>音声とビデオ</value>\n  </data>\n  <data name=\"MessagingItem.Content\" xml:space=\"preserve\">\n    <value>画像とテキスト</value>\n  </data>\n  <data name=\"NotificationsItem.Content\" xml:space=\"preserve\">\n    <value>通知</value>\n  </data>\n  <data name=\"SecurityItem.Content\" xml:space=\"preserve\">\n    <value>セキュリティとプライバシー</value>\n  </data>\n  <data name=\"ThemesItem.Content\" xml:space=\"preserve\">\n    <value>外観とテーマ</value>\n  </data>\n  <data name=\"VoiceItem.Content\" xml:space=\"preserve\">\n    <value>通話</value>\n  </data>  <data name=\"SearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>検索</value>\n  </data>\n  <data name=\"EditProfileText.Text\" xml:space=\"preserve\">\n    <value>プロフィール編集</value>\n  </data></root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/ThemesSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AppThemeBlock.Description\" xml:space=\"preserve\">\n    <value>Unicordは、より良いエクスペリエンスのために、様々なテーマをサポートしています。</value>\n  </data>\n  <data name=\"AppThemeBlock.Title\" xml:space=\"preserve\">\n    <value>アプリのテーマ</value>\n  </data>\n  <data name=\"AppThemeFluent.Content\" xml:space=\"preserve\">\n    <value>Fluent</value>\n  </data>\n  <data name=\"AppThemePerformance.Content\" xml:space=\"preserve\">\n    <value>Performance</value>\n  </data>\n  <data name=\"AppThemeSunValley.Content\" xml:space=\"preserve\">\n    <value>Sun Valley (Windows 11)</value>\n  </data>\n  <data name=\"CloseButton.Content\" xml:space=\"preserve\">\n    <value>閉じる</value>\n  </data>\n  <data name=\"ColourSchemeBlock.Description\" xml:space=\"preserve\">\n    <value>この設定はDiscordとは同期されません。</value>\n  </data>\n  <data name=\"ColourSchemeBlock.Title\" xml:space=\"preserve\">\n    <value>カラースキーム</value>\n  </data>\n  <data name=\"ColourSchemeDark.Content\" xml:space=\"preserve\">\n    <value>ダーク</value>\n  </data>\n  <data name=\"ColourSchemeDefault.Content\" xml:space=\"preserve\">\n    <value>Windowsの設定と同期</value>\n  </data>\n  <data name=\"ColourSchemeLight.Content\" xml:space=\"preserve\">\n    <value>ライト</value>\n  </data>\n  <data name=\"EnableAfterInstallationCheckBox.Content\" xml:space=\"preserve\">\n    <value>インストール後すぐにテーマを有効にする</value>\n  </data>\n  <data name=\"InstallButton.Content\" xml:space=\"preserve\">\n    <value>インストール</value>\n  </data>\n  <data name=\"MainThemeHeader.Text\" xml:space=\"preserve\">\n    <value>テーマ</value>\n  </data>\n  <data name=\"MainThemeSubheader.Text\" xml:space=\"preserve\">\n    <value>アクセントを加えたいですか？ テーマを入手して適用してみましょう!</value>\n  </data>\n  <data name=\"RelaunchRequired.Text\" xml:space=\"preserve\">\n    <value>今回加えた変更はUnicordの再起動後から有効になります。</value>\n  </data>\n  <data name=\"ThemeAlreadyInstalledMessage\" xml:space=\"preserve\">\n    <value>このテーマは既にインストールされていますが、置き換えますか？</value>\n  </data>\n  <data name=\"ThemeAlreadyInstalledTitle\" xml:space=\"preserve\">\n    <value>テーマは既にインストールされています!</value>\n  </data>\n  <data name=\"ThemeChangedMessage\" xml:space=\"preserve\">\n    <value>テーマを更新するには、Unicordを再起動する必要があります。 再起動しますか?</value>\n  </data>\n  <data name=\"ThemeChangedTitle\" xml:space=\"preserve\">\n    <value>テーマを変更しました!</value>\n  </data>\n  <data name=\"ThemeInvalidDoesNotExist\" xml:space=\"preserve\">\n    <value>ディスク上に存在しないテーマを読み込もうとしました。テーマはアンインストールされました。</value>\n  </data>\n  <data name=\"ThemeInvalidNoJson\" xml:space=\"preserve\">\n    <value>theme.jsonが存在しないため、このファイルはUnicordのテーマファイルではないと思われます。!</value>\n  </data>\n  <data name=\"ThemeInvalidNoLogo\" xml:space=\"preserve\">\n    <value>このテーマは存在しないロゴファイルを指定しています。</value>\n  </data>\n  <data name=\"ThemeLoadFailedFormat\" xml:space=\"preserve\">\n    <value>指定されたテーマの読み込みに失敗しました。\n{0}</value>\n  </data>\n  <data name=\"ThemePreInstallCheckFailed\" xml:space=\"preserve\">\n    <value>インストール前のテストに失敗しました！ このテーマはあなたのデバイス、あるいは現在動作しているバージョンのWindowsをサポートしていません。</value>\n  </data>\n  <data name=\"ThemesSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>外観</value>\n  </data>\n  <data name=\"ThemeUnsupportedWindowsVersion\" xml:space=\"preserve\">\n    <value>このテーマは現在動作しているバージョンのWindowsをサポートしていません。</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/UserListPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"UserListHeader.Text\" xml:space=\"preserve\">\n    <value>ユーザー</value>\n  </data>\n  <data name=\"UserSearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>ユーザーを検索</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/VideoEditor.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"CannotEditClipMessage\" xml:space=\"preserve\">\n    <value>申し訳ありません。現在はファイルからのビデオクリップ編集にのみ対応しています！</value>\n  </data>\n  <data name=\"CannotEditClipTitle\" xml:space=\"preserve\">\n    <value>このクリップは編集できません。</value>\n  </data>\n  <data name=\"LoadPreviousEditsMessage\" xml:space=\"preserve\">\n    <value>このファイルを以前にも編集したことがあるようです。前回の編集を読み込みますか？</value>\n  </data>\n  <data name=\"LoadPreviousEditsTitle\" xml:space=\"preserve\">\n    <value>前回の編集を読み込みますか？</value>\n  </data>\n  <data name=\"ProcessingVideoHeader.Text\" xml:space=\"preserve\">\n    <value>ビデオを処理中 </value>\n  </data>\n  <data name=\"SaveChangesMessage\" xml:space=\"preserve\">\n    <value>変更を保存しますか？ 次回このクリップを編集する際に再び読み込まれます。.</value>\n  </data>\n  <data name=\"SaveChangesTitle\" xml:space=\"preserve\">\n    <value>変更を保存しますか？</value>\n  </data>\n  <data name=\"VideoEditorHeader.Text\" xml:space=\"preserve\">\n    <value>ビデオを切り取る</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/Voice.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ConnectedStateFormat\" xml:space=\"preserve\">\n    <value>{0}に接続しました！</value>\n  </data>\n  <data name=\"ConnectionState1\" xml:space=\"preserve\">\n    <value>音声通話の開始中...</value>\n  </data>\n  <data name=\"ConnectionState2\" xml:space=\"preserve\">\n    <value>現在の接続を閉じています...</value>\n  </data>\n  <data name=\"ConnectionState3\" xml:space=\"preserve\">\n    <value>Discordで通話中...</value>\n  </data>\n  <data name=\"ConnectionState4Format\" xml:space=\"preserve\">\n    <value>{0}に接続中...</value>\n  </data>\n  <data name=\"DisconnectedState\" xml:space=\"preserve\">\n    <value>切断しました</value>\n  </data>\n  <data name=\"InitialConnectionState\" xml:space=\"preserve\">\n    <value>最終準備...</value>\n  </data>\n  <data name=\"ReconnectingState\" xml:space=\"preserve\">\n    <value>再接続中...</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ja-JP/VoiceSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AudioDevicesHeader.Text\" xml:space=\"preserve\">\n    <value>音声デバイス</value>\n  </data>\n  <data name=\"AudioDevicesSubheader.Text\" xml:space=\"preserve\">\n    <value>ここでは音声通話に使用する入力デバイスを指定することができます。</value>\n  </data>\n  <data name=\"AudioProcessingHeader.Text\" xml:space=\"preserve\">\n    <value>音声処理</value>\n  </data>\n  <data name=\"AutomaticGainControlBlock.Title\" xml:space=\"preserve\">\n    <value>音量調節の自動化</value>\n  </data>\n  <data name=\"EchoCancellationBlock.Title\" xml:space=\"preserve\">\n    <value>エコー除去</value>\n  </data>\n  <data name=\"InputDeviceBlock.Title\" xml:space=\"preserve\">\n    <value>入力デバイス</value>\n  </data>\n  <data name=\"InputDevices.Header\" xml:space=\"preserve\">\n    <value>入力デバイス</value>\n  </data>\n  <data name=\"NoiseSuppressionBlock.Description\" xml:space=\"preserve\">\n    <value>マイクからのバックグラウンドノイズを自動で抑制します。</value>\n  </data>\n  <data name=\"NoiseSuppressionBlock.Title\" xml:space=\"preserve\">\n    <value>ノイズ抑制</value>\n  </data>\n  <data name=\"NoiseSuppressionDisabled.Content\" xml:space=\"preserve\">\n    <value>無効</value>\n  </data>\n  <data name=\"NoiseSuppressionHigh.Content\" xml:space=\"preserve\">\n    <value>高</value>\n  </data>\n  <data name=\"NoiseSuppressionLow.Content\" xml:space=\"preserve\">\n    <value>低</value>\n  </data>\n  <data name=\"NoiseSuppressionMedium.Content\" xml:space=\"preserve\">\n    <value>中</value>\n  </data>\n  <data name=\"OutputDeviceBlock.Title\" xml:space=\"preserve\">\n    <value>出力デバイス</value>\n  </data>\n  <data name=\"OutputDevices.Header\" xml:space=\"preserve\">\n    <value>出力デバイス</value>\n  </data>\n  <data name=\"VoiceActivityBlock.Title\" xml:space=\"preserve\">\n    <value>音声検出</value>\n  </data>\n  <data name=\"VoiceSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>音声</value>\n  </data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/AboutSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AcknowledgementsText.Text\" xml:space=\"preserve\">\n    <value>Благодарности</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/AccountsSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AccountsSettingsPage.Tag\" xml:space=\"preserve\">\n    <value>Аккаунты</value>\n  </data>\n  <data name=\"BackgroundNotificationsDescriptionWin10\" xml:space=\"preserve\">\n    <value>Разрешить Unicord работать в фоновом режиме для отображения уведомлений и обновления живых плиток.</value>\n  </data>\n  <data name=\"BackgroundNotificationsDescriptionWin11\" xml:space=\"preserve\">\n    <value>Разрешить Unicord работать в фоновом режиме для отображения уведомлений.</value>\n  </data>\n  <data name=\"BackgroundNotificationsBlock.Title\" xml:space=\"preserve\">\n    <value>Фоновые уведомления</value>\n  </data>\n  <data name=\"ContactsUnavailable.Text\" xml:space=\"preserve\">\n    <value>Синхронизация контактов недоступна на этом устройстве.</value>\n  </data>\n  <data name=\"EmailHideButton.Content\" xml:space=\"preserve\">\n    <value>Скрыть</value>\n  </data>\n  <data name=\"EmailRevealButton.Content\" xml:space=\"preserve\">\n    <value>Показать</value>\n  </data>\n  <data name=\"FriendsText.Text\" xml:space=\"preserve\">\n    <value>Друзья</value>\n  </data>\n  <data name=\"Loading\" xml:space=\"preserve\">\n    <value>Загрузка...</value>\n  </data>\n  <data name=\"LogoutBlock.Title\" xml:space=\"preserve\">\n    <value>Выйти</value>\n  </data>\n  <data name=\"LogoutButton.Content\" xml:space=\"preserve\">\n    <value>Выйти</value>\n  </data>\n  <data name=\"LogoutPromptMessage\" xml:space=\"preserve\">\n    <value>Вы уверены, что хотите выйти?</value>\n  </data>\n  <data name=\"LogoutPromptTitle\" xml:space=\"preserve\">\n    <value>Вы уверены?</value>\n  </data>\n  <data name=\"StatisticsText.Text\" xml:space=\"preserve\">\n    <value>Статистика</value>\n  </data>\n  <data name=\"StatisticsBlock.Title\" xml:space=\"preserve\">\n    <value>Статистика</value>\n  </data>\n  <data name=\"StatisticsBlock.Description\" xml:space=\"preserve\">\n    <value>Просмотр подробной статистики вашего аккаунта</value>\n  </data>\n  <data name=\"CopyStatisticsButton.Content\" xml:space=\"preserve\">\n    <value>Копировать</value>\n  </data>\n  <data name=\"CopyStatisticsButtonText.Text\" xml:space=\"preserve\">\n    <value>Копировать</value>\n  </data>\n  <data name=\"SyncContactsBlock.Description\" xml:space=\"preserve\">\n    <value>Синхронизируйте своих друзей в Discord с приложением Люди.</value>\n  </data>\n  <data name=\"SyncContactsBlock.Title\" xml:space=\"preserve\">\n    <value>Синхронизация контактов</value>\n  </data>\n  <data name=\"SyncPeopleText.Text\" xml:space=\"preserve\">\n    <value>Синхронизировать моих друзей с приложением [Люди](ms-people:)</value>\n    <comment>Markdown compatible</comment>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/AgeGatePage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"BackButton.Content\" xml:space=\"preserve\">\n    <value>Назад к безопасности!</value>\n  </data>\n  <data name=\"ChannelWarningHeader.Text\" xml:space=\"preserve\">\n    <value>Содержание для взрослых!</value>\n  </data>\n  <data name=\"ChannelWarningSubheader.Text\" xml:space=\"preserve\">\n    <value>Привет! Возможно, впереди контент для взрослых, поэтому мне следует удостовериться, что вам уже есть 18 лет.\n\nВы старше 18 лет и готовы видеть контент для взрослых?</value>\n  </data>\n  <data name=\"ContinueButton.Content\" xml:space=\"preserve\">\n    <value>Вперёд!</value>\n  </data>\n  <data name=\"DontAskAgain.Content\" xml:space=\"preserve\">\n    <value>Не спрашивать меня снова!</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/ChannelPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"ChannelReadonlyText\" xml:space=\"preserve\">\r\n    <value>Этот канал только для чтения.</value>\r\n  </data>\r\n  <data name=\"CloseEditButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Закрыть</value>\r\n  </data>\r\n  <data name=\"DeleteAllButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Удалить</value>\r\n  </data>\r\n  <data name=\"ImmuneSlowModeFormat\" xml:space=\"preserve\">\r\n    <value>Вы иммунны к медленному режиму {0} в этом канале!</value>\r\n  </data>\r\n  <data name=\"MassDeleteMessage\" xml:space=\"preserve\">\r\n    <value>Вы уверены, что хотите удалить все эти сообщения?</value>\r\n  </data>\r\n  <data name=\"MassDeleteTitle\" xml:space=\"preserve\">\r\n    <value>Удалить эти сообщения?</value>\r\n  </data>\r\n  <data name=\"MessageChannelFormat\" xml:space=\"preserve\">\r\n    <value>Написать {0}{1}</value>\r\n    <comment>Message {ChannelPrefix}{ChannelName}</comment>\r\n  </data>\r\n  <data name=\"MoreOptionsButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Ещё</value>\r\n  </data>\r\n  <data name=\"MuteButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Без звука</value>\r\n  </data>\r\n  <data name=\"NewWindowItem.Text\" xml:space=\"preserve\">\r\n    <value>Открыть в новом окне</value>\r\n  </data>\r\n  <data name=\"NewWindowNormal.Text\" xml:space=\"preserve\">\r\n    <value>Открыть в обычном окне</value>\r\n  </data>\r\n  <data name=\"NewWindowOverlay.Text\" xml:space=\"preserve\">\r\n    <value>Открыть в оверлейном окне</value>\r\n  </data>\r\n  <data name=\"NoMessagesHeader.Text\" xml:space=\"preserve\">\r\n    <value>Здесь ничего нет!</value>\r\n  </data>\r\n  <data name=\"NoMessagesSubheader.Text\" xml:space=\"preserve\">\r\n    <value>Я не могу загрузить сообщения для этого канала, извините!</value>\r\n  </data>\r\n  <data name=\"OpenLocalButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Открыть</value>\r\n  </data>\r\n  <data name=\"OpenPopoutButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Сделать фото или видео</value>\r\n  </data>\r\n  <data name=\"PinsButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Закреплённые сообщения</value>\r\n  </data>\r\n  <data name=\"PinToStart.Text\" xml:space=\"preserve\">\r\n    <value>Закрепить на начальном экране</value>\r\n  </data>\r\n  <data name=\"ReplyCancel.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Отменить</value>\r\n  </data>\r\n  <data name=\"ReplyingTo.Text\" xml:space=\"preserve\">\r\n    <value>Ответить на</value>\r\n    <comment>Replying to {Member}</comment>\r\n  </data>\r\n  <data name=\"ReplyPingToggle.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Переключить оповещение автора.</value>\r\n  </data>\r\n  <data name=\"SearchButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Поиск</value>\r\n  </data>\r\n  <data name=\"SlowModeFormat\" xml:space=\"preserve\">\r\n    <value>Сообщения можно отправлять каждые {0}!</value>\r\n  </data>\r\n  <data name=\"UnpinFromStart.Text\" xml:space=\"preserve\">\r\n    <value>Открепить от начального экрана</value>\r\n  </data>\r\n  <data name=\"UserListButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Список пользователей</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/Controls.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<root>\r\n  <!-- \r\n    Microsoft ResX Schema \r\n    \r\n    Version 2.0\r\n    \r\n    The primary goals of this format is to allow a simple XML format \r\n    that is mostly human readable. The generation and parsing of the \r\n    various data types are done through the TypeConverter classes \r\n    associated with the data types.\r\n    \r\n    Example:\r\n    \r\n    ... ado.net/XML headers & schema ...\r\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\r\n    <resheader name=\"version\">2.0</resheader>\r\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\r\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\r\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\r\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\r\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\r\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\r\n    </data>\r\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\r\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\r\n        <comment>This is a comment</comment>\r\n    </data>\r\n                \r\n    There are any number of \"resheader\" rows that contain simple \r\n    name/value pairs.\r\n    \r\n    Each data row contains a name, and value. The row also contains a \r\n    type or mimetype. Type corresponds to a .NET class that support \r\n    text/value conversion through the TypeConverter architecture. \r\n    Classes that don't support this are serialized and stored with the \r\n    mimetype set.\r\n    \r\n    The mimetype is used for serialized objects, and tells the \r\n    ResXResourceReader how to depersist the object. This is currently not \r\n    extensible. For a given mimetype the value must be set accordingly:\r\n    \r\n    Note - application/x-microsoft.net.object.binary.base64 is the format \r\n    that the ResXResourceWriter will generate, however the reader can \r\n    read any of the formats listed below.\r\n    \r\n    mimetype: application/x-microsoft.net.object.binary.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\r\n            : and then encoded with base64 encoding.\r\n    \r\n    mimetype: application/x-microsoft.net.object.soap.base64\r\n    value   : The object must be serialized with \r\n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\r\n            : and then encoded with base64 encoding.\r\n\r\n    mimetype: application/x-microsoft.net.object.bytearray.base64\r\n    value   : The object must be serialized into a byte array \r\n            : using a System.ComponentModel.TypeConverter\r\n            : and then encoded with base64 encoding.\r\n    -->\r\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\r\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\r\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\r\n      <xsd:complexType>\r\n        <xsd:choice maxOccurs=\"unbounded\">\r\n          <xsd:element name=\"metadata\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"assembly\">\r\n            <xsd:complexType>\r\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"data\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\r\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\r\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\r\n              <xsd:attribute ref=\"xml:space\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n          <xsd:element name=\"resheader\">\r\n            <xsd:complexType>\r\n              <xsd:sequence>\r\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\r\n              </xsd:sequence>\r\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\r\n            </xsd:complexType>\r\n          </xsd:element>\r\n        </xsd:choice>\r\n      </xsd:complexType>\r\n    </xsd:element>\r\n  </xsd:schema>\r\n  <resheader name=\"resmimetype\">\r\n    <value>text/microsoft-resx</value>\r\n  </resheader>\r\n  <resheader name=\"version\">\r\n    <value>2.0</value>\r\n  </resheader>\r\n  <resheader name=\"reader\">\r\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <resheader name=\"writer\">\r\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\r\n  </resheader>\r\n  <data name=\"AttachmentCopyUrlButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Копировать URL</value>\r\n  </data>\r\n  <data name=\"AttachmentDownloadFailedText\" xml:space=\"preserve\">\r\n    <value>Что-то пошло не так при скачивании, может быть, попробуйте позже?</value>\r\n  </data>\r\n  <data name=\"AttachmentDownloadFailedTitle\" xml:space=\"preserve\">\r\n    <value>Не удалось скачать вложение!</value>\r\n  </data>\r\n  <data name=\"AttachmentExtensionPlaceholder\" xml:space=\"preserve\">\r\n    <value>Расширение файла вложения</value>\r\n  </data>\r\n  <data name=\"AttachmentSaveButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Сохранить</value>\r\n  </data>\r\n  <data name=\"AttachmentShareButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Поделиться</value>\r\n  </data>\r\n  <data name=\"EditButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Редактировать этот клип</value>\r\n  </data>\r\n  <data name=\"EmoteSearchBox.PlaceholderText\" xml:space=\"preserve\">\r\n    <value>Поиск смайлов...</value>\r\n  </data>\r\n  <data name=\"RemoveButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Удалить</value>\r\n  </data>\r\n  <data name=\"ReplyingTo.Text\" xml:space=\"preserve\">\r\n    <value>отвечает на</value>\r\n  </data>\r\n  <data name=\"SharingTitleFormat\" xml:space=\"preserve\">\r\n    <value>Поделиться {0}</value>\r\n  </data>\r\n  <data name=\"SpoilerButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Отметить как спойлер</value>\r\n  </data>\r\n  <data name=\"TranscodeFailedButton.[using:Windows.UI.Xaml.Controls]ToolTipService.ToolTip\" xml:space=\"preserve\">\r\n    <value>Ошибка транскодирования!</value>\r\n  </data>\r\n  <data name=\"TranscodingCancelButton.Content\" xml:space=\"preserve\">\r\n    <value>Отмена</value>\r\n  </data>\r\n  <data name=\"TranscodingProgressHeader.Text\" xml:space=\"preserve\">\r\n    <value>Транскодирование</value>\r\n  </data>\r\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/Converters.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ListeningStatus\" xml:space=\"preserve\">\n    <value>Слушает</value>\n  </data>\n  <data name=\"ListeningStatusFormat\" xml:space=\"preserve\">\n    <value>Слушает {0}</value>\n  </data>\n  <data name=\"PlayingStatus\" xml:space=\"preserve\">\n    <value>Играет</value>\n  </data>\n  <data name=\"PlayingStatusFormat\" xml:space=\"preserve\">\n    <value>Играет в {0}</value>\n    <comment>these don't localise well</comment>\n  </data>\n  <data name=\"StreamingStatus\" xml:space=\"preserve\">\n    <value>Транслирует</value>\n  </data>\n  <data name=\"StreamingStatusFormat\" xml:space=\"preserve\">\n    <value>Транслирует {0}</value>\n    <comment>i'll refactor this at some point i promise</comment>\n  </data>\n  <data name=\"UserChannelIconChangeFormat\" xml:space=\"preserve\">\n    <value>{0} изменил иконку канала.</value>\n  </data>\n  <data name=\"UserChannelNameChangeFormat\" xml:space=\"preserve\">\n    <value>{0} изменил название канала.</value>\n  </data>\n  <data name=\"UserJoinedGroupFormat\" xml:space=\"preserve\">\n    <value>{0} присоединился к группе.</value>\n  </data>\n  <data name=\"UserLeftGroupFormat\" xml:space=\"preserve\">\n    <value>{0} покинул группу.</value>\n  </data>\n  <data name=\"UserMessagePinFormat\" xml:space=\"preserve\">\n    <value>{0} закрепил сообщение в этом канале.</value>\n  </data>\n  <data name=\"UserPremiumGuildSubscriptionFormat\" xml:space=\"preserve\">\n    <value>{0} улучшил сервер!</value>\n  </data>\n  <data name=\"UserPremiumGuildSubscriptionTierFormat\" xml:space=\"preserve\">\n    <value>{0} улучшил сервер до уровня {2}!</value>\n    <comment>user, boost level (number)</comment>\n  </data>\n  <data name=\"UserPremiumMultiGuildSubscriptionFormat\" xml:space=\"preserve\">\n    <value>{0} улучшил сервер **{1}** раз!</value>\n  </data>\n  <data name=\"UserPremiumMultiGuildSubscriptionTierFormat\" xml:space=\"preserve\">\n    <value>{0} улучшил сервер **{1}** раз до уровня {2}!</value>\n  </data>\n  <data name=\"UserStartedCallFormat\" xml:space=\"preserve\">\n    <value>{0} начал звонок.</value>\n  </data>\n  <data name=\"WatchingStatus\" xml:space=\"preserve\">\n    <value>Смотрит</value>\n  </data>\n  <data name=\"WatchingStatusFormat\" xml:space=\"preserve\">\n    <value>Смотрит {0}</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/DMChannelsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"DirectMessageChannels.Tag\" xml:space=\"preserve\">\n    <value>Личные сообщения</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/Dialogs.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"BanDeleteFromLastDay.Content\" xml:space=\"preserve\">\n    <value>За последние 24 часа</value>\n  </data>\n  <data name=\"BanDeleteFromLastWeek.Content\" xml:space=\"preserve\">\n    <value>За последнюю неделю</value>\n  </data>\n  <data name=\"BanDeleteMessagesBox.Header\" xml:space=\"preserve\">\n    <value>Удалить сообщения</value>\n  </data>\n  <data name=\"BanDeleteNoMessages.Content\" xml:space=\"preserve\">\n    <value>Не удалять сообщения</value>\n  </data>\n  <data name=\"BanDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Да!</value>\n  </data>\n  <data name=\"BanDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Нет</value>\n  </data>\n  <data name=\"BanDialogHeaderFormat\" xml:space=\"preserve\">\n    <value>Забанить @{0}#{1}?</value>\n  </data>\n  <data name=\"BanReason.Header\" xml:space=\"preserve\">\n    <value>Причина бана</value>\n  </data>\n  <data name=\"ChangeNicknameDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Сохранить</value>\n  </data>\n  <data name=\"ChangeNicknameDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Отмена</value>\n  </data>\n  <data name=\"ChangeNicknameSubtitle.Text\" xml:space=\"preserve\">\n    <value>Ники видны всем, так что не будь неадекватом, да?</value>\n  </data>\n  <data name=\"ChangeNicknameTitle.Text\" xml:space=\"preserve\">\n    <value>Изменить никнейм</value>\n  </data>\n  <data name=\"ConfirmationDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Да</value>\n  </data>\n  <data name=\"ConfirmationDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Отмена</value>\n  </data>\n  <data name=\"DeleteMessageDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Да!</value>\n  </data>\n  <data name=\"DeleteMessageDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Нет</value>\n  </data>\n  <data name=\"DeleteMessageDialog.Title\" xml:space=\"preserve\">\n    <value>Удалить это сообщение?</value>\n  </data>\n  <data name=\"ErrorDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>ОК</value>\n  </data>\n  <data name=\"InstallThemeBy.Text\" xml:space=\"preserve\">\n    <value>От</value>\n  </data>\n  <data name=\"InstallThemeDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Установить</value>\n  </data>\n  <data name=\"InstallThemeDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Отмена</value>\n  </data>\n  <data name=\"InvalidThemeFileNotFound\" xml:space=\"preserve\">\n    <value>Указанный файл темы не найден!</value>\n  </data>\n  <data name=\"InvalidThemeFileNoThemesFound\" xml:space=\"preserve\">\n    <value>Указанный файл темы, по-видимому, не содержит темы!</value>\n  </data>\n  <data name=\"InvalidThemeFileTitle\" xml:space=\"preserve\">\n    <value>Неверный файл темы!</value>\n  </data>\n  <data name=\"KickDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Да!</value>\n  </data>\n  <data name=\"KickDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Нет</value>\n  </data>\n  <data name=\"KickDialogHeaderFormat\" xml:space=\"preserve\">\n    <value>Выгнать @{0}#{1}?</value>\n  </data>\n  <data name=\"KickReason.Header\" xml:space=\"preserve\">\n    <value>Причина изгнания</value>\n  </data>\n  <data name=\"PinMessageDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Конечно!</value>\n  </data>\n  <data name=\"PinMessageDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Может быть нет</value>\n  </data>\n  <data name=\"PinMessageDialog.Title\" xml:space=\"preserve\">\n    <value>Закрепить это сообщение?</value>\n  </data>\n  <data name=\"ProfileConnections.Header\" xml:space=\"preserve\">\n    <value>Связи</value>\n  </data>\n  <data name=\"ProfileJoinedServer.Text\" xml:space=\"preserve\">\n    <value>Присоединился к серверу</value>\n  </data>\n  <data name=\"ProfileMutualServers.Header\" xml:space=\"preserve\">\n    <value>Общие серверы</value>\n  </data>\n  <data name=\"ProfileRoles.Text\" xml:space=\"preserve\">\n    <value>Роли</value>\n  </data>\n  <data name=\"ThemeInstallFailure\" xml:space=\"preserve\">\n    <value>Не удалось установить тему!</value>\n  </data>\n  <data name=\"TokenDialog.CloseButtonText\" xml:space=\"preserve\">\n    <value>Отмена</value>\n  </data>\n  <data name=\"TokenDialog.PrimaryButtonText\" xml:space=\"preserve\">\n    <value>Войти</value>\n  </data>\n  <data name=\"TokenDialog.SecondaryButtonText\" xml:space=\"preserve\">\n    <value>Загрузить из файла</value>\n  </data>\n  <data name=\"TokenSubtitle.Text\" xml:space=\"preserve\">\n    <value>Не знаете, где искать? [Нажмите здесь для руководства.](https://example.com/)</value>\n  </data>\n  <data name=\"TokenTitle.Text\" xml:space=\"preserve\">\n    <value>Введите ваш токен Discord</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/Flyouts.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n<data name=\"AddReaction.Text\" xml:space=\"preserve\">\n  <value>Добавить реакцию</value>\n</data>\n<data name=\"Ban.Text\" xml:space=\"preserve\">\n  <value>Забанить</value>\n</data>\n<data name=\"ChangeNickname.Text\" xml:space=\"preserve\">\n  <value>Изменить никнейм</value>\n</data>\n<data name=\"Copy.Text\" xml:space=\"preserve\">\n  <value>Копировать</value>\n</data>\n<data name=\"CopyID.Text\" xml:space=\"preserve\">\n  <value>Копировать ID</value>\n</data>\n<data name=\"CopyLink.Text\" xml:space=\"preserve\">\n  <value>Копировать URL</value>\n</data>\n<data name=\"CreateServerSubtitle.Text\" xml:space=\"preserve\">\n  <value>Бесплатно!</value>\n</data>\n<data name=\"CreateServerTitle.Text\" xml:space=\"preserve\">\n  <value>Создать новый сервер</value>\n</data>\n<data name=\"Delete.Text\" xml:space=\"preserve\">\n  <value>Удалить</value>\n</data>\n<data name=\"Edit.Text\" xml:space=\"preserve\">\n  <value>Изменить</value>\n</data>\n<data name=\"EditMode.Text\" xml:space=\"preserve\">\n  <value>Режим редактирования</value>\n</data>\n<data name=\"JoinExistingServerSubtitle.Text\" xml:space=\"preserve\">\n  <value>Используйте свои приглашения!</value>\n</data>\n<data name=\"JoinExistingServerTitle.Text\" xml:space=\"preserve\">\n  <value>Присоединиться к существующему серверу</value>\n</data>\n<data name=\"Kick.Text\" xml:space=\"preserve\">\n  <value>Выгнать</value>\n</data>\n<data name=\"LeaveServer.Text\" xml:space=\"preserve\">\n  <value>Покинуть сервер</value>\n</data>\n<data name=\"MarkAsRead.Text\" xml:space=\"preserve\">\n  <value>Пометить как прочитанное</value>\n</data>\n<data name=\"Message.Text\" xml:space=\"preserve\">\n  <value>Сообщение</value>\n</data>\n<data name=\"Mute.Text\" xml:space=\"preserve\">\n  <value>Отключить звук</value>\n</data>\n<data name=\"NewWindow.Text\" xml:space=\"preserve\">\n  <value>Открыть в новом окне</value>\n</data>\n<data name=\"Pin.Text\" xml:space=\"preserve\">\n  <value>Закрепить сообщение</value>\n</data>\n<data name=\"PinToStart.Text\" xml:space=\"preserve\">\n  <value>Закрепить на стартовом экране</value>\n</data>\n<data name=\"Profile.Text\" xml:space=\"preserve\">\n  <value>Профиль</value>\n</data>\n<data name=\"Reply.Text\" xml:space=\"preserve\">\n  <value>Ответить</value>\n</data>\n<data name=\"SendMessage.Text\" xml:space=\"preserve\">\n  <value>Отправить сообщение</value>\n</data>\n<data name=\"ShowFullProfile.Text\" xml:space=\"preserve\">\n  <value>Показать полный профиль</value>\n</data>\n<data name=\"Unmute.Text\" xml:space=\"preserve\">\n  <value>Включить звук</value>\n</data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/FriendsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"FriendsAllItem.Header\" xml:space=\"preserve\">\n    <value>Все</value>\n  </data>\n  <data name=\"FriendsBlockedItem.Header\" xml:space=\"preserve\">\n    <value>Заблокированные</value>\n  </data>\n  <data name=\"FriendsHeader.Text\" xml:space=\"preserve\">\n    <value>Друзья</value>\n  </data>\n  <data name=\"FriendsOnlineItem.Header\" xml:space=\"preserve\">\n    <value>Онлайн</value>\n  </data>\n  <data name=\"FriendsPendingItem.Header\" xml:space=\"preserve\">\n    <value>В ожидании</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/LoginPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n<data name=\"LoadFileButton.Content\" xml:space=\"preserve\">\n  <value>Загрузить из файла...</value>\n</data>\n<data name=\"LoginButton.Content\" xml:space=\"preserve\">\n  <value>Войти</value>\n</data>\n<data name=\"LoginWithDiscordButton.Content\" xml:space=\"preserve\">\n  <value>Войти через Discord</value>\n</data>\n<data name=\"LoginWithTokenButton.Content\" xml:space=\"preserve\">\n  <value>Войти с помощью токена</value>\n</data>\n<data name=\"TokenTextBox.PlaceholderText\" xml:space=\"preserve\">\n  <value>Токен Discord</value>\n</data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/MediaSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n<data name=\"AdvancedHeader.Header\" xml:space=\"preserve\">\n  <value>Расширенные настройки</value>\n</data>\n<data name=\"AlwaysCompress.Content\" xml:space=\"preserve\">\n  <value>Всегда сжимать перед отправкой</value>\n</data>\n<data name=\"AudioOptionsHeader.Text\" xml:space=\"preserve\">\n  <value>Настройки аудио</value>\n</data>\n<data name=\"BitrateSlider.Header\" xml:space=\"preserve\">\n  <value>Битрейт</value>\n</data>\n<data name=\"CompressIfNeeded.Content\" xml:space=\"preserve\">\n  <value>Сжимать, если размер файла превышает ваш лимит загрузки</value>\n</data>\n<data name=\"EncoderPriorityBox.Header\" xml:space=\"preserve\">\n  <value>Приоритет кодировщика</value>\n</data>\n<data name=\"EncoderPriorityQuality.Content\" xml:space=\"preserve\">\n  <value>Приоритет качества, меньший размер файла</value>\n</data>\n<data name=\"EncoderPrioritySpeed.Content\" xml:space=\"preserve\">\n  <value>Приоритет скорости, больший размер файла</value>\n</data>\n<data name=\"LargePresetItem.Text\" xml:space=\"preserve\">\n  <value>Большой</value>\n</data>\n<data name=\"LargePresetSubheader.Text\" xml:space=\"preserve\">\n  <value>720p, ~1536kbps</value>\n</data>\n<data name=\"MediaCompressionBlock.Description\" xml:space=\"preserve\">\n  <value>Unicord может автоматически сжимать аудио, видео и изображения, чтобы они соответствовали вашему лимиту загрузки.</value>\n</data>\n<data name=\"MediaCompressionBlock.Title\" xml:space=\"preserve\">\n  <value>Автоматическое сжатие медиа</value>\n</data>\n<data name=\"MediumPresetItem.Text\" xml:space=\"preserve\">\n  <value>Средний</value>\n</data>\n<data name=\"MediumPresetSubheader.Text\" xml:space=\"preserve\">\n  <value>480p, ~768kbps</value>\n</data>\n<data name=\"NeverCompress.Content\" xml:space=\"preserve\">\n  <value>Никогда не сжимать медиа</value>\n</data>\n<data name=\"ResolutionBox.Header\" xml:space=\"preserve\">\n  <value>Разрешение</value>\n</data>\n<data name=\"SmallPresetItem.Text\" xml:space=\"preserve\">\n  <value>Маленький</value>\n</data>\n<data name=\"SmallPresetSubheader.Text\" xml:space=\"preserve\">\n  <value>360p, ~512kbps</value>\n</data>\n<data name=\"TinyPresetItem.Text\" xml:space=\"preserve\">\n  <value>Крошечный</value>\n</data>\n<data name=\"TinyPresetSubheader.Text\" xml:space=\"preserve\">\n  <value>144p, ~256kbps</value>\n</data>\n<data name=\"Title.Text\" xml:space=\"preserve\">\n  <value>Аудио и Видео</value>\n</data>\n<data name=\"VideoOptionsHeader.Text\" xml:space=\"preserve\">\n  <value>Настройки видео</value>\n</data>\n<data name=\"VideoOptionsSubheader.Text\" xml:space=\"preserve\">\n  <value>Если вы знаете, что делаете, вы можете настроить качество, битрейт и разрешение видеовывода.</value>\n</data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/MessagingSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n <data name=\"AdjustRoleColoursBlock.Title\" xml:space=\"preserve\">\n  <value>Настроить цвета пользователей для читаемости</value>\n</data>\n<data name=\"AdjustRoleColoursHeader.Text\" xml:space=\"preserve\">\n  <value>Настройка контраста</value>\n</data>\n<data name=\"AutoPlayGIFsBlock.Title\" xml:space=\"preserve\">\n  <value>Автоматическое воспроизведение GIF</value>\n</data>\n<data name=\"ChatHeader.Text\" xml:space=\"preserve\">\n  <value>Сообщения</value>\n</data>\n<data name=\"EnableSpoilersBlock.Title\" xml:space=\"preserve\">\n  <value>Скрыть спойлеры</value>\n</data>\n<data name=\"LearnMoreButton.Content\" xml:space=\"preserve\">\n  <value>Узнать больше</value>\n</data>\n<data name=\"MessagingSettingsHeader.Text\" xml:space=\"preserve\">\n  <value>Текст и изображения</value>\n</data>\n<data name=\"MinimumContrastSlider.Header\" xml:space=\"preserve\">\n  <value>Минимальный контраст</value>\n</data>\n<data name=\"PromptLinksBlock.Description\" xml:space=\"preserve\">\n  <value>Если эта опция включена, вас будут предупреждать Windows перед открытием небезопасных ссылок.</value>\n  <comment>Подсказка для предыдущего текста</comment>\n</data>\n<data name=\"PromptLinksBlock.Title\" xml:space=\"preserve\">\n  <value>Запрос на небезопасные ссылки</value>\n</data>\n<data name=\"ShowHugeEmojiBlock.Title\" xml:space=\"preserve\">\n  <value>Огромные эмодзи</value>\n</data>\n<data name=\"ShowStatusGlyphsBlock.Title\" xml:space=\"preserve\">\n  <value>Индикаторы статуса для дальтоников</value>\n</data>\n<data name=\"TimestampsSubheader.Text\" xml:space=\"preserve\">\n  <value>Как вы хотите, чтобы временные метки на сообщениях отображались?</value>\n</data>\n<data name=\"TimestampStyleAbsolute.Text\" xml:space=\"preserve\">\n  <value>Абсолютное</value>\n</data>\n<data name=\"TimestampStyleBlock.Title\" xml:space=\"preserve\">\n  <value>Стиль временных меток</value>\n</data>\n<data name=\"TimestampStyleBoth.Text\" xml:space=\"preserve\">\n  <value>Оба</value>\n</data>\n<data name=\"TimestampStyleRelative.Text\" xml:space=\"preserve\">\n  <value>Относительное</value>\n</data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/Permissions.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AccessChannelsSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам просматривать этот канал по умолчанию. Если отключить, канал станет частным.</value>\n  </data>\n  <data name=\"AccessChannelsTitle\" xml:space=\"preserve\">\n    <value>Просмотр канала</value>\n  </data>\n  <data name=\"AddReactionsSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам добавлять новые реакции к сообщению в этом канале.</value>\n  </data>\n  <data name=\"AddReactionsTitle\" xml:space=\"preserve\">\n    <value>Разрешить реакции</value>\n  </data>\n  <data name=\"AttachFilesSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам загружать файлы или медиа в этот канал.</value>\n  </data>\n  <data name=\"AttachFilesTitle\" xml:space=\"preserve\">\n    <value>Прикрепить файлы</value>\n  </data>\n  <data name=\"CreateInstantInviteSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам создавать пригласительные ссылки для этого канала.</value>\n  </data>\n  <data name=\"CreateInstantInviteTitle\" xml:space=\"preserve\">\n    <value>Создать приглашение</value>\n  </data>\n  <data name=\"DeafenMembersSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам заглушать звук других участников в этом голосовом канале.</value>\n  </data>\n  <data name=\"DeafenMembersTitle\" xml:space=\"preserve\">\n    <value>Заглушить участников</value>\n  </data>\n  <data name=\"EmbedLinksSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет создавать встроенные материалы для ссылок, размещенных в этом канале.</value>\n  </data>\n  <data name=\"EmbedLinksTitle\" xml:space=\"preserve\">\n    <value>Встраивать ссылки</value>\n  </data>\n  <data name=\"ManageChannelsSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам удалять этот канал, а также изменять его название, описание и настройки.</value>\n  </data>\n  <data name=\"ManageChannelsTitle\" xml:space=\"preserve\">\n    <value>Управление каналом</value>\n  </data>\n  <data name=\"ManageMessagesSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам удалять и закреплять сообщения.</value>\n  </data>\n  <data name=\"ManageMessagesTitle\" xml:space=\"preserve\">\n    <value>Управление сообщениями</value>\n  </data>\n  <data name=\"ManageRolesSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам изменять разрешения этого канала.</value>\n  </data>\n  <data name=\"ManageRolesTitle\" xml:space=\"preserve\">\n    <value>Управление разрешениями</value>\n  </data>\n  <data name=\"ManageWebhooksSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам управлять вебхуками в этом канале.</value>\n  </data>\n  <data name=\"ManageWebhooksTitle\" xml:space=\"preserve\">\n    <value>Управление вебхуками</value>\n  </data>\n  <data name=\"MentionEveryoneSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам использовать @everyone и @here в этом канале, а также @упоминать все роли.</value>\n  </data>\n  <data name=\"MentionEveryoneTitle\" xml:space=\"preserve\">\n    <value>Упоминание @everyone, @here и всех ролей</value>\n  </data>\n  <data name=\"MoveMembersSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам перемещать других участников в этот голосовой канал или отключать их.</value>\n  </data>\n  <data name=\"MoveMembersTitle\" xml:space=\"preserve\">\n    <value>Перемещение участников</value>\n  </data>\n  <data name=\"MuteMembersSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам заглушать звук других участников в этом голосовом канале.</value>\n  </data>\n  <data name=\"MuteMembersTitle\" xml:space=\"preserve\">\n    <value>Заглушить участников</value>\n  </data>\n  <data name=\"PrioritySpeakerSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам легче слышать в этом голосовом канале, используя клавишу Push to Talk (приоритет).</value>\n  </data>\n  <data name=\"PrioritySpeakerTitle\" xml:space=\"preserve\">\n    <value>Приоритетный режим</value>\n  </data>\n  <data name=\"ReadMessageHistorySubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам читать предыдущие сообщения, отправленные в этом канале. Без этого разрешения участники могут видеть только сообщения, отправленные при просмотре этого канала.</value>\n  </data>\n  <data name=\"ReadMessageHistoryTitle\" xml:space=\"preserve\">\n    <value>Чтение истории сообщений</value>\n  </data>\n  <data name=\"SendMessagesSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам отправлять сообщения в этом канале.</value>\n  </data>\n  <data name=\"SendMessagesTitle\" xml:space=\"preserve\">\n    <value>Отправка сообщений</value>\n  </data>\n  <data name=\"SendTtsMessagesSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам отправлять сообщения с использованием преобразования текста в речь в этом канале.</value>\n  </data>\n  <data name=\"SendTtsMessagesTitle\" xml:space=\"preserve\">\n    <value>Отправка сообщений text-to-speech</value>\n  </data>\n  <data name=\"SpeakSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам разговаривать в этом голосовом канале. Отключите это и Просмотр канала, чтобы создать частный голосовой канал.</value>\n  </data>\n  <data name=\"SpeakTitle\" xml:space=\"preserve\">\n    <value>Говорить</value>\n  </data>\n  <data name=\"StreamSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам использовать веб-камеру, общий экран или вести трансляцию в этом канале.</value>\n  </data>\n  <data name=\"StreamTitle\" xml:space=\"preserve\">\n    <value>Видео</value>\n  </data>\n  <data name=\"UseExternalEmojisSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам Discord Nitro использовать эмодзи из других серверов.</value>\n  </data>\n  <data name=\"UseExternalEmojisTitle\" xml:space=\"preserve\">\n    <value>Использовать внешние эмодзи</value>\n  </data>\n  <data name=\"UseVoiceDetectionSubtitle\" xml:space=\"preserve\">\n    <value>Отключение этого разрешения обязывает использовать функцию нажатия клавиши для разговора в этом канале.</value>\n  </data>\n  <data name=\"UseVoiceDetectionTitle\" xml:space=\"preserve\">\n    <value>Использовать голосовую активацию</value>\n  </data>\n  <data name=\"UseVoiceSubtitle\" xml:space=\"preserve\">\n    <value>Позволяет участникам присоединяться к этому голосовому каналу и слышать других.</value>\n  </data>\n  <data name=\"UseVoiceTitle\" xml:space=\"preserve\">\n    <value>Подключение</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/PinsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"NoPinsHeader.Text\" xml:space=\"preserve\">\n    <value>Нет закреплённых сообщений!</value>\n  </data>\n  <data name=\"NoPinsSubheader.Text\" xml:space=\"preserve\">\n    <value>В этом канале нет закреплённых сообщений! Если у вас есть соответствующие разрешения, закрепите что-нибудь!</value>\n  </data>\n  <data name=\"PinsHeader.Text\" xml:space=\"preserve\">\n    <value>Закреплённые сообщения</value>\n  </data>\n  <data name=\"RatelimitedHeader.Text\" xml:space=\"preserve\">\n    <value>Упс!</value>\n  </data>\n  <data name=\"RatelimitedSubheader.Text\" xml:space=\"preserve\">\n    <value>Эй! Помедленнее, вы превысили лимит запросов!</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/Readme",
    "content": "Перевод машинный поэтому тапками в меня не кидать\n"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/Resources.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n <data name=\"AppDisplayDescription\" xml:space=\"preserve\">\n  <value>Бесплатный, открытый клиент Discord для Windows 10 и Windows 10 Mobile, который стремится предоставить быстрый, эффективный, естественный опыт использования Discord.</value>\n</data>\n<data name=\"AppDisplayDescriptionText.Text\" xml:space=\"preserve\">\n  <value>Клиент Discord для универсальной платформы Windows</value>\n</data>\n<data name=\"AppDisplayName\" xml:space=\"preserve\">\n  <value>Unicord</value>\n</data>\n<data name=\"AppDisplayNameText.Text\" xml:space=\"preserve\">\n  <value>Unicord</value>\n</data>\n<data name=\"DevAppDisplayName\" xml:space=\"preserve\">\n  <value>Unicord Canary</value>\n</data>\n<data name=\"LoginFailedDialogMessage\" xml:space=\"preserve\">\n  <value>Что-то пошло не так при входе! Проверьте свои данные и попробуйте снова!</value>\n</data>\n<data name=\"LoginFailedDialogTitle\" xml:space=\"preserve\">\n  <value>Не удалось войти!</value>\n</data>\n<data name=\"RecentChannelsJumpListGroup\" xml:space=\"preserve\">\n  <value>Последние каналы</value>\n</data>\n<data name=\"RecentPeopleJumpListGroup\" xml:space=\"preserve\">\n  <value>Последние пользователи</value>\n</data>\n<data name=\"ServerUnavailableMessage\" xml:space=\"preserve\">\n  <value>Похоже, у этого сервера возникли проблемы и он временно недоступен, извините!</value>\n</data>\n<data name=\"ServerUnavailableTitle\" xml:space=\"preserve\">\n  <value>Этот сервер недоступен!</value>\n</data>\n<data name=\"VerifyLoginDisplayReason\" xml:space=\"preserve\">\n  <value>Подтвердите свою личность, чтобы войти в Unicord!</value>\n</data>\n<data name=\"VerifyNSFWDisplayReason\" xml:space=\"preserve\">\n  <value>Подтвердите свою личность, чтобы получить доступ к этому каналу!</value>\n</data>\n<data name=\"VerifySettingsDisplayReason\" xml:space=\"preserve\">\n  <value>Подтвердите свою личность, чтобы открыть настройки!</value>\n</data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/SearchPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n    <data name=\"ResultsText.Text\" xml:space=\"preserve\">\n    <value>Результаты</value>\n    </data>\n  <data name=\"NoResultsHeader.Text\" xml:space=\"preserve\">\n    <value>Мы искали повсюду.</value>\n  </data>\n  <data name=\"NoResultsSubheader.Text\" xml:space=\"preserve\">\n    <value>К сожалению, результаты не найдены.</value>\n  </data>\n<data name=\"SearchBox.PlaceholderText\" xml:space=\"preserve\">\n  <value>Поиск...</value>\n</data>\n<data name=\"SearchHeader.Text\" xml:space=\"preserve\">\n  <value>Поиск</value>\n</data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/SecuritySettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AccessNSFWBlock.Title\" xml:space=\"preserve\">\n    <value>Доступ к каналам для взрослых</value>\n  </data>\n  <data name=\"DiagnosticDataBlock.Title\" xml:space=\"preserve\">\n    <value>Отправлять диагностические и использованные данные</value>\n  </data>\n  <data name=\"DiagnosticDataHeader.Text\" xml:space=\"preserve\">\n    <value>Диагностические и использованные данные</value>\n  </data>\n  <data name=\"LoginBlock.Title\" xml:space=\"preserve\">\n    <value>Вход</value>\n  </data>\n  <data name=\"SecuritySettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Безопасность и конфиденциальность</value>\n  </data>\n  <data name=\"SettingsBlock.Title\" xml:space=\"preserve\">\n    <value>Изменить настройки</value>\n  </data>\n  <data name=\"StayAuthenticatedBlock.Title\" xml:space=\"preserve\">\n    <value>Оставаться в системе в течение</value>\n  </data>\n  <data name=\"WindowsHelloHeader.Text\" xml:space=\"preserve\">\n    <value>Windows Hello</value>\n  </data>\n  <data name=\"WindowsHelloOptionsHeader.Text\" xml:space=\"preserve\">\n    <value>Требовать аутентификации с помощью Windows Hello для:</value>\n  </data>\n  <data name=\"WindowsHelloSubHeader.Text\" xml:space=\"preserve\">\n    <value>Требовать аутентификации с помощью Windows Hello для:</value>\n  </data>\n  <data name=\"WindowsHelloToggle.Text\" xml:space=\"preserve\">\n    <value />\n  </data>\n  <data name=\"WindowsHelloUnavailable.Text\" xml:space=\"preserve\">\n    <value>Windows Hello не доступна на этом устройстве. Хотите это исправить?</value>\n  </data>\n  <data name=\"OpenSettingsButton.Content\" xml:space=\"preserve\">\n    <value>Открыть параметры</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/SettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AboutItem.Content\" xml:space=\"preserve\">\n    <value>О приложении</value>\n  </data>\n  <data name=\"AccountsItem.Content\" xml:space=\"preserve\">\n    <value>Учетные записи</value>\n  </data>\n  <data name=\"MediaItem.Content\" xml:space=\"preserve\">\n    <value>Аудио и видео</value>\n  </data>\n  <data name=\"MessagingItem.Content\" xml:space=\"preserve\">\n    <value>Текст и изображения</value>\n  </data>\n  <data name=\"SecurityItem.Content\" xml:space=\"preserve\">\n    <value>Безопасность и конфиденциальность</value>\n  </data>\n  <data name=\"ThemesItem.Content\" xml:space=\"preserve\">\n    <value>Внешний вид и темы</value>\n  </data>\n  <data name=\"VoiceItem.Content\" xml:space=\"preserve\">\n    <value>Голосовые звонки</value>\n  </data>\n  <data name=\"SearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Поиск</value>\n  </data>\n  <data name=\"EditProfileText.Text\" xml:space=\"preserve\">\n    <value>Редактировать профили</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/ThemesSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"CloseButton.Content\" xml:space=\"preserve\">\n  <value>Закрыть</value>\n</data>\n<data name=\"ColourSchemeBlock.Description\" xml:space=\"preserve\">\n  <value>Эта настройка не будет синхронизирована с Discord.</value>\n</data>\n<data name=\"ColourSchemeBlock.Title\" xml:space=\"preserve\">\n  <value>Цветовая схема</value>\n</data>\n<data name=\"ColourSchemeDark.Content\" xml:space=\"preserve\">\n  <value>Тёмная</value>\n</data>\n<data name=\"ColourSchemeDefault.Content\" xml:space=\"preserve\">\n  <value>Системная по умолчанию</value>\n</data>\n<data name=\"ColourSchemeLight.Content\" xml:space=\"preserve\">\n  <value>Светлая</value>\n</data>\n<data name=\"EnableAfterInstallationCheckBox.Content\" xml:space=\"preserve\">\n  <value>Включить тему после установки</value>\n</data>\n<data name=\"InstallButton.Content\" xml:space=\"preserve\">\n  <value>Установить</value>\n</data>\n<data name=\"MainThemeHeader.Text\" xml:space=\"preserve\">\n  <value>Темы</value>\n</data>\n<data name=\"MainThemeSubheader.Text\" xml:space=\"preserve\">\n  <value>Хотите добавить пикантности? Скачайте несколько тем или узнайте, как создать свою!</value>\n</data>\n<data name=\"RelaunchRequired.Text\" xml:space=\"preserve\">\n  <value>Изменения вступят в силу после перезапуска Unicord.</value>\n</data>\n<data name=\"ThemeAlreadyInstalledMessage\" xml:space=\"preserve\">\n  <value>Эта тема уже установлена, хотите перезаписать её?</value>\n</data>\n<data name=\"ThemeAlreadyInstalledTitle\" xml:space=\"preserve\">\n  <value>Тема уже установлена!</value>\n</data>\n<data name=\"ThemeChangedMessage\" xml:space=\"preserve\">\n  <value>Чтобы обновить тему, Unicord должен быть перезапущен. Хотите перезапустить сейчас?</value>\n</data>\n<data name=\"ThemeChangedTitle\" xml:space=\"preserve\">\n  <value>Тема изменена!</value>\n</data>\n<data name=\"ThemeInvalidDoesNotExist\" xml:space=\"preserve\">\n  <value>Попытка загрузить тему, которая не существует на диске. Тема была удалена.</value>\n</data>\n<data name=\"ThemeInvalidNoJson\" xml:space=\"preserve\">\n  <value>Этот файл, похоже, не является темой Unicord, отсутствует theme.json!</value>\n</data>\n<data name=\"ThemeInvalidNoLogo\" xml:space=\"preserve\">\n  <value>Эта тема указывает на логотип, который не существует!</value>\n</data>\n<data name=\"ThemeLoadFailedFormat\" xml:space=\"preserve\">\n  <value>Не удалось загрузить вашу текущую выбранную тему!\n{0}</value>\n</data>\n<data name=\"ThemePreInstallCheckFailed\" xml:space=\"preserve\">\n  <value>Сбой проверки перед установкой! Вероятно, ваше устройство или версия Windows, которую вы используете, не поддерживается этой темой. Извините!</value>\n</data>\n<data name=\"ThemesSettingsHeader.Text\" xml:space=\"preserve\">\n  <value>Внешний вид</value>\n</data>\n<data name=\"ThemeUnsupportedWindowsVersion\" xml:space=\"preserve\">\n  <value>Версия Windows, которую вы используете, не поддерживается этой темой. Извините!</value>\n</data>\n</root>\n"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/UserListPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n    <data name=\"UserListHeader.Text\" xml:space=\"preserve\">\n    <value>Пользователи</value>\n  </data>\n  <data name=\"UserSearchBox.PlaceholderText\" xml:space=\"preserve\">\n    <value>Поиск пользователей</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/VideoEditor.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"CannotEditClipMessage\" xml:space=\"preserve\">\n    <value>В настоящее время вы можете редактировать только видеоклипы из файлов. Извините!</value>\n</data>\n<data name=\"CannotEditClipTitle\" xml:space=\"preserve\">\n    <value>Невозможно редактировать этот клип.</value>\n</data>\n<data name=\"LoadPreviousEditsMessage\" xml:space=\"preserve\">\n    <value>Похоже, вы редактировали этот файл ранее. Хотите загрузить предыдущие правки?</value>\n</data>\n<data name=\"LoadPreviousEditsTitle\" xml:space=\"preserve\">\n    <value>Загрузить предыдущие правки?</value>\n</data>\n<data name=\"ProcessingVideoHeader.Text\" xml:space=\"preserve\">\n    <value>Обработка видео</value>\n</data>\n<data name=\"SaveChangesMessage\" xml:space=\"preserve\">\n    <value>Хотите сохранить ваши изменения? Они будут загружены в следующий раз, когда вы редактируете этот клип.</value>\n</data>\n<data name=\"SaveChangesTitle\" xml:space=\"preserve\">\n    <value>Сохранить изменения?</value>\n</data>\n<data name=\"VideoEditorHeader.Text\" xml:space=\"preserve\">\n    <value>Обрезать видео</value>\n</data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/Voice.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n<data name=\"ConnectedStateFormat\" xml:space=\"preserve\">\n    <value>Подключено к {0}!</value>\n</data>\n<data name=\"ConnectionState1\" xml:space=\"preserve\">\n    <value>Запуск процесса голосового чата...</value>\n</data>\n<data name=\"ConnectionState2\" xml:space=\"preserve\">\n    <value>Закрытие текущего подключения...</value>\n</data>\n<data name=\"ConnectionState3\" xml:space=\"preserve\">\n    <value>Общение с Discord...</value>\n</data>\n<data name=\"ConnectionState4Format\" xml:space=\"preserve\">\n    <value>Подключение к {0}...</value>\n</data>\n<data name=\"DisconnectedState\" xml:space=\"preserve\">\n    <value>Отключено</value>\n</data>\n<data name=\"InitialConnectionState\" xml:space=\"preserve\">\n    <value>Подготовка...</value>\n</data>\n<data name=\"ReconnectingState\" xml:space=\"preserve\">\n    <value>Повторное подключение...</value>\n</data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Resources/ru-RU/VoiceSettingsPage.resw",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"AudioDevicesHeader.Text\" xml:space=\"preserve\">\n    <value>Аудиоустройства</value>\n</data>\n<data name=\"AudioDevicesSubheader.Text\" xml:space=\"preserve\">\n    <value>Здесь вы можете выбрать аудиоустройства для использования в голосовых вызовах.</value>\n</data>\n<data name=\"AudioProcessingHeader.Text\" xml:space=\"preserve\">\n    <value>Обработка аудио</value>\n</data>\n<data name=\"AutomaticGainControlBlock.Title\" xml:space=\"preserve\">\n    <value>Автоматическая регулировка уровня</value>\n</data>\n<data name=\"EchoCancellationBlock.Title\" xml:space=\"preserve\">\n    <value>Подавление эха</value>\n</data>\n<data name=\"InputDeviceBlock.Title\" xml:space=\"preserve\">\n    <value>Устройство ввода</value>\n</data>\n<data name=\"InputDevices.Header\" xml:space=\"preserve\">\n    <value>Устройство ввода</value>\n</data>\n<data name=\"NoiseSuppressionBlock.Description\" xml:space=\"preserve\">\n    <value>Автоматически удаляет фоновый шум из вашего микрофона.</value>\n</data>\n<data name=\"NoiseSuppressionBlock.Title\" xml:space=\"preserve\">\n    <value>Подавление шума</value>\n</data>\n<data name=\"NoiseSuppressionDisabled.Content\" xml:space=\"preserve\">\n    <value>Отключено</value>\n</data>\n<data name=\"NoiseSuppressionHigh.Content\" xml:space=\"preserve\">\n    <value>Высокое</value>\n</data>\n<data name=\"NoiseSuppressionLow.Content\" xml:space=\"preserve\">\n    <value>Низкое</value>\n</data>\n<data name=\"NoiseSuppressionMedium.Content\" xml:space=\"preserve\">\n    <value>Среднее</value>\n</data>\n<data name=\"OutputDeviceBlock.Title\" xml:space=\"preserve\">\n    <value>Устройство вывода</value>\n</data>\n<data name=\"OutputDevices.Header\" xml:space=\"preserve\">\n    <value>Устройство вывода</value>\n</data>\n<data name=\"VoiceActivityBlock.Title\" xml:space=\"preserve\">\n    <value>Голосовая активация</value>\n</data>\n<data name=\"VoiceSettingsHeader.Text\" xml:space=\"preserve\">\n    <value>Голос</value>\n</data>\n</root>"
  },
  {
    "path": "Unicord.Universal/Services/BackgroundNotificationService.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing CommunityToolkit.Mvvm.Messaging;\r\nusing DSharpPlus.EventArgs;\r\nusing Microsoft.AppCenter.Crashes;\r\nusing Microsoft.Extensions.Logging;\r\nusing Unicord.Universal.Background.Tasks;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Shared;\r\nusing Windows.ApplicationModel;\r\nusing Windows.ApplicationModel.Background;\r\nusing Windows.Foundation;\r\nusing Windows.Foundation.Metadata;\r\nusing static Unicord.Constants;\r\n\r\nnamespace Unicord.Universal.Services\r\n{\r\n    class BackgroundNotificationService : BaseService<BackgroundNotificationService>\r\n    {\r\n        private readonly ILogger<BackgroundNotificationService> _logger\r\n            = Logger.GetLogger<BackgroundNotificationService>();\r\n\r\n        private BadgeManager _badgeManager;\r\n        private TileManager _tileManager;\r\n        private SecondaryTileManager _secondaryTileManager;\r\n\r\n        internal async Task StartupAsync()\r\n        {\r\n            if (await StartFullTrustBackgroundTaskAsync())\r\n            {\r\n                foreach (var task in BackgroundTaskRegistration.AllTasks.Values.Where(i =>\r\n                    i.Name.Equals(PERIODIC_BACKGROUND_TASK_NAME) ||\r\n                    i.Name.Equals(REALTIME_BACKGROUND_TASK_NAME)))\r\n                {\r\n                    _logger.LogInformation(\"Disabling {TaskName} task because full-trust task is running.\", task.Name);\r\n                    task.Unregister(true);\r\n                }\r\n            }\r\n            else\r\n            {\r\n                // await RegisterRealtimeBackgroundTaskAsync();\r\n                await StartInProcTaskAsync();\r\n            }\r\n        }\r\n\r\n        private async Task<bool> RegisterToastActivationBackgroundTaskAsync()\r\n        {\r\n            try\r\n            {\r\n                if (BackgroundTaskRegistration.AllTasks.Values.Any(i => i.Name.Equals(TOAST_BACKGROUND_TASK_NAME)))\r\n                    return true;\r\n\r\n                var status = await BackgroundExecutionManager.RequestAccessAsync();\r\n                if (status is BackgroundAccessStatus.Denied or BackgroundAccessStatus.DeniedBySystemPolicy or BackgroundAccessStatus.DeniedByUser)\r\n                {\r\n                    _logger.LogError(\"Failed to register background task for toast notification because {Reason}\", status.ToString());\r\n                    return false;\r\n                }\r\n\r\n                var builder = new BackgroundTaskBuilder() { Name = TOAST_BACKGROUND_TASK_NAME };\r\n                builder.SetTrigger(new ToastNotificationActionTrigger());\r\n                var registration = builder.Register();\r\n\r\n                _logger.LogInformation(\"Registered background task for toast activation.\");\r\n\r\n                return true;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                _logger.LogError(ex, \"Failed to register background task for toast activation.\");\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        private async Task<bool> StartFullTrustBackgroundTaskAsync()\r\n        {\r\n            if (!App.LocalSettings.Read(BACKGROUND_NOTIFICATIONS_FULL_TRUST, true))\r\n            {\r\n                _logger.LogDebug(\"Not starting full-trust notifications process, disabled by user.\");\r\n                return false;\r\n            }\r\n\r\n            // disable this prior to FCU because it seems to just crash, and inbuilt notifications work better\r\n            if (!ApiInformation.IsApiContractPresent(typeof(UniversalApiContract).FullName, 5))\r\n            {\r\n                _logger.LogDebug(\"Not starting full-trust notifications process, disabled by OS version check.\");\r\n                return false;\r\n            }\r\n\r\n            if (!await RegisterToastActivationBackgroundTaskAsync())\r\n            {\r\n                _logger.LogDebug(\"Not starting full-trust notifications process, failed to register toast activation task.\");\r\n                return false;\r\n            }\r\n\r\n            try\r\n            {\r\n                if (ApiInformation.IsApiContractPresent(typeof(FullTrustAppContract).FullName, 1))\r\n                {\r\n                    await FullTrustProcessLauncher.LaunchFullTrustProcessForCurrentAppAsync();\r\n                    _logger.LogInformation(\"Launched full-trust notifications process.\");\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                _logger.LogError(ex, \"Failed to launch full-trust notifications process.\");\r\n                return false;\r\n            }\r\n\r\n            try\r\n            {\r\n                if (ApiInformation.IsApiContractPresent(typeof(StartupTaskContract).FullName, 1))\r\n                {\r\n                    var notifyTask = await StartupTask.GetAsync(\"UnicordBackgroundTask\");\r\n                    var state = await notifyTask.RequestEnableAsync();\r\n\r\n                    _logger.LogInformation(\"Full-trust notifications startup task state -> {State}\", state);\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                _logger.LogError(ex, \"Failed to enable startup task for full-trust notifications process.\");\r\n            }\r\n\r\n            return true;\r\n        }\r\n\r\n        private async Task<bool> RegisterPeriodicBackgroundTaskAsync()\r\n        {\r\n            try\r\n            {\r\n                if (BackgroundTaskRegistration.AllTasks.Values.Any(i => i.Name.Equals(PERIODIC_BACKGROUND_TASK_NAME)))\r\n                    return true;\r\n\r\n                var status = await BackgroundExecutionManager.RequestAccessAsync();\r\n                if (status is BackgroundAccessStatus.Denied or BackgroundAccessStatus.DeniedBySystemPolicy or BackgroundAccessStatus.DeniedByUser)\r\n                    return false;\r\n\r\n                var builder = new BackgroundTaskBuilder()\r\n                {\r\n                    Name = PERIODIC_BACKGROUND_TASK_NAME,\r\n                    TaskEntryPoint = typeof(PeriodicNotificationsTask).FullName,\r\n                    IsNetworkRequested = true\r\n                };\r\n\r\n                builder.SetTrigger(new TimeTrigger(15, false));\r\n\r\n                var registration = builder.Register();\r\n                return true;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Logger.LogError(ex);\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        private async Task<bool> RegisterRealtimeBackgroundTaskAsync()\r\n        {\r\n            try\r\n            {\r\n                if (BackgroundTaskRegistration.AllTasks.Values.Any(i => i.Name.Equals(REALTIME_BACKGROUND_TASK_NAME)))\r\n                    return true;\r\n\r\n                var status = await BackgroundExecutionManager.RequestAccessAsync();\r\n                if (status is BackgroundAccessStatus.Denied or BackgroundAccessStatus.DeniedBySystemPolicy or BackgroundAccessStatus.DeniedByUser)\r\n                    return false;\r\n\r\n                var builder = new BackgroundTaskBuilder()\r\n                {\r\n                    Name = REALTIME_BACKGROUND_TASK_NAME,\r\n                    TaskEntryPoint = typeof(RealtimeNotificationsTask).FullName,\r\n                    IsNetworkRequested = true\r\n                };\r\n\r\n                builder.AddCondition(new SystemCondition(SystemConditionType.InternetAvailable));\r\n                // builder.AddCondition(new SystemCondition(SystemConditionType.BackgroundWorkCostNotHigh));\r\n\r\n                builder.SetTrigger(new SystemTrigger(SystemTriggerType.InternetAvailable, false));\r\n\r\n                var registration = builder.Register();\r\n                return true;\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Logger.LogError(ex);\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        private async Task StartInProcTaskAsync()\r\n        {\r\n            _badgeManager = new BadgeManager(DiscordManager.Discord);\r\n            _tileManager = new TileManager(DiscordManager.Discord);\r\n            _secondaryTileManager = new SecondaryTileManager(DiscordManager.Discord);\r\n\r\n            await _tileManager.InitialiseAsync();\r\n            await _secondaryTileManager.InitialiseAsync();\r\n\r\n            WeakReferenceMessenger.Default.Register<BackgroundNotificationService, MessageAcknowledgeEventArgs>(this,\r\n                (r, e) => r.OnMessageAcknowledged(e.Event));\r\n            WeakReferenceMessenger.Default.Register<BackgroundNotificationService, MessageCreateEventArgs>(this,\r\n                (r, e) => r.OnMessageCreated(e.Event));\r\n        }\r\n\r\n        private async Task OnMessageCreated(MessageCreateEventArgs e)\r\n        {\r\n            try\r\n            {\r\n                if (NotificationUtils.WillShowToast(DiscordManager.Discord, e.Message))\r\n                {\r\n                    _badgeManager.Update();\r\n                    await _tileManager.HandleMessageAsync(e.Message);\r\n                }\r\n\r\n                await _secondaryTileManager.HandleMessageAsync(DiscordManager.Discord, e.Message);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Crashes.TrackError(ex);\r\n            }\r\n        }\r\n\r\n        private async Task OnMessageAcknowledged(MessageAcknowledgeEventArgs e)\r\n        {\r\n            try\r\n            {\r\n                _badgeManager.Update();\r\n                await _tileManager.HandleAcknowledgeAsync(e.Channel);\r\n                await _secondaryTileManager.HandleAcknowledgeAsync(e.Channel);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Crashes.TrackError(ex);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Services/BaseService.cs",
    "content": "﻿using System.Threading;\n\nnamespace Unicord.Universal.Services\n{\n    internal abstract class BaseService<T> where T: BaseService<T>, new()\n    {\n        private static ThreadLocal<T> _serviceStore\n            = new ThreadLocal<T>(() => new T(), true);\n\n        public static T GetForCurrentView()\n        {\n            var val = _serviceStore.Value;\n            if (!val._isInitialised)\n            {\n                val.Initialise();\n            }\n\n            return val;\n        }\n\n        public static void Reset()\n        {\n            _serviceStore.Dispose();\n            _serviceStore = new ThreadLocal<T>(() => new T(), true);\n        }\n\n        protected bool _isInitialised;\n        protected virtual void Initialise()\n        {\n            _isInitialised = true;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Services/DiscordManager.cs",
    "content": "﻿using System;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing DSharpPlus;\nusing DSharpPlus.AsyncEvents;\nusing DSharpPlus.Entities;\nusing DSharpPlus.EventArgs;\nusing Microsoft.Extensions.Logging;\nusing Unicord.Universal.Dialogs;\nusing Unicord.Universal.Models.Messaging;\nusing Windows.ApplicationModel.Core;\nusing Windows.Security.Credentials;\nusing Windows.UI.Core;\n\nnamespace Unicord.Universal.Services\n{\n    internal class DiscordManager\n    {\n        private static DiscordClient _discord;\n        private static ILogger<DiscordManager> _logger\n            = Logger.GetLogger<DiscordManager>();\n\n        private static readonly SemaphoreSlim _connectSemaphore\n            = new SemaphoreSlim(1);\n        private static TaskCompletionSource<ReadyEventArgs> _readySource\n            = new TaskCompletionSource<ReadyEventArgs>();\n        public static DiscordClient Discord\n        {\n            get => _discord;\n        }\n\n        internal static void KickoffConnectionAsync()\n        {\n            _ = Task.Run(async () =>\n            {\n                if (TryGetToken(out var token))\n                    await LoginAsync(token, null, null, true);\n            });\n        }\n\n        internal static async Task LoginAsync(\n            string token,\n            AsyncEventHandler<DiscordClient, ReadyEventArgs> onReady,\n            Func<Exception, Task> onError,\n            bool background,\n            UserStatus status = UserStatus.Online)\n        {\n            await _connectSemaphore.WaitAsync();\n            _readySource = new TaskCompletionSource<ReadyEventArgs>();\n            try\n            {\n                if (Discord != null)\n                {\n                    try\n                    {\n                        var res = await _readySource.Task;\n                        if (onReady != null)\n                            await onReady(Discord, res);\n                    }\n                    catch (Exception ex)\n                    {\n                        if (onError != null)\n                            await onError(ex);\n                    }\n\n                    return;\n                }\n\n                if (App.RoamingSettings.Read(Constants.VERIFY_LOGIN, false))\n                {\n                    if (background || !(await WindowsHelloManager.VerifyAsync(Constants.VERIFY_LOGIN, \"VerifyLoginDisplayReason\")))\n                    {\n                        if (onError != null)\n                            await onError(null);\n                        return;\n                    }\n                }\n\n                try\n                {\n                    async Task ReadyHandler(DiscordClient sender, ReadyEventArgs e)\n                    {\n                        // TODO: find a way to save this more securely, the background process can't retrieve from the credential locker?\n                        App.LocalSettings.Save(\"Token\", token);\n                        sender.Ready -= ReadyHandler;\n                        sender.SocketErrored -= SocketErrored;\n                        sender.ClientErrored -= ClientErrored;\n                        _readySource.TrySetResult(e);\n                        if (onReady != null)\n                        {\n                            await onReady(sender, e);\n                        }\n\n                        onError = null;\n                    }\n\n                    Task SocketErrored(DiscordClient sender, SocketErrorEventArgs e)\n                    {\n                        sender.Ready -= ReadyHandler;\n                        sender.SocketErrored -= SocketErrored;\n                        sender.ClientErrored -= ClientErrored;\n\n                        Logger.LogError(e.Exception);\n\n                        _readySource.SetException(e.Exception);\n                        return Task.CompletedTask;\n                    }\n\n                    Task ClientErrored(DiscordClient sender, ClientErrorEventArgs e)\n                    {\n                        sender.Ready -= ReadyHandler;\n                        sender.SocketErrored -= SocketErrored;\n                        sender.ClientErrored -= ClientErrored;\n\n                        Logger.LogError(e.Exception);\n\n                        _readySource.SetException(e.Exception);\n                        return Task.CompletedTask;\n                    }\n\n                    _discord = new DiscordClient(new DiscordConfiguration()\n                    {\n                        Token = token,\n                        TokenType = TokenType.User,\n                        LoggerFactory = Logger.LoggerFactory,\n                        ReconnectIndefinitely = true\n                    });\n\n                    Discord.Ready += ReadyHandler;\n                    Discord.SocketErrored += SocketErrored;\n                    Discord.ClientErrored += ClientErrored;\n                    Discord.CaptchaRequested += OnDiscordCaptchaRequested;\n                    Discord.AuthTokenUpdate += OnDiscordTokenUpdated;\n\n                    DiscordClientMessenger.Register(Discord);\n\n                    await Discord.ConnectAsync(status: status,\n                        idlesince: SystemPlatform.Desktop ? null : DateTimeOffset.Now);\n                }\n                catch (Exception ex)\n                {\n                    _logger.LogError(ex, \"Failure when logging in!\");\n                    Tools.ResetPasswordVault();\n                    _readySource.TrySetException(ex);\n                    if (onError != null)\n                        await onError(ex);\n                }\n            }\n            finally\n            {\n                _connectSemaphore.Release();\n            }\n        }\n\n        private static Task OnDiscordTokenUpdated(DiscordClient sender, AuthTokenUpdatedEventArgs args)\n        {\n            var vault = new PasswordVault();\n            try\n            {\n                foreach (var c in vault.FindAllByResource(Constants.TOKEN_IDENTIFIER))\n                    vault.Remove(c);\n            }\n            catch { }\n\n            var newToken = new PasswordCredential(Constants.TOKEN_IDENTIFIER, \"Default\", args.Token);\n            vault.Add(newToken);\n\n            // ditto above about the background process\n            App.LocalSettings.Save(\"Token\", args.Token);\n\n            return Task.CompletedTask;\n        }\n\n        private static async Task OnDiscordCaptchaRequested(BaseDiscordClient sender, CaptchaRequestEventArgs args)\n        {\n            var tcs = new TaskCompletionSource<DiscordCaptchaResponse>();\n\n            await CoreApplication.MainView.Dispatcher.RunAsync(CoreDispatcherPriority.High, async () =>\n            {\n                var dialog = new CaptchaRequestDialog(args.Request);\n                await dialog.ShowAsync();\n                tcs.SetResult(dialog.CaptchaResponse);\n            });\n\n            args.SetResponse(await tcs.Task);\n        }\n\n        internal static async Task LogoutAsync()\n        {\n            if (Discord == null) return;\n\n            var discord = _discord;\n            try\n            {\n                DiscordClientMessenger.Unregister(discord);\n                await discord.DisconnectAsync();\n                discord.Dispose();\n            }\n            catch (Exception ex)\n            {\n                _logger.LogError(ex, \"Error when disposing of DiscordClient!\");\n            }\n            finally\n            {\n                _discord = null;\n            }\n        }\n\n        internal static bool TryGetToken(out string token)\n        {\n            try\n            {\n                var passwordVault = new PasswordVault();\n                var credential = passwordVault.Retrieve(Constants.TOKEN_IDENTIFIER, \"Default\");\n                credential.RetrievePassword();\n\n                token = credential.Password;\n                return true;\n            }\n            catch { }\n\n            token = null;\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Services/DiscordNavigationService.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Threading.Tasks;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing Microsoft.AppCenter.Analytics;\r\nusing Unicord.Universal.Extensions;\r\nusing Unicord.Universal.Models;\r\nusing Unicord.Universal.Models.Channels;\r\nusing Unicord.Universal.Models.Guild;\r\nusing Unicord.Universal.Models.Voice;\r\nusing Unicord.Universal.Pages;\r\nusing Unicord.Universal.Pages.Subpages;\r\nusing Unicord.Universal.Utilities;\r\nusing Windows.ApplicationModel.Resources;\r\nusing Windows.UI.Core;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Media.Animation;\r\n\r\nnamespace Unicord.Universal.Services\r\n{\r\n    internal class NavigationEvent\r\n    {\r\n        public object args;\r\n        public Action<NavigationEvent> action;\r\n    }\r\n\r\n    /// <summary>\r\n    /// A service to handle navigation between channels and servers\r\n    /// </summary>\r\n    internal class DiscordNavigationService : BaseService<DiscordNavigationService>\r\n    {\r\n        private MainPage _mainPage;\r\n        private DiscordPage _discordPage;\r\n        private DiscordPageViewModel _discordPageModel;\r\n        private SystemNavigationManager _navigation;\r\n        private Stack<NavigationEvent> _navigationStack;\r\n\r\n        protected override void Initialise()\r\n        {\r\n            base.Initialise();\r\n\r\n            _mainPage = Window.Current.Content.FindChild<MainPage>();\r\n            if (!(_mainPage.Arguments?.FullFrame ?? false))\r\n            {\r\n                _discordPage = Window.Current.Content.FindChild<DiscordPage>();\r\n                _discordPageModel = _discordPage.DataContext as DiscordPageViewModel;\r\n\r\n                _navigationStack = new Stack<NavigationEvent>();\r\n                _navigation = SystemNavigationManager.GetForCurrentView();\r\n                _navigation.BackRequested += OnBackRequested;\r\n            }\r\n        }\r\n\r\n        // TODO: this is kinda bad and should really be more in DiscordPageModel\r\n        // TODO: messageID currently unused, here for forward compatbility\r\n        internal async Task NavigateAsync(DiscordChannel channel, bool skipPreviousDm = false, ulong messageID = 0)\r\n        {\r\n            // TODO: handle this navigation in the main window\r\n            var window = WindowingService.Current.GetHandle(_mainPage);\r\n            if (_discordPage == null)\r\n            {\r\n                if (_mainPage.Arguments?.FullFrame != true)\r\n                    return;\r\n\r\n                if (channel.Type == ChannelType.Voice)\r\n                    throw new InvalidOperationException();\r\n\r\n                Analytics.TrackEvent(\"DiscordNavigationService_NavigateToTextChannel\");\r\n\r\n                if (await WindowingService.Current.ActivateOtherWindowAsync(channel, window))\r\n                    return;\r\n\r\n                if (channel.Guild != null)\r\n                    await channel.Guild.SyncAsync();\r\n\r\n                if (channel.IsNSFW)\r\n                {\r\n                    var loader = ResourceLoader.GetForViewIndependentUse();\r\n                    if (await WindowsHelloManager.VerifyAsync(Constants.VERIFY_NSFW, loader.GetString(\"VerifyNSFWDisplayReason\")))\r\n                    {\r\n                        if (App.RoamingSettings.Read($\"NSFW_{channel.Id}\", false) == false || !App.RoamingSettings.Read($\"NSFW_All\", false))\r\n                            _mainPage.RootFrame.Navigate(typeof(AgeGatePage), channel);\r\n                        else\r\n                            _mainPage.RootFrame.Navigate(typeof(ChannelPage), channel);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (channel is DiscordForumChannel forum)\r\n                        _mainPage.RootFrame.Navigate(typeof(ForumChannelPage), forum);\r\n                    else\r\n                        _mainPage.RootFrame.Navigate(typeof(ChannelPage), channel);\r\n                }\r\n\r\n                _mainPage.HideCustomOverlay();\r\n                _mainPage.HideConnectingOverlay();\r\n\r\n                return;\r\n            }\r\n\r\n            _mainPage.HideCustomOverlay();\r\n\r\n            var page = _discordPage.MainFrame.Content as ChannelPage;\r\n            if (channel == null)\r\n            {\r\n                Analytics.TrackEvent(\"DiscordNavigationService_NavigateToFriendsPage\");\r\n\r\n                if (_discordPageModel.SelectedGuild != null)\r\n                    _discordPageModel.SelectedGuild.IsSelected = false;\r\n                _discordPageModel.SelectedGuild = null;\r\n                _discordPageModel.IsFriendsSelected = true;\r\n                _discordPageModel.CurrentChannel = null;\r\n\r\n                if (_discordPageModel.PreviousDM != null && (page?.ViewModel.Channel != _discordPageModel.PreviousDM.Channel) && !skipPreviousDm)\r\n                {\r\n                    _discordPageModel.SelectedDM = _discordPageModel.PreviousDM;\r\n                    _discordPage.MainFrame.Navigate(typeof(ChannelPage), _discordPageModel.PreviousDM);\r\n                    _discordPage.LeftSidebarFrame.Navigate(typeof(DMChannelsPage), _discordPageModel.PreviousDM, new DrillInNavigationTransitionInfo());\r\n                }\r\n                else if (page != null || !(_discordPage.LeftSidebarFrame.Content is DMChannelsPage))\r\n                {\r\n                    _discordPageModel.PreviousDM = null;\r\n                    _discordPage.MainFrame.Navigate(typeof(FriendsPage));\r\n                    _discordPage.LeftSidebarFrame.Navigate(typeof(DMChannelsPage), null, new DrillInNavigationTransitionInfo());\r\n                }\r\n\r\n                return;\r\n            }\r\n\r\n            if (_discordPageModel.CurrentChannel != channel && channel.Type != ChannelType.Voice)\r\n            {\r\n                Analytics.TrackEvent(\"DiscordNavigationService_NavigateToTextChannel\");\r\n\r\n                _discordPageModel.Navigating = true;\r\n\r\n                SplitPaneService.GetForCurrentView()\r\n                    .CloseAllPanes();\r\n\r\n                if (_discordPageModel.SelectedGuild != null)\r\n                    _discordPageModel.SelectedGuild.IsSelected = false;\r\n\r\n                _discordPageModel.SelectedGuild = null;\r\n                _discordPageModel.SelectedDM = null;\r\n                _discordPageModel.IsFriendsSelected = false;\r\n\r\n                if (await WindowingService.Current.ActivateOtherWindowAsync(channel, window))\r\n                    return;\r\n\r\n                GuildListViewModel guildVm;\r\n                if (channel is DiscordDmChannel dm)\r\n                {\r\n                    _discordPageModel.SelectedDM = _discordPageModel.PreviousDM = new ChannelViewModel(dm.Id);\r\n                    _discordPageModel.IsFriendsSelected = true;\r\n                    _discordPage.LeftSidebarFrame.Navigate(typeof(DMChannelsPage), channel, new DrillInNavigationTransitionInfo());\r\n                }\r\n                else if (channel.Guild != null && (guildVm = _discordPageModel.ViewModelFromGuild(channel.Guild)) != null)\r\n                {\r\n                    _discordPageModel.SelectedGuild = guildVm;\r\n                    _discordPageModel.SelectedGuild.IsSelected = true;\r\n\r\n                    if (_discordPage.LeftSidebarFrame.Content is not GuildChannelListPage p || p.Guild != channel.Guild)\r\n                        _discordPage.LeftSidebarFrame.Navigate(typeof(GuildChannelListPage), channel.Guild, new DrillInNavigationTransitionInfo());\r\n\r\n                    if (_discordPage.LeftSidebarFrame.Content is GuildChannelListPage g)\r\n                    {\r\n                        g.SetSelectedChannel(channel);\r\n                    }\r\n\r\n                    if (!channel.Guild.IsSynced)\r\n                        await channel.Guild.SyncAsync();\r\n                }\r\n\r\n                if (channel.IsNSFW)\r\n                {\r\n                    var loader = ResourceLoader.GetForViewIndependentUse();\r\n                    if (await WindowsHelloManager.VerifyAsync(Constants.VERIFY_NSFW, loader.GetString(\"VerifyNSFWDisplayReason\")))\r\n                    {\r\n                        if (App.RoamingSettings.Read($\"NSFW_{channel.Id}\", false) == false || !App.RoamingSettings.Read($\"NSFW_All\", false))\r\n                        {\r\n                            _discordPage.MainFrame.Navigate(typeof(AgeGatePage), channel);\r\n                        }\r\n                        else\r\n                        {\r\n                            _discordPage.MainFrame.Navigate(typeof(ChannelPage), channel);\r\n                        }\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    if (channel is DiscordForumChannel forum)\r\n                    {\r\n                        _discordPage.MainFrame.Navigate(typeof(ForumChannelPage), forum);\r\n                    }\r\n                    else\r\n                    {\r\n                        _discordPage.MainFrame.Navigate(typeof(ChannelPage), channel);\r\n                    }\r\n                }\r\n\r\n                _discordPageModel.Navigating = false;\r\n                _discordPageModel.CurrentChannel = channel;\r\n            }\r\n            else if (channel?.Type == ChannelType.Voice)\r\n            {\r\n                Analytics.TrackEvent(\"DiscordNavigationService_NavigateToVoiceChannel\");\r\n\r\n                if (_discordPageModel.VoiceModel != null)\r\n                    await _discordPageModel.VoiceModel.DisconnectAsync();\r\n\r\n                try\r\n                {\r\n                    var voice = new VoiceConnectionModel(channel);\r\n                    _discordPageModel.VoiceModel = voice;\r\n                    await voice.ConnectAsync();\r\n                }\r\n                catch (Exception ex)\r\n                {\r\n                    Logger.LogError(ex);\r\n                    await UIUtilities.ShowErrorDialogAsync(\"Failed to connect to voice!\", ex.Message);\r\n                }\r\n            }\r\n\r\n            if (_mainPage.IsOverlayShown)\r\n                _mainPage.HideConnectingOverlay();\r\n        }\r\n\r\n        private void OnBackRequested(object sender, BackRequestedEventArgs e)\r\n        {\r\n            if (_navigationStack.TryPop(out var ev))\r\n            {\r\n                ev.action(ev);\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Services/FullscreenService.cs",
    "content": "﻿using Microsoft.AppCenter.Analytics;\r\nusing System;\r\nusing System.Threading.Tasks;\r\nusing Unicord.Universal.Extensions;\r\nusing Windows.Foundation;\r\nusing Windows.Graphics.Display;\r\nusing Windows.UI.Core;\r\nusing Windows.UI.ViewManagement;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Media;\r\nusing Windows.UI.Xaml.Media.Animation;\r\n\r\nnamespace Unicord.Universal.Services\r\n{\r\n    internal class FullscreenService : BaseService<FullscreenService>\r\n    {\r\n        private record CapturedProperties(FrameworkElement Control)\r\n        {\r\n            public readonly double Width = Control.Width;\r\n            public readonly double Height = Control.Height;\r\n            public readonly double MaxWidth = Control.MaxWidth;\r\n            public readonly double MaxHeight = Control.MaxHeight;\r\n            public readonly HorizontalAlignment HorizontalAlignment = Control.HorizontalAlignment;\r\n            public readonly VerticalAlignment VerticalAlignment = Control.VerticalAlignment;\r\n            public readonly Transform RenderTransform = Control.RenderTransform;\r\n            public readonly Point RenderTransformOrigin = Control.RenderTransformOrigin;\r\n\r\n            public void Apply(FrameworkElement target)\r\n            {\r\n                target.Width = Width;\r\n                target.Height = Height;\r\n                target.MaxWidth = MaxWidth;\r\n                target.MaxHeight = MaxHeight;\r\n                target.RenderTransform = RenderTransform;\r\n                target.RenderTransformOrigin = RenderTransformOrigin;\r\n                target.HorizontalAlignment = HorizontalAlignment;\r\n                target.VerticalAlignment = VerticalAlignment;\r\n            }\r\n        }\r\n\r\n        private MainPage _page;\r\n        private Canvas _canvas;\r\n        private ApplicationView _view;\r\n\r\n        private CapturedProperties _fullscreenProperties;\r\n        private FrameworkElement _fullscreenElement;\r\n        private Border _fullscreenParent;\r\n\r\n        public event EventHandler<EventArgs> FullscreenEntered;\r\n        public event EventHandler<EventArgs> FullscreenExited;\r\n\r\n        public bool IsFullscreenMode => _view.IsFullScreenMode;\r\n\r\n        protected override void Initialise()\r\n        {\r\n            _page = Window.Current.Content.FindChild<MainPage>();\r\n            _canvas = _page?.FindChild<Canvas>(\"FullscreenBorder\");\r\n            _view = ApplicationView.GetForCurrentView();\r\n            _isInitialised = true;\r\n\r\n            var nav = SystemNavigationManager.GetForCurrentView();\r\n            nav.BackRequested += OnBackRequested;\r\n        }\r\n\r\n        private void OnBackRequested(object sender, BackRequestedEventArgs e)\r\n        {\r\n            if (_canvas.Visibility == Visibility.Visible)\r\n            {\r\n                if (_fullscreenElement != null && _fullscreenParent != null)\r\n                {\r\n                    LeaveFullscreenAsync(_fullscreenElement, _fullscreenParent);\r\n                }\r\n                else\r\n                {\r\n                    LeaveFullscreen();\r\n                }\r\n\r\n                e.Handled = true;\r\n            }\r\n        }\r\n\r\n        public async Task EnterFullscreenAsync(FrameworkElement element, Border parent)\r\n        {\r\n            Analytics.TrackEvent(\"FullscreenService_EnterFullscreen\");\r\n\r\n            LeaveFullscreen();\r\n\r\n            var tcs = new TaskCompletionSource<object>();\r\n            var maxWidth = Window.Current.Bounds.Width;\r\n            var maxHeight = Window.Current.Bounds.Height;\r\n\r\n            if (_view.TryEnterFullScreenMode())\r\n            {\r\n                var info = DisplayInformation.GetForCurrentView();\r\n                maxWidth = info.ScreenWidthInRawPixels / info.RawPixelsPerViewPixel;\r\n                maxHeight = info.ScreenHeightInRawPixels / info.RawPixelsPerViewPixel;\r\n            }\r\n\r\n            _fullscreenProperties = new CapturedProperties(element);\r\n\r\n            var placeholder = new Border();\r\n            _fullscreenProperties.Apply(placeholder);\r\n\r\n            var bounds = parent.TransformToVisual(null)\r\n                               .TransformBounds(new Rect(0, 0, parent.ActualWidth, parent.ActualHeight));\r\n\r\n            element.MaxWidth = double.PositiveInfinity;\r\n            element.MaxHeight = double.PositiveInfinity;\r\n            element.Width = maxWidth;\r\n            element.Height = maxHeight;\r\n\r\n            element.HorizontalAlignment = HorizontalAlignment.Stretch;\r\n            element.VerticalAlignment = VerticalAlignment.Stretch;\r\n\r\n            var ratioX = (double)maxWidth / bounds.Width;\r\n            var ratioY = (double)maxHeight / bounds.Height;\r\n\r\n            var transformCollection = new CompositeTransform\r\n            {\r\n                TranslateX = (bounds.Left + (bounds.Width / 2)) - (maxWidth / 2),\r\n                TranslateY = (bounds.Top + (bounds.Height / 2)) - (maxHeight / 2),\r\n                ScaleX = bounds.Width / maxWidth,\r\n                ScaleY = bounds.Height / maxHeight\r\n            };\r\n\r\n            VisualTreeHelper.DisconnectChildrenRecursive(parent);\r\n            VisualTreeHelper.DisconnectChildrenRecursive(_canvas);\r\n\r\n            _fullscreenElement = element;\r\n            _fullscreenParent = parent;\r\n            _canvas.Children.Add(element);\r\n            parent.Child = placeholder;\r\n\r\n            element.RenderTransformOrigin = new Point(0.5, 0.5);\r\n            element.RenderTransform = transformCollection;\r\n\r\n            var storyboard = new Storyboard();\r\n            AnimateDouble(transformCollection, storyboard, 1, \"ScaleX\");\r\n            AnimateDouble(transformCollection, storyboard, 1, \"ScaleY\");\r\n            AnimateDouble(transformCollection, storyboard, 0, \"TranslateX\");\r\n            AnimateDouble(transformCollection, storyboard, 0, \"TranslateY\");\r\n\r\n            storyboard.Completed += (o, ev) =>\r\n            {\r\n                tcs.SetResult(null);\r\n                FullscreenEntered?.Invoke(this, null);\r\n            };\r\n\r\n            storyboard.Begin();\r\n\r\n            _canvas.Visibility = Visibility.Visible;\r\n            await tcs.Task;\r\n        }\r\n\r\n        public void LeaveFullscreen()\r\n        {\r\n            Analytics.TrackEvent(\"FullscreenService_LeaveFullscreen\");\r\n\r\n            _view.ExitFullScreenMode();\r\n            DisplayInformation.AutoRotationPreferences = DisplayOrientations.Portrait;\r\n\r\n            _fullscreenElement = null;\r\n            _fullscreenParent = null;\r\n\r\n            VisualTreeHelper.DisconnectChildrenRecursive(_canvas);\r\n            _canvas.Visibility = Visibility.Collapsed;\r\n\r\n            FullscreenExited?.Invoke(this, null);\r\n        }\r\n\r\n        public Task LeaveFullscreenAsync(FrameworkElement element, Border parent)\r\n        {\r\n            var tcs = new TaskCompletionSource<object>();\r\n\r\n            Analytics.TrackEvent(\"FullscreenService_LeaveFullscreen\");\r\n\r\n            var bounds = parent.TransformToVisual(null)\r\n                               .TransformBounds(new Rect(0, 0, parent.ActualWidth, parent.ActualHeight));\r\n            var ratioX = (double)element.ActualWidth / bounds.Width;\r\n            var ratioY = (double)element.ActualHeight / bounds.Height;\r\n\r\n            var transformCollection = new CompositeTransform();\r\n\r\n            element.RenderTransformOrigin = new Point(0.5, 0.5);\r\n            element.RenderTransform = transformCollection;\r\n\r\n            var storyboard = new Storyboard();\r\n            AnimateDouble(transformCollection, storyboard, bounds.Width / element.ActualWidth, \"ScaleX\");\r\n            AnimateDouble(transformCollection, storyboard, bounds.Height / element.ActualHeight, \"ScaleY\");\r\n            AnimateDouble(transformCollection, storyboard, (bounds.Left + (bounds.Width / 2)) - (element.ActualWidth / 2), \"TranslateX\");\r\n            AnimateDouble(transformCollection, storyboard, (bounds.Top + (bounds.Height / 2)) - (element.ActualHeight / 2), \"TranslateY\");\r\n\r\n            storyboard.Begin();\r\n            storyboard.Completed += (o, ev) =>\r\n            {\r\n                _view.ExitFullScreenMode();\r\n\r\n                _canvas.Children.Clear();\r\n                _fullscreenParent.Child = null;\r\n\r\n                if (_fullscreenElement is not MediaPlayerElement)\r\n                {\r\n                    VisualTreeHelper.DisconnectChildrenRecursive(_fullscreenParent);\r\n                    VisualTreeHelper.DisconnectChildrenRecursive(_canvas);\r\n                }\r\n\r\n                _canvas.Visibility = Visibility.Collapsed;\r\n                _fullscreenParent.Child = _fullscreenElement;\r\n                _fullscreenProperties.Apply(_fullscreenElement);\r\n\r\n                _fullscreenProperties = null;\r\n                _fullscreenElement = null;\r\n                _fullscreenParent = null;\r\n\r\n                tcs.SetResult(null);\r\n                FullscreenExited?.Invoke(this, null);\r\n            };\r\n\r\n            return tcs.Task;\r\n        }\r\n\r\n        private static void AnimateDouble(CompositeTransform transformCollection, Storyboard storyboard, double to, string property)\r\n        {\r\n            var scaleXAnimation = new DoubleAnimation()\r\n            {\r\n                To = to,\r\n                Duration = new Duration(TimeSpan.FromSeconds(1.0 / 3.0)),\r\n                EasingFunction = new ExponentialEase() { Exponent = 5, EasingMode = EasingMode.EaseOut }\r\n            };\r\n\r\n            Storyboard.SetTarget(scaleXAnimation, transformCollection);\r\n            Storyboard.SetTargetProperty(scaleXAnimation, property);\r\n            storyboard.Children.Add(scaleXAnimation);\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Services/OverlayService.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Unicord.Universal.Extensions;\nusing Windows.ApplicationModel.Core;\nusing Windows.Foundation;\nusing Windows.UI.Core;\nusing Windows.UI.Core.Preview;\nusing Windows.UI.ViewManagement;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\nusing Windows.UI.Xaml.Media.Animation;\n\nnamespace Unicord.Universal.Services\n{\n    internal class OverlayService : BaseService<OverlayService>\n    {\n        private MainPage _mainPage;\n        private SystemNavigationManager _systemNavigationManager;\n        private bool _overlayVisible;\n\n        protected override void Initialise()\n        {\n            _mainPage = Window.Current.Content.FindChild<MainPage>();\n            _systemNavigationManager = SystemNavigationManager.GetForCurrentView();\n        }\n\n        public async Task ShowOverlayAsync<T>(object model = null) where T : Page, IOverlay, new()\n        {\n            if (App.LocalSettings.Read(\"WindowedOverlays\", false))\n            {\n                var view = CoreApplication.CreateNewView();\n                var newViewId = 0;\n                var currentViewId = ApplicationView.GetForCurrentView().Id;\n                var t = default(T);\n                await view.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\n                {\n                    var frame = new Frame();\n                    frame.Navigate(typeof(T), model);\n\n                    SystemNavigationManagerPreview.GetForCurrentView().CloseRequested += (o, e) =>\n                    {\n                        frame.Navigate(typeof(Page), null);\n                    };\n\n                    Window.Current.SizeChanged += (o, e) =>\n                    {\n                        App.LocalSettings.Save($\"{typeof(T).Name}_SavedWindowSize\", e.Size);\n                    };\n\n                    Window.Current.Content = frame;\n                    Window.Current.Activate();\n\n                    t = (T)frame.Content;\n                    newViewId = ApplicationView.GetForCurrentView().Id;\n                });\n\n                var size = App.LocalSettings.Read($\"{typeof(T).Name}_SavedWindowSize\", t.PreferredSize);\n                await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);\n            }\n            else\n            {\n                if (_overlayVisible)\n                    throw new InvalidOperationException(\"Can't show an overlay when one is already visible!\");\n\n                _overlayVisible = true;\n                _systemNavigationManager.BackRequested += OnBackRequested;\n                _mainPage.CustomFrame.Navigate(typeof(T), model, new SuppressNavigationTransitionInfo());\n                _mainPage.ShowCustomOverlay();\n            }\n        }\n\n        internal void CloseOverlay()\n        {\n            if (App.LocalSettings.Read(\"WindowedOverlays\", false))\n            {\n                Window.Current.Close();\n            }\n            else\n            {\n                if (!_overlayVisible)\n                    return;\n\n                _systemNavigationManager.BackRequested -= OnBackRequested;\n                _mainPage.HideCustomOverlay();\n                _overlayVisible = false;\n            }\n        }\n\n        private void OnBackRequested(object sender, BackRequestedEventArgs e)\n        {\n            CloseOverlay();\n        }\n    }\n\n    internal interface IOverlay\n    {\n        object DataContext { get; set; }\n        double MaxWidth { get; set; }\n        double MaxHeight { get; set; }\n\n        Size PreferredSize { get; }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Services/Platform.cs",
    "content": "﻿using Windows.System.Profile;\n\nnamespace Unicord.Universal.Services\n{\n    /// <summary>\n    /// This class contains helper methods for determining the current platform.\n    /// It should only be used for specific behavioural changes that depend on the current device form-factor,\n    /// e.g. to mark the user as idle on mobile to ensure they get push notifications to other platforms\n    /// </summary>\n    internal static class SystemPlatform\n    {\n        private static string _platform;\n        static SystemPlatform()\n        {\n            _platform = AnalyticsInfo.VersionInfo.DeviceFamily;\n        }\n\n        public static bool Desktop\n            => _platform == \"Windows.Desktop\";\n        public static bool Mobile\n            => _platform == \"Windows.Mobile\";\n        public static bool Xbox\n            => _platform == \"Windows.Xbox\";\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Services/SettingsService.cs",
    "content": "﻿using System.Threading.Tasks;\nusing Unicord.Universal.Pages.Settings;\nusing Windows.ApplicationModel.Resources;\n\nnamespace Unicord.Universal.Services\n{\n    internal enum SettingsPageType\n    {\n        Accounts,\n        Messaging, \n        Notifications,\n        Themes,\n        Media,\n        Voice,\n        Security,\n        About\n    }\n\n    internal class SettingsService : BaseService<SettingsService>\n    {\n        private OverlayService _overlayService;\n        //private DiscordPage _discordPage;\n        protected override void Initialise()\n        {\n            _overlayService = OverlayService.GetForCurrentView();\n            //_discordPage = Window.Current.Content.FindChild<DiscordPage>();\n        }\n\n        public async Task OpenAsync(SettingsPageType page = SettingsPageType.Accounts)\n        {\n            var loader = ResourceLoader.GetForViewIndependentUse();\n            if (await WindowsHelloManager.VerifyAsync(Constants.VERIFY_SETTINGS, loader.GetString(\"VerifySettingsDisplayReason\")))\n            {\n                await _overlayService.ShowOverlayAsync<SettingsPage>(page);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Services/SplitPaneService.cs",
    "content": "﻿using Unicord.Universal.Extensions;\nusing Unicord.Universal.Pages;\nusing Windows.UI.Core;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Services\n{\n    public enum ViewMode\n    {\n        SinglePaneLeft,\n        SinglePaneCentre,\n        SinglePaneRight,\n        TwoPaneLeft,\n        TwoPaneRight,\n        ThreePane\n    }\n\n    internal class SplitPaneService : BaseService<SplitPaneService>\n    {\n        // <= this point, show a single pane\n        public const int TWO_PANE_BREAKPOINT = 767;\n        // <= this point, show the two panes\n        public const int THREE_PANE_BREAKPOINT = 1279;\n\n        private DiscordPage _discordPage;\n        private bool _isRightOpen;\n        private bool _isLeftOpen;\n\n        public ViewMode ViewMode { get; private set; } = (ViewMode)(-1);\n\n        protected override void Initialise()\n        {\n            base.Initialise();\n\n            _discordPage = Window.Current.Content.FindChild<DiscordPage>();\n            if (_discordPage != null)\n                Window.Current.SizeChanged += OnSizeChanged;\n        }\n\n        private void OnSizeChanged(object sender, WindowSizeChangedEventArgs e)\n        {\n            AdjustSize();\n        }\n\n        internal void ToggleLeftPane()\n        {\n            if (_isLeftOpen)\n            {\n                CloseLeftPane();\n            }\n            else\n            {\n                OpenLeftPane();\n            }\n\n            AdjustSize();\n        }\n\n        internal void ToggleRightPane<T>(object param) where T : Page\n        {\n            if (_isRightOpen)\n            {\n                if (_discordPage.RightSidebarFrame.SourcePageType == typeof(T))\n                {\n                    CloseRightPane();\n                }\n                else\n                {\n                    _discordPage.RightSidebarFrame.Navigate(typeof(T), param);\n                }\n            }\n            else\n            {\n                OpenRightPane();\n                _discordPage.RightSidebarFrame.Navigate(typeof(T), param);\n            }\n\n            AdjustSize();\n        }\n\n        internal void AdjustSize()\n        {\n            var previousViewMode = ViewMode;\n\n            ViewMode = (Window.Current.Bounds.Width) switch\n            {\n                > THREE_PANE_BREAKPOINT => _isRightOpen ? ViewMode.ThreePane : ViewMode.TwoPaneLeft,\n                > TWO_PANE_BREAKPOINT => _isRightOpen ? ViewMode.TwoPaneRight : ViewMode.TwoPaneLeft,\n                _ => _isRightOpen ? ViewMode.SinglePaneRight : _isLeftOpen && (previousViewMode != ViewMode.TwoPaneLeft) ? ViewMode.SinglePaneLeft : ViewMode.SinglePaneCentre\n            };\n\n            // ensure these sync\n            if (ViewMode == ViewMode.SinglePaneCentre)\n            {\n                _isLeftOpen = false;\n                _isRightOpen = false;\n            }\n\n            if (ViewMode == ViewMode.TwoPaneLeft || ViewMode == ViewMode.SinglePaneLeft)\n            {\n                _isLeftOpen = true;\n                _isRightOpen = false;\n            }\n\n            if (ViewMode == ViewMode.TwoPaneRight || ViewMode == ViewMode.SinglePaneRight)\n            {\n                _isRightOpen = true;\n                _isLeftOpen = false;\n            }\n\n            if (ViewMode == ViewMode.ThreePane)\n            {\n                _isLeftOpen = true;\n                _isRightOpen = true;\n            }\n\n            if (_discordPage != null && previousViewMode != ViewMode)\n                _discordPage.SetViewMode(ViewMode);\n        }\n\n        public void CloseAllPanes()\n        {\n            CloseRightPane();\n            CloseLeftPane();\n\n            AdjustSize();\n        }\n\n        private void OpenLeftPane()\n        {\n            _isLeftOpen = true;\n        }\n\n        private void CloseLeftPane()\n        {\n            _isLeftOpen = false;\n        }\n\n        private void OpenRightPane()\n        {\n            _isRightOpen = true;\n        }\n\n        private void CloseRightPane()\n        {\n            _isRightOpen = false;\n        }\n\n        private void OnBackRequested(object sender, BackRequestedEventArgs e)\n        {\n            if (_isRightOpen)\n                CloseRightPane();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Services/SwipeOpenService.cs",
    "content": "﻿using Unicord.Universal.Utilities;\nusing Windows.UI.Xaml;\n\n\nnamespace Unicord.Universal.Services\n{\n    internal class SwipeOpenService : BaseService<SwipeOpenService>\n    {\n        internal SwipeOpenHelper Helper { get; set; }\n\n        protected override void Initialise()\n        {\n            //Helper = Window.Current.Content.FindChild<DiscordPage>()?._helper;\n        }\n\n        public void AddAdditionalElement(UIElement element) => Helper?.AddAdditionalElement(element);\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Services/ThemeService.cs",
    "content": "﻿using Microsoft.Toolkit.Extensions;\nusing Microsoft.Toolkit.Uwp.Helpers;\n\nnamespace Unicord.Universal.Services\n{\n    public enum AppTheme\n    {\n        Performance,\n        Fluent,\n        SunValley,\n        OLED\n    }\n\n    internal class ThemeService : BaseService<ThemeService>\n    {\n        public AppTheme GetTheme()\n        {\n            if (App.LocalSettings.TryRead<int>(\"AppThemeSet\", out var value))\n            {\n                App.LocalSettings.Save(\"AppTheme\", value);\n                App.LocalSettings.Delete(\"AppThemeSet\");\n            }\n\n            if (App.LocalSettings.TryRead<int>(\"AppTheme\", out var theme))\n                return (AppTheme)theme;\n\n            var defaultTheme = GetDefaultAppTheme();\n            App.LocalSettings.Save(\"AppTheme\", (int)defaultTheme);\n\n            return defaultTheme;\n        }\n\n        public AppTheme GetSettingsTheme()\n        {\n            if (App.LocalSettings.TryRead<int>(\"AppThemeSet\", out var value))\n            {\n                return (AppTheme)value;\n            }\n\n            if (App.LocalSettings.TryRead<int>(\"AppTheme\", out var theme))\n                return (AppTheme)theme;\n\n            return GetDefaultAppTheme();\n        }\n\n        public void SetThemeOnRelaunch(AppTheme theme)\n        {\n            App.LocalSettings.Save(\"AppThemeSet\", (int)theme);\n        }\n\n        public AppTheme GetDefaultAppTheme()\n        {\n            var osBuild = SystemInformation.Instance.OperatingSystemVersion.Build;\n            if (osBuild >= 22000)\n                return AppTheme.SunValley;\n\n            if (SystemInformation.Instance.DeviceFamily == \"Windows.Mobile\")\n                return AppTheme.Performance;\n\n            return AppTheme.Fluent;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Services/Windowing/ApplicationViewWindowingService.cs",
    "content": "﻿using System;\r\nusing System.Collections.Concurrent;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing DSharpPlus.Entities;\r\nusing Microsoft.AppCenter.Analytics;\r\nusing Microsoft.Toolkit.Uwp.Helpers;\r\nusing Unicord.Universal.Models;\r\nusing Windows.ApplicationModel.Core;\r\nusing Windows.Foundation.Metadata;\r\nusing Windows.UI;\r\nusing Windows.UI.Core;\r\nusing Windows.UI.ViewManagement;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Services.Windowing\r\n{\r\n    class ApplicationViewWindowingService : WindowingService\r\n    {\r\n        class ApplicationViewWindowHandle : WindowHandle\r\n        {\r\n            public int Id { get; set; }\r\n        }\r\n\r\n        private int _mainWindowId;\r\n        private ConcurrentDictionary<int, ApplicationViewWindowHandle> _windowHandles\r\n             = new ConcurrentDictionary<int, ApplicationViewWindowHandle>();\r\n        private ConcurrentDictionary<int, ulong> _windowChannelDictionary\r\n             = new ConcurrentDictionary<int, ulong>();\r\n\r\n        private ConcurrentDictionary<int, bool> ActivatedStates\r\n            = new ConcurrentDictionary<int, bool>();\r\n\r\n        public override bool IsSupported => true; // todo: work this out\r\n\r\n        public override WindowHandle CurrentWindow\r\n        {\r\n            get\r\n            {\r\n                return GetOrCreateHandleForId(ApplicationView.GetForCurrentView().Id);\r\n            }\r\n        }\r\n\r\n        public override void SetMainWindow(UIElement reference)\r\n        {\r\n            _mainWindowId = ApplicationView.GetForCurrentView().Id;\r\n\r\n            CoreWindow.GetForCurrentThread().Activated += this.OnWindowActivationChanged;\r\n        }\r\n\r\n        public override WindowHandle GetHandle(UIElement reference)\r\n        {\r\n            if (!reference.Dispatcher.HasThreadAccess)\r\n                throw new InvalidOperationException(\"Can't get handle for another thread!\");\r\n\r\n            return GetOrCreateHandleForId(ApplicationView.GetForCurrentView().Id);\r\n        }\r\n\r\n        public override bool IsMainWindow(WindowHandle handle)\r\n        {\r\n            if (handle is ApplicationViewWindowHandle h)\r\n                return h.Id == _mainWindowId;\r\n\r\n            throw new InvalidOperationException(\"Invalid WindowHandle!\");\r\n        }\r\n\r\n        public override bool IsCompactOverlay(WindowHandle handle)\r\n        {\r\n            return ApplicationView.GetForCurrentView().ViewMode == ApplicationViewMode.CompactOverlay;\r\n        }\r\n\r\n        public override void SetWindowChannel(WindowHandle handle, ulong id)\r\n        {\r\n            if (handle is ApplicationViewWindowHandle h)\r\n                _windowChannelDictionary[h.Id] = id;\r\n            else\r\n                throw new InvalidOperationException(\"Invalid WindowHandle!\");\r\n        }\r\n\r\n        public override bool IsChannelVisible(ulong id)\r\n        {\r\n            return _windowChannelDictionary.Any(c => c.Value == id);\r\n        }\r\n\r\n        public override bool IsActive(WindowHandle handle)\r\n        {\r\n            return ActivatedStates.TryGetValue(((ApplicationViewWindowHandle)handle).Id, out var active) && active;\r\n        }\r\n\r\n        public override async Task<WindowHandle> OpenChannelWindowAsync(DiscordChannel channel, bool compactOverlay, WindowHandle currentWindow = null)\r\n        {\r\n            if (!IsSupported)\r\n                return null;\r\n\r\n            if (await ActivateOtherWindowAsync(channel, currentWindow))\r\n                return null;\r\n\r\n            Analytics.TrackEvent(\"ApplicationViewWindowingService_OpenChannelWindowAsync\");\r\n\r\n            if (currentWindow is ApplicationViewWindowHandle handle)\r\n                _windowChannelDictionary.TryRemove(handle.Id, out _);\r\n\r\n            var viewId = 0;\r\n            var coreView = CoreApplication.CreateNewView();\r\n            await coreView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>\r\n            {\r\n                var coreWindow = coreView.CoreWindow;\r\n                var window = Window.Current;\r\n\r\n                coreWindow.Activated += OnWindowActivationChanged;\r\n\r\n                var frame = new Frame();\r\n                window.Content = frame;\r\n                window.Activate();\r\n\r\n                frame.Navigate(typeof(MainPage), new MainPageArgs() { ChannelId = channel.Id, FullFrame = true });\r\n\r\n                var applicationView = ApplicationView.GetForCurrentView();\r\n                viewId = applicationView.Id;\r\n\r\n                void OnConsolidated(ApplicationView sender, ApplicationViewConsolidatedEventArgs args)\r\n                {\r\n                    Analytics.TrackEvent(\"WindowManager_WindowConsolidated\");\r\n\r\n                    if (sender.Id == viewId && sender.Id != _mainWindowId)\r\n                    {\r\n                        if (args.IsAppInitiated)\r\n                            return;\r\n\r\n                        sender.Consolidated -= OnConsolidated;\r\n                        _windowChannelDictionary.TryRemove(sender.Id, out _);\r\n                    }\r\n                }\r\n\r\n                applicationView.Consolidated += OnConsolidated;\r\n            });\r\n\r\n            if (await ApplicationViewSwitcher.TryShowAsViewModeAsync(viewId, compactOverlay ? ApplicationViewMode.CompactOverlay : ApplicationViewMode.Default))\r\n                return GetOrCreateHandleForId(viewId);\r\n\r\n            return null;\r\n        }\r\n\r\n        private void OnWindowActivationChanged(CoreWindow sender, WindowActivatedEventArgs args)\r\n        {\r\n            var id = ApplicationView.GetApplicationViewIdForWindow(sender);\r\n            ActivatedStates[id] = args.WindowActivationState != CoreWindowActivationState.Deactivated;\r\n        }\r\n\r\n        public override async Task<bool> ActivateOtherWindowAsync(DiscordChannel channel, WindowHandle currentWindow = null)\r\n        {\r\n            if (!IsSupported)\r\n                return false;\r\n\r\n            var handle = currentWindow as ApplicationViewWindowHandle;\r\n            try\r\n            {\r\n                var window = _windowChannelDictionary.FirstOrDefault(w => w.Value == channel.Id).Key;\r\n                if (window != 0 && window != ApplicationView.GetForCurrentView().Id && window != handle?.Id)\r\n                {\r\n                    await ApplicationViewSwitcher.SwitchAsync(window);\r\n                    return true;\r\n                }\r\n            }\r\n            catch (Exception)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        public override async Task CloseAllWindowsAsync()\r\n        {\r\n            _windowChannelDictionary.Clear();\r\n            _windowHandles.Clear();\r\n            _windowHandles[_mainWindowId] = new ApplicationViewWindowHandle() { Id = _mainWindowId };\r\n\r\n            var views = CoreApplication.Views.ToList();\r\n            foreach (var view in views)\r\n            {\r\n                await view.ExecuteOnUIThreadAsync(async () =>\r\n                {\r\n                    if (view.IsMain) return;\r\n                    await ApplicationView.GetForCurrentView().TryConsolidateAsync();\r\n                });\r\n            }\r\n        }\r\n\r\n        private List<FrameworkElement> _handledElements\r\n            = new List<FrameworkElement>();\r\n\r\n        public override void HandleTitleBarForWindow(FrameworkElement titleBar, FrameworkElement contentRoot)\r\n        {\r\n            lock (_handledElements)\r\n            {\r\n                //if (_handledElements.Contains(titleBar))\r\n                //    return;\r\n\r\n                var applicationView = ApplicationView.GetForCurrentView();\r\n                var coreApplicationView = CoreApplication.GetCurrentView();\r\n\r\n                if (ApiInformation.IsTypePresent(\"Windows.UI.ViewManagement.StatusBar\"))\r\n                {\r\n                    var statusBar = StatusBar.GetForCurrentView();\r\n                    if (statusBar != null)\r\n                    {\r\n                        if (contentRoot != null)\r\n                        {\r\n                            var margin = contentRoot.Margin;\r\n                            void OnApplicationViewBoundsChanged(ApplicationView sender, object args)\r\n                            {\r\n                                var visibleBounds = sender.VisibleBounds;\r\n                                var bounds = coreApplicationView.CoreWindow.Bounds;\r\n                                var occludedHeight = bounds.Height - visibleBounds.Height - statusBar.OccludedRect.Height;\r\n                                contentRoot.Margin = new Thickness(margin.Left, margin.Top, margin.Right, occludedHeight);\r\n                            }\r\n\r\n                            applicationView.VisibleBoundsChanged += OnApplicationViewBoundsChanged;\r\n                            OnApplicationViewBoundsChanged(applicationView, null);\r\n                        }\r\n\r\n                        statusBar.BackgroundOpacity = 0;\r\n                        statusBar.ForegroundColor = (Color?)Application.Current.Resources[\"SystemChromeAltLowColor\"];\r\n\r\n                        if (titleBar != null)\r\n                        {\r\n                            titleBar.Height = statusBar.OccludedRect.Height;\r\n                        }\r\n\r\n                        applicationView.SetDesiredBoundsMode(ApplicationViewBoundsMode.UseCoreWindow);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    var coreTitleBar = coreApplicationView.TitleBar;\r\n                    coreTitleBar.ExtendViewIntoTitleBar = true;\r\n\r\n                    var baseTitlebar = applicationView.TitleBar;\r\n                    baseTitlebar.ButtonBackgroundColor = Colors.Transparent;\r\n                    baseTitlebar.ButtonInactiveBackgroundColor = Colors.Transparent;\r\n                    baseTitlebar.ButtonForegroundColor = (Color?)Application.Current.Resources[\"SystemChromeAltLowColor\"];\r\n                    baseTitlebar.ButtonInactiveForegroundColor = (Color?)Application.Current.Resources[\"SystemChromeAltLowColor\"];\r\n\r\n                    if (titleBar != null)\r\n                    {\r\n                        var originalMargin = titleBar.Margin;\r\n\r\n                        // this method captures \"titleBar\" meaning the GC might not be able to collect it. \r\n                        void UpdateTitleBarLayout(CoreApplicationViewTitleBar sender, object ev)\r\n                        {\r\n                            titleBar.Height = sender.Height;\r\n                            titleBar.Margin = new Thickness(\r\n                                Math.Max(sender.SystemOverlayLeftInset, originalMargin.Left),\r\n                                originalMargin.Top,\r\n                                Math.Max(sender.SystemOverlayRightInset, originalMargin.Right),\r\n                                originalMargin.Bottom);\r\n                        }\r\n\r\n                        // i *believe* this handles it? not 100% sure\r\n                        void ElementUnloaded(object sender, RoutedEventArgs e)\r\n                        {\r\n                            coreTitleBar.LayoutMetricsChanged -= UpdateTitleBarLayout;\r\n                            (sender as FrameworkElement).Unloaded -= ElementUnloaded;\r\n\r\n                            lock (_handledElements)\r\n                            {\r\n                                _handledElements.Remove(sender as FrameworkElement);\r\n                            }\r\n                        }\r\n\r\n                        UpdateTitleBarLayout(coreTitleBar, null);\r\n                        coreTitleBar.LayoutMetricsChanged += UpdateTitleBarLayout;\r\n                        titleBar.Unloaded += ElementUnloaded;\r\n                        titleBar.Visibility = Visibility.Visible;\r\n\r\n                        if (contentRoot != null)\r\n                            Window.Current.SetTitleBar(titleBar);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        public override void HandleTitleBarForWindowControls(FrameworkElement cotainerElement, Grid titleBarElement, params FrameworkElement[] controls)\r\n        {\r\n            lock (_handledElements)\r\n            {\r\n                //if (_handledElements.Contains(titleBar))\r\n                //    return;\r\n\r\n                var applicationView = ApplicationView.GetForCurrentView();\r\n                var coreApplicationView = CoreApplication.GetCurrentView();\r\n\r\n                if (ApiInformation.IsTypePresent(\"Windows.UI.ViewManagement.StatusBar\"))\r\n                {\r\n                    return; // TODO: this\r\n                }\r\n                else\r\n                {\r\n                    var coreTitleBar = coreApplicationView.TitleBar;\r\n                    coreTitleBar.ExtendViewIntoTitleBar = true;\r\n\r\n                    var baseTitlebar = applicationView.TitleBar;\r\n                    baseTitlebar.ButtonBackgroundColor = Colors.Transparent;\r\n                    baseTitlebar.ButtonInactiveBackgroundColor = Colors.Transparent;\r\n                    baseTitlebar.ButtonForegroundColor = (Color?)Application.Current.Resources[\"SystemChromeAltLowColor\"];\r\n                    baseTitlebar.ButtonInactiveForegroundColor = (Color?)Application.Current.Resources[\"SystemChromeAltLowColor\"];\r\n\r\n                    if (titleBarElement != null)\r\n                    {\r\n                        var originalMargin = titleBarElement.Padding;\r\n\r\n                        // this method captures \"titleBar\" meaning the GC might not be able to collect it. \r\n                        void UpdateTitleBarLayout(CoreApplicationViewTitleBar sender, object ev)\r\n                        {\r\n                            var overlayLeftInset = sender.IsVisible ? sender.SystemOverlayLeftInset : 0;\r\n                            var overlayRightInset = sender.IsVisible ? sender.SystemOverlayRightInset : 0;\r\n\r\n                            titleBarElement.Padding = new Thickness(\r\n                                Math.Max(overlayLeftInset, originalMargin.Left),\r\n                                originalMargin.Top,\r\n                                Math.Max(overlayRightInset, originalMargin.Right),\r\n                                originalMargin.Bottom);\r\n\r\n                            Logger.Log($\"{sender.SystemOverlayLeftInset} {sender.SystemOverlayRightInset}\");\r\n\r\n                            foreach (var control in controls)\r\n                            {\r\n                                control.Margin = new Thickness(\r\n                                    overlayLeftInset,\r\n                                    originalMargin.Top,\r\n                                    overlayRightInset,\r\n                                    originalMargin.Bottom);\r\n                            }\r\n                        }\r\n\r\n                        // i *believe* this handles it? not 100% sure\r\n                        void ElementUnloaded(object sender, RoutedEventArgs e)\r\n                        {\r\n                            coreTitleBar.LayoutMetricsChanged -= UpdateTitleBarLayout;\r\n                            (sender as FrameworkElement).Unloaded -= ElementUnloaded;\r\n\r\n                            lock (_handledElements)\r\n                            {\r\n                                _handledElements.Remove(sender as FrameworkElement);\r\n                            }\r\n                        }\r\n\r\n                        UpdateTitleBarLayout(coreTitleBar, null);\r\n                        coreTitleBar.LayoutMetricsChanged += UpdateTitleBarLayout;\r\n                        coreTitleBar.IsVisibleChanged += UpdateTitleBarLayout;\r\n                        titleBarElement.Unloaded += ElementUnloaded;\r\n                        Window.Current.SetTitleBar(titleBarElement);\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        public override void HandleTitleBarForControl(FrameworkElement element, bool margin = false)\r\n        {\r\n            lock (_handledElements)\r\n            {\r\n                if (_handledElements.Contains(element))\r\n                    return;\r\n\r\n                var applicationView = ApplicationView.GetForCurrentView();\r\n                var coreApplicationView = CoreApplication.GetCurrentView();\r\n\r\n                if (ApiInformation.IsTypePresent(\"Windows.UI.ViewManagement.StatusBar\"))\r\n                {\r\n                    var statusBar = StatusBar.GetForCurrentView();\r\n                    if (statusBar != null)\r\n                    {\r\n                        var rect = statusBar.OccludedRect;\r\n                        var padding = new Thickness(0, rect.Height, 0, 0);\r\n                        ApplyPadding(element, margin, padding);\r\n                    }\r\n                }\r\n                else\r\n                {\r\n                    var coreTitleBar = coreApplicationView.TitleBar;\r\n\r\n                    // this method captures \"element\" meaning the GC might not be able to collect it. \r\n                    void UpdateTitleBarLayout(CoreApplicationViewTitleBar titleBar, object ev)\r\n                    {\r\n                        var padding = new Thickness(0, titleBar.Height, 0, 0);\r\n                        ApplyPadding(element, margin, padding);\r\n                    }\r\n\r\n                    // i *believe* this handles it? not 100% sure\r\n                    void ElementUnloaded(object sender, RoutedEventArgs e)\r\n                    {\r\n                        coreTitleBar.LayoutMetricsChanged -= UpdateTitleBarLayout;\r\n                        (sender as FrameworkElement).Unloaded -= ElementUnloaded;\r\n\r\n                        lock (_handledElements)\r\n                        {\r\n                            _handledElements.Remove(sender as FrameworkElement);\r\n                        }\r\n\r\n                        element = null;\r\n                    }\r\n\r\n                    coreTitleBar.LayoutMetricsChanged += UpdateTitleBarLayout;\r\n                    element.Unloaded += ElementUnloaded;\r\n\r\n                    UpdateTitleBarLayout(coreTitleBar, null);\r\n                }\r\n            }\r\n        }\r\n\r\n        private void ApplyPadding(FrameworkElement element, bool margin, Thickness padding)\r\n        {\r\n            if (margin)\r\n            {\r\n                element.Margin = padding;\r\n            }\r\n            else\r\n            {\r\n                if (element is Grid grid)\r\n                    grid.Padding = padding;\r\n                if (element is Control control)\r\n                    control.Padding = padding;\r\n            }\r\n        }\r\n\r\n        private WindowHandle GetOrCreateHandleForId(int id)\r\n            => _windowHandles.TryGetValue(id, out var handle) ? handle : _windowHandles[id] = new ApplicationViewWindowHandle() { Id = id };\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Services/Windowing/WindowingService.cs",
    "content": "﻿using System;\r\nusing System.Threading.Tasks;\r\nusing DSharpPlus.Entities;\r\nusing Unicord.Universal.Services.Windowing;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\n\r\nnamespace Unicord.Universal.Services\r\n{\r\n    /// <summary>\r\n    /// An opaque class to represent a Window\r\n    /// </summary>\r\n    public abstract class WindowHandle { }\r\n\r\n    public abstract class WindowingService\r\n    {\r\n        private static Lazy<WindowingService> _windowingServiceLazy = new Lazy<WindowingService>(() => new ApplicationViewWindowingService(), true);\r\n       \r\n        public static WindowingService Current\r\n            => _windowingServiceLazy.Value;\r\n\r\n        public abstract bool IsSupported { get; }\r\n\r\n        public abstract void SetMainWindow(UIElement reference);\r\n\r\n        public abstract WindowHandle GetHandle(UIElement reference);\r\n\r\n        public abstract WindowHandle CurrentWindow { get; }\r\n\r\n        public abstract bool IsMainWindow(WindowHandle handle);\r\n        public abstract bool IsCompactOverlay(WindowHandle handle);\r\n\r\n        public abstract void SetWindowChannel(WindowHandle handle, ulong id);\r\n\r\n        public abstract bool IsChannelVisible(ulong id);\r\n        public abstract bool IsActive(WindowHandle window);\r\n\r\n        public abstract Task<bool> ActivateOtherWindowAsync(DiscordChannel channel, WindowHandle currentWindow = null);\r\n\r\n        public abstract Task<WindowHandle> OpenChannelWindowAsync(DiscordChannel channel, bool compactOverlay, WindowHandle currentWindow = null);\r\n\r\n        public abstract Task CloseAllWindowsAsync();\r\n\r\n        public abstract void HandleTitleBarForWindow(FrameworkElement titleBar, FrameworkElement contentRoot);\r\n        public abstract void HandleTitleBarForControl(FrameworkElement element, bool margin = false);\r\n        public abstract void HandleTitleBarForWindowControls(FrameworkElement cotainerElement, Grid titleBarElement, params FrameworkElement[] controls);\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Themes/Colours.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Resources\"\n    xmlns:media=\"using:Microsoft.UI.Xaml.Media\">\n    <ResourceDictionary.ThemeDictionaries>\n        <ResourceDictionary x:Key=\"Light\">\n            <Color x:Key=\"BackgroundPrimaryColour\">#FFF5F5F5</Color>\n            <Color x:Key=\"BackgroundSecondaryColour\">#FFF0F0F0</Color>\n            <Color x:Key=\"BackgroundTertiaryColour\">#FFEEEEEE</Color>\n            <SolidColorBrush x:Key=\"ErrorTextForegroundBrush\" Color=\"#FFC50500\"/>\n            <LinearGradientBrush x:Key=\"BackgroundGradientBrush\" StartPoint=\"0.5,0\" EndPoint=\"0.5,1\">\n                <GradientStop Color=\"#00FFFFFF\" Offset=\"0.0\" />\n                <GradientStop Color=\"#00FFFFFF\" Offset=\"0.50\" />\n                <GradientStop Color=\"#40FFFFFF\" Offset=\"0.70\" />\n                <GradientStop Color=\"#C0FFFFFF\" Offset=\"1\" />\n            </LinearGradientBrush>\n        </ResourceDictionary>\n        <ResourceDictionary x:Key=\"Dark\">\n            <Color x:Key=\"BackgroundPrimaryColour\">#FF0F0F0F</Color>\n            <Color x:Key=\"BackgroundSecondaryColour\">#FF181818</Color>\n            <Color x:Key=\"BackgroundTertiaryColour\">#FF1C1C1C</Color>\n            <!-- This is Yellow for a combination of contrast + colourblindness reasons -->\n            <SolidColorBrush x:Key=\"ErrorTextForegroundBrush\" Color=\"#FFFFF000\"/>\n            <LinearGradientBrush x:Key=\"BackgroundGradientBrush\" StartPoint=\"0.5,0\" EndPoint=\"0.5,1\">\n                <GradientStop Color=\"#00000000\" Offset=\"0.0\" />\n                <GradientStop Color=\"#00000000\" Offset=\"0.65\" />\n                <GradientStop Color=\"#C0000000\" Offset=\"1\" />\n            </LinearGradientBrush>\n        </ResourceDictionary>\n    </ResourceDictionary.ThemeDictionaries>\n\n    <media:AcrylicBrush x:Key=\"SidebarPrimaryAcrylicWindowBrush\" \n                        BackgroundSource=\"HostBackdrop\" \n                        TintOpacity=\"0.60\" \n                        FallbackColor=\"{ThemeResource BackgroundPrimaryColour}\" \n                        TintColor=\"{ThemeResource BackgroundPrimaryColour}\" />\n\n    <media:AcrylicBrush x:Key=\"SidebarPrimaryAcrylicElementBrush\" \n                        BackgroundSource=\"Backdrop\" \n                        TintOpacity=\"0.60\" \n                        FallbackColor=\"{ThemeResource BackgroundPrimaryColour}\" \n                        TintColor=\"{ThemeResource BackgroundPrimaryColour}\" />\n\n    <media:AcrylicBrush x:Key=\"SidebarSecondaryAcrylicWindowBrush\" \n                        BackgroundSource=\"HostBackdrop\" \n                        TintOpacity=\"0.80\" \n                        FallbackColor=\"{ThemeResource BackgroundSecondaryColour}\" \n                        TintColor=\"{ThemeResource BackgroundSecondaryColour}\" />\n\n    <media:AcrylicBrush x:Key=\"SidebarSecondaryAcrylicElementBrush\" \n                        BackgroundSource=\"Backdrop\" \n                        TintOpacity=\"0.80\" \n                        FallbackColor=\"{ThemeResource BackgroundSecondaryColour}\" \n                        TintColor=\"{ThemeResource BackgroundSecondaryColour}\" />\n\n    <SolidColorBrush x:Key=\"BackgroundPrimaryBrush\" Color=\"{ThemeResource BackgroundPrimaryColour}\"/>\n    <SolidColorBrush x:Key=\"BackgroundSecondaryBrush\" Color=\"{ThemeResource BackgroundSecondaryColour}\"/>\n    <SolidColorBrush x:Key=\"BackgroundTertiaryBrush\" Color=\"{ThemeResource BackgroundTertiaryColour}\"/>\n    <SolidColorBrush x:Key=\"MainBackgroundBrush\" Color=\"{ThemeResource BackgroundTertiaryColour}\"/>\n\n    <Color x:Key=\"SuccessDark1Colour\">#FF15bc3c</Color>\n    <Color x:Key=\"SuccessColour\">#FF28A745</Color>\n    <Color x:Key=\"SuccessLight1Colour\">#FF53d571</Color>\n    <Color x:Key=\"SuccessForegroundColor\">#FFFFFFFF</Color>\n    \n    <Color x:Key=\"DangerDark1Colour\">#FFD22435</Color>\n    <Color x:Key=\"DangerColour\">#FFDC3545</Color>\n    <Color x:Key=\"DangerLight1Colour\">#FFD45562</Color>\n    <Color x:Key=\"DangerForegroundColor\">#FFFFFFFF</Color>\n    \n    <!-- src: https://discordapp.com/branding -->\n    <Color x:Key=\"DiscordBlurpleColour\">#FF7289DA</Color>\n    <Color x:Key=\"DiscordBlurpleLight1Colour\">#FF8699DF</Color>\n    <Color x:Key=\"DiscordBlurpleDark1Colour\">#FF4A67Cf</Color>\n\n    <media:AcrylicBrush x:Key=\"SpoilerAcrylicBrush\"\n                        BackgroundSource=\"Backdrop\"\n                        TintOpacity=\"0\"\n                        FallbackColor=\"{ThemeResource SystemChromeMediumColor}\"/>\n\n    <media:AcrylicBrush x:Key=\"OverlayBackdrop\" TintColor=\"{ThemeResource SystemAltHighColor}\" TintOpacity=\"0.33\" FallbackColor=\"#80000000\"/>\n\n    <SolidColorBrush x:Key=\"MentionBrush\" Color=\"{ThemeResource SystemAccentColor}\" Opacity=\"0.1\"/>\n    <SolidColorBrush x:Key=\"TransparentBrush\" Color=\"Transparent\"/>\n\n</ResourceDictionary>\n"
  },
  {
    "path": "Unicord.Universal/Themes/Controls/Channels.xaml",
    "content": "﻿<ResourceDictionary\r\n    x:Class=\"Unicord.Universal.Resources.Controls.Channels\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Controls.Channels\" \r\n    xmlns:controls=\"using:Unicord.Universal.Controls\" \r\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\" \r\n    xmlns:users=\"using:Unicord.Universal.Controls.Users\"\r\n    xmlns:presence=\"using:Unicord.Universal.Controls.Presence\"\r\n    xmlns:emoji=\"using:Unicord.Universal.Controls.Emoji\" \r\n    xmlns:channels=\"using:Unicord.Universal.Models.Channels\" \r\n    xmlns:converters=\"using:Unicord.Universal.Converters\">\r\n\r\n    <Style TargetType=\"local:ChannelIconControl\" >\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:ChannelIconControl\">\r\n                    <Border Background=\"{ThemeResource PersonPictureEllipseFillThemeBrush}\" \r\n                            Padding=\"4,2\"\r\n                            CornerRadius=\"12\"\r\n                            BorderThickness=\"{TemplateBinding BorderThickness}\">\r\n                        <StackPanel Orientation=\"Horizontal\">\r\n\r\n                            <Viewbox Width=\"16\" Height=\"16\" Margin=\"0,2\">\r\n                                <TextBlock Text=\"{Binding Channel, Converter={StaticResource ChannelSymbolConverter}}\" \r\n                                       FontFamily=\"{StaticResource FluentSystemIcons}\"\r\n                                       FontSize=\"14\"/>\r\n                            </Viewbox>\r\n\r\n                            <emoji:EmojiControl Emoji=\"{Binding Emoji}\" \r\n                                                Size=\"20\" \r\n                                                Visibility=\"{Binding Emoji, Converter={StaticResource HideOnNullConverter}}\" \r\n                                                VerticalAlignment=\"Center\"\r\n                                                HorizontalAlignment=\"Center\"\r\n                                                Margin=\"4,0,0,0\"/>\r\n\r\n                        </StackPanel>\r\n                    </Border>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <DataTemplate x:Name=\"GroupChannelListContentTemplate\" x:DataType=\"channels:DmChannelListViewModel\">\r\n        <Grid ContextFlyout=\"{StaticResource ChannelContextFlyout}\"\r\n              VerticalAlignment=\"Stretch\" \r\n              Background=\"Transparent\" \r\n              Padding=\"0,8\">\r\n            <Grid Margin=\"0,0,8,0\" Opacity=\"{x:Bind MutedOpacity}\">\r\n                <ToolTipService.ToolTip>\r\n                    <ToolTip IsEnabled=\"{x:Bind HasTopic}\">\r\n                        <controls:MarkdownTextBlock Text=\"{x:Bind Topic}\" FontSize=\"{ThemeResource ToolTipContentThemeFontSize}\" Channel=\"{x:Bind Channel}\" />\r\n                    </ToolTip>\r\n                </ToolTipService.ToolTip>\r\n\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"auto\"/>\r\n                    <ColumnDefinition Width=\"*\"/>\r\n                    <ColumnDefinition Width=\"Auto\" MinWidth=\"16\"/>\r\n                </Grid.ColumnDefinitions>\r\n\r\n                <lib:PersonPicture x:Name=\"Avatar\"\r\n                                   x:Phase=\"1\"\r\n                                   x:Load=\"True\" \r\n                                   Margin=\"2,0,0,0\" \r\n                                   Width=\"32\" \r\n                                   Height=\"32\" \r\n                                   DisplayName=\"{x:Bind Name}\">\r\n                    <lib:PersonPicture.ProfilePicture>\r\n                        <BitmapImage UriSource=\"{x:Bind IconUrl}\" DecodePixelWidth=\"32\" DecodePixelHeight=\"32\" DecodePixelType=\"Logical\"/>\r\n                    </lib:PersonPicture.ProfilePicture>\r\n                </lib:PersonPicture>\r\n\r\n                <TextBlock Text=\"{x:Bind Name}\" Grid.Column=\"1\" VerticalAlignment=\"Center\" Margin=\"8,0\" TextTrimming=\"CharacterEllipsis\"/>\r\n\r\n                <lib:InfoBadge x:Name=\"unreadIndicator\" \r\n                               x:Load=\"{x:Bind ShouldShowNotificaitonIndicator, Mode=OneWay}\"\r\n                               x:Phase=\"2\"\r\n                               Grid.Column=\"2\" \r\n                               HorizontalAlignment=\"Center\" \r\n                               VerticalAlignment=\"Center\"\r\n                               MinWidth=\"8\"\r\n                               MinHeight=\"8\"\r\n                               Margin=\"0\"\r\n                               Value=\"{x:Bind NullableMentionCount.Value, Mode=OneWay}\" />\r\n            </Grid>\r\n        </Grid>\r\n    </DataTemplate>\r\n    \r\n    <DataTemplate x:Name=\"DirectMessageChannelListContentTemplate\" x:DataType=\"channels:DmChannelListViewModel\">\r\n        <Grid ContextFlyout=\"{StaticResource ChannelContextFlyout}\"\r\n              VerticalAlignment=\"Stretch\" \r\n              Background=\"Transparent\" \r\n              Padding=\"0,8\">\r\n            <Grid Margin=\"0,0,8,0\" Opacity=\"{x:Bind MutedOpacity}\">\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"auto\"/>\r\n                    <ColumnDefinition Width=\"*\"/>\r\n                    <ColumnDefinition Width=\"Auto\" MinWidth=\"16\"/>\r\n                </Grid.ColumnDefinitions>\r\n\r\n                <users:AvatarControl x:Name=\"Avatar\"\r\n                                  x:Phase=\"1\"\r\n                                  x:Load=\"True\"\r\n                                  Margin=\"2,0,0,0\"\r\n                                  Style=\"{ThemeResource SmallAvatarWithPresenceStyle}\" \r\n                                  Width=\"32\" \r\n                                  Height=\"32\"\r\n                                  Source=\"{x:Bind IconUrl}\" \r\n                                  Presence=\"{x:Bind Recipient.Presence}\" />\r\n\r\n                <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Center\" Margin=\"8,0\">\r\n                    <TextBlock Text=\"{Binding Name}\" TextTrimming=\"CharacterEllipsis\"/>\r\n                    <presence:InlinePresenceControl x:Name=\"InlinePresence\" x:Load=\"{x:Bind converters:Static.NotNull(Recipient.Presence)}\" x:Phase=\"3\" Presence=\"{Binding Recipient.Presence, Mode=OneWay}\" />\r\n                </StackPanel>\r\n\r\n                <lib:InfoBadge x:Name=\"unreadIndicator\" \r\n                            x:Load=\"{x:Bind ShouldShowNotificaitonIndicator, Mode=OneWay}\"\r\n                            x:Phase=\"3\"\r\n                            Grid.Column=\"2\" \r\n                            HorizontalAlignment=\"Center\" \r\n                            VerticalAlignment=\"Center\"\r\n                            MinWidth=\"8\"\r\n                            MinHeight=\"8\"\r\n                            Margin=\"0\"\r\n                            Value=\"{x:Bind NullableMentionCount.Value, Mode=OneWay}\" />\r\n            </Grid>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"ThreadChannelListContentTemplate\" x:DataType=\"channels:ChannelListViewModel\">\r\n        <Grid ContextFlyout=\"{StaticResource ChannelContextFlyout}\"\r\n              VerticalAlignment=\"Stretch\" \r\n              Background=\"Transparent\" \r\n              Padding=\"0,4\">\r\n            <Grid Margin=\"4,0,16,0\" Opacity=\"{x:Bind MutedOpacity}\">\r\n                <ToolTipService.ToolTip>\r\n                    <ToolTip IsEnabled=\"{x:Bind HasTopic}\">\r\n                        <controls:MarkdownTextBlock Text=\"{x:Bind Topic}\" FontSize=\"{ThemeResource ToolTipContentThemeFontSize}\" Channel=\"{x:Bind Channel}\" />\r\n                    </ToolTip>\r\n                </ToolTipService.ToolTip>\r\n\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"auto\"/>\r\n                    <ColumnDefinition Width=\"*\"/>\r\n                    <ColumnDefinition Width=\"Auto\" MinWidth=\"16\"/>\r\n                </Grid.ColumnDefinitions>\r\n\r\n                <TextBlock x:Name=\"Icon\"\r\n                           FontSize=\"16\"\r\n                           RenderTransformOrigin=\"0.5,0.5\"\r\n                           VerticalAlignment=\"Center\" \r\n                           Margin=\"16,0,4,0\" \r\n                           FontFamily=\"{StaticResource FluentSystemIcons}\"\r\n                           Text=\"&#xF176;\">\r\n                    <TextBlock.RenderTransform>\r\n                        <RotateTransform Angle=\"180\"/>\r\n                    </TextBlock.RenderTransform>\r\n                </TextBlock>\r\n\r\n                <TextBlock Text=\"{x:Bind Name}\"\r\n                           Grid.Column=\"1\" \r\n                           VerticalAlignment=\"Center\" \r\n                           HorizontalAlignment=\"Stretch\" \r\n                           TextWrapping=\"NoWrap\" \r\n                           Margin=\"0,0,4,0\" />\r\n\r\n                <lib:InfoBadge x:Name=\"unreadIndicator\" \r\n                               x:Load=\"{x:Bind ShouldShowNotificaitonIndicator, Mode=OneWay}\"\r\n                               Grid.Column=\"2\" \r\n                               HorizontalAlignment=\"Center\" \r\n                               VerticalAlignment=\"Center\"\r\n                               MinWidth=\"8\"\r\n                               MinHeight=\"8\"\r\n                               Margin=\"0\"\r\n                               Value=\"{x:Bind NullableMentionCount.Value, Mode=OneWay}\" />\r\n            </Grid>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"ChannelListContentTemplate\" x:DataType=\"channels:ChannelListViewModel\">\r\n        <Grid ContextFlyout=\"{StaticResource ChannelContextFlyout}\"\r\n              VerticalAlignment=\"Stretch\" \r\n              Background=\"Transparent\" \r\n              Padding=\"0,8\">\r\n            <Grid Margin=\"0,0,16,0\" Opacity=\"{x:Bind MutedOpacity}\">\r\n                <ToolTipService.ToolTip>\r\n                    <ToolTip IsEnabled=\"{x:Bind HasTopic}\">\r\n                        <controls:MarkdownTextBlock Text=\"{x:Bind Topic}\" FontSize=\"{ThemeResource ToolTipContentThemeFontSize}\" Channel=\"{x:Bind Channel}\" />\r\n                    </ToolTip>\r\n                </ToolTipService.ToolTip>\r\n\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"auto\"/>\r\n                    <ColumnDefinition Width=\"*\"/>\r\n                    <ColumnDefinition Width=\"Auto\" MinWidth=\"16\"/>\r\n                </Grid.ColumnDefinitions>\r\n\r\n                <TextBlock x:Name=\"Icon\"\r\n                           FontSize=\"16\"\r\n                           VerticalAlignment=\"Center\" \r\n                           Margin=\"16,0,8,0\"\r\n                           FontFamily=\"{StaticResource FluentSystemIcons}\" \r\n                           Text=\"{Binding Converter={StaticResource ChannelSymbolConverter}}\"/>\r\n\r\n                <TextBlock Text=\"{x:Bind Name}\" Grid.Column=\"1\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Stretch\" TextWrapping=\"NoWrap\" Margin=\"0,0,4,0\" />\r\n\r\n                <lib:InfoBadge x:Name=\"unreadIndicator\" \r\n                               x:Load=\"{x:Bind ShouldShowNotificaitonIndicator, Mode=OneWay}\"\r\n                               x:Phase=\"3\"\r\n                               Grid.Column=\"2\" \r\n                               HorizontalAlignment=\"Center\" \r\n                               VerticalAlignment=\"Center\"\r\n                               MinWidth=\"8\"\r\n                               MinHeight=\"8\"\r\n                               Margin=\"0\"\r\n                               Value=\"{x:Bind NullableMentionCount.Value, Mode=OneWay}\" />\r\n            </Grid>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <Style TargetType=\"local:ChannelListControl\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:ChannelListControl\">\r\n                    <ContentControl Content=\"{TemplateBinding Channel}\" ContentTemplate=\"{StaticResource ChannelListContentTemplate}\"/>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n\r\n    <Style x:Key=\"GroupChannelListStyle\" TargetType=\"local:ChannelListControl\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:ChannelListControl\">\r\n                    <ContentControl Content=\"{TemplateBinding Channel}\" ContentTemplate=\"{StaticResource GroupChannelListContentTemplate}\"/>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style x:Key=\"DirectMessageChannelListStyle\" TargetType=\"local:ChannelListControl\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:ChannelListControl\">\r\n                    <ContentControl Content=\"{TemplateBinding Channel}\" ContentTemplate=\"{StaticResource DirectMessageChannelListContentTemplate}\"/>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style x:Key=\"ThreadChannelListStyle\" TargetType=\"local:ChannelListControl\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:ChannelListControl\">\r\n                    <ContentControl Content=\"{TemplateBinding Channel}\" ContentTemplate=\"{StaticResource ThreadChannelListContentTemplate}\"/>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n</ResourceDictionary>\r\n"
  },
  {
    "path": "Unicord.Universal/Themes/Controls/Channels.xaml.cs",
    "content": "﻿namespace Unicord.Universal.Resources.Controls\n{\n    public partial class Channels\n    {\n        public Channels()\n        {\n            InitializeComponent();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Themes/Controls/Emoji.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Emoji\">\n    \n    <Style TargetType=\"local:EmojiControl\">\n        <Setter Property=\"Size\" Value=\"32\"/>\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"local:EmojiControl\">\n                    <Border>\n                        <Grid Height=\"{TemplateBinding Size}\" DataContext=\"{TemplateBinding Emoji}\">\n                            <ToolTipService.ToolTip>\n                                <StackPanel>\n                                    <Image Visibility=\"{Binding Url, Converter={StaticResource BoolVisibilityConverter}}\" \n                                           MaxHeight=\"128\">\n                                        <Image.Source>\n                                            <BitmapImage UriSource=\"{Binding Url}\" \n                                                         DecodePixelType=\"Logical\"\n                                                         DecodePixelHeight=\"128\" />\n                                        </Image.Source>\n                                    </Image>\n\n                                    <Viewbox MaxWidth=\"128\" \n                                             MaxHeight=\"128\"\n                                             Visibility=\"{Binding Unicode, Converter={StaticResource BoolVisibilityConverter}}\"\n                                             Stretch=\"Uniform\">\n                                        <TextBlock Text=\"{Binding Unicode}\" />\n                                    </Viewbox>\n                                    \n                                    <TextBlock Style=\"{ThemeResource CaptionTextBlockStyle}\" Text=\"{Binding Name}\" Margin=\"0,4,0,0\" HorizontalAlignment=\"Stretch\" TextAlignment=\"Center\"/>\n                                </StackPanel>\n                            </ToolTipService.ToolTip>\n                            \n                            <Image x:Name=\"EmoteImage\" \n                                   Visibility=\"{Binding Url, Converter={StaticResource BoolVisibilityConverter}}\" \n                                   MaxHeight=\"{TemplateBinding Size}\">\n                                <Image.Source>\n                                    <BitmapImage UriSource=\"{Binding Url}\" \n                                                 AutoPlay=\"{TemplateBinding Animate}\"\n                                                 DecodePixelType=\"Logical\"\n                                                 DecodePixelHeight=\"{TemplateBinding Size}\" />\n                                </Image.Source>\n                            </Image>\n\n                            <Viewbox MaxWidth=\"{TemplateBinding Size}\" \n                                     MaxHeight=\"{TemplateBinding Size}\"\n                                     Visibility=\"{Binding Unicode, Converter={StaticResource BoolVisibilityConverter}}\"\n                                     Stretch=\"Uniform\">\n                                <TextBlock x:Name=\"EmojiText\" \n                                           Text=\"{Binding Unicode}\" />\n                            </Viewbox>\n                        </Grid>\n                    </Border>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n</ResourceDictionary>\n"
  },
  {
    "path": "Unicord.Universal/Themes/Controls/Flyouts.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:flyouts=\"using:Unicord.Universal.Controls.Flyouts\" \n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\">\n\n    <flyouts:ChannelContextFlyout x:Key=\"ChannelContextFlyout\"/>\n    <flyouts:DirectMessageContextFlyout x:Key=\"DirectMessageContextFlyout\"/>\n    <flyouts:GuildContextFlyout x:Key=\"GuildContextFlyout\"/>\n    <flyouts:MessageContextFlyout x:Key=\"MessageContextFlyout\"/>\n    <flyouts:UserListContextFlyout x:Key=\"UserListContextFlyout\"/>\n\n</ResourceDictionary>\n"
  },
  {
    "path": "Unicord.Universal/Themes/Controls/Messages.xaml",
    "content": "﻿<ResourceDictionary\r\n    x:Class=\"Unicord.Universal.Resources.Controls.Messages\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Controls.Messages\"\r\n    xmlns:controls=\"using:Unicord.Universal.Controls\"\r\n    xmlns:entities=\"using:DSharpPlus.Entities\"\r\n    xmlns:toolkit=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\r\n    xmlns:flyouts=\"using:Unicord.Universal.Controls.Flyouts\" \r\n    xmlns:emoji=\"using:Unicord.Universal.Controls.Emoji\"\r\n    xmlns:converters=\"using:Unicord.Universal.Converters\"\r\n    xmlns:media=\"using:Microsoft.Toolkit.Uwp.UI.Media\" \r\n    xmlns:messages=\"using:Unicord.Universal.Models.Messages\" \r\n    xmlns:muxc=\"using:Microsoft.UI.Xaml.Controls\" \r\n    xmlns:extensions=\"using:Unicord.Universal.Extensions\"\r\n    xmlns:w1809=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)\" xmlns:components=\"using:Unicord.Universal.Models.Messages.Components\"\r\n    x:DefaultBindMode=\"OneWay\">\r\n\r\n    <converters:AttachmentTemplateSelector x:Key=\"AttachmentTemplateSelector\"\r\n                                           ImageTemplate=\"{StaticResource DefaultAttachmentImageTemplate}\"\r\n                                           VideoTemplate=\"{StaticResource AttachmentMediaContentTemplate}\"\r\n                                           AudioTemplate=\"{StaticResource AttachmentMediaContentTemplate}\"\r\n                                           GenericTemplate=\"{StaticResource DefaultAttachmentGenericTemplate}\"/>\r\n\r\n    <converters:EmbedTemplateSelector x:Key=\"EmbedTemplateSelector\"\r\n                                      ImageTemplate=\"{StaticResource ImageEmbedTemplate}\"\r\n                                      VideoTemplate=\"{StaticResource VideoEmbedTemplate}\"\r\n                                      RichTemplate=\"{StaticResource RichEmbedTemplate}\"/>\r\n\r\n    <converters:AttachmentTypeConverter x:Key=\"AttachmentTypeConverter\"/>\r\n\r\n    <media:BackdropBlurBrush x:Key=\"SpoilerBrush\" Amount=\"64\" />\r\n\r\n    <Style TargetType=\"local:AttachmentControl\">\r\n        <Setter Property=\"Background\" Value=\"{ThemeResource Attachment_Background}\"/>\r\n        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource Attachment_BorderBrush}\"/>\r\n        <Setter Property=\"Margin\" Value=\"0,4,0,0\"/>\r\n        <Setter Property=\"BorderThickness\" Value=\"{ThemeResource Attachment_BorderThickness}\"/>\r\n        <Setter Property=\"HorizontalAlignment\" Value=\"Left\"/>\r\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:AttachmentControl\">\r\n                    <Grid HorizontalAlignment=\"Left\">\r\n                        <Border Background=\"{TemplateBinding Background}\"\r\n                                BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                CornerRadius=\"{ThemeResource Attachment_CornerRadius}\">\r\n\r\n                            <ContentControl ContentTemplateSelector=\"{StaticResource AttachmentTemplateSelector}\"\r\n                                        Content=\"{TemplateBinding ViewModel}\"\r\n                                        HorizontalContentAlignment=\"Stretch\"\r\n                                        HorizontalAlignment=\"Stretch\"\r\n                                        VerticalAlignment=\"Top\"\r\n                                        VerticalContentAlignment=\"Top\"\r\n                                        MaxWidth=\"480\"\r\n                                        MaxHeight=\"480\"/>\r\n\r\n                            <!--<Border x:Name=\"PART_SpoilerOverlay\" Background=\"{ThemeResource SpoilerBrush}\" />-->\r\n                        </Border>\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <DataTemplate x:Key=\"AttachmentMediaContentTemplate\" x:DataType=\"messages:AttachmentViewModel\">\r\n        <UserControl HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\"\r\n                     HorizontalContentAlignment=\"Stretch\" VerticalContentAlignment=\"Stretch\">\r\n            <Grid x:Name=\"Root\" MaxHeight=\"480\">\r\n                \r\n                <Grid.RowDefinitions>\r\n                    <RowDefinition Height=\"Auto\"/>\r\n                    <RowDefinition Height=\"Auto\"/>\r\n                </Grid.RowDefinitions>\r\n\r\n                <Grid x:Name=\"AudioInfo\" Margin=\"4,2,4,8\">\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"Auto\"/>\r\n                        <ColumnDefinition Width=\"*\"/>\r\n                        <ColumnDefinition Width=\"Auto\"/>\r\n                    </Grid.ColumnDefinitions>\r\n\r\n                    <TextBlock x:Name=\"Icon\" FontSize=\"32\"\r\n                         FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\r\n                         Text=\"&#xe8d6;\"\r\n                         VerticalAlignment=\"Center\"\r\n                         Margin=\"0,0,12,0\"/>\r\n\r\n                    <StackPanel Grid.Column=\"1\">\r\n                        <TextBlock Text=\"{Binding FileName}\" Style=\"{ThemeResource BaseTextBlockStyle}\" TextWrapping=\"NoWrap\"/>\r\n                        <TextBlock Text=\"{Binding FileSize}\" Style=\"{ThemeResource CaptionTextBlockStyle}\" TextWrapping=\"NoWrap\"/>\r\n                    </StackPanel>\r\n\r\n                    <StackPanel Grid.Column=\"2\" Orientation=\"Horizontal\" Margin=\"4,0,0,0\">\r\n                        <Button x:Name=\"DownloadButton\"\r\n                              Style=\"{ThemeResource IconButtonStyle}\"\r\n                              Margin=\"4,0,0,0\"\r\n                              Command=\"{Binding DownloadCommand}\">\r\n                            <Grid DataContext=\"{Binding DownloadProgress}\">\r\n                                <muxc:ProgressRing Width=\"16\" Height=\"16\" \r\n                                                 Opacity=\"{Binding ProgressOpacity}\"\r\n                                                 IsIndeterminate=\"{Binding IsIndeterminate}\"\r\n                                                 Value=\"{Binding Progress}\"\r\n                                                 Maximum=\"1\" />\r\n                                <TextBlock Text=\"&#xe896;\" \r\n                                         FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\r\n                                         FontSize=\"16\"\r\n                                         Opacity=\"{Binding IconOpacity}\"/>\r\n                            </Grid>\r\n                        </Button>\r\n\r\n                        <Button x:Name=\"CopyLinkButton\"\r\n                              Style=\"{ThemeResource IconButtonStyle}\"\r\n                              Content=\"&#xe71b;\"\r\n                              Margin=\"4,0,0,0\"\r\n                              Command=\"{Binding CopyCommand}\"/>\r\n\r\n                        <Button x:Name=\"ShareButton\"\r\n                              Style=\"{ThemeResource IconButtonStyle}\"\r\n                              Margin=\"4,0,0,0\"\r\n                              Command=\"{Binding ShareCommand}\">\r\n                            <Grid DataContext=\"{Binding ShareProgress}\">\r\n                                <muxc:ProgressRing Width=\"16\" Height=\"16\" \r\n                                             Opacity=\"{Binding ProgressOpacity}\"\r\n                                             IsIndeterminate=\"{Binding IsIndeterminate}\"\r\n                                             Value=\"{Binding Progress}\"\r\n                                             Maximum=\"1\" />\r\n                                <TextBlock Text=\"&#xe72d;\" \r\n                                     FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\r\n                                     FontSize=\"16\"\r\n                                     Opacity=\"{Binding IconOpacity}\"/>\r\n                            </Grid>\r\n                        </Button>\r\n                    </StackPanel>\r\n                </Grid>\r\n\r\n                <Border x:Name=\"MediaPlayerBorder\" Grid.Row=\"1\">\r\n                    <controls:ScaledContentControl x:Name=\"MediaPlayerContainer\" TargetWidth=\"{x:Bind NaturalWidth}\" TargetHeight=\"{x:Bind NaturalHeight}\" ForceSize=\"True\">\r\n                        <MediaPlayerElement x:Name=\"MediaPlayer\" VerticalAlignment=\"Stretch\" HorizontalAlignment=\"Stretch\" Source=\"{Binding Source}\" PosterSource=\"{x:Bind PosterSource}\" AreTransportControlsEnabled=\"True\"/>\r\n                    </controls:ScaledContentControl>\r\n                </Border>\r\n\r\n                <VisualStateManager.VisualStateGroups>\r\n                    <VisualStateGroup x:Name=\"MediaType\">\r\n                        <VisualState x:Name=\"Video\">\r\n                            <VisualState.StateTriggers>\r\n                                <StateTrigger IsActive=\"{Binding IsVideo, Mode=OneWay}\"/>\r\n                            </VisualState.StateTriggers>\r\n                            <VisualState.Setters>\r\n                                <Setter Target=\"Icon.Text\" Value=\"&#xe714;\"/>\r\n                                <Setter Target=\"Root.Margin\" Value=\"0\"/>\r\n                                <Setter Target=\"MediaPlayerContainer.MaxHeight\" Value=\"430\"/>\r\n                                <Setter Target=\"AudioInfo.Visibility\" Value=\"Visible\"/>\r\n                                <Setter Target=\"AudioInfo.Margin\" Value=\"12,8,8,8\"/>\r\n                                <Setter Target=\"MediaPlayer.TransportControls\">\r\n                                    <Setter.Value>\r\n                                        <controls:CustomMediaTransportControls />\r\n                                    </Setter.Value>\r\n                                </Setter>\r\n                            </VisualState.Setters>\r\n                        </VisualState>\r\n                        <VisualState x:Name=\"Audio\">\r\n                            <VisualState.StateTriggers>\r\n                                <StateTrigger IsActive=\"{Binding IsAudio, Mode=OneWay}\"/>\r\n                            </VisualState.StateTriggers>\r\n                            <VisualState.Setters>\r\n                                <Setter Target=\"Icon.Text\" Value=\"&#xe8d6;\"/>\r\n                                <Setter Target=\"Root.Margin\" Value=\"8\"/>\r\n                                <Setter Target=\"MediaPlayerContainer.MaxHeight\" Value=\"{StaticResource MediaPlayer_AudioOnly_MaxHeight}\"/>\r\n                                <Setter Target=\"AudioInfo.Visibility\" Value=\"Visible\"/>\r\n                                <Setter Target=\"AudioInfo.Margin\" Value=\"4,2,0,4\"/>\r\n                                <Setter Target=\"MediaPlayer.TransportControls\">\r\n                                    <Setter.Value>\r\n                                        <controls:CustomMediaTransportControls Style=\"{StaticResource AudioMediaTransportControlsStyle}\" IsFullWindowButtonVisible=\"False\"/>\r\n                                    </Setter.Value>\r\n                                </Setter>\r\n                            </VisualState.Setters>\r\n                        </VisualState>\r\n                    </VisualStateGroup>\r\n                </VisualStateManager.VisualStateGroups>\r\n            </Grid>\r\n        </UserControl>\r\n    </DataTemplate>\r\n    \r\n\r\n    <Style x:Key=\"AttachmentAudioControlStyle\" TargetType=\"local:AttachmentMediaControl\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:AttachmentMediaControl\">\r\n                    <Grid x:Name=\"Root\" Margin=\"8\">\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"Auto\"/>\r\n                            <RowDefinition Height=\"Auto\"/>\r\n                        </Grid.RowDefinitions>\r\n\r\n                        <Grid x:Name=\"AudioInfo\" Margin=\"4,2,4,8\">\r\n                            <Grid.ColumnDefinitions>\r\n                                <ColumnDefinition Width=\"Auto\"/>\r\n                                <ColumnDefinition Width=\"*\"/>\r\n                                <ColumnDefinition Width=\"Auto\"/>\r\n                            </Grid.ColumnDefinitions>\r\n\r\n                            <TextBlock FontSize=\"32\"\r\n                                           FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\r\n                                           Text=\"&#xe8d6;\"\r\n                                           VerticalAlignment=\"Center\"\r\n                                           Margin=\"0,0,8,0\"/>\r\n\r\n                            <StackPanel Grid.Column=\"1\">\r\n                                <TextBlock Text=\"{Binding FileName}\" Style=\"{ThemeResource BaseTextBlockStyle}\" TextWrapping=\"NoWrap\"/>\r\n                                <TextBlock Text=\"{Binding FileSize}\" Style=\"{ThemeResource CaptionTextBlockStyle}\" TextWrapping=\"NoWrap\"/>\r\n                            </StackPanel>\r\n\r\n                            <StackPanel Grid.Column=\"2\" Orientation=\"Horizontal\" Margin=\"4,0,0,0\">\r\n                                <Button x:Name=\"DownloadButton\"\r\n                                                Style=\"{ThemeResource IconButtonStyle}\"\r\n                                                Margin=\"4,0,0,0\"\r\n                                                Command=\"{Binding DownloadCommand}\">\r\n                                    <Grid DataContext=\"{Binding DownloadProgress, Mode=OneWay}\">\r\n                                        <muxc:ProgressRing Width=\"16\" Height=\"16\" \r\n                                                                   Opacity=\"{Binding ProgressOpacity, Mode=OneWay}\"\r\n                                                                   IsIndeterminate=\"{Binding IsIndeterminate, Mode=OneWay}\"\r\n                                                                   Value=\"{Binding Progress, Mode=OneWay}\"\r\n                                                                   Maximum=\"1\" />\r\n                                        <TextBlock Text=\"&#xe896;\" \r\n                                                           FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\r\n                                                           FontSize=\"16\"\r\n                                                           Opacity=\"{Binding IconOpacity, Mode=OneWay}\"/>\r\n                                    </Grid>\r\n                                </Button>\r\n\r\n                                <Button x:Name=\"CopyLinkButton\"\r\n                                                Style=\"{ThemeResource IconButtonStyle}\"\r\n                                                Content=\"&#xe71b;\"\r\n                                                Margin=\"4,0,0,0\"\r\n                                                Command=\"{Binding CopyCommand}\"/>\r\n\r\n                                <Button x:Name=\"ShareButton\"\r\n                                                Style=\"{ThemeResource IconButtonStyle}\"\r\n                                                Margin=\"4,0,0,0\"\r\n                                                Command=\"{Binding ShareCommand}\">\r\n                                    <Grid DataContext=\"{Binding ShareProgress}\">\r\n                                        <muxc:ProgressRing Width=\"16\" Height=\"16\" \r\n                                                               Opacity=\"{Binding ProgressOpacity}\"\r\n                                                               IsIndeterminate=\"{Binding IsIndeterminate}\"\r\n                                                               Value=\"{Binding Progress}\"\r\n                                                               Maximum=\"1\" />\r\n                                        <TextBlock Text=\"&#xe72d;\" \r\n                                                       FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\r\n                                                       FontSize=\"16\"\r\n                                                       Opacity=\"{Binding IconOpacity}\"/>\r\n                                    </Grid>\r\n                                </Button>\r\n                            </StackPanel>\r\n                        </Grid>\r\n\r\n                        <Border x:Name=\"MediaPlayerBorder\" Grid.Row=\"1\">\r\n                            <MediaPlayerElement x:Name=\"MediaPlayer\" MaxHeight=\"52\" Source=\"{Binding Source}\" PosterSource=\"{Binding PosterSource}\" AreTransportControlsEnabled=\"True\">\r\n                                <MediaPlayerElement.TransportControls>\r\n                                    <controls:CustomMediaTransportControls Style=\"{StaticResource AudioMediaTransportControlsStyle}\"/>\r\n                                </MediaPlayerElement.TransportControls>\r\n                            </MediaPlayerElement>\r\n                        </Border>\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style x:Key=\"AttachmentVideoControlStyle\" TargetType=\"local:AttachmentMediaControl\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:AttachmentMediaControl\">\r\n                    <Border x:Name=\"MediaPlayerBorder\" Grid.Row=\"1\">\r\n                        <controls:ScaledContentControl x:Name=\"MediaPlayerContainer\" ForceSize=\"True\" TargetWidth=\"{Binding NaturalWidth}\" TargetHeight=\"{Binding NaturalHeight}\">\r\n                            <MediaPlayerElement x:Name=\"MediaPlayer\" MaxHeight=\"480\" Source=\"{Binding Source}\" PosterSource=\"{Binding PosterSource}\" AreTransportControlsEnabled=\"True\">\r\n                                <MediaPlayerElement.TransportControls>\r\n                                    <controls:CustomMediaTransportControls/>\r\n                                </MediaPlayerElement.TransportControls>\r\n                            </MediaPlayerElement>\r\n                        </controls:ScaledContentControl>\r\n                    </Border>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <DataTemplate x:Key=\"DefaultAttachmentImageTemplate\">\r\n        <controls:ScaledContentControl TargetWidth=\"{Binding NaturalWidth}\" TargetHeight=\"{Binding NaturalHeight}\">\r\n            <controls:ImageElement ImageWidth=\"{Binding NaturalWidth}\" ImageHeight=\"{Binding NaturalHeight}\" ImageUri=\"{Binding Source}\" />\r\n        </controls:ScaledContentControl>\r\n    </DataTemplate>\r\n\r\n    <!--<DataTemplate x:Key=\"DefaultAttachmentMediaTemplate\" x:DataType=\"messages:AttachmentViewModel\">\r\n        <local:AttachmentMediaControl ViewModel=\"{Binding}\"/>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"VideoAttachmentMediaTemplate\" x:DataType=\"messages:AttachmentViewModel\">\r\n        <local:AttachmentMediaControl ViewModel=\"{Binding}\" Style=\"{StaticResource AttachmentVideoControlStyle}\"/>\r\n    </DataTemplate>\r\n    <DataTemplate x:Key=\"AudioAttachmentMediaTemplate\" x:DataType=\"messages:AttachmentViewModel\">\r\n        <local:AttachmentMediaControl ViewModel=\"{Binding}\" Style=\"{StaticResource AttachmentAudioControlStyle}\"/>\r\n    </DataTemplate>-->\r\n\r\n    <w1809:ScalarTransition x:Key=\"FadeTransition\" Duration=\"00:00:00.2\" />\r\n\r\n    <DataTemplate x:Key=\"DefaultAttachmentGenericTemplate\" x:DataType=\"messages:AttachmentViewModel\">\r\n        <Grid x:Name=\"AttachmentInfo\" MaxWidth=\"360\" Margin=\"8\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"Auto\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n                <ColumnDefinition Width=\"Auto\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <TextBlock FontSize=\"32\"\r\n                       FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\r\n                       Text=\"&#xe8a5;\"\r\n                       VerticalAlignment=\"Center\"\r\n                       Margin=\"0,0,8,0\"/>\r\n\r\n            <StackPanel Grid.Column=\"1\">\r\n                <TextBlock Text=\"{Binding FileName}\" Style=\"{ThemeResource BaseTextBlockStyle}\" TextWrapping=\"NoWrap\"/>\r\n                <TextBlock Text=\"{Binding FileSize}\" Style=\"{ThemeResource CaptionTextBlockStyle}\" TextWrapping=\"NoWrap\"/>\r\n            </StackPanel>\r\n\r\n            <StackPanel Grid.Column=\"2\" Orientation=\"Horizontal\" Margin=\"4,0,0,0\">\r\n                <Button x:Name=\"DownloadButton\"\r\n                        Style=\"{ThemeResource IconButtonStyle}\"\r\n                        Margin=\"4,0,0,0\"\r\n                        Command=\"{Binding DownloadCommand}\">\r\n                    <Grid DataContext=\"{Binding DownloadProgress}\">\r\n                        <muxc:ProgressRing Width=\"16\" Height=\"16\" \r\n                                           Opacity=\"{Binding ProgressOpacity}\"\r\n                                           IsIndeterminate=\"{Binding IsIndeterminate}\"\r\n                                           Value=\"{Binding Progress}\"\r\n                                           Maximum=\"1\" />\r\n                        <TextBlock Text=\"&#xe896;\" \r\n                                   FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\r\n                                   FontSize=\"16\"\r\n                                   Opacity=\"{Binding IconOpacity}\"/>\r\n                    </Grid>\r\n                </Button>\r\n\r\n                <Button x:Name=\"CopyLinkButton\"\r\n                        Style=\"{ThemeResource IconButtonStyle}\"\r\n                        Content=\"&#xe71b;\"\r\n                        Margin=\"4,0,0,0\"\r\n                        Command=\"{Binding CopyCommand}\"/>\r\n\r\n                <Button x:Name=\"ShareButton\"\r\n                        Style=\"{ThemeResource IconButtonStyle}\"\r\n                        Margin=\"4,0,0,0\"\r\n                        Command=\"{Binding ShareCommand}\">\r\n                    <Grid DataContext=\"{Binding ShareProgress}\">\r\n                        <muxc:ProgressRing Width=\"16\" Height=\"16\" \r\n                                           Opacity=\"{Binding ProgressOpacity}\"\r\n                                           IsIndeterminate=\"{Binding IsIndeterminate}\"\r\n                                           Value=\"{Binding Progress}\"\r\n                                           Maximum=\"1\" />\r\n                        <TextBlock Text=\"&#xe72d;\" \r\n                                   FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\r\n                                   FontSize=\"16\"\r\n                                   Opacity=\"{Binding IconOpacity}\"/>\r\n                    </Grid>\r\n                </Button>\r\n            </StackPanel>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n\r\n    <!--<DataTemplate x:Key=\"DefaultAttachmentAudioTemplate\">\r\n        <Grid Padding=\"4\">\r\n            <MediaPlayerElement Source=\"{Binding Source}\" AreTransportControlsEnabled=\"True\">\r\n                <MediaPlayerElement.TransportControls>\r\n                    <MediaTransportControls Style=\"{ThemeResource MediaTransportControlsStyle}\"/>\r\n                </MediaPlayerElement.TransportControls>\r\n            </MediaPlayerElement>\r\n        </Grid>\r\n    </DataTemplate>-->\r\n\r\n    <DataTemplate x:Key=\"DefaultReactionTemplate\">\r\n        <ToggleButton x:Name=\"ReactionToggleButton\" \r\n                      ToolTipService.ToolTip=\"{Binding Emoji.Name}\" \r\n                      IsChecked=\"{Binding IsMe, Mode=OneWay}\"\r\n                      Padding=\"1\"\r\n                      BorderThickness=\"1\"\r\n                      Command=\"{Binding ReactCommand}\"\r\n                      CommandParameter=\"{Binding Emoji}\">\r\n            <ToggleButton.Resources>\r\n                <ResourceDictionary>\r\n                    <ResourceDictionary.ThemeDictionaries>\r\n                        <ResourceDictionary x:Key=\"Default\">\r\n                            <SolidColorBrush x:Key=\"ToggleButtonBackgroundChecked\" Color=\"{ThemeResource SystemAccentColorLight2}\" Opacity=\"0.6\" />\r\n                            <SolidColorBrush x:Key=\"ToggleButtonBorderBrushChecked\" Color=\"{ThemeResource SystemAccentColorLight2}\" Opacity=\"0.8\" />\r\n\r\n                            <SolidColorBrush x:Key=\"ToggleButtonBackgroundCheckedPointerOver\" Color=\"{ThemeResource SystemAccentColorLight2}\" Opacity=\"0.8\" />\r\n\r\n                            <SolidColorBrush x:Key=\"ToggleButtonBackgroundCheckedPressed\" Color=\"{ThemeResource SystemAccentColorLight2}\" />\r\n                            <SolidColorBrush x:Key=\"ToggleButtonBorderBrushCheckedPressed\" Color=\"{ThemeResource SystemAccentColorLight2}\" />\r\n                        </ResourceDictionary>\r\n\r\n                        <ResourceDictionary x:Key=\"Light\">\r\n                            <SolidColorBrush x:Key=\"ToggleButtonBackgroundChecked\" Color=\"{ThemeResource SystemAccentColorDark1}\" Opacity=\"0.6\" />\r\n                            <SolidColorBrush x:Key=\"ToggleButtonBorderBrushChecked\" Color=\"{ThemeResource SystemAccentColorDark1}\" Opacity=\"0.6\" />\r\n\r\n                            <SolidColorBrush x:Key=\"ToggleButtonBackgroundCheckedPointerOver\" Color=\"{ThemeResource SystemAccentColorDark1}\" Opacity=\"0.8\" />\r\n\r\n                            <SolidColorBrush x:Key=\"ToggleButtonBackgroundCheckedPressed\" Color=\"{ThemeResource SystemAccentColorDark1}\" />\r\n                            <SolidColorBrush x:Key=\"ToggleButtonBorderBrushCheckedPressed\" Color=\"{ThemeResource SystemAccentColorDark1}\" />\r\n                        </ResourceDictionary>\r\n                    </ResourceDictionary.ThemeDictionaries>\r\n                </ResourceDictionary>\r\n            </ToggleButton.Resources>\r\n\r\n            <Grid Margin=\"2,0,4,0\">\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition MinWidth=\"18\" Width=\"Auto\"/>\r\n                    <ColumnDefinition Width=\"Auto\"/>\r\n                </Grid.ColumnDefinitions>\r\n\r\n                <emoji:EmojiControl Emoji=\"{Binding Emoji}\" Size=\"18\" />\r\n                <TextBlock Grid.Column=\"1\" Margin=\"8,0,0,0\" Text=\"{Binding Count}\" FontSize=\"12\" VerticalAlignment=\"Center\"/>\r\n            </Grid>\r\n        </ToggleButton>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"RichEmbedTemplate\" x:DataType=\"messages:EmbedViewModel\">\r\n        <Border BorderBrush=\"{ThemeResource RichEmbed_BorderBrush}\"\r\n                Background=\"{ThemeResource RichEmbed_Background}\"\r\n                BorderThickness=\"{ThemeResource RichEmbed_BorderThickness}\"\r\n                CornerRadius=\"{ThemeResource RichEmbed_CornerRadius}\"\r\n                MaxWidth=\"480\"\r\n                Margin=\"0,4,0,0\">\r\n            <Grid>\r\n                <Border Background=\"{x:Bind Color}\" \r\n                        CornerRadius=\"{ThemeResource RichEmbed_Inner_CornerRadius}\">\r\n                    <Border.Clip>\r\n                        <RectangleGeometry Rect=\"0,0,4,1000\" />\r\n                    </Border.Clip>\r\n                </Border>\r\n                <Grid Padding=\"{ThemeResource RichEmbed_InnerPadding}\">\r\n                    <Grid.ColumnDefinitions>\r\n                        <ColumnDefinition Width=\"*\"/>\r\n                        <ColumnDefinition Width=\"Auto\"/>\r\n                    </Grid.ColumnDefinitions>\r\n                    <Grid>\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"Auto\"/>\r\n                            <RowDefinition Height=\"Auto\"/>\r\n                            <RowDefinition Height=\"*\"/>\r\n                            <RowDefinition Height=\"Auto\"/>\r\n                        </Grid.RowDefinitions>\r\n                        <StackPanel>\r\n                            <Grid x:Name=\"ProviderGrid\"\r\n                                  x:Load=\"{x:Bind HasProvider}\"\r\n                                  x:Phase=\"2\"\r\n                                  Margin=\"0,0,0,4\">\r\n                                <TextBlock VerticalAlignment=\"Center\" FontSize=\"12\">\r\n                                    <Hyperlink NavigateUri=\"{x:Bind ProviderUrl, Mode=OneWay}\" UnderlineStyle=\"None\">\r\n                                        <Run Text=\"{x:Bind ProviderName, Mode=OneWay}\"/>\r\n                                    </Hyperlink>\r\n                                </TextBlock>\r\n                            </Grid>\r\n\r\n                            <Grid x:Name=\"AuthorGrid\"\r\n                                  x:Load=\"{x:Bind HasAuthor}\"\r\n                                  x:Phase=\"1\"\r\n                                  Margin=\"0,0,0,4\">\r\n                                <Grid.ColumnDefinitions>\r\n                                    <ColumnDefinition Width=\"Auto\" />\r\n                                    <ColumnDefinition Width=\"*\" />\r\n                                </Grid.ColumnDefinitions>\r\n\r\n                                <Ellipse x:Name=\"AuthorIcon\" \r\n                                         x:Load=\"{x:Bind Author.HasIconUrl}\"\r\n                                         Width=\"20\"\r\n                                         Height=\"20\"\r\n                                         Margin=\"0,0,8,0\">\r\n                                    <Ellipse.Fill>\r\n                                        <ImageBrush>\r\n                                            <ImageBrush.ImageSource>\r\n                                                <BitmapImage DecodePixelHeight=\"20\"\r\n                                                             DecodePixelWidth=\"20\"\r\n                                                             DecodePixelType=\"Logical\"\r\n                                                             UriSource=\"{x:Bind Author.IconUrl}\" />\r\n                                            </ImageBrush.ImageSource>\r\n                                        </ImageBrush>\r\n                                    </Ellipse.Fill>\r\n                                </Ellipse>\r\n                                <TextBlock Grid.Column=\"1\" VerticalAlignment=\"Center\" FontWeight=\"Bold\" Text=\"{x:Bind Author.Name}\"/>\r\n                            </Grid>\r\n\r\n                            <controls:MarkdownTextBlock x:Name=\"TitleText\"\r\n                                                        x:Load=\"{x:Bind HasTitle}\"\r\n                                                        x:Phase=\"0\"\r\n                                                        Channel=\"{x:Bind Channel}\"\r\n                                                        FontWeight=\"Bold\"\r\n                                                        TextWrapping=\"WrapWholeWords\"\r\n                                                        InlineOnly=\"True\"\r\n                                                        Text=\"{x:Bind Title}\" />\r\n\r\n                            <controls:MarkdownTextBlock x:Name=\"DescriptionText\"\r\n                                                        x:Load=\"{x:Bind HasDescription}\"\r\n                                                        x:Phase=\"0\"\r\n                                                        Channel=\"{x:Bind Channel}\"\r\n                                                        Margin=\"0,4,0,0\"\r\n                                                        TextWrapping=\"WrapWholeWords\"\r\n                                                        InlineOnly=\"False\"\r\n                                                        Text=\"{x:Bind Description}\"/>\r\n                        </StackPanel>\r\n\r\n                        <local:EmbedFieldsView x:Name=\"FieldsList\"\r\n                                               x:Load=\"{x:Bind HasFields}\"\r\n                                               x:Phase=\"3\"\r\n                                               Grid.Row=\"1\"\r\n                                               ItemsSource=\"{x:Bind Fields}\"\r\n                                               HorizontalAlignment=\"Stretch\"\r\n                                               HorizontalContentAlignment=\"Stretch\">\r\n                            <ItemsControl.ItemsPanel>\r\n                                <ItemsPanelTemplate>\r\n                                    <controls:UniformGrid Columns=\"3\" HorizontalAlignment=\"Stretch\"  />\r\n                                </ItemsPanelTemplate>\r\n                            </ItemsControl.ItemsPanel>\r\n                            <ItemsControl.ItemTemplate>\r\n                                <DataTemplate x:DataType=\"messages:EmbedFieldViewModel\">\r\n                                    <StackPanel Margin=\"0,0,4,2\">\r\n                                        <controls:MarkdownTextBlock x:Name=\"EmbedFieldTitle\" Channel=\"{x:Bind Channel}\" Text=\"{x:Bind Title}\" FontWeight=\"Bold\"/>\r\n                                        <controls:MarkdownTextBlock x:Name=\"EmbedFieldContent\" Channel=\"{x:Bind Channel}\" Grid.Row=\"1\" Text=\"{x:Bind Text}\" />\r\n                                    </StackPanel>\r\n                                </DataTemplate>\r\n                            </ItemsControl.ItemTemplate>\r\n                        </local:EmbedFieldsView>\r\n\r\n                        <local:ImageEmbedControl x:Name=\"PART_LargeThumbnail\"\r\n                                                 x:Load=\"{x:Bind HasLargeThumbnail, Mode=OneWay}\"\r\n                                                 x:Phase=\"1\"\r\n                                                 Grid.Row=\"2\"\r\n                                                 Margin=\"0,8,0,0\"\r\n                                                 ViewModel=\"{x:Bind Thumbnail, Mode=OneWay}\"/>\r\n                        \r\n                        <local:VideoEmbedControl x:Name=\"EmbedVideo\"\r\n                                                 x:Load=\"{x:Bind HasVideo, Mode=OneWay}\"\r\n                                                 x:Phase=\"1\"\r\n                                                 Grid.Row=\"2\"\r\n                                                 Margin=\"0,8,0,0\"\r\n                                                 ViewModel=\"{x:Bind Video, Mode=OneWay}\"/>\r\n\r\n                        <Grid x:Name=\"FooterGrid\"\r\n                              x:Load=\"{x:Bind HasFooter}\"\r\n                              x:Phase=\"4\"\r\n                              Grid.Row=\"3\"\r\n                              Margin=\"0,4,0,0\">\r\n                            <Grid.ColumnDefinitions>\r\n                                <ColumnDefinition Width=\"Auto\" />\r\n                                <ColumnDefinition Width=\"*\" />\r\n                            </Grid.ColumnDefinitions>\r\n\r\n                            <Rectangle x:Name=\"FooterIcon\"\r\n                                       x:Load=\"{x:Bind Footer.HasIconUrl}\"\r\n                                       Width=\"20\" Height=\"20\"\r\n                                       RadiusX=\"2\" RadiusY=\"2\"\r\n                                       Margin=\"0,0,12,0\">\r\n                                <Rectangle.Fill>\r\n                                    <ImageBrush>\r\n                                        <ImageBrush.ImageSource>\r\n                                            <BitmapImage DecodePixelHeight=\"20\"\r\n                                                      DecodePixelWidth=\"20\"\r\n                                                      UriSource=\"{x:Bind Footer.IconUrl}\" />\r\n                                        </ImageBrush.ImageSource>\r\n                                    </ImageBrush>\r\n                                </Rectangle.Fill>\r\n                            </Rectangle>\r\n                            <TextBlock Grid.Column=\"1\" FontSize=\"12pt\" TextWrapping=\"Wrap\" VerticalAlignment=\"Center\" Text=\"{x:Bind Footer.Text}\"/>\r\n                        </Grid>\r\n                    </Grid>\r\n\r\n                    <Grid Grid.Column=\"1\">\r\n                        <local:ImageEmbedControl x:Name=\"PART_Thumbnail\"\r\n                                                 x:Load=\"{x:Bind HasSmallThumbnail, Mode=OneWay}\"\r\n                                                 x:Phase=\"1\"\r\n                                                 Width=\"96\"\r\n                                                 MaxHeight=\"96\"\r\n                                                 Margin=\"12,0,0,0\"\r\n                                                 VerticalAlignment=\"Top\"\r\n                                                 ViewModel=\"{x:Bind Thumbnail, Mode=OneWay}\" />\r\n                    </Grid>\r\n                </Grid>\r\n            </Grid>\r\n        </Border>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"ImageEmbedTemplate\" x:DataType=\"messages:EmbedViewModel\">\r\n        <local:ImageEmbedControl ViewModel=\"{Binding Thumbnail}\"/>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"VideoEmbedTemplate\" x:DataType=\"messages:EmbedViewModel\">\r\n        <local:VideoEmbedControl ViewModel=\"{Binding Video}\"/>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"DefaultAttachmentTemplate\" x:DataType=\"messages:EmbedViewModel\">\r\n        <local:AttachmentControl ViewModel=\"{Binding}\" />\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"DefaultStickerTemplate\">\r\n        <local:StickerControl Sticker=\"{Binding}\" />\r\n    </DataTemplate>\r\n\r\n    <converters:ComponentTemplateSelector x:Key=\"ComponentTemplateSelector\"\r\n                                          ActionRowTemplate=\"{StaticResource ActionRowComponentTemplate}\"\r\n                                          PrimaryButtonTemplate=\"{StaticResource PrimaryButtonComponentTemplate}\"\r\n                                          SecondaryButtonTemplate=\"{StaticResource SecondaryButtonComponentTemplate}\"\r\n                                          SuccessButtonTemplate=\"{StaticResource SuccessButtonComponentTemplate}\"\r\n                                          DangerButtonTemplate=\"{StaticResource DangerButtonComponentTemplate}\"\r\n                                          LinkButtonTemplate=\"{StaticResource LinkButtonComponentTemplate}\"\r\n                                          UnknownTemplate=\"{StaticResource FallbackComponentTemplate}\"/>\r\n\r\n    <DataTemplate x:Key=\"ActionRowComponentTemplate\">\r\n        <ItemsControl ItemTemplateSelector=\"{StaticResource ComponentTemplateSelector}\" \r\n                      ItemsSource=\"{Binding Components}\" Margin=\"0,4,0,0\">\r\n            <ItemsControl.ItemsPanel>\r\n                <ItemsPanelTemplate>\r\n                    <toolkit:WrapPanel Orientation=\"Horizontal\" HorizontalSpacing=\"4\" VerticalSpacing=\"4\" />\r\n                </ItemsPanelTemplate>\r\n            </ItemsControl.ItemsPanel>\r\n        </ItemsControl>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"ButtonComponentContentTemplate\"\r\n                  x:DataType=\"components:ButtonComponentViewModel\">\r\n        <StackPanel Orientation=\"Horizontal\">\r\n            <emoji:EmojiControl x:Name=\"PART_ButtonEmoji\" x:Load=\"{x:Bind Emoji.IsValid}\" Emoji=\"{x:Bind Emoji}\" Size=\"20\" />\r\n\r\n            <TextBlock x:Name=\"PART_ButtonLabel\" x:Load=\"{x:Bind HasLabel}\" VerticalAlignment=\"Center\" Text=\"{x:Bind Label}\" Padding=\"12,0\"/>\r\n\r\n            <TextBlock x:Name=\"PART_ButtonExternalLink\"\r\n                       x:Load=\"{x:Bind ShowExternalLinkIcon}\"\r\n                       FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\r\n                       FontSize=\"16\" \r\n                       VerticalAlignment=\"Center\">&#xE8A7;</TextBlock>\r\n        </StackPanel>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"PrimaryButtonComponentTemplate\"\r\n                  x:DataType=\"components:ButtonComponentViewModel\">\r\n        <Button MinWidth=\"68\" BorderThickness=\"0\" Padding=\"12,8\" \r\n                Style=\"{ThemeResource AccentButtonStyle}\"\r\n                Command=\"{x:Bind Execute}\"\r\n                Content=\"{x:Bind}\"\r\n                ContentTemplate=\"{StaticResource ButtonComponentContentTemplate}\"/>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"SecondaryButtonComponentTemplate\"\r\n                  x:DataType=\"components:ButtonComponentViewModel\">\r\n        <Button MinWidth=\"68\" BorderThickness=\"0\" Padding=\"12,8\" \r\n                Command=\"{x:Bind Execute}\"\r\n                Content=\"{x:Bind}\"\r\n                ContentTemplate=\"{StaticResource ButtonComponentContentTemplate}\"/>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"SuccessButtonComponentTemplate\"\r\n                  x:DataType=\"components:ButtonComponentViewModel\">\r\n        <Button MinWidth=\"68\" BorderThickness=\"0\" Padding=\"12,8\" \r\n                Command=\"{x:Bind Execute}\"\r\n                Content=\"{x:Bind}\"\r\n                ContentTemplate=\"{StaticResource ButtonComponentContentTemplate}\">\r\n            <Button.Resources>\r\n                <SolidColorBrush x:Key=\"ButtonForegroundPointerOver\" Color=\"Black\"/>\r\n                <SolidColorBrush x:Key=\"ButtonForegroundPressed\" Color=\"White\"/>\r\n\r\n                <SolidColorBrush x:Key=\"ButtonBackground\" Color=\"{ThemeResource SuccessColour}\"/>\r\n                <SolidColorBrush x:Key=\"ButtonBorderBrush\" Color=\"{ThemeResource SuccessColour}\"/>\r\n\r\n                <SolidColorBrush x:Key=\"ButtonBackgroundPointerOver\" Color=\"{ThemeResource SuccessLight1Colour}\"/>\r\n                <SolidColorBrush x:Key=\"ButtonBorderBrushPointerOver\" Color=\"{ThemeResource SuccessLight1Colour}\"/>\r\n\r\n                <SolidColorBrush x:Key=\"ButtonBackgroundPressed\" Color=\"{ThemeResource SuccessDark1Colour}\"/>\r\n                <SolidColorBrush x:Key=\"ButtonBorderBrushPressed\" Color=\"{ThemeResource SuccessDark1Colour}\"/>\r\n            </Button.Resources>\r\n        </Button>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"DangerButtonComponentTemplate\"\r\n                  x:DataType=\"components:ButtonComponentViewModel\">\r\n        <Button MinWidth=\"68\" BorderThickness=\"0\" Padding=\"12,8\" \r\n                Command=\"{x:Bind Execute}\"\r\n                Content=\"{x:Bind}\"\r\n                ContentTemplate=\"{StaticResource ButtonComponentContentTemplate}\">\r\n            <Button.Resources>\r\n                <SolidColorBrush x:Key=\"ButtonForeground\" Color=\"{ThemeResource DangerForegroundColor}\"/>\r\n                <SolidColorBrush x:Key=\"ButtonForegroundPointerOver\" Color=\"{ThemeResource DangerForegroundColor}\"/>\r\n                <SolidColorBrush x:Key=\"ButtonForegroundPressed\" Color=\"{ThemeResource DangerForegroundColor}\"/>\r\n\r\n                <SolidColorBrush x:Key=\"ButtonBackground\" Color=\"{ThemeResource DangerColour}\"/>\r\n                <SolidColorBrush x:Key=\"ButtonBorderBrush\" Color=\"{ThemeResource DangerColour}\"/>\r\n\r\n                <SolidColorBrush x:Key=\"ButtonBackgroundPointerOver\" Color=\"{ThemeResource DangerLight1Colour}\"/>\r\n                <SolidColorBrush x:Key=\"ButtonBorderBrushPointerOver\" Color=\"{ThemeResource DangerLight1Colour}\"/>\r\n\r\n                <SolidColorBrush x:Key=\"ButtonBackgroundPressed\" Color=\"{ThemeResource DangerDark1Colour}\"/>\r\n                <SolidColorBrush x:Key=\"ButtonBorderBrushPressed\" Color=\"{ThemeResource DangerDark1Colour}\"/>\r\n            </Button.Resources>\r\n        </Button>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"LinkButtonComponentTemplate\"\r\n                  x:DataType=\"components:ButtonComponentViewModel\">\r\n        <Button MinWidth=\"68\" BorderThickness=\"0\" Padding=\"12,8\"\r\n                Command=\"{x:Bind Execute}\"\r\n                Content=\"{x:Bind}\"\r\n                ContentTemplate=\"{StaticResource ButtonComponentContentTemplate}\"/>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"FallbackComponentTemplate\">\r\n        <TextBlock Foreground=\"{ThemeResource ErrorTextForegroundBrush}\" Text=\"This component is broken! Yell at me!\" />\r\n    </DataTemplate>\r\n\r\n    <Style TargetType=\"local:StickerControl\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:StickerControl\">\r\n                    <Border\r\n                        x:Name=\"Root\"\r\n                        Background=\"{TemplateBinding Background}\"\r\n                        BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                        BorderThickness=\"{TemplateBinding BorderThickness}\">\r\n                    </Border>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <DataTemplate x:Key=\"MessageEditControlsTemplate\" x:DataType=\"messages:MessageEditViewModel\">\r\n        <Grid x:Name=\"EditTools\"\r\n           Background=\"{ThemeResource CardBackgroundFillColorDefaultBrush}\"\r\n           BorderBrush=\"{ThemeResource CardStrokeColorDefaultBrush}\"\r\n           BorderThickness=\"1\"\r\n           CornerRadius=\"4\"\r\n           Padding=\"4\"\r\n           Margin=\"0,4,0,0\">\r\n\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"1*\" />\r\n                <ColumnDefinition Width=\"Auto\" />\r\n                <ColumnDefinition Width=\"Auto\" />\r\n            </Grid.ColumnDefinitions>\r\n            \r\n            <TextBox x:Name=\"MessageEditBox\"\r\n                  extensions:FocusExtensions.IsFocused=\"{x:Bind IsFocused}\"\r\n                  extensions:ShiftEnterExtensions.IsEnabled=\"True\"\r\n                  extensions:ShiftEnterExtensions.EnterCommand=\"{x:Bind CommitCommand}\"\r\n                  extensions:ShiftEnterExtensions.ShiftEnterCommand=\"{x:Bind InsertNewLineCommand}\"\r\n                  extensions:ShiftEnterExtensions.EscapeCommand=\"{x:Bind DiscardCommand}\"\r\n                  MaxHeight=\"100\"\r\n                  AcceptsReturn=\"False\"\r\n                  Style=\"{ThemeResource MessageTextBoxStyle}\"\r\n                  Text=\"{x:Bind Content, Mode=TwoWay}\"\r\n                  SelectionStart=\"{x:Bind SelectionStart, Mode=OneTime}\"\r\n                  TextWrapping=\"Wrap\" />\r\n\r\n            <Button x:Name=\"MessageEditFinishButton\"\r\n                 Grid.Column=\"1\"\r\n                 Content=\"&#xe8fb;\"\r\n                 Margin=\"4,0,0,0\"\r\n                 Style=\"{ThemeResource IconButtonStyle}\"\r\n                 Command=\"{x:Bind CommitCommand}\"/>\r\n\r\n            <Button x:Name=\"MessageEditCancelButton\"       \r\n                 Grid.Column=\"2\"\r\n                 Content=\"&#xe8bb;\"                                            \r\n                 Margin=\"4,0,0,0\"\r\n                 Style=\"{ThemeResource IconButtonStyle}\"\r\n                 Command=\"{x:Bind DiscardCommand}\"/>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <Style TargetType=\"local:MessageEditTools\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:MessageEditTools\">\r\n                    <ContentPresenter Content=\"{TemplateBinding ViewModel}\"\r\n                                      ContentTemplate=\"{StaticResource MessageEditControlsTemplate}\"\r\n                                      HorizontalAlignment=\"Stretch\"\r\n                                      HorizontalContentAlignment=\"Stretch\"/>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <SolidColorBrush x:Key=\"MentionedMessageBackgroundBrush\" Color=\"{ThemeResource SystemAccentColor}\" Opacity=\"0.16666\"/>\r\n\r\n    <DataTemplate x:Key=\"MessageContentTemplate\" x:DataType=\"messages:MessageViewModel\">\r\n        <UserControl HorizontalAlignment=\"Stretch\" HorizontalContentAlignment=\"Stretch\"\r\n                     VerticalAlignment=\"Stretch\" VerticalContentAlignment=\"Stretch\">\r\n            <Grid x:Name=\"MainBorder\"\r\n                     ContextFlyout=\"{StaticResource MessageContextFlyout}\"\r\n                     Background=\"Transparent\"\r\n                     BorderBrush=\"Transparent\"\r\n                     BorderThickness=\"4,0,0,0\">\r\n                <VisualStateManager.VisualStateGroups>\r\n                    <VisualStateGroup x:Name=\"Mentions\">\r\n                        <VisualState x:Name=\"NoMention\">\r\n                            <VisualState.StateTriggers>\r\n                                <StateTrigger x:Name=\"NoMentionStateTrigger\" IsActive=\"{x:Bind converters:Static.Not(IsMention), Mode=OneWay}\"/>\r\n                            </VisualState.StateTriggers>\r\n                            <VisualState.Setters>\r\n                                <Setter Target=\"MainBorder.Background\" Value=\"Transparent\"/>\r\n                                <Setter Target=\"MainBorder.BorderBrush\" Value=\"Transparent\"/>\r\n                            </VisualState.Setters>\r\n                        </VisualState>\r\n                        <VisualState x:Name=\"Mention\">\r\n                            <VisualState.StateTriggers>\r\n                                <StateTrigger x:Name=\"MentionStateTrigger\" IsActive=\"{x:Bind IsMention, Mode=OneWay}\"/>\r\n                            </VisualState.StateTriggers>\r\n                            <VisualState.Setters>\r\n                                <Setter Target=\"MainBorder.BorderBrush\" Value=\"{ThemeResource SystemControlBackgroundAccentBrush}\"/>\r\n                                <Setter Target=\"MainBorder.Background\" Value=\"{ThemeResource MentionedMessageBackgroundBrush}\" />\r\n                            </VisualState.Setters>\r\n                        </VisualState>\r\n                    </VisualStateGroup>\r\n                    <VisualStateGroup x:Name=\"Size\">\r\n                        <VisualState x:Name=\"DefaultState\">\r\n                            <VisualState.StateTriggers>\r\n                                <StateTrigger x:Name=\"DefaultSizeTrigger\" IsActive=\"{x:Bind converters:Static.Is(State, messages:MessageViewModelState.Default), Mode=OneWay}\"/>\r\n                            </VisualState.StateTriggers>\r\n                            <VisualState.Setters>\r\n                                <Setter Target=\"MainBorder.Padding\" Value=\"8,8,16,0\"/>\r\n                                <Setter Target=\"MainBorder.Margin\" Value=\"0,0,0,0\"/>\r\n                            </VisualState.Setters>\r\n                        </VisualState>\r\n                        <VisualState x:Name=\"NormalState\">\r\n                            <VisualState.StateTriggers>\r\n                                <StateTrigger x:Name=\"NormalSizeTrigger\" IsActive=\"{x:Bind converters:Static.Is(State, messages:MessageViewModelState.Normal), Mode=OneWay}\"/>\r\n                            </VisualState.StateTriggers>\r\n                            <VisualState.Setters>\r\n                                <Setter Target=\"MainBorder.Padding\" Value=\"8,8,16,0\"/>\r\n                                <Setter Target=\"MainBorder.Margin\" Value=\"0,12,0,0\"/>\r\n                            </VisualState.Setters>\r\n                        </VisualState>\r\n                        <VisualState x:Name=\"CollapsedState\">\r\n                            <VisualState.StateTriggers>\r\n                                <StateTrigger x:Name=\"CollapsedSizeTrigger\" IsActive=\"{x:Bind converters:Static.Is(State, messages:MessageViewModelState.Collapsed), Mode=OneWay}\"/>\r\n                            </VisualState.StateTriggers>\r\n                            <VisualState.Setters>\r\n                                <Setter Target=\"MainBorder.Padding\" Value=\"8,2,16,0\"/>\r\n                                <Setter Target=\"MainBorder.Margin\" Value=\"0,0,0,0\"/>\r\n                            </VisualState.Setters>\r\n                        </VisualState>\r\n                        <VisualState x:Name=\"EditingState\">\r\n                            <VisualState.StateTriggers>\r\n                                <StateTrigger x:Name=\"EditingSizeTrigger\" IsActive=\"{x:Bind converters:Static.Is(State, messages:MessageViewModelState.Editing), Mode=OneWay}\"/>\r\n                            </VisualState.StateTriggers>\r\n                            <VisualState.Setters>\r\n                                <Setter Target=\"MainBorder.Padding\" Value=\"8,8,16,0\"/>\r\n                                <Setter Target=\"MainBorder.Margin\" Value=\"0,12,0,0\"/>\r\n                            </VisualState.Setters>\r\n                        </VisualState>\r\n                    </VisualStateGroup>\r\n                </VisualStateManager.VisualStateGroups>\r\n\r\n                <Grid x:Name=\"RootGrid\">\r\n                    <Grid.RowDefinitions>\r\n                        <RowDefinition Height=\"Auto\"/>\r\n                        <RowDefinition Height=\"Auto\"/>\r\n                    </Grid.RowDefinitions>                    \r\n\r\n                    <Grid x:Name=\"ReferencedMessageContainer\"\r\n                          x:Load=\"{x:Bind converters:Static.NotNull(ReferencedMessage)}\"\r\n                          x:Phase=\"5\"\r\n                          Margin=\"56,-8,0,4\" >\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"Auto\"/>\r\n                            <ColumnDefinition Width=\"Auto\"/>\r\n                            <ColumnDefinition Width=\"Auto\"/>\r\n                            <ColumnDefinition Width=\"Auto\"/>\r\n                        </Grid.ColumnDefinitions>\r\n\r\n                        <TextBlock Text=\"&#xE97A;\" Margin=\"0,0,4,0\" VerticalAlignment=\"Center\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Foreground=\"{ThemeResource SystemControlForegroundAccentBrush}\"/>\r\n\r\n                        <Ellipse x:Name=\"ReplyAvatarContainer\"\r\n                                        Width=\"16\"\r\n                                        Height=\"16\"\r\n                                        Margin=\"0,0,4,0\"\r\n                                        Grid.Column=\"1\">\r\n                            <Ellipse.Fill>\r\n                                <ImageBrush>\r\n                                    <ImageBrush.ImageSource>\r\n                                        <BitmapImage DecodePixelWidth=\"16\"\r\n                                                     DecodePixelHeight=\"16\"\r\n                                                     DecodePixelType=\"Logical\" \r\n                                                     UriSource=\"{x:Bind ReferencedMessage.Author.AvatarUrl}\" />\r\n                                    </ImageBrush.ImageSource>\r\n                                </ImageBrush>\r\n                            </Ellipse.Fill>\r\n                        </Ellipse>\r\n\r\n                        <controls:UsernameControl Grid.Column=\"2\" FontWeight=\"Bold\" User=\"{x:Bind ReferencedMessage.Author}\" FontSize=\"12\" IconSize=\"12\"/>\r\n\r\n                        <controls:MarkdownTextBlock x:Name=\"ReplyMarkdown\"\r\n                                                Grid.Column=\"3\"\r\n                                                FontSize=\"12\"\r\n                                                InlineOnly=\"True\"\r\n                                                Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\"\r\n                                                Channel=\"{x:Bind Channel.Channel}\"\r\n                                                Text=\"{x:Bind ReferencedMessage.Content}\" \r\n                                                IsTextSelectionEnabled=\"True\"\r\n                                                IsEnabled=\"False\"\r\n                                                VerticalAlignment=\"Center\"\r\n                                                Margin=\"6,0\" />\r\n\r\n                    </Grid>\r\n\r\n                    <Grid Grid.Row=\"2\">\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"48\"/>\r\n                            <ColumnDefinition Width=\"*\"/>\r\n                        </Grid.ColumnDefinitions>\r\n\r\n                        <Ellipse x:Name=\"ImageContainer\"\r\n                                 x:Load=\"{x:Bind converters:Static.IsNot(State, messages:MessageViewModelState.Collapsed),Mode=OneWay}\"   \r\n                                 DataContextChanged=\"ImageContainer_DataContextChanged\"\r\n                                 Width=\"36\"\r\n                                 Height=\"36\"\r\n                                 VerticalAlignment=\"Top\">\r\n                            <Ellipse.Fill>\r\n                                <ImageBrush x:Name=\"ProfileImageBrush\">\r\n                                    <ImageBrush.ImageSource>\r\n                                        <BitmapImage DecodePixelWidth=\"36\"\r\n                                                     DecodePixelHeight=\"36\"\r\n                                                     DecodePixelType=\"Logical\" \r\n                                                     UriSource=\"{x:Bind Author.AvatarUrl}\" />\r\n                                    </ImageBrush.ImageSource>\r\n                                </ImageBrush>\r\n                            </Ellipse.Fill>\r\n                        </Ellipse>\r\n\r\n                        <Grid x:Name=\"MessageContent\" Grid.Column=\"1\" Margin=\"8,0,0,0\">\r\n                            <Grid.RowDefinitions>\r\n                                <RowDefinition Height=\"Auto\"/>\r\n                                <RowDefinition Height=\"Auto\"/>\r\n                                <RowDefinition Height=\"Auto\"/>\r\n                            </Grid.RowDefinitions>\r\n                            <StackPanel x:Name=\"AuthorContainer\" \r\n                                        x:Load=\"{x:Bind converters:Static.IsNot(State, messages:MessageViewModelState.Collapsed),Mode=OneWay}\"   \r\n                                        Orientation=\"Horizontal\" Grid.Row=\"0\">\r\n                                <controls:UsernameControl FontWeight=\"Bold\" User=\"{x:Bind Author}\" FontSize=\"14\" IconSize=\"14\" />\r\n\r\n                                <TextBlock Margin=\"8,1\" \r\n                                           x:Phase=\"4\"                               \r\n                                           FontSize=\"11\"\r\n                                           VerticalAlignment=\"Bottom\" \r\n                                           Text=\"{x:Bind Timestamp, Converter={StaticResource DateTimeConverter}, Mode=OneWay}\" \r\n                                           Opacity=\"0.4\"/>\r\n                            </StackPanel>\r\n\r\n                            <controls:MarkdownTextBlock x:Name=\"Markdown\"\r\n                                                        x:Load=\"{x:Bind converters:Static.IsNot(State, messages:MessageViewModelState.Editing),Mode=OneWay}\"   \r\n                                                        Grid.Row=\"1\"\r\n                                                        Channel=\"{x:Bind Channel.Channel}\"\r\n                                                        Text=\"{x:Bind Content}\" \r\n                                                        AllowHugeEmoji=\"True\"\r\n                                                        IsTextSelectionEnabled=\"True\" \r\n                                                        WrapCodeBlock=\"True\" \r\n                                                        Margin=\"0,0,2,0\" />\r\n\r\n                            <ContentControl x:Name=\"MessageEditTools\" \r\n                                             x:Load=\"{x:Bind converters:Static.Is(State, messages:MessageViewModelState.Editing),Mode=OneWay}\"   \r\n                                             Content=\"{x:Bind EditViewModel, Mode=OneWay}\"\r\n                                             ContentTemplate=\"{StaticResource MessageEditControlsTemplate}\"\r\n                                             HorizontalAlignment=\"Stretch\"\r\n                                             HorizontalContentAlignment=\"Stretch\"\r\n                                             Grid.Row=\"1\"/>\r\n\r\n                            <StackPanel x:Name=\"AdditionalContent\" \r\n                                        Grid.Row=\"2\">\r\n                                <ItemsControl x:Name=\"EmbedsContainer\"\r\n                                              x:Phase=\"3\"\r\n                                              ItemTemplateSelector=\"{ThemeResource EmbedTemplateSelector}\" \r\n                                              ItemsSource=\"{x:Bind Embeds}\"\r\n                                              HorizontalAlignment=\"Left\"/>\r\n\r\n                                <ItemsControl x:Name=\"AttachmentsContainer\"\r\n                                              x:Phase=\"3\"\r\n                                              ItemTemplate=\"{ThemeResource DefaultAttachmentTemplate}\" \r\n                                              ItemsSource=\"{x:Bind Attachments}\"\r\n                                              HorizontalAlignment=\"Left\"/>\r\n\r\n                                <ItemsControl x:Name=\"StickersContainer\"\r\n                                              x:Phase=\"4\"\r\n                                              ItemTemplate=\"{ThemeResource DefaultStickerTemplate}\" \r\n                                              ItemsSource=\"{x:Bind Stickers}\"\r\n                                              HorizontalAlignment=\"Left\"/>\r\n\r\n                                <ItemsControl x:Name=\"ComponentsContainer\"\r\n                                              x:Phase=\"4\"\r\n                                              ItemTemplateSelector=\"{StaticResource ComponentTemplateSelector}\" \r\n                                              ItemsSource=\"{x:Bind Components}\"\r\n                                              HorizontalAlignment=\"Left\"/>\r\n\r\n                                <ItemsControl x:Name=\"ReactionsContainer\"\r\n                                              x:Phase=\"3\"\r\n                                              Margin=\"0,4,0,0\"\r\n                                              ItemTemplate=\"{ThemeResource DefaultReactionTemplate}\" \r\n                                              ItemsSource=\"{x:Bind Reactions}\">\r\n                                    <ItemsControl.ItemsPanel>\r\n                                        <ItemsPanelTemplate>\r\n                                            <toolkit:WrapPanel Orientation=\"Horizontal\" HorizontalSpacing=\"4\" VerticalSpacing=\"4\"/>\r\n                                        </ItemsPanelTemplate>\r\n                                    </ItemsControl.ItemsPanel>\r\n                                </ItemsControl>\r\n                            </StackPanel>\r\n                        </Grid>\r\n                    </Grid>\r\n\r\n                </Grid>\r\n            </Grid>\r\n        </UserControl>\r\n    </DataTemplate>\r\n\r\n    <Style TargetType=\"local:MessageControl\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:MessageControl\">\r\n                    <ContentControl ContentTemplate=\"{StaticResource MessageContentTemplate}\"\r\n                                    Content=\"{TemplateBinding MessageViewModel}\" \r\n                                    Padding=\"{TemplateBinding Padding}\"/>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style TargetType=\"local:SystemMessageControl\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:SystemMessageControl\">\r\n                    <Grid Margin=\"0,12,8,0\" DataContext=\"{TemplateBinding MessageViewModel}\">\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"auto\"/>\r\n                            <ColumnDefinition Width=\"*\"/>\r\n                        </Grid.ColumnDefinitions>\r\n                        <TextBlock\r\n                            Margin=\"24,0,22,0\"\r\n                            FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\r\n                            FontSize=\"20\"\r\n                            Text=\"{Binding SystemMessageSymbol}\"\r\n                            Foreground=\"{ThemeResource SystemControlForegroundAccentBrush}\"/>\r\n\r\n                        <controls:MarkdownTextBlock Grid.Column=\"1\" IsSystemMessage=\"True\" Channel=\"{Binding Channel.Channel}\" Text=\"{Binding SystemMessageText}\"/>\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n</ResourceDictionary>\r\n"
  },
  {
    "path": "Unicord.Universal/Themes/Controls/Messages.xaml.cs",
    "content": "﻿using System;\nusing Unicord.Universal.Models.Messages;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Media.Imaging;\nusing Windows.UI.Xaml.Shapes;\n\nnamespace Unicord.Universal.Resources.Controls\n{\n    public partial class Messages : ResourceDictionary\n    {\n        public Messages()\n        {\n            InitializeComponent();\n        }\n\n        public Uri ToUri(object obj) => (Uri)obj;\n\n        private void ImageContainer_DataContextChanged(FrameworkElement sender, DataContextChangedEventArgs args)\n        {\n            ImageBrush imageBrush = null;\n            if (imageBrush == null)\n            {\n                var container = (Ellipse)sender;\n                if (container == null || container.Fill == null)\n                    return;\n\n                imageBrush = (ImageBrush)container.Fill;\n            }\n\n            imageBrush.ImageSource = null;\n\n            if (args.NewValue is not MessageViewModel message || message.Author == null || message.Author.AvatarUrl == null)\n                return;\n\n            imageBrush.ImageSource = new BitmapImage\n            {\n                UriSource = new Uri(message.Author.AvatarUrl),\n                DecodePixelHeight = 36,\n                DecodePixelWidth = 36,\n                DecodePixelType = DecodePixelType.Logical\n            };\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Themes/Controls/Permissions.xaml",
    "content": "﻿<ResourceDictionary\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\r\n\r\n</ResourceDictionary>\r\n"
  },
  {
    "path": "Unicord.Universal/Themes/Controls/Presences.xaml",
    "content": "﻿<ResourceDictionary\r\n    x:Class=\"Unicord.Universal.Resources.Controls.Presences\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Controls.Presence\" \r\n    xmlns:converters=\"using:Unicord.Universal.Converters\">\r\n\r\n    <Color x:Key=\"OfflinePresenceColour\">#FF808080</Color>\r\n    <Color x:Key=\"OnlinePresenceColour\">#FF33CC87</Color>\r\n    <Color x:Key=\"IdlePresenceColour\">#FFFFA500</Color>\r\n    <Color x:Key=\"DoNotDisturbPresenceColour\">#FFEE4447</Color>\r\n    <Color x:Key=\"FallbackPresenceColour\">#FF000000</Color>\r\n\r\n    <!-- src: https://www.youtube.com/about/brand-resources/ -->\r\n    <Color x:Key=\"StreamingYouTubePresenceColour\">#FFfd0036</Color>\r\n\r\n    <!-- src: https://brand.twitch.tv/ -->\r\n    <Color x:Key=\"StreamingTwitchPresenceColour\">#FF9146FF</Color>\r\n\r\n    <!-- /Assets/Online.svg -->\r\n    <x:String x:Key=\"OnlinePresenceGeometry\">M 0 16 C 0 7.169 7.169 0 16 0 C 24.831 0 32 7.169 32 16 C 32 24.831 24.831 32 16 32 C 7.169 32 0 24.831 0 16 Z</x:String>\r\n    <!-- /Assets/Away.svg -->\r\n    <x:String x:Key=\"IdlePresenceGeometry\">M 22.579 1.421 C 28.134 3.926 32 9.515 32 16 C 32 24.831 24.831 32 16 32 C 9.515 32 3.926 28.134 1.421 22.579 C 3.426 23.494 5.654 24 8 24 C 16.831 24 24 16.831 24 8 C 24 5.654 23.494 3.426 22.579 1.421 Z</x:String>\r\n    <!-- /Assets/DoNotDisturb.svg -->\r\n    <x:String x:Key=\"DoNotDisturbPresenceGeometry\">M 0 16 C 0 7.169 7.169 0 16 0 C 24.831 0 32 7.169 32 16 C 32 24.831 24.831 32 16 32 C 7.169 32 0 24.831 0 16 Z  M 3 13 L 29 13 L 29 19 L 3 19 L 3 13 Z</x:String>\r\n    <!-- /Assets/Streaming.svg -->\r\n    <x:String x:Key=\"StreamingPresenceGeometry\">M 0 16 C 0 7.169 7.169 0 16 0 C 24.831 0 32 7.169 32 16 C 32 24.831 24.831 32 16 32 C 7.169 32 0 24.831 0 16 Z  M 28 16 L 19 21.196 L 10 26.392 L 10 16 L 10 5.608 L 19 10.804 L 28 16 Z</x:String>\r\n    <!-- /Assets/Offline.svg -->\r\n    <x:String x:Key=\"OfflinePresenceGeometry\">M 0 16 C 0 7.169 7.169 0 16 0 C 24.831 0 32 7.169 32 16 C 32 24.831 24.831 32 16 32 C 7.169 32 0 24.831 0 16 Z  M 8 16 C 8 11.585 11.585 8 16 8 C 20.415 8 24 11.585 24 16 C 24 20.415 20.415 24 16 24 C 11.585 24 8 20.415 8 16 Z</x:String>\r\n\r\n\r\n    <converters:PresenceColourConverter x:Key=\"PresenceColourConverter\" x:Name=\"PresenceColourConverter\" \r\n                                        Offline=\"{StaticResource OfflinePresenceColour}\"\r\n                                        Online=\"{StaticResource OnlinePresenceColour}\"\r\n                                        Idle=\"{StaticResource IdlePresenceColour}\"\r\n                                        DoNotDisturb=\"{StaticResource DoNotDisturbPresenceColour}\"\r\n                                        StreamingTwitch=\"{StaticResource StreamingTwitchPresenceColour}\"\r\n                                        StreamingYouTube=\"{StaticResource StreamingYouTubePresenceColour}\"\r\n                                        Fallback=\"{StaticResource FallbackPresenceColour}\"/>\r\n\r\n    <converters:PresenceGeometryConverter x:Key=\"PresenceGeometryConverter\" x:Name=\"PresenceGeometryConverter\"\r\n                                            Offline=\"{StaticResource OfflinePresenceGeometry}\"\r\n                                            Online=\"{StaticResource OnlinePresenceGeometry}\"\r\n                                            Idle=\"{StaticResource IdlePresenceGeometry}\"\r\n                                            DoNotDisturb=\"{StaticResource DoNotDisturbPresenceGeometry}\"\r\n                                            Streaming=\"{StaticResource StreamingPresenceGeometry}\"\r\n                                            Fallback=\"{StaticResource OnlinePresenceGeometry}\"/>\r\n    \r\n    <Style TargetType=\"local:StatusIndicator\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:StatusIndicator\">\r\n                    <Viewbox x:Name=\"PresenceViewBox\"\r\n                             Width=\"{TemplateBinding Width}\"\r\n                             Height=\"{TemplateBinding Height}\"\r\n                             DataContext=\"{TemplateBinding Presence}\">\r\n                        <Path x:Name=\"PresenceEllipse\"\r\n                                      Width=\"32\"\r\n                                      Height=\"32\"\r\n                                      Data=\"{Binding PresenceGeometry}\">\r\n                            <Path.Fill>\r\n                                <SolidColorBrush Color=\"{Binding Colour}\"/>\r\n                            </Path.Fill>\r\n                        </Path>\r\n                    </Viewbox>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n</ResourceDictionary>\r\n"
  },
  {
    "path": "Unicord.Universal/Themes/Controls/Presences.xaml.cs",
    "content": "﻿using Windows.UI.Xaml;\r\n\r\nnamespace Unicord.Universal.Resources.Controls\r\n{\r\n    public partial class Presences : ResourceDictionary\r\n    {\r\n        public Presences()\r\n        {\r\n            InitializeComponent();\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Themes/Controls/UniversalWebView.xaml",
    "content": "﻿<ResourceDictionary\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Controls\">\r\n\r\n    <Style TargetType=\"local:UniversalWebView\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:UniversalWebView\">\r\n                    <Border x:Name=\"PART_Root\"\r\n                            Background=\"{TemplateBinding Background}\"\r\n                            BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                            BorderThickness=\"{TemplateBinding BorderThickness}\"/>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n</ResourceDictionary>\r\n"
  },
  {
    "path": "Unicord.Universal/Themes/Controls/Users.xaml",
    "content": "﻿<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Unicord.Universal.Controls.Users\" xmlns:presence=\"using:Unicord.Universal.Controls.Presence\">\n    \n    <!-- /Assets/SmallMask.svg -->\n    <x:String x:Key=\"AvatarGeometrySmall\">M 31.042 21.478 C 31.66 19.767 32 17.923 32 16 C 32 7.169 24.831 0 16 0 C 7.169 0 0 7.169 0 16 C 0 24.831 7.169 32 16 32 C 17.923 32 19.767 31.66 21.478 31.042 C 19.397 29.832 18 27.578 18 25 C 18 21.137 21.137 18 25 18 C 27.578 18 29.832 19.397 31.042 21.478 Z</x:String>\n\n    <!-- /Assets/Mask.svg -->\n    <x:String x:Key=\"AvatarGeometryMedium\">M 61.408 44.564 C 63.084 40.715 64 36.464 64 32 C 64 14.339 49.661 0 32 0 C 14.339 0 0 14.339 0 32 C 0 49.661 14.339 64 32 64 C 36.464 64 40.715 63.084 44.564 61.408 C 41.783 59.214 40 55.814 40 52 C 40 45.377 45.377 40 52 40 C 55.814 40 59.214 41.783 61.408 44.564 Z</x:String>\n\n    <!-- /Assets/LargeMask.svg -->\n    <x:String x:Key=\"AvatarGeometryLarge\">M 92.112 66.846 C 94.626 61.073 96 54.696 96 48 C 96 21.509 74.492 0 48 0 C 21.509 0 0 21.509 0 48 C 0 74.492 21.509 96 48 96 C 54.696 96 61.073 94.626 66.846 92.112 C 62.675 88.821 60 83.721 60 78 C 60 68.066 68.066 60 78 60 C 83.721 60 88.821 62.675 92.112 66.846 Z</x:String>\n\n    <!-- /Assets/HugeMask.svg -->\n    <x:String x:Key=\"AvatarGeometryHuge\">M 122.843 89.162 C 126.166 81.441 128 72.933 128 64 C 128 28.677 99.323 0 64 0 C 28.677 0 0 28.677 0 64 C 0 99.323 28.677 128 64 128 C 72.933 128 81.441 126.166 89.162 122.843 C 83.58 118.456 80 111.643 80 104 C 80 90.754 90.754 80 104 80 C 111.643 80 118.456 83.58 122.843 89.162 Z</x:String>\n\n\n    <Style TargetType=\"local:AvatarControl\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"local:AvatarControl\">\n                    <Ellipse x:Name=\"ImageEllipse\"\n                             Width=\"{TemplateBinding Width}\"\n                             Height=\"{TemplateBinding Height}\">\n                        <Ellipse.Fill>\n                            <ImageBrush>\n                                <ImageBrush.ImageSource>\n                                    <BitmapImage UriSource=\"{Binding Source, RelativeSource={RelativeSource TemplatedParent}}\" \n                                                 DecodePixelWidth=\"{TemplateBinding Width}\"\n                                                 DecodePixelType=\"Logical\"/>\n                                </ImageBrush.ImageSource>\n                            </ImageBrush>\n                        </Ellipse.Fill>\n                    </Ellipse>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"SmallAvatarWithPresenceStyle\" TargetType=\"local:AvatarControl\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"local:AvatarControl\">\n                    <Viewbox Stretch=\"Uniform\" \n                             Width=\"{TemplateBinding Width}\"\n                             Height=\"{TemplateBinding Height}\">\n                        <Canvas Width=\"32\"\n                                Height=\"32\">\n                            <Path x:Name=\"ImagePath\"\n                                  Width=\"32\"\n                                  Height=\"32\"\n                                  StrokeThickness=\"0\"\n                                  Data=\"{StaticResource AvatarGeometrySmall}\">\n                                <Path.Fill>\n                                    <ImageBrush>\n                                        <ImageBrush.ImageSource>\n                                            <BitmapImage UriSource=\"{Binding Source, RelativeSource={RelativeSource TemplatedParent}}\" \n                                                         DecodePixelWidth=\"{TemplateBinding Width}\"\n                                                         DecodePixelType=\"Logical\"/>\n                                        </ImageBrush.ImageSource>\n                                    </ImageBrush>\n                                </Path.Fill>\n                            </Path>\n\n                            <presence:StatusIndicator x:Name=\"StatusIndicator\"\n                                                      Presence=\"{TemplateBinding Presence}\"\n                                                      Width=\"10\"\n                                                      Height=\"10\"\n                                                      Canvas.Left=\"20\"\n                                                      Canvas.Top=\"20\" />\n                        </Canvas>\n                    </Viewbox>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"MediumAvatarWithPresenceStyle\" TargetType=\"local:AvatarControl\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"local:AvatarControl\">\n                    <Viewbox Stretch=\"Uniform\" \n                             Width=\"{TemplateBinding Width}\"\n                             Height=\"{TemplateBinding Height}\">\n                        <Canvas Width=\"64\"\n                                Height=\"64\">\n                            <Path x:Name=\"ImagePath\"\n                                  Width=\"64\"\n                                  Height=\"64\"\n                                  StrokeThickness=\"0\"\n                                  Data=\"{StaticResource AvatarGeometryMedium}\">\n                                <Path.Fill>\n                                    <ImageBrush>\n                                        <ImageBrush.ImageSource>\n                                            <BitmapImage UriSource=\"{Binding Source, RelativeSource={RelativeSource TemplatedParent}}\" \n                                                         DecodePixelWidth=\"{TemplateBinding Width}\"\n                                                         DecodePixelType=\"Logical\"/>\n                                        </ImageBrush.ImageSource>\n                                    </ImageBrush>\n                                </Path.Fill>\n                            </Path>\n\n                            <presence:StatusIndicator x:Name=\"StatusIndicator\"\n                                                      Presence=\"{TemplateBinding Presence}\"\n                                                      Width=\"18\"\n                                                      Height=\"18\"\n                                                      Canvas.Left=\"43\"\n                                                      Canvas.Top=\"43\" />\n                        </Canvas>\n                    </Viewbox>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"LargeAvatarWithPresenceStyle\" TargetType=\"local:AvatarControl\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"local:AvatarControl\">\n                    <Viewbox Stretch=\"Uniform\" \n                             Width=\"{TemplateBinding Width}\"\n                             Height=\"{TemplateBinding Height}\">\n                        <Canvas Width=\"96\"\n                                Height=\"96\">\n                            <Path x:Name=\"ImagePath\"\n                                  Width=\"96\"\n                                  Height=\"96\"\n                                  StrokeThickness=\"0\"\n                                  Data=\"{StaticResource AvatarGeometryLarge}\">\n                                <Path.Fill>\n                                    <ImageBrush>\n                                        <ImageBrush.ImageSource>\n                                            <BitmapImage UriSource=\"{Binding Source, RelativeSource={RelativeSource TemplatedParent}}\" \n                                                         DecodePixelWidth=\"{TemplateBinding Width}\"\n                                                         DecodePixelType=\"Logical\"/>\n                                        </ImageBrush.ImageSource>\n                                    </ImageBrush>\n                                </Path.Fill>\n                            </Path>\n\n                            <presence:StatusIndicator x:Name=\"StatusIndicator\"\n                                                      Presence=\"{TemplateBinding Presence}\"\n                                                      Width=\"28\"\n                                                      Height=\"28\"\n                                                      Canvas.Left=\"64\"\n                                                      Canvas.Top=\"64\"/>\n                        </Canvas>\n                    </Viewbox>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"HugeAvatarWithPresenceStyle\" TargetType=\"local:AvatarControl\">\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"local:AvatarControl\">\n                    <Viewbox Stretch=\"Uniform\" \n                             Width=\"{TemplateBinding Width}\"\n                             Height=\"{TemplateBinding Height}\">\n                        <Canvas Width=\"128\"\n                                Height=\"128\">\n                            <Path x:Name=\"ImagePath\"\n                                  Width=\"128\"\n                                  Height=\"128\"\n                                  StrokeThickness=\"0\"\n                                  Data=\"{StaticResource AvatarGeometryHuge}\">\n                                <Path.Fill>\n                                    <ImageBrush>\n                                        <ImageBrush.ImageSource>\n                                            <BitmapImage UriSource=\"{Binding Source, RelativeSource={RelativeSource TemplatedParent}}\" \n                                                         DecodePixelWidth=\"{TemplateBinding Width}\"\n                                                         DecodePixelType=\"Logical\"/>\n                                        </ImageBrush.ImageSource>\n                                    </ImageBrush>\n                                </Path.Fill>\n                            </Path>\n\n                            <presence:StatusIndicator x:Name=\"StatusIndicator\"\n                                                      Presence=\"{TemplateBinding Presence}\"\n                                                      Width=\"36\"\n                                                      Height=\"36\"\n                                                      Canvas.Left=\"86\"\n                                                      Canvas.Top=\"86\"/>\n                        </Canvas>\n                    </Viewbox>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n</ResourceDictionary>\n"
  },
  {
    "path": "Unicord.Universal/Themes/CustomStyles.xaml",
    "content": "﻿<ResourceDictionary\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Resources\"\r\n    xmlns:media=\"using:Microsoft.UI.Xaml.Media\"\r\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\"\r\n    xmlns:controls1=\"using:Unicord.Universal.Controls\"\r\n    xmlns:Windows10FallCreatorsUpdate=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 5)\">\r\n\r\n    <Style x:Key=\"DropShadowPanelStyle\" TargetType=\"controls:DropShadowPanel\">\r\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\r\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\r\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\r\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"/>\r\n        <Setter Property=\"Color\" Value=\"{ThemeResource SystemChromeBlackMediumLowColor}\" />\r\n    </Style>\r\n\r\n    <Style TargetType=\"Thumb\" x:Key=\"SliderThumbStyle\">\r\n        <Setter Property=\"BorderThickness\" Value=\"0\" />\r\n        <Setter Property=\"Background\" Value=\"{ThemeResource SliderThumbBackground}\" />\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"Thumb\">\r\n                    <Border\r\n                        Background=\"{TemplateBinding Background}\"\r\n                        BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                        BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                        CornerRadius=\"10\" />\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style x:Key=\"VideoSliderThumbStyle\" TargetType=\"Thumb\">\r\n        <Setter Property=\"BorderThickness\" Value=\"0\"/>\r\n        <Setter Property=\"Background\" Value=\"{ThemeResource SliderThumbBackground}\"/>\r\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource SystemControlBackgroundChromeMediumBrush}\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"Thumb\">\r\n                    <Canvas Margin=\"24,0\">\r\n                        <Border Canvas.Left=\"12\" Canvas.Top=\"12\" HorizontalAlignment=\"Center\" VerticalAlignment=\"Center\" Height=\"32\" BorderThickness=\"1\" BorderBrush=\"{TemplateBinding Background}\"/>\r\n                        <Ellipse x:Name=\"ellipse\" Width=\"26\" Height=\"26\" Fill=\"{TemplateBinding Foreground}\" StrokeThickness=\"2\" Stroke=\"{TemplateBinding Background}\"/>\r\n                    </Canvas>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style x:Key=\"MediaSliderProgressBarStyle\" TargetType=\"ProgressBar\">\r\n        <Setter Property=\"Height\" Value=\"{ThemeResource SliderTrackThemeHeight}\"/>\r\n        <Setter Property=\"Minimum\" Value=\"0\"/>\r\n        <Setter Property=\"Maximum\" Value=\"100\"/>\r\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource SystemControlHighlightChromeAltLowBrush}\"/>\r\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\r\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\"/>\r\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\r\n    </Style>\r\n\r\n    <Style x:Key=\"MediaTextBlockStyle\" TargetType=\"TextBlock\">\r\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\r\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource SystemControlForegroundBaseHighBrush}\"/>\r\n        <Setter Property=\"FontSize\" Value=\"{ThemeResource MTCMediaFontSize}\"/>\r\n        <Setter Property=\"FontFamily\" Value=\"{ThemeResource MTCMediaFontFamily}\"/>\r\n        <Setter Property=\"Style\" Value=\"{ThemeResource CaptionTextBlockStyle}\"/>\r\n        <Setter Property=\"IsTextScaleFactorEnabled\" Value=\"False\"/>\r\n    </Style>\r\n\r\n    <Style x:Key=\"SymbolTextBlockStyle\" TargetType=\"TextBlock\">\r\n        <Setter Property=\"FontFamily\" Value=\"{ThemeResource SymbolThemeFontFamily}\"/>\r\n        <Setter Property=\"FontSize\" Value=\"16\"/>\r\n    </Style>\r\n\r\n    <Style TargetType=\"controls1:CustomMediaTransportControls\">\r\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\r\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\r\n        <Setter Property=\"FlowDirection\" Value=\"LeftToRight\"/>\r\n        <Setter Property=\"IsTextScaleFactorEnabled\" Value=\"False\"/>\r\n        <Setter Property=\"IsCompact\" Value=\"True\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"controls1:CustomMediaTransportControls\">\r\n                    <Grid x:Name=\"RootGrid\" Background=\"Transparent\">\r\n                        <Grid.Resources>\r\n                            <Style x:Key=\"MediaSliderStyle\" TargetType=\"Slider\" BasedOn=\"{StaticResource DefaultSliderStyle}\">\r\n                                <Setter Property=\"ManipulationMode\" Value=\"None\"/>\r\n                                <Setter Property=\"FocusVisualMargin\" Value=\"-7,0,-7,0\"/>\r\n                                <Setter Property=\"IsFocusEngagementEnabled\" Value=\"True\"/>\r\n                            </Style>\r\n                        </Grid.Resources>\r\n                        <VisualStateManager.VisualStateGroups>\r\n                            <VisualStateGroup x:Name=\"ControlPanelVisibilityStates\">\r\n                                <VisualState x:Name=\"ControlPanelFadeIn\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Duration=\"0:0:0.3\" Storyboard.TargetName=\"TranslateVertical\" Storyboard.TargetProperty=\"Y\" To=\"0\">\r\n                                            <DoubleAnimation.EasingFunction>\r\n                                                <ExponentialEase Exponent=\"7\" EasingMode=\"EaseOut\" />\r\n                                            </DoubleAnimation.EasingFunction>\r\n                                        </DoubleAnimation>\r\n                                        <DoubleAnimation Duration=\"0:0:0.3\" Storyboard.TargetName=\"ControlPanel_ControlPanelVisibilityStates_Border\" Storyboard.TargetProperty=\"Opacity\" To=\"1\">\r\n                                            <DoubleAnimation.EasingFunction>\r\n                                                <ExponentialEase Exponent=\"7\" EasingMode=\"EaseOut\" />\r\n                                            </DoubleAnimation.EasingFunction>\r\n                                        </DoubleAnimation>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"ControlPanelFadeOut\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ControlPanel_ControlPanelVisibilityStates_Border\" Storyboard.TargetProperty=\"IsHitTestVisible\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"False\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <DoubleAnimation Duration=\"0:0:0.300\" Storyboard.TargetName=\"TranslateVertical\" Storyboard.TargetProperty=\"Y\" To=\"100\">\r\n                                            <DoubleAnimation.EasingFunction>\r\n                                                <ExponentialEase Exponent=\"4.5\" EasingMode=\"EaseIn\" />\r\n                                            </DoubleAnimation.EasingFunction>\r\n                                        </DoubleAnimation>\r\n                                        <DoubleAnimation Duration=\"0:0:0.300\" Storyboard.TargetName=\"ControlPanel_ControlPanelVisibilityStates_Border\" Storyboard.TargetProperty=\"Opacity\" To=\"0\">\r\n                                            <DoubleAnimation.EasingFunction>\r\n                                                <ExponentialEase Exponent=\"4.5\" EasingMode=\"EaseIn\" />\r\n                                            </DoubleAnimation.EasingFunction>\r\n                                        </DoubleAnimation>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"MediaStates\">\r\n                                <VisualState x:Name=\"Normal\"/>\r\n                                <VisualState x:Name=\"Buffering\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"BufferingProgressBar.Visibility\" Value=\"Visible\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Loading\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"BufferingProgressBar.Visibility\" Value=\"Visible\"/>\r\n                                    </VisualState.Setters>\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Duration=\"0\" Storyboard.TargetName=\"ProgressSlider\" Storyboard.TargetProperty=\"Opacity\" To=\"0\"/>\r\n                                        <DoubleAnimation Duration=\"0\" Storyboard.TargetName=\"MediaControlsCommandBar\" Storyboard.TargetProperty=\"Opacity\" To=\"0\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Error\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"ErrorBorder.Visibility\" Value=\"Visible\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Disabled\">\r\n                                    <Storyboard/>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"MediaTransportControlMode\">\r\n                                <VisualState x:Name=\"NormalMode\"/>\r\n                                <VisualState x:Name=\"CompactMode\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"LeftSidePlayBorder.Visibility\" Value=\"Visible\"/>\r\n                                        <Setter Target=\"MediaTransportControls_Command_Border.(Grid.Column)\" Value=\"2\"/>\r\n                                        <Setter Target=\"MediaTransportControls_Command_Border.(Grid.Row)\" Value=\"1\"/>\r\n                                        <Setter Target=\"MediaControlsCommandBar.Margin\" Value=\"0\"/>\r\n                                        <Setter Target=\"PlayPauseButton.Visibility\" Value=\"Collapsed\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"PlayPauseStates\">\r\n                                <VisualState x:Name=\"PlayState\"/>\r\n                                <VisualState x:Name=\"PauseState\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"PlayPauseSymbolLeft.Text\" Value=\"&#xe769;\"/>\r\n                                        <Setter Target=\"PlayPauseSymbol.Text\" Value=\"&#xe769;\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"VolumeMuteStates\">\r\n                                <VisualState x:Name=\"VolumeState\"/>\r\n                                <VisualState x:Name=\"MuteState\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"AudioMuteSymbol.Text\" Value=\"&#xe74f;\"/>\r\n                                        <Setter Target=\"VolumeMuteSymbol.Text\" Value=\"&#xe74f;\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"FullWindowStates\">\r\n                                <VisualState x:Name=\"NonFullWindowState\"/>\r\n                                <VisualState x:Name=\"FullWindowState\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"FullWindowSymbol.Text\" Value=\"&#xe92c;\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n\r\n                            <VisualStateGroup x:Name=\"AudioSelectionAvailablityStates\">\r\n                                <VisualState x:Name=\"AudioSelectionAvailable\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"AudioTracksSelectionButton.Visibility\" Value=\"Visible\" />\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"AudioSelectionUnavailable\" />\r\n                            </VisualStateGroup>\r\n\r\n                            <VisualStateGroup x:Name=\"CCSelectionAvailablityStates\">\r\n                                <VisualState x:Name=\"CCSelectionAvailable\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"CCSelectionButton.Visibility\" Value=\"Visible\" />\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"CCSelectionUnavailable\" />\r\n                            </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n                        <Border x:Name=\"ControlPanel_ControlPanelVisibilityStates_Border\" RequestedTheme=\"Dark\">\r\n                            <Grid x:Name=\"ControlPanelGrid\" Height=\"100\" RenderTransformOrigin=\"0.5,0.5\" VerticalAlignment=\"Bottom\">\r\n                                <Grid.Background>\r\n                                    <LinearGradientBrush StartPoint=\"0.5,0\" EndPoint=\"0.5,1\">\r\n                                        <GradientStop Color=\"#00000000\" />\r\n                                        <GradientStop Color=\"#60000000\" Offset=\"0.66\" />\r\n                                        <GradientStop Color=\"#A0000000\" Offset=\"1\" />\r\n                                    </LinearGradientBrush>\r\n                                </Grid.Background>\r\n\r\n                                <Grid VerticalAlignment=\"Bottom\" Padding=\"{ThemeResource AudioMediaTransportControls_ControlPanel_Padding}\">\r\n                                    <Grid.ColumnDefinitions>\r\n                                        <ColumnDefinition Width=\"Auto\"/>\r\n                                        <ColumnDefinition Width=\"*\"/>\r\n                                        <ColumnDefinition Width=\"Auto\"/>\r\n                                    </Grid.ColumnDefinitions>\r\n                                    <Grid.RowDefinitions>\r\n                                        <RowDefinition Height=\"Auto\"/>\r\n                                        <RowDefinition Height=\"*\"/>\r\n                                        <RowDefinition Height=\"Auto\"/>\r\n                                    </Grid.RowDefinitions>\r\n                                    <Grid.RenderTransform>\r\n                                        <TranslateTransform x:Name=\"TranslateVertical\"/>\r\n                                    </Grid.RenderTransform>\r\n                                    <Border x:Name=\"ErrorBorder\" Background=\"{ThemeResource MediaTransportControlsPanelBackground}\" Grid.ColumnSpan=\"3\"  HorizontalAlignment=\"Center\" VerticalAlignment=\"Stretch\" MinHeight=\"42\" Visibility=\"Collapsed\" Width=\"320\">\r\n                                        <TextBlock x:Name=\"ErrorTextBlock\" Margin=\"12\" Style=\"{ThemeResource MediaTextBlockStyle}\" TextWrapping=\"WrapWholeWords\"/>\r\n                                    </Border>\r\n                                    <Border x:Name=\"MediaTransportControls_Timeline_Border\" Margin=\"12,0\" Grid.Column=\"1\" Grid.Row=\"1\">\r\n                                        <Grid x:Name=\"MediaTransportControls_Timeline_Grid\">\r\n                                            <Grid.ColumnDefinitions>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                                <ColumnDefinition/>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                            </Grid.ColumnDefinitions>\r\n                                            <Slider x:Name=\"ProgressSlider\" Grid.Column=\"1\" VerticalAlignment=\"Center\" IsThumbToolTipEnabled=\"False\" MinWidth=\"80\" Style=\"{StaticResource MediaSliderStyle}\" />\r\n                                            <ProgressBar x:Name=\"BufferingProgressBar\" Grid.Column=\"1\" Height=\"4\" IsIndeterminate=\"True\" IsHitTestVisible=\"False\" Margin=\"0,2,0,0\" VerticalAlignment=\"Top\" Visibility=\"Collapsed\"/>\r\n                                            <TextBlock x:Name=\"TimeElapsedElement\" Visibility=\"Collapsed\" HorizontalAlignment=\"Left\" Margin=\"0\" Style=\"{ThemeResource MediaTextBlockStyle}\" Text=\"00:00\" VerticalAlignment=\"Center\"/>\r\n                                            <TextBlock x:Name=\"TimeRemainingElement\" Visibility=\"Collapsed\" Grid.Column=\"2\" HorizontalAlignment=\"Right\" Style=\"{ThemeResource MediaTextBlockStyle}\" Text=\"00:00\" VerticalAlignment=\"Center\"/>\r\n                                        </Grid>\r\n                                    </Border>\r\n\r\n                                    <Border x:Name=\"LeftSidePlayBorder\" Grid.Column=\"0\" Grid.Row=\"1\" Visibility=\"Collapsed\">\r\n                                        <Button x:Name=\"PlayPauseButtonOnLeft\" Margin=\"0\" Style=\"{ThemeResource IconButtonStyle}\" VerticalAlignment=\"Center\">\r\n                                            <TextBlock x:Name=\"PlayPauseSymbolLeft\" Text=\"&#xe768;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                        </Button>\r\n                                    </Border>\r\n                                    \r\n                                    <Border x:Name=\"MediaTransportControls_Command_Border\" Grid.Column=\"1\" Grid.Row=\"2\">\r\n\r\n                                        <Grid x:Name=\"MediaControlsCommandBar\" Margin=\"0,0\">\r\n\r\n                                            <Grid.ColumnDefinitions>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                                <ColumnDefinition Width=\"*\"/>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                                <ColumnDefinition Width=\"*\"/>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                            </Grid.ColumnDefinitions>\r\n\r\n                                            <Button Style=\"{ThemeResource IconButtonStyle}\" Margin=\"2,0,0,0\" x:Name=\"VolumeMuteButton\">\r\n                                                <Button.Flyout>\r\n                                                    <Flyout x:Name=\"VolumeFlyout\">\r\n                                                        <StackPanel Orientation=\"Horizontal\">\r\n                                                            <Button x:Name=\"AudioMuteButton\" Style=\"{ThemeResource IconButtonStyle}\" HorizontalAlignment=\"Center\" Margin=\"0,0,12,0\" VerticalAlignment=\"Center\">\r\n                                                                <TextBlock x:Name=\"AudioMuteSymbol\" Text=\"&#xe767;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                                            </Button>\r\n                                                            <Slider x:Name=\"VolumeSlider\" HorizontalAlignment=\"Center\" IsThumbToolTipEnabled=\"False\" Margin=\"0\" VerticalAlignment=\"Center\" Value=\"50\" Width=\"{ThemeResource MTCHorizontalVolumeSliderWidth}\"/>\r\n                                                            <TextBlock x:Name=\"VolumeValue\" HorizontalAlignment=\"Center\" Margin=\"12,0,0,0\" Style=\"{ThemeResource MediaTextBlockStyle}\" VerticalAlignment=\"Center\" Width=\"32\">\r\n                                                                <Run Text=\"{Binding Value, ElementName=VolumeSlider}\" />%\r\n                                                            </TextBlock>\r\n                                                        </StackPanel>\r\n                                                    </Flyout>\r\n                                                </Button.Flyout>\r\n                                                <TextBlock x:Name=\"VolumeMuteSymbol\" Text=\"&#xe767;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                            </Button>\r\n\r\n                                            <Button Grid.Column=\"2\" Style=\"{ThemeResource IconButtonStyle}\" x:Name=\"PlayPauseButton\">\r\n                                                <TextBlock x:Name=\"PlayPauseSymbol\" Text=\"&#xe768;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                            </Button>\r\n\r\n                                            <Button Grid.Column=\"4\" Style=\"{ThemeResource IconButtonStyle}\" Margin=\"2,0,0,0\" x:Name=\"AudioTracksSelectionButton\" Visibility=\"Collapsed\">\r\n                                                <TextBlock Text=\"&#xED1F;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                            </Button>\r\n                                            <Button Grid.Column=\"5\" Style=\"{ThemeResource IconButtonStyle}\" Margin=\"2,0,0,0\" x:Name=\"CCSelectionButton\" Visibility=\"Collapsed\">\r\n                                                <TextBlock Text=\"&#xED1F;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                            </Button>\r\n                                            <Button Grid.Column=\"6\" Style=\"{ThemeResource IconButtonStyle}\" Margin=\"2,0,0,0\" x:Name=\"FullWindowButton\">\r\n                                                <TextBlock x:Name=\"FullWindowSymbol\" Text=\"&#xE740;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                            </Button>\r\n\r\n\r\n                                        </Grid>\r\n                                    </Border>\r\n                                </Grid>\r\n                            </Grid>\r\n                        </Border>\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n\r\n    <Style x:Key=\"AudioMediaTransportControlsStyle\" TargetType=\"controls1:CustomMediaTransportControls\">\r\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\r\n        <Setter Property=\"Background\" Value=\"Transparent\"/>\r\n        <Setter Property=\"FlowDirection\" Value=\"LeftToRight\"/>\r\n        <Setter Property=\"IsTextScaleFactorEnabled\" Value=\"False\"/>\r\n        <Setter Property=\"IsCompact\" Value=\"True\"/>\r\n        <Setter Property=\"ShowAndHideAutomatically\" Value=\"False\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"controls1:CustomMediaTransportControls\">\r\n                    <Grid x:Name=\"RootGrid\" Background=\"Transparent\">\r\n                        <Grid.Resources>\r\n                            <Style x:Key=\"MediaSliderStyle\" TargetType=\"Slider\" BasedOn=\"{StaticResource DefaultSliderStyle}\">\r\n                                <Setter Property=\"ManipulationMode\" Value=\"None\"/>\r\n                                <Setter Property=\"FocusVisualMargin\" Value=\"-7,0,-7,0\"/>\r\n                                <Setter Property=\"IsFocusEngagementEnabled\" Value=\"True\"/>\r\n                            </Style>\r\n                        </Grid.Resources>\r\n                        <VisualStateManager.VisualStateGroups>\r\n                            <VisualStateGroup x:Name=\"ControlPanelVisibilityStates\">\r\n                                <VisualState x:Name=\"ControlPanelFadeIn\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Duration=\"0:0:0.3\" Storyboard.TargetName=\"TranslateVertical\" Storyboard.TargetProperty=\"Y\" To=\"0\">\r\n                                            <DoubleAnimation.EasingFunction>\r\n                                                <ExponentialEase Exponent=\"7\" EasingMode=\"EaseOut\" />\r\n                                            </DoubleAnimation.EasingFunction>\r\n                                        </DoubleAnimation>\r\n                                        <DoubleAnimation Duration=\"0:0:0.3\" Storyboard.TargetName=\"ControlPanel_ControlPanelVisibilityStates_Border\" Storyboard.TargetProperty=\"Opacity\" To=\"1\">\r\n                                            <DoubleAnimation.EasingFunction>\r\n                                                <ExponentialEase Exponent=\"7\" EasingMode=\"EaseOut\" />\r\n                                            </DoubleAnimation.EasingFunction>\r\n                                        </DoubleAnimation>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"ControlPanelFadeOut\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ControlPanel_ControlPanelVisibilityStates_Border\" Storyboard.TargetProperty=\"IsHitTestVisible\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"False\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <DoubleAnimation Duration=\"0:0:0.300\" Storyboard.TargetName=\"TranslateVertical\" Storyboard.TargetProperty=\"Y\" To=\"100\">\r\n                                            <DoubleAnimation.EasingFunction>\r\n                                                <ExponentialEase Exponent=\"4.5\" EasingMode=\"EaseIn\" />\r\n                                            </DoubleAnimation.EasingFunction>\r\n                                        </DoubleAnimation>\r\n                                        <DoubleAnimation Duration=\"0:0:0.300\" Storyboard.TargetName=\"ControlPanel_ControlPanelVisibilityStates_Border\" Storyboard.TargetProperty=\"Opacity\" To=\"0\">\r\n                                            <DoubleAnimation.EasingFunction>\r\n                                                <ExponentialEase Exponent=\"4.5\" EasingMode=\"EaseIn\" />\r\n                                            </DoubleAnimation.EasingFunction>\r\n                                        </DoubleAnimation>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"MediaStates\">\r\n                                <VisualState x:Name=\"Normal\"/>\r\n                                <VisualState x:Name=\"Buffering\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"BufferingProgressBar.Visibility\" Value=\"Visible\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Loading\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"BufferingProgressBar.Visibility\" Value=\"Visible\"/>\r\n                                    </VisualState.Setters>\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Duration=\"0\" Storyboard.TargetName=\"ProgressSlider\" Storyboard.TargetProperty=\"Opacity\" To=\"0\"/>\r\n                                        <DoubleAnimation Duration=\"0\" Storyboard.TargetName=\"MediaControlsCommandBar\" Storyboard.TargetProperty=\"Opacity\" To=\"0\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Error\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"ErrorBorder.Visibility\" Value=\"Visible\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Disabled\">\r\n                                    <Storyboard/>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"MediaTransportControlMode\">\r\n                                <VisualState x:Name=\"NormalMode\"/>\r\n                                <VisualState x:Name=\"CompactMode\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"LeftSidePlayBorder.Visibility\" Value=\"Visible\"/>\r\n                                        <Setter Target=\"MediaTransportControls_Command_Border.(Grid.Column)\" Value=\"2\"/>\r\n                                        <Setter Target=\"MediaTransportControls_Command_Border.(Grid.Row)\" Value=\"1\"/>\r\n                                        <Setter Target=\"MediaControlsCommandBar.Margin\" Value=\"0\"/>\r\n                                        <Setter Target=\"PlayPauseButton.Visibility\" Value=\"Collapsed\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"PlayPauseStates\">\r\n                                <VisualState x:Name=\"PlayState\"/>\r\n                                <VisualState x:Name=\"PauseState\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"PlayPauseSymbolLeft.Text\" Value=\"&#xe769;\"/>\r\n                                        <Setter Target=\"PlayPauseSymbol.Text\" Value=\"&#xe769;\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"VolumeMuteStates\">\r\n                                <VisualState x:Name=\"VolumeState\"/>\r\n                                <VisualState x:Name=\"MuteState\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"AudioMuteSymbol.Text\" Value=\"&#xe74f;\"/>\r\n                                        <Setter Target=\"VolumeMuteSymbol.Text\" Value=\"&#xe74f;\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"FullWindowStates\">\r\n                                <VisualState x:Name=\"NonFullWindowState\"/>\r\n                                <VisualState x:Name=\"FullWindowState\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"FullWindowSymbol.Text\" Value=\"&#xe92c;\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n\r\n                            <VisualStateGroup x:Name=\"AudioSelectionAvailablityStates\">\r\n                                <VisualState x:Name=\"AudioSelectionAvailable\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"AudioTracksSelectionButton.Visibility\" Value=\"Visible\" />\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"AudioSelectionUnavailable\" />\r\n                            </VisualStateGroup>\r\n\r\n                            <VisualStateGroup x:Name=\"CCSelectionAvailablityStates\">\r\n                                <VisualState x:Name=\"CCSelectionAvailable\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"CCSelectionButton.Visibility\" Value=\"Visible\" />\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"CCSelectionUnavailable\" />\r\n                            </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n                        <Border x:Name=\"ControlPanel_ControlPanelVisibilityStates_Border\"\r\n                                CornerRadius=\"{ThemeResource AudioMediaTransportControls_ControlPanel_CornerRadius}\"\r\n                                BorderThickness=\"{ThemeResource AudioMediaTransportControls_ControlPanel_BorderThickness}\"\r\n                                BorderBrush=\"{ThemeResource AudioMediaTransportControls_ControlPanel_BorderBrush}\"\r\n                                Background=\"{ThemeResource AudioMediaTransportControls_ControlPanel_Background}\">\r\n                            <Grid x:Name=\"ControlPanelGrid\" RenderTransformOrigin=\"0.5,0.5\">\r\n                                <Grid Padding=\"{ThemeResource AudioMediaTransportControls_ControlPanel_Padding}\">\r\n                                    <Grid.ColumnDefinitions>\r\n                                        <ColumnDefinition Width=\"Auto\"/>\r\n                                        <ColumnDefinition Width=\"*\"/>\r\n                                        <ColumnDefinition Width=\"Auto\"/>\r\n                                    </Grid.ColumnDefinitions>\r\n                                    <Grid.RowDefinitions>\r\n                                        <RowDefinition Height=\"Auto\"/>\r\n                                        <RowDefinition Height=\"*\"/>\r\n                                        <RowDefinition Height=\"Auto\"/>\r\n                                    </Grid.RowDefinitions>\r\n                                    <Grid.RenderTransform>\r\n                                        <TranslateTransform x:Name=\"TranslateVertical\"/>\r\n                                    </Grid.RenderTransform>\r\n                                    <Border x:Name=\"ErrorBorder\" Background=\"{ThemeResource MediaTransportControlsPanelBackground}\" Grid.ColumnSpan=\"3\"  HorizontalAlignment=\"Center\" VerticalAlignment=\"Stretch\" MinHeight=\"42\" Visibility=\"Collapsed\" Width=\"320\">\r\n                                        <TextBlock x:Name=\"ErrorTextBlock\" Margin=\"12\" Style=\"{ThemeResource MediaTextBlockStyle}\" TextWrapping=\"WrapWholeWords\"/>\r\n                                    </Border>\r\n                                    <Border x:Name=\"MediaTransportControls_Timeline_Border\" Margin=\"8,0\" Grid.Column=\"1\" Grid.Row=\"1\">\r\n                                        <Grid x:Name=\"MediaTransportControls_Timeline_Grid\">\r\n                                            <Grid.ColumnDefinitions>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                                <ColumnDefinition/>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                            </Grid.ColumnDefinitions>\r\n                                            <Slider x:Name=\"ProgressSlider\" Grid.Column=\"1\" VerticalAlignment=\"Center\" IsThumbToolTipEnabled=\"False\" MinWidth=\"80\" Style=\"{StaticResource MediaSliderStyle}\" />\r\n                                            <ProgressBar x:Name=\"BufferingProgressBar\" Grid.Column=\"1\" Height=\"4\" IsIndeterminate=\"True\" IsHitTestVisible=\"False\" Margin=\"0,2,0,0\" VerticalAlignment=\"Top\" Visibility=\"Collapsed\"/>\r\n                                            <TextBlock x:Name=\"TimeElapsedElement\" Visibility=\"Collapsed\" HorizontalAlignment=\"Left\" Margin=\"0\" Style=\"{ThemeResource MediaTextBlockStyle}\" Text=\"00:00\" VerticalAlignment=\"Center\"/>\r\n                                            <TextBlock x:Name=\"TimeRemainingElement\" Visibility=\"Collapsed\" Grid.Column=\"2\" HorizontalAlignment=\"Right\" Style=\"{ThemeResource MediaTextBlockStyle}\" Text=\"00:00\" VerticalAlignment=\"Center\"/>\r\n                                        </Grid>\r\n                                    </Border>\r\n                                    <Border x:Name=\"LeftSidePlayBorder\" Grid.Column=\"0\" Grid.Row=\"1\" Visibility=\"Collapsed\">\r\n                                        <Button x:Name=\"PlayPauseButtonOnLeft\" Margin=\"0\" Style=\"{ThemeResource IconButtonStyle}\" VerticalAlignment=\"Center\">\r\n                                            <TextBlock x:Name=\"PlayPauseSymbolLeft\" Text=\"&#xe768;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                        </Button>\r\n                                    </Border>\r\n                                    <Border x:Name=\"MediaTransportControls_Command_Border\" Grid.Column=\"1\" Grid.Row=\"2\">\r\n                                        <Grid x:Name=\"MediaControlsCommandBar\" Margin=\"0,0\">\r\n                                            <Grid.ColumnDefinitions>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                                <ColumnDefinition Width=\"*\"/>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                                <ColumnDefinition Width=\"*\"/>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                                <ColumnDefinition Width=\"Auto\"/>\r\n                                            </Grid.ColumnDefinitions>\r\n\r\n                                            <Button Style=\"{ThemeResource IconButtonStyle}\" Margin=\"2,0,0,0\" x:Name=\"VolumeMuteButton\">\r\n                                                <Button.Flyout>\r\n                                                    <Flyout x:Name=\"VolumeFlyout\">\r\n                                                        <StackPanel Orientation=\"Horizontal\">\r\n                                                            <Button x:Name=\"AudioMuteButton\" Style=\"{ThemeResource IconButtonStyle}\" HorizontalAlignment=\"Center\" Margin=\"0,0,12,0\" VerticalAlignment=\"Center\">\r\n                                                                <TextBlock x:Name=\"AudioMuteSymbol\" Text=\"&#xe767;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                                            </Button>\r\n                                                            <Slider x:Name=\"VolumeSlider\" HorizontalAlignment=\"Center\" IsThumbToolTipEnabled=\"False\" Margin=\"0\" VerticalAlignment=\"Center\" Value=\"50\" Width=\"{ThemeResource MTCHorizontalVolumeSliderWidth}\"/>\r\n                                                            <TextBlock x:Name=\"VolumeValue\" HorizontalAlignment=\"Center\" Margin=\"12,0,0,0\" Style=\"{ThemeResource MediaTextBlockStyle}\" VerticalAlignment=\"Center\" Width=\"32\">\r\n                                                                <Run Text=\"{Binding Value, ElementName=VolumeSlider}\" />%\r\n                                                            </TextBlock>\r\n                                                        </StackPanel>\r\n                                                    </Flyout>\r\n                                                </Button.Flyout>\r\n                                                <TextBlock x:Name=\"VolumeMuteSymbol\" Text=\"&#xe767;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                            </Button>\r\n\r\n                                            <Button Grid.Column=\"2\" Style=\"{ThemeResource IconButtonStyle}\" x:Name=\"PlayPauseButton\">\r\n                                                <TextBlock x:Name=\"PlayPauseSymbol\" Text=\"&#xe768;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                            </Button>\r\n\r\n                                            <Button Grid.Column=\"4\" Style=\"{ThemeResource IconButtonStyle}\" Margin=\"2,0,0,0\" x:Name=\"AudioTracksSelectionButton\" Visibility=\"Collapsed\">\r\n                                                <TextBlock Text=\"&#xED1F;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                            </Button>\r\n                                            <Button Grid.Column=\"5\" Style=\"{ThemeResource IconButtonStyle}\" Margin=\"2,0,0,0\" x:Name=\"CCSelectionButton\" Visibility=\"Collapsed\">\r\n                                                <TextBlock Text=\"&#xED1F;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                            </Button>\r\n                                            <Button Grid.Column=\"6\" Style=\"{ThemeResource IconButtonStyle}\" Margin=\"2,0,0,0\" x:Name=\"FullWindowButton\">\r\n                                                <TextBlock x:Name=\"FullWindowSymbol\" Text=\"&#xE740;\" Style=\"{StaticResource SymbolTextBlockStyle}\" />\r\n                                            </Button>\r\n                                        </Grid>\r\n                                    </Border>\r\n                                </Grid>\r\n                            </Grid>\r\n                        </Border>\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <!--<Style TargetType=\"MediaTransportControls\" BasedOn=\"{StaticResource MediaTransportControlsStyle}\">\r\n    </Style>-->\r\n\r\n    <Style x:Key=\"RangeSliderThumbStyle\" TargetType=\"Thumb\">\r\n        <Setter Property=\"UseSystemFocusVisuals\" Value=\"True\"/>\r\n        <Setter Property=\"BorderThickness\" Value=\"0\"/>\r\n        <Setter Property=\"Background\" Value=\"{ThemeResource SliderThumbBackground}\"/>\r\n        <Setter Property=\"Height\" Value=\"24\"/>\r\n        <Setter Property=\"Width\" Value=\"8\"/>\r\n        <Setter Property=\"FocusVisualMargin\" Value=\"-14,-6,-14,-6\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"Thumb\">\r\n                    <Border Background=\"{TemplateBinding Background}\" \r\n                            BorderThickness=\"{TemplateBinding BorderThickness}\" \r\n                            BorderBrush=\"{TemplateBinding BorderBrush}\" \r\n                            CornerRadius=\"4\"/>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style TargetType=\"controls1:RangeSelector\">\r\n        <Setter Property=\"Background\" Value=\"{ThemeResource SliderTrackFill}\"/>\r\n        <Setter Property=\"BorderThickness\" Value=\"{ThemeResource SliderBorderThemeThickness}\"/>\r\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource SliderTrackValueFill}\"/>\r\n        <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\"/>\r\n        <Setter Property=\"FontSize\" Value=\"{ThemeResource ControlContentThemeFontSize}\"/>\r\n        <Setter Property=\"VerticalAlignment\" Value=\"Top\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"controls1:RangeSelector\">\r\n                    <Grid x:Name=\"ControlGrid\" Height=\"24\" >\r\n\r\n                        <Border x:Name=\"OutOfRangeContentContainer\"\r\n                                Background=\"Transparent\"\r\n                                Grid.Column=\"1\">\r\n                            <Rectangle x:Name=\"BackgroundElement\"\r\n                                       Height=\"2\"\r\n                                       Fill=\"{TemplateBinding Background}\" />\r\n                        </Border>\r\n\r\n                        <Canvas x:Name=\"ContainerCanvas\"\r\n                                Grid.Column=\"1\"\r\n                                Background=\"Transparent\">\r\n                            <Rectangle x:Name=\"ActiveRectangle\"\r\n                                       HorizontalAlignment=\"Stretch\"\r\n                                       Height=\"2\"\r\n                                       VerticalAlignment=\"Center\"\r\n                                       Fill=\"{TemplateBinding Foreground}\" />\r\n\r\n                            <Grid x:Name=\"ToolTip\" \r\n                                  BorderThickness=\"1\"\r\n                                  BorderBrush=\"{ThemeResource SystemControlForegroundChromeHighBrush}\"\r\n                                  Background=\"{ThemeResource SystemControlBackgroundChromeMediumLowBrush}\" \r\n                                  Margin=\"0,-44,0,8\" \r\n                                  Visibility=\"Collapsed\">\r\n                                <TextBlock x:Name=\"ToolTipText\" \r\n                                           Margin=\"8\"\r\n                                           Foreground=\"{ThemeResource SystemControlForegroundBaseHighBrush}\" />\r\n                            </Grid>\r\n\r\n                            <Thumb x:Name=\"MinThumb\"\r\n                                   AutomationProperties.Name=\"Min thumb\"\r\n                                   IsTabStop=\"True\" \r\n                                   Style=\"{ThemeResource RangeSliderThumbStyle}\"\r\n                                   TabIndex=\"0\" />\r\n\r\n                            <Thumb x:Name=\"CurrentThumb\"\r\n                                   AutomationProperties.Name=\"Current thumb\"\r\n                                   IsTabStop=\"True\" \r\n                                   Style=\"{ThemeResource VideoSliderThumbStyle}\"\r\n                                   Margin=\"-32\"\r\n                                   TabIndex=\"0\" />\r\n\r\n                            <Thumb x:Name=\"MaxThumb\"\r\n                                   AutomationProperties.Name=\"Max thumb\"\r\n                                   IsTabStop=\"True\"\r\n                                   Style=\"{ThemeResource RangeSliderThumbStyle}\"\r\n                                   TabIndex=\"1\" />\r\n                        </Canvas>\r\n\r\n                        <VisualStateManager.VisualStateGroups>\r\n                            <VisualStateGroup x:Name=\"CommonStates\">\r\n                                <VisualState x:Name=\"Normal\" />\r\n                                <VisualState x:Name=\"MinPressed\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MinThumb\"\r\n                                                                       Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                                    Value=\"{ThemeResource SystemControlHighlightChromeHighBrush}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n\r\n                                <VisualState x:Name=\"CurrentPressed\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"CurrentThumb\"\r\n                                                                       Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                                    Value=\"{ThemeResource SystemControlHighlightChromeHighBrush}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n\r\n\r\n                                <VisualState x:Name=\"MaxPressed\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MaxThumb\"\r\n                                                                       Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                                    Value=\"{ThemeResource SystemControlHighlightChromeHighBrush}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Disabled\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundElement\"\r\n                                                                       Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                                    Value=\"{ThemeResource SystemControlDisabledBaseLowBrush}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ActiveRectangle\"\r\n                                                                       Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                                    Value=\"{ThemeResource SystemControlDisabledBaseLowBrush}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MinThumb\"\r\n                                                                       Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                                    Value=\"{ThemeResource SystemControlDisabledChromeDisabledHighBrush}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MaxThumb\"\r\n                                                                       Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                                    Value=\"{ThemeResource SystemControlDisabledChromeDisabledHighBrush}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n\r\n                                <VisualState x:Name=\"PointerOver\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundElement\"\r\n                                                                       Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                                    Value=\"{ThemeResource SystemControlForegroundBaseMediumBrush}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MinThumb\"\r\n                                                                       Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                                    Value=\"{ThemeResource SystemControlHighlightChromeAltLowBrush}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"CurrentThumb\"\r\n                                                                       Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                                    Value=\"{ThemeResource SystemControlHighlightChromeAltLowBrush}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MaxThumb\"\r\n                                                                       Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\"\r\n                                                                    Value=\"{ThemeResource SystemControlHighlightChromeAltLowBrush}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style x:Key=\"NoTextToggleSwitchStyle\" TargetType=\"ToggleSwitch\">\r\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource ToggleSwitchContentForeground}\"/>\r\n        <Setter Property=\"HorizontalAlignment\" Value=\"Left\"/>\r\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\r\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\r\n        <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\"/>\r\n        <Setter Property=\"FontSize\" Value=\"{ThemeResource ControlContentThemeFontSize}\"/>\r\n        <Setter Property=\"ManipulationMode\" Value=\"System,TranslateX\"/>\r\n        <Setter Property=\"UseSystemFocusVisuals\" Value=\"{StaticResource UseSystemFocusVisuals}\"/>\r\n        <Setter Property=\"FocusVisualMargin\" Value=\"-7,-3,-7,-3\"/>\r\n        <Setter Property=\"Margin\" Value=\"0\"/>\r\n        <Setter Property=\"MinWidth\" Value=\"48\"/>\r\n        <Setter Property=\"BorderThickness\" Value=\"1\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"ToggleSwitch\">\r\n                    <Grid Background=\"{TemplateBinding Background}\" BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\">\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"Auto\"/>\r\n                            <RowDefinition Height=\"*\"/>\r\n                        </Grid.RowDefinitions>\r\n                        <VisualStateManager.VisualStateGroups>\r\n                            <VisualStateGroup x:Name=\"CommonStates\">\r\n                                <VisualState x:Name=\"Normal\"/>\r\n                                <VisualState x:Name=\"PointerOver\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OuterBorder\" Storyboard.TargetProperty=\"Stroke\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchStrokeOffPointerOver}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OuterBorder\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchFillOffPointerOver}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOff\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchKnobFillOffPointerOver}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOn\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchKnobFillOnPointerOver}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobBounds\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchFillOnPointerOver}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobBounds\" Storyboard.TargetProperty=\"Stroke\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchStrokeOnPointerOver}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchAreaGrid\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchContainerBackgroundPointerOver}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Pressed\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OuterBorder\" Storyboard.TargetProperty=\"StrokeThickness\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OuterBorder\" Storyboard.TargetProperty=\"Stroke\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchStrokeOffPressed}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OuterBorder\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchFillOffPressed}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobBounds\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchFillOnPressed}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobBounds\" Storyboard.TargetProperty=\"Stroke\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchStrokeOnPressed}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOff\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchKnobFillOffPressed}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOn\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchKnobFillOnPressed}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchAreaGrid\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchContainerBackgroundPressed}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Disabled\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HeaderContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchHeaderForegroundDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OffContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchContentForegroundDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OnContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchContentForegroundDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OuterBorder\" Storyboard.TargetProperty=\"Stroke\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchStrokeOffDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OuterBorder\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchFillOffDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobBounds\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchFillOnDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobBounds\" Storyboard.TargetProperty=\"Stroke\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchStrokeOnDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOff\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchKnobFillOffDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOn\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchKnobFillOnDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchAreaGrid\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ToggleSwitchContainerBackgroundDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"ToggleStates\">\r\n                                <VisualStateGroup.Transitions>\r\n                                    <VisualTransition x:Name=\"DraggingToOnTransition\" From=\"Dragging\" GeneratedDuration=\"0\" To=\"On\">\r\n                                        <Storyboard>\r\n                                            <RepositionThemeAnimation FromHorizontalOffset=\"{Binding TemplateSettings.KnobCurrentToOnOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}\" TargetName=\"SwitchKnob\"/>\r\n                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobBounds\" Storyboard.TargetProperty=\"Opacity\">\r\n                                                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"1\"/>\r\n                                            </ObjectAnimationUsingKeyFrames>\r\n                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OuterBorder\" Storyboard.TargetProperty=\"Opacity\">\r\n                                                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            </ObjectAnimationUsingKeyFrames>\r\n                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOn\" Storyboard.TargetProperty=\"Opacity\">\r\n                                                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"1\"/>\r\n                                            </ObjectAnimationUsingKeyFrames>\r\n                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOff\" Storyboard.TargetProperty=\"Opacity\">\r\n                                                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            </ObjectAnimationUsingKeyFrames>\r\n                                        </Storyboard>\r\n                                    </VisualTransition>\r\n                                    <VisualTransition x:Name=\"DraggingToOffTransition\" From=\"Dragging\" GeneratedDuration=\"0\" To=\"Off\">\r\n                                        <Storyboard>\r\n                                            <RepositionThemeAnimation FromHorizontalOffset=\"{Binding TemplateSettings.KnobCurrentToOffOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}\" TargetName=\"SwitchKnob\"/>\r\n                                        </Storyboard>\r\n                                    </VisualTransition>\r\n                                    <VisualTransition x:Name=\"OnToOffTransition\" From=\"On\" GeneratedDuration=\"0\" To=\"Off\">\r\n                                        <Storyboard>\r\n                                            <RepositionThemeAnimation FromHorizontalOffset=\"{Binding TemplateSettings.KnobOnToOffOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}\" TargetName=\"SwitchKnob\"/>\r\n                                        </Storyboard>\r\n                                    </VisualTransition>\r\n                                    <VisualTransition x:Name=\"OffToOnTransition\" From=\"Off\" GeneratedDuration=\"0\" To=\"On\">\r\n                                        <Storyboard>\r\n                                            <RepositionThemeAnimation FromHorizontalOffset=\"{Binding TemplateSettings.KnobOffToOnOffset, RelativeSource={RelativeSource Mode=TemplatedParent}}\" TargetName=\"SwitchKnob\"/>\r\n                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobBounds\" Storyboard.TargetProperty=\"Opacity\">\r\n                                                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"1\"/>\r\n                                            </ObjectAnimationUsingKeyFrames>\r\n                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OuterBorder\" Storyboard.TargetProperty=\"Opacity\">\r\n                                                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            </ObjectAnimationUsingKeyFrames>\r\n                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOn\" Storyboard.TargetProperty=\"Opacity\">\r\n                                                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"1\"/>\r\n                                            </ObjectAnimationUsingKeyFrames>\r\n                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOff\" Storyboard.TargetProperty=\"Opacity\">\r\n                                                <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            </ObjectAnimationUsingKeyFrames>\r\n                                        </Storyboard>\r\n                                    </VisualTransition>\r\n                                </VisualStateGroup.Transitions>\r\n                                <VisualState x:Name=\"Dragging\"/>\r\n                                <VisualState x:Name=\"Off\"/>\r\n                                <VisualState x:Name=\"On\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Duration=\"0\" Storyboard.TargetName=\"KnobTranslateTransform\" Storyboard.TargetProperty=\"X\" To=\"24\"/>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobBounds\" Storyboard.TargetProperty=\"Opacity\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"1\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OuterBorder\" Storyboard.TargetProperty=\"Opacity\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOn\" Storyboard.TargetProperty=\"Opacity\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"1\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"SwitchKnobOff\" Storyboard.TargetProperty=\"Opacity\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"ContentStates\">\r\n                                <VisualState x:Name=\"OffContent\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Duration=\"0\" Storyboard.TargetName=\"OffContentPresenter\" Storyboard.TargetProperty=\"Opacity\" To=\"1\"/>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OffContentPresenter\" Storyboard.TargetProperty=\"IsHitTestVisible\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\">\r\n                                                <DiscreteObjectKeyFrame.Value>\r\n                                                    <x:Boolean>True</x:Boolean>\r\n                                                </DiscreteObjectKeyFrame.Value>\r\n                                            </DiscreteObjectKeyFrame>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"OnContent\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Duration=\"0\" Storyboard.TargetName=\"OnContentPresenter\" Storyboard.TargetProperty=\"Opacity\" To=\"1\"/>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"OnContentPresenter\" Storyboard.TargetProperty=\"IsHitTestVisible\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\">\r\n                                                <DiscreteObjectKeyFrame.Value>\r\n                                                    <x:Boolean>True</x:Boolean>\r\n                                                </DiscreteObjectKeyFrame.Value>\r\n                                            </DiscreteObjectKeyFrame>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n                        <ContentPresenter x:Name=\"HeaderContentPresenter\" AutomationProperties.AccessibilityView=\"Raw\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" Content=\"{TemplateBinding Header}\" Foreground=\"{ThemeResource ToggleSwitchHeaderForeground}\" IsHitTestVisible=\"False\" Margin=\"{ThemeResource ToggleSwitchTopHeaderMargin}\" Grid.Row=\"0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Visibility=\"Collapsed\" x:DeferLoadStrategy=\"Lazy\"/>\r\n                        <Grid HorizontalAlignment=\"Left\" Grid.Row=\"1\" VerticalAlignment=\"Top\">\r\n                            <Grid.ColumnDefinitions>\r\n                                <ColumnDefinition Width=\"Auto\"/>\r\n                                <ColumnDefinition MaxWidth=\"12\" Width=\"12\"/>\r\n                                <ColumnDefinition Width=\"Auto\"/>\r\n                            </Grid.ColumnDefinitions>\r\n                            <Grid.RowDefinitions>\r\n                                <RowDefinition Height=\"Auto\"/>\r\n                            </Grid.RowDefinitions>\r\n                            <Grid x:Name=\"SwitchAreaGrid\" Background=\"{ThemeResource ToggleSwitchContainerBackground}\" Grid.ColumnSpan=\"3\" Control.IsTemplateFocusTarget=\"True\" Margin=\"0,5\"/>\r\n                            <ContentPresenter x:Name=\"OffContentPresenter\" Visibility=\"Collapsed\" AutomationProperties.AccessibilityView=\"Raw\" ContentTemplate=\"{TemplateBinding OffContentTemplate}\" Content=\"{TemplateBinding OffContent}\" Grid.Column=\"2\" Foreground=\"{TemplateBinding Foreground}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" IsHitTestVisible=\"False\" Opacity=\"0\" Grid.RowSpan=\"3\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\r\n                            <ContentPresenter x:Name=\"OnContentPresenter\" Visibility=\"Collapsed\" AutomationProperties.AccessibilityView=\"Raw\" ContentTemplate=\"{TemplateBinding OnContentTemplate}\" Content=\"{TemplateBinding OnContent}\" Grid.Column=\"2\" Foreground=\"{TemplateBinding Foreground}\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" IsHitTestVisible=\"False\" Opacity=\"0\" Grid.RowSpan=\"3\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\r\n                            <Rectangle x:Name=\"OuterBorder\" \r\n                                       Fill=\"{ThemeResource ToggleSwitchFillOff}\" \r\n                                       Height=\"20\" \r\n                                       RadiusX=\"10\" \r\n                                       RadiusY=\"10\" \r\n                                       StrokeThickness=\"1\" \r\n                                       Stroke=\"{ThemeResource ToggleSwitchStrokeOff}\" \r\n                                       Width=\"44\"/>\r\n                            <Rectangle x:Name=\"SwitchKnobBounds\" Fill=\"{ThemeResource ToggleSwitchFillOn}\" Height=\"20\" Opacity=\"0\" RadiusX=\"10\" RadiusY=\"10\" StrokeThickness=\"{ThemeResource ToggleSwitchOnStrokeThickness}\" Stroke=\"{ThemeResource ToggleSwitchStrokeOn}\" Width=\"44\"/>\r\n                            <Grid x:Name=\"SwitchKnob\" HorizontalAlignment=\"Left\" Height=\"20\" Width=\"20\">\r\n                                <Grid.RenderTransform>\r\n                                    <TranslateTransform x:Name=\"KnobTranslateTransform\"/>\r\n                                </Grid.RenderTransform>\r\n                                <Ellipse x:Name=\"SwitchKnobOn\" Fill=\"{ThemeResource ToggleSwitchKnobFillOn}\" Height=\"10\" Opacity=\"0\" Width=\"10\"/>\r\n                                <Ellipse x:Name=\"SwitchKnobOff\" Fill=\"{ThemeResource ToggleSwitchKnobFillOff}\" Height=\"10\" Width=\"10\"/>\r\n                            </Grid>\r\n                            <Thumb x:Name=\"SwitchThumb\" AutomationProperties.AccessibilityView=\"Raw\" Grid.ColumnSpan=\"3\">\r\n                                <Thumb.Template>\r\n                                    <ControlTemplate TargetType=\"Thumb\">\r\n                                        <Rectangle Fill=\"Transparent\"/>\r\n                                    </ControlTemplate>\r\n                                </Thumb.Template>\r\n                            </Thumb>\r\n                        </Grid>\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style x:Key=\"HeaderToggleButtonStyle\" TargetType=\"ToggleButton\">\r\n        <Setter Property=\"Background\" Value=\"{ThemeResource SystemControlBackgroundChromeMediumLowBrush}\"/>\r\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource SystemControlForegroundBaseHighBrush}\"/>\r\n        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource SystemControlForegroundTransparentBrush}\"/>\r\n        <Setter Property=\"BorderThickness\" Value=\"{ThemeResource ToggleButtonBorderThemeThickness}\"/>\r\n        <Setter Property=\"Padding\" Value=\"0\"/>\r\n        <Setter Property=\"Height\" Value=\"40\"/>\r\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\r\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\r\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\r\n        <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\"/>\r\n        <Setter Property=\"FontWeight\" Value=\"Normal\"/>\r\n        <Setter Property=\"FontSize\" Value=\"{ThemeResource ControlContentThemeFontSize}\"/>\r\n        <Setter Property=\"UseSystemFocusVisuals\" Value=\"True\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"ToggleButton\">\r\n                    <Grid x:Name=\"RootGrid\">\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"Auto\"/>\r\n                            <ColumnDefinition Width=\"*\"/>\r\n                        </Grid.ColumnDefinitions>\r\n                        <VisualStateManager.VisualStateGroups>\r\n                            <VisualStateGroup x:Name=\"CommonStates\">\r\n                                <VisualState x:Name=\"Normal\">\r\n                                    <Storyboard>\r\n                                        <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                                        <DoubleAnimation BeginTime=\"0:0:0\" Duration=\"0:0:0.1\" Storyboard.TargetName=\"Arrow\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(RotateTransform.Angle)\" To=\"0.0\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"PointerOver\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HoverPanel\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource SystemControlBackgroundListLowBrush}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                                        <DoubleAnimation BeginTime=\"0:0:0\" Duration=\"0:0:0.1\" Storyboard.TargetName=\"Arrow\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(RotateTransform.Angle)\" To=\"0.0\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Pressed\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HoverPanel\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource SystemControlBackgroundListMediumBrush}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <DoubleAnimation BeginTime=\"0:0:0\" Duration=\"0:0:0.1\" Storyboard.TargetName=\"Arrow\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(RotateTransform.Angle)\" To=\"0.0\"/>\r\n                                        <PointerDownThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Disabled\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HoverPanel\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource SystemControlBackgroundBaseLowBrush}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <DoubleAnimation BeginTime=\"0:0:0\" Duration=\"0:0:0.1\" Storyboard.TargetName=\"Arrow\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(RotateTransform.Angle)\" To=\"0.0\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Checked\">\r\n                                    <Storyboard>\r\n                                        <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                                        <DoubleAnimation BeginTime=\"0:0:0\" Duration=\"0:0:0.1\" Storyboard.TargetName=\"Arrow\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(RotateTransform.Angle)\" To=\"{Binding Value, ElementName=ArrowRotation}\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"CheckedPointerOver\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HoverPanel\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource SystemControlBackgroundListLowBrush}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                                        <DoubleAnimation BeginTime=\"0:0:0\" Duration=\"0:0:0.1\" Storyboard.TargetName=\"Arrow\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(RotateTransform.Angle)\" To=\"{Binding Value, ElementName=ArrowRotation}\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"CheckedPressed\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HoverPanel\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource SystemControlBackgroundListMediumBrush}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <DoubleAnimation BeginTime=\"0:0:0\" Duration=\"0:0:0.1\" Storyboard.TargetName=\"Arrow\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(RotateTransform.Angle)\" To=\"{Binding Value, ElementName=ArrowRotation}\"/>\r\n                                        <PointerDownThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"CheckedDisabled\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HoverPanel\" Storyboard.TargetProperty=\"Fill\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource SystemControlBackgroundBaseLowBrush}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <DoubleAnimation BeginTime=\"0:0:0\" Duration=\"0:0:0.1\" Storyboard.TargetName=\"Arrow\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(RotateTransform.Angle)\" To=\"{Binding Value, ElementName=ArrowRotation}\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"ExpandDirectionStates\">\r\n                                <VisualState x:Name=\"RightDirection\"/>\r\n                                <VisualState x:Name=\"DownDirection\"/>\r\n                                <VisualState x:Name=\"LeftDirection\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"ArrowRotation.Value\" Value=\"-90\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"UpDirection\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"ArrowRotation.Value\" Value=\"-90\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n                        <Slider x:Name=\"ArrowRotation\" Minimum=\"-180\" Maximum=\"180\" Value=\"90\" Visibility=\"Collapsed\"/>\r\n                        <FontIcon x:Name=\"Arrow\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" FontSize=\"12\" Glyph=\"&#xE76C;\" Margin=\"12\" RenderTransformOrigin=\"0.5,0.5\">\r\n                            <FontIcon.RenderTransform>\r\n                                <RotateTransform/>\r\n                            </FontIcon.RenderTransform>\r\n                        </FontIcon>\r\n                        <ContentPresenter x:Name=\"ContentPresenter\" AutomationProperties.AccessibilityView=\"Raw\" BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" ContentTemplate=\"{TemplateBinding ContentTemplate}\" Content=\"{TemplateBinding Content}\" ContentTransitions=\"{TemplateBinding ContentTransitions}\" Grid.Column=\"1\" Foreground=\"{TemplateBinding Foreground}\" HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Margin=\"0,0,12,0\" Padding=\"{TemplateBinding Padding}\" RenderTransformOrigin=\"0.5,0.5\" VerticalAlignment=\"{TemplateBinding VerticalAlignment}\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\r\n                        <Rectangle x:Name=\"HoverPanel\" Grid.ColumnSpan=\"2\" Fill=\"Transparent\"/>\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style x:Key=\"TransparentExpanderStyle\" TargetType=\"controls:Expander\">\r\n        <Setter Property=\"Header\" Value=\"Header\"/>\r\n        <Setter Property=\"IsTabStop\" Value=\"False\"/>\r\n        <Setter Property=\"HeaderStyle\" Value=\"{ThemeResource HeaderToggleButtonStyle}\"/>\r\n        <Setter Property=\"Background\" Value=\"{ThemeResource SystemControlBackgroundChromeLowBrush}\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"controls:Expander\">\r\n                    <Border BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\">\r\n                        <VisualStateManager.VisualStateGroups>\r\n                            <VisualStateGroup x:Name=\"DisplayModeAndDirectionStates\">\r\n                                <VisualState x:Name=\"VisibleLeft\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Column)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"RotateLayoutTransform.Angle\" Value=\"-90\"/>\r\n                                        <Setter Target=\"ColumnOne.Width\" Value=\"*\"/>\r\n                                        <Setter Target=\"ColumnTwo.Width\" Value=\"Auto\"/>\r\n                                        <Setter Target=\"PART_MainContent.RenderTransformOrigin\" Value=\"1, 0.5\"/>\r\n                                    </VisualState.Setters>\r\n                                    <Storyboard>\r\n                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.15\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.25\" Value=\"1\"/>\r\n                                        </DoubleAnimationUsingKeyFrames>\r\n                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TranslateTransform.Y)\">\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.15\" Value=\"20\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.25\" Value=\"0\"/>\r\n                                        </DoubleAnimationUsingKeyFrames>\r\n                                        <DoubleAnimation Duration=\"0:0:0.2\" From=\"0\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleX)\" To=\"1\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleY)\" To=\"1\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"VisibleDown\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.15\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.25\" Value=\"1\"/>\r\n                                        </DoubleAnimationUsingKeyFrames>\r\n                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TranslateTransform.Y)\">\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.15\" Value=\"20\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.25\" Value=\"0\"/>\r\n                                        </DoubleAnimationUsingKeyFrames>\r\n                                        <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleX)\" To=\"1\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.2\" From=\"0\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleY)\" To=\"1\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"VisibleRight\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Column)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Column)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"RotateLayoutTransform.Angle\" Value=\"-90\"/>\r\n                                    </VisualState.Setters>\r\n                                    <Storyboard>\r\n                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.15\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.25\" Value=\"1\"/>\r\n                                        </DoubleAnimationUsingKeyFrames>\r\n                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TranslateTransform.Y)\">\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.15\" Value=\"20\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.25\" Value=\"0\"/>\r\n                                        </DoubleAnimationUsingKeyFrames>\r\n                                        <DoubleAnimation Duration=\"0:0:0.2\" From=\"0\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleX)\" To=\"1\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleY)\" To=\"1\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"VisibleUp\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Row)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.RowSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.ColumnSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.RowSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.ColumnSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.RowSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.ColumnSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"RowOne.Height\" Value=\"*\"/>\r\n                                        <Setter Target=\"RowTwo.Height\" Value=\"Auto\"/>\r\n                                        <Setter Target=\"RotateLayoutTransform.Angle\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.RenderTransformOrigin\" Value=\"0.5, 1\"/>\r\n                                    </VisualState.Setters>\r\n                                    <Storyboard>\r\n                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Opacity)\">\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.15\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.25\" Value=\"1\"/>\r\n                                        </DoubleAnimationUsingKeyFrames>\r\n                                        <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(TranslateTransform.Y)\">\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0\" Value=\"0\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.15\" Value=\"20\"/>\r\n                                            <LinearDoubleKeyFrame KeyTime=\"0:0:0.25\" Value=\"0\"/>\r\n                                        </DoubleAnimationUsingKeyFrames>\r\n                                        <DoubleAnimation Duration=\"0:0:0.2\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleX)\" To=\"1\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.2\" From=\"0\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleY)\" To=\"1\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"CollapsedLeft\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Column)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"RotateLayoutTransform.Angle\" Value=\"-90\"/>\r\n                                        <Setter Target=\"ColumnOne.Width\" Value=\"*\"/>\r\n                                        <Setter Target=\"ColumnTwo.Width\" Value=\"Auto\"/>\r\n                                        <Setter Target=\"PART_MainContent.RenderTransformOrigin\" Value=\"1, 0.5\"/>\r\n                                        <Setter Target=\"PART_ExpanderToggleButton.Background\" Value=\"{Binding Background, ElementName=PART_MainContent}\"/>\r\n                                    </VisualState.Setters>\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" From=\"1\" Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Opacity)\" To=\"0\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleX)\" To=\"0\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleY)\" To=\"1\"/>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0:0:0.15\" Value=\"Collapsed\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"CollapsedDown\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"PART_ExpanderToggleButton.Background\" Value=\"{Binding Background, ElementName=PART_MainContent}\"/>\r\n                                    </VisualState.Setters>\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" From=\"1\" Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Opacity)\" To=\"0\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleX)\" To=\"1\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" From=\"1\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleY)\" To=\"0\"/>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0:0:0.15\" Value=\"Collapsed\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"CollapsedRight\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Column)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.RowSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Column)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.ColumnSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"RotateLayoutTransform.Angle\" Value=\"-90\"/>\r\n                                        <Setter Target=\"PART_ExpanderToggleButton.Background\" Value=\"{Binding Background, ElementName=PART_MainContent}\"/>\r\n                                    </VisualState.Setters>\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" From=\"1\" Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Opacity)\" To=\"0\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleX)\" To=\"0\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleY)\" To=\"1\"/>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0:0:0.15\" Value=\"Collapsed\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"CollapsedUp\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Row)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.RowSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_LayoutTransformer.(Grid.ColumnSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.RowSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.(Grid.ColumnSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Row)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.RowSpan)\" Value=\"1\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.Column)\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_ContentOverlay.(Grid.ColumnSpan)\" Value=\"2\"/>\r\n                                        <Setter Target=\"RowOne.Height\" Value=\"*\"/>\r\n                                        <Setter Target=\"RowTwo.Height\" Value=\"Auto\"/>\r\n                                        <Setter Target=\"RotateLayoutTransform.Angle\" Value=\"0\"/>\r\n                                        <Setter Target=\"PART_MainContent.RenderTransformOrigin\" Value=\"0.5, 1\"/>\r\n                                        <Setter Target=\"PART_ExpanderToggleButton.Background\" Value=\"{Binding Background, ElementName=PART_MainContent}\"/>\r\n                                    </VisualState.Setters>\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" From=\"1\" Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"(UIElement.Opacity)\" To=\"0\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleX)\" To=\"1\"/>\r\n                                        <DoubleAnimation Duration=\"0:0:0.15\" From=\"1\" Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.RenderTransform).(ScaleTransform.ScaleY)\" To=\"0\"/>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PART_MainContent\" Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0:0:0.15\" Value=\"Collapsed\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n                        <Grid x:Name=\"PART_RootGrid\" Background=\"{TemplateBinding Background}\">\r\n                            <Grid.ColumnDefinitions>\r\n                                <ColumnDefinition x:Name=\"ColumnOne\" Width=\"Auto\"/>\r\n                                <ColumnDefinition x:Name=\"ColumnTwo\" Width=\"*\"/>\r\n                            </Grid.ColumnDefinitions>\r\n                            <Grid.RowDefinitions>\r\n                                <RowDefinition x:Name=\"RowOne\" Height=\"Auto\"/>\r\n                                <RowDefinition x:Name=\"RowTwo\" Height=\"*\"/>\r\n                            </Grid.RowDefinitions>\r\n                            <ContentControl x:Name=\"PART_ContentOverlay\" Content=\"{TemplateBinding ContentOverlay}\" Grid.ColumnSpan=\"2\" Grid.Column=\"0\" HorizontalAlignment=\"Stretch\" HorizontalContentAlignment=\"Stretch\" Grid.RowSpan=\"1\" Grid.Row=\"1\" VerticalAlignment=\"Stretch\" VerticalContentAlignment=\"Stretch\">\r\n                                <ContentControl.RenderTransform>\r\n                                    <ScaleTransform/>\r\n                                </ContentControl.RenderTransform>\r\n                            </ContentControl>\r\n                            <Grid x:Name=\"PART_MainContent\" Background=\"{TemplateBinding Background}\" Grid.ColumnSpan=\"2\" Grid.Column=\"0\" Grid.RowSpan=\"1\" Grid.Row=\"1\">\r\n                                <Grid.RenderTransform>\r\n                                    <ScaleTransform/>\r\n                                </Grid.RenderTransform>\r\n                                <ContentPresenter x:Name=\"ContentPresenter\" HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\" HorizontalContentAlignment=\"Stretch\" Opacity=\"0\" VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\" VerticalContentAlignment=\"Stretch\">\r\n                                    <ContentPresenter.RenderTransform>\r\n                                        <TranslateTransform Y=\"20\"/>\r\n                                    </ContentPresenter.RenderTransform>\r\n                                </ContentPresenter>\r\n                            </Grid>\r\n                            <controls:LayoutTransformControl x:Name=\"PART_LayoutTransformer\" Grid.ColumnSpan=\"2\" Grid.Column=\"0\" RenderTransformOrigin=\"0.5,0.5\" Grid.RowSpan=\"1\" Grid.Row=\"0\">\r\n                                <controls:LayoutTransformControl.Transform>\r\n                                    <RotateTransform x:Name=\"RotateLayoutTransform\" Angle=\"0\"/>\r\n                                </controls:LayoutTransformControl.Transform>\r\n                                <ToggleButton x:Name=\"PART_ExpanderToggleButton\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" Content=\"{TemplateBinding Header}\" Foreground=\"{TemplateBinding Foreground}\" IsChecked=\"{Binding IsExpanded, Mode=TwoWay, RelativeSource={RelativeSource Mode=TemplatedParent}}\" MinHeight=\"40\" MinWidth=\"40\" AutomationProperties.Name=\"Expand\" Style=\"{TemplateBinding HeaderStyle}\" TabIndex=\"0\"/>\r\n                            </controls:LayoutTransformControl>\r\n                        </Grid>\r\n                    </Border>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <ControlTemplate x:Key=\"IconButtonTemplate\" TargetType=\"Button\">\r\n        <Grid x:Name=\"RootGrid\" Background=\"{TemplateBinding Background}\">\r\n            <VisualStateManager.VisualStateGroups>\r\n                <VisualStateGroup x:Name=\"CommonStates\">\r\n                    <VisualState x:Name=\"Normal\">\r\n                        <Storyboard>\r\n                            <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"PointerOver\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"PointerOver\"/>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ButtonRevealBackgroundPointerOver}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrushPointerOver}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ButtonForegroundPointerOver}\"/>\r\n                        </VisualState.Setters>\r\n                        <Storyboard>\r\n                            <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"Pressed\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"Pressed\"/>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ButtonRevealBackgroundPressed}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrushPressed}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ButtonForegroundPressed}\"/>\r\n                        </VisualState.Setters>\r\n                        <Storyboard>\r\n                            <PointerDownThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"Disabled\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrushDisabled}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ButtonForegroundDisabled}\"/>\r\n                        </VisualState.Setters>\r\n                    </VisualState>\r\n                </VisualStateGroup>\r\n            </VisualStateManager.VisualStateGroups>\r\n            <ContentPresenter x:Name=\"ContentPresenter\" AutomationProperties.AccessibilityView=\"Raw\" BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" ContentTemplate=\"{TemplateBinding ContentTemplate}\" Content=\"{TemplateBinding Content}\" ContentTransitions=\"{TemplateBinding ContentTransitions}\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Padding=\"{TemplateBinding Padding}\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\r\n        </Grid>\r\n    </ControlTemplate>\r\n\r\n    <ControlTemplate x:Key=\"IconToggleButtonTemplate\" TargetType=\"ToggleButton\">\r\n        <Grid x:Name=\"RootGrid\" Background=\"{TemplateBinding Background}\">\r\n            <VisualStateManager.VisualStateGroups>\r\n                <VisualStateGroup x:Name=\"CommonStates\">\r\n                    <VisualState x:Name=\"Normal\">\r\n                        <Storyboard>\r\n                            <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"PointerOver\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"PointerOver\"/>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ToggleButtonRevealBackgroundPointerOver}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ToggleButtonRevealBorderBrushPointerOver}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundPointerOver}\"/>\r\n                        </VisualState.Setters>\r\n                        <Storyboard>\r\n                            <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"Pressed\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"Pressed\"/>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ToggleButtonRevealBackgroundPressed}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ToggleButtonRevealBorderBrushPressed}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundPressed}\"/>\r\n                        </VisualState.Setters>\r\n                        <Storyboard>\r\n                            <PointerDownThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"Disabled\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ToggleButtonRevealBorderBrushDisabled}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundDisabled}\"/>\r\n                        </VisualState.Setters>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"Checked\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ToggleButtonRevealBackgroundChecked}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ToggleButtonRevealBorderBrushChecked}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundChecked}\"/>\r\n                        </VisualState.Setters>\r\n                        <Storyboard>\r\n                            <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"CheckedPointerOver\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"PointerOver\"/>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ToggleButtonRevealBackgroundCheckedPointerOver}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ToggleButtonRevealBorderBrushCheckedPointerOver}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundCheckedPointerOver}\"/>\r\n                        </VisualState.Setters>\r\n                        <Storyboard>\r\n                            <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"CheckedPressed\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"Pressed\"/>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ToggleButtonRevealBackgroundCheckedPressed}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ToggleButtonRevealBorderBrushCheckedPressed}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundCheckedPressed}\"/>\r\n                        </VisualState.Setters>\r\n                        <Storyboard>\r\n                            <PointerDownThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"CheckedDisabled\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ToggleButtonRevealBackgroundCheckedDisabled}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ToggleButtonRevealBorderBrushCheckedDisabled}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundCheckedDisabled}\"/>\r\n                        </VisualState.Setters>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"Indeterminate\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ToggleButtonRevealBackgroundIndeterminate}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ToggleButtonRevealBorderBrushIndeterminate}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundIndeterminate}\"/>\r\n                        </VisualState.Setters>\r\n                        <Storyboard>\r\n                            <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"IndeterminatePointerOver\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"PointerOver\"/>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ToggleButtonRevealBackgroundIndeterminatePointerOver}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ToggleButtonRevealBorderBrushIndeterminatePointerOver}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundIndeterminatePointerOver}\"/>\r\n                        </VisualState.Setters>\r\n                        <Storyboard>\r\n                            <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"IndeterminatePressed\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"Pressed\"/>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ToggleButtonRevealBackgroundIndeterminatePressed}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ToggleButtonRevealBorderBrushIndeterminatePressed}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundIndeterminatePressed}\"/>\r\n                        </VisualState.Setters>\r\n                        <Storyboard>\r\n                            <PointerDownThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                    <VisualState x:Name=\"IndeterminateDisabled\">\r\n                        <VisualState.Setters>\r\n                            <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ToggleButtonRevealBackgroundIndeterminateDisabled}\"/>\r\n                            <Setter Target=\"ContentPresenter.BorderBrush\" Value=\"{ThemeResource ToggleButtonRevealBorderBrushIndeterminateDisabled}\"/>\r\n                            <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundIndeterminateDisabled}\"/>\r\n                        </VisualState.Setters>\r\n                    </VisualState>\r\n                </VisualStateGroup>\r\n            </VisualStateManager.VisualStateGroups>\r\n            <ContentPresenter x:Name=\"ContentPresenter\" AutomationProperties.AccessibilityView=\"Raw\" BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" ContentTemplate=\"{TemplateBinding ContentTemplate}\" Content=\"{TemplateBinding Content}\" ContentTransitions=\"{TemplateBinding ContentTransitions}\" HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\" Padding=\"{TemplateBinding Padding}\" VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"/>\r\n        </Grid>\r\n    </ControlTemplate>\r\n\r\n    <Style TargetType=\"TextBox\" x:Key=\"AutoSuggestBoxTextBoxStyle\">\r\n        <Setter Property=\"MinWidth\" Value=\"{ThemeResource TextControlThemeMinWidth}\" />\r\n        <Setter Property=\"MinHeight\" Value=\"{ThemeResource TextControlThemeMinHeight}\" />\r\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource TextControlForeground}\" />\r\n        <Setter Property=\"Background\" Value=\"{ThemeResource SystemControlBackgroundChromeLowBrush}\" />\r\n        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource TextControlBorderBrush}\" />\r\n        <Setter Property=\"SelectionHighlightColor\" Value=\"{ThemeResource TextControlSelectionHighlightColor}\" />\r\n        <Setter Property=\"BorderThickness\" Value=\"{ThemeResource TextControlBorderThemeThickness}\" />\r\n        <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\" />\r\n        <Setter Property=\"FontSize\" Value=\"{ThemeResource SearchBoxContentThemeFontSize}\" />\r\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Auto\" />\r\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Auto\" />\r\n        <Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Hidden\" />\r\n        <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Hidden\" />\r\n        <Setter Property=\"ScrollViewer.IsDeferredScrollingEnabled\" Value=\"False\" />\r\n        <Setter Property=\"Padding\" Value=\"8,4\" />\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"TextBox\">\r\n                    <Grid>\r\n\r\n                        <Grid.Resources>\r\n                            <Style x:Name=\"DeleteButtonStyle\" TargetType=\"Button\">\r\n                                <Setter Property=\"Template\">\r\n                                    <Setter.Value>\r\n                                        <ControlTemplate TargetType=\"Button\">\r\n                                            <Grid x:Name=\"ButtonLayoutGrid\"\r\n                                                        BorderBrush=\"{ThemeResource TextControlButtonBorderBrush}\"\r\n                                                        BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                                        Background=\"{ThemeResource TextControlButtonBackground}\">\r\n\r\n                                                <VisualStateManager.VisualStateGroups>\r\n                                                    <VisualStateGroup x:Name=\"CommonStates\">\r\n                                                        <VisualState x:Name=\"Normal\" />\r\n\r\n                                                        <VisualState x:Name=\"PointerOver\">\r\n                                                            <Storyboard>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ButtonLayoutGrid\" Storyboard.TargetProperty=\"Background\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBackgroundPointerOver}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ButtonLayoutGrid\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBorderBrushPointerOver}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"GlyphElement\" Storyboard.TargetProperty=\"Foreground\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonForegroundPointerOver}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                            </Storyboard>\r\n                                                        </VisualState>\r\n\r\n                                                        <VisualState x:Name=\"Pressed\">\r\n                                                            <Storyboard>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ButtonLayoutGrid\" Storyboard.TargetProperty=\"Background\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBackgroundPressed}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ButtonLayoutGrid\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBorderBrushPressed}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"GlyphElement\" Storyboard.TargetProperty=\"Foreground\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonForegroundPressed}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                            </Storyboard>\r\n                                                        </VisualState>\r\n\r\n                                                        <VisualState x:Name=\"Disabled\">\r\n                                                            <Storyboard>\r\n                                                                <DoubleAnimation Storyboard.TargetName=\"ButtonLayoutGrid\"\r\n                                                                    Storyboard.TargetProperty=\"Opacity\"\r\n                                                                    To=\"0\"\r\n                                                                    Duration=\"0\" />\r\n                                                            </Storyboard>\r\n                                                        </VisualState>\r\n                                                    </VisualStateGroup>\r\n                                                </VisualStateManager.VisualStateGroups>\r\n                                                <TextBlock x:Name=\"GlyphElement\"\r\n                                                            Foreground=\"{ThemeResource TextControlButtonForeground}\"\r\n                                                            VerticalAlignment=\"Center\"\r\n                                                            HorizontalAlignment=\"Center\"\r\n                                                            FontStyle=\"Normal\"\r\n                                                            FontSize=\"{ThemeResource AutoSuggestBoxIconFontSize}\"\r\n                                                            Text=\"&#xE10A;\"\r\n                                                            FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\r\n                                                            AutomationProperties.AccessibilityView=\"Raw\" />\r\n                                            </Grid>\r\n                                        </ControlTemplate>\r\n                                    </Setter.Value>\r\n                                </Setter>\r\n                            </Style>\r\n                            <Style x:Name=\"QueryButtonStyle\" TargetType=\"Button\">\r\n                                <Setter Property=\"Template\">\r\n                                    <Setter.Value>\r\n                                        <ControlTemplate TargetType=\"Button\">\r\n                                            <ContentPresenter x:Name=\"ContentPresenter\"\r\n                                                        Background=\"{ThemeResource TextControlButtonBackground}\"\r\n                                                        BorderBrush=\"{ThemeResource TextControlButtonBorderBrush}\"\r\n                                                        BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                                        Content=\"{TemplateBinding Content}\"\r\n                                                        ContentTemplate=\"{TemplateBinding ContentTemplate}\"\r\n                                                        ContentTransitions=\"{TemplateBinding ContentTransitions}\"\r\n                                                        FontSize=\"{ThemeResource AutoSuggestBoxIconFontSize}\"\r\n                                                        Padding=\"{TemplateBinding Padding}\"\r\n                                                        HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                                                        VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                                        AutomationProperties.AccessibilityView=\"Raw\">\r\n\r\n                                                <VisualStateManager.VisualStateGroups>\r\n                                                    <VisualStateGroup x:Name=\"CommonStates\">\r\n                                                        <VisualState x:Name=\"Normal\" />\r\n\r\n                                                        <VisualState x:Name=\"PointerOver\">\r\n                                                            <Storyboard>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"Background\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBackgroundPointerOver}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBorderBrushPointerOver}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonForegroundPointerOver}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                            </Storyboard>\r\n                                                        </VisualState>\r\n\r\n                                                        <VisualState x:Name=\"Pressed\">\r\n                                                            <Storyboard>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"Background\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBackgroundPressed}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBorderBrushPressed}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonForegroundPressed}\" />\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                            </Storyboard>\r\n                                                        </VisualState>\r\n\r\n                                                        <VisualState x:Name=\"Disabled\">\r\n                                                            <Storyboard>\r\n                                                                <DoubleAnimation Storyboard.TargetName=\"ContentPresenter\"\r\n                                                                    Storyboard.TargetProperty=\"Opacity\"\r\n                                                                    To=\"0\"\r\n                                                                    Duration=\"0\" />\r\n                                                            </Storyboard>\r\n                                                        </VisualState>\r\n                                                    </VisualStateGroup>\r\n                                                </VisualStateManager.VisualStateGroups>\r\n                                            </ContentPresenter>\r\n                                        </ControlTemplate>\r\n                                    </Setter.Value>\r\n                                </Setter>\r\n                            </Style>\r\n                        </Grid.Resources>\r\n\r\n                        <VisualStateManager.VisualStateGroups>\r\n                            <VisualStateGroup x:Name=\"CommonStates\">\r\n\r\n                                <VisualState x:Name=\"Disabled\">\r\n\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HeaderContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlHeaderForegroundDisabled}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBackgroundDisabled}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBorderBrushDisabled}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentElement\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlForegroundDisabled}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PlaceholderTextContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlPlaceholderForegroundDisabled}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Normal\" />\r\n\r\n                                <VisualState x:Name=\"PointerOver\">\r\n\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBorderBrushPointerOver}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBackgroundPointerOver}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PlaceholderTextContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlPlaceholderForegroundPointerOver}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentElement\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlForegroundPointerOver}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Focused\">\r\n\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PlaceholderTextContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlPlaceholderForegroundFocused}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBackgroundFocused}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBorderBrushFocused}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentElement\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlForegroundFocused}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentElement\" Storyboard.TargetProperty=\"RequestedTheme\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Light\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"QueryButton\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonForeground}\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"ButtonStates\">\r\n                                <VisualState x:Name=\"ButtonVisible\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"DeleteButton.Visibility\" Value=\"Visible\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n\r\n                                <VisualState x:Name=\"ButtonCollapsed\" />\r\n\r\n                            </VisualStateGroup>\r\n\r\n                        </VisualStateManager.VisualStateGroups>\r\n\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"*\" />\r\n                            <ColumnDefinition Width=\"Auto\" />\r\n                            <ColumnDefinition Width=\"Auto\" />\r\n                        </Grid.ColumnDefinitions>\r\n\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"Auto\" />\r\n                            <RowDefinition Height=\"*\" />\r\n                            <RowDefinition Height=\"Auto\" />\r\n                        </Grid.RowDefinitions>\r\n\r\n                        <Border x:Name=\"BorderElement\"\r\n                                    Grid.Row=\"1\"\r\n                                    Background=\"{TemplateBinding Background}\"\r\n                                    BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                    BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                    Grid.ColumnSpan=\"3\"\r\n                                    Grid.RowSpan=\"1\" />\r\n                        <ContentPresenter x:Name=\"ContentElement\"\r\n                                    Grid.Row=\"1\"\r\n                                    VerticalAlignment=\"Center\"\r\n                                    Margin=\"{TemplateBinding BorderThickness}\"\r\n                                    Padding=\"{TemplateBinding Padding}\"\r\n                                    AutomationProperties.AccessibilityView=\"Raw\" />\r\n                        <ContentControl x:Name=\"PlaceholderTextContentPresenter\"\r\n                                    Grid.Row=\"1\"\r\n                                    Foreground=\"{ThemeResource TextControlPlaceholderForeground}\"\r\n                                    Margin=\"{TemplateBinding BorderThickness}\"\r\n                                    Padding=\"{TemplateBinding Padding}\"\r\n                                    FontSize=\"{TemplateBinding FontSize}\"\r\n                                    IsTabStop=\"False\"\r\n                                    Grid.ColumnSpan=\"3\"\r\n                                    Content=\"{TemplateBinding PlaceholderText}\"\r\n                                    VerticalAlignment=\"Center\"\r\n                                    IsHitTestVisible=\"False\" />\r\n                        <Button x:Name=\"DeleteButton\"\r\n                                    Grid.Row=\"1\"\r\n                                    Style=\"{ThemeResource DeleteButtonStyle}\"\r\n                                    BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                    IsTabStop=\"False\"\r\n                                    Grid.Column=\"1\"\r\n                                    Visibility=\"Collapsed\"\r\n                                    FontSize=\"{TemplateBinding FontSize}\"\r\n                                    MinWidth=\"34\"\r\n                                    AutomationProperties.AccessibilityView=\"Raw\"\r\n                                    VerticalAlignment=\"Stretch\" />\r\n                        <Button x:Name=\"QueryButton\"\r\n                                    Grid.Row=\"1\"\r\n                                    Style=\"{ThemeResource QueryButtonStyle}\"\r\n                                    BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                    IsTabStop=\"False\"\r\n                                    Grid.Column=\"2\"\r\n                                    FontSize=\"{TemplateBinding FontSize}\"\r\n                                    MinWidth=\"34\"\r\n                                    Width=\"{TemplateBinding Height}\"\r\n                                    VerticalAlignment=\"Stretch\"\r\n                                    AutomationProperties.AccessibilityView=\"Raw\"/>\r\n                    </Grid>\r\n\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n\r\n</ResourceDictionary>\r\n"
  },
  {
    "path": "Unicord.Universal/Themes/Generic.xaml",
    "content": "<ResourceDictionary\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Controls\"\r\n    xmlns:wam=\"using:Unicord.Universal.Controls\"\r\n    xmlns:d=\"http://schemas.microsoft.com/expression/blend/2008\" \r\n    xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\"\r\n    xmlns:entities=\"using:DSharpPlus.Entities\"\r\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\r\n    xmlns:media=\"using:Microsoft.UI.Xaml.Media\"\r\n    xmlns:controls=\"using:Microsoft.Toolkit.Uwp.UI.Controls\" xmlns:emoji=\"using:Unicord.Universal.Controls.Emoji\"\r\n    mc:Ignorable=\"d\">\r\n\r\n    <ResourceDictionary.ThemeDictionaries>\r\n        <ResourceDictionary x:Key=\"Default\" />\r\n        <ResourceDictionary x:Key=\"Light\">\r\n            <SolidColorBrush x:Key=\"MarkdownBorderBrush\" Color=\"#FFBEBEBE\" />\r\n            <SolidColorBrush x:Key=\"MarkdownBackgroundBrush\" Color=\"#FFF6F8FA\" />\r\n            <SolidColorBrush x:Key=\"MarkdownInlineCodeBackgroundBrush\" Color=\"#FFDDDFE1\" />\r\n            <SolidColorBrush x:Key=\"MarkdownQuoteForeground\" Color=\"#FF6E747C\" />\r\n        </ResourceDictionary>\r\n        <ResourceDictionary x:Key=\"Dark\">\r\n            <SolidColorBrush x:Key=\"MarkdownBorderBrush\" Color=\"#FF424242\" />\r\n            <SolidColorBrush x:Key=\"MarkdownBackgroundBrush\" Color=\"#FF202020\" />\r\n            <SolidColorBrush x:Key=\"MarkdownInlineCodeBackgroundBrush\" Color=\"#FF363636\" />\r\n            <SolidColorBrush x:Key=\"MarkdownQuoteForeground\" Color=\"#FFBEC1C5\" />\r\n        </ResourceDictionary>\r\n    </ResourceDictionary.ThemeDictionaries>\r\n\r\n\r\n    <Style x:Key=\"CleanListViewItemStyle\" TargetType=\"ListViewItem\">\r\n        <Setter Property=\"Padding\" Value=\"0,2\" />\r\n        <Setter Property=\"Margin\" Value=\"0\" />\r\n        <Setter Property=\"MinHeight\" Value=\"0\" />\r\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\r\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\r\n    </Style>\r\n\r\n    <Style TargetType=\"wam:MarkdownTextBlock\">\r\n        <Setter Property=\"FontSize\" Value=\"14\"/>\r\n        <Setter Property=\"IsTabStop\" Value=\"False\" />\r\n        <Setter Property=\"LinkForeground\" Value=\"{ThemeResource SystemControlHighlightAccentBrush}\" />\r\n        <Setter Property=\"QuoteBackground\" Value=\"Transparent\" />\r\n        <Setter Property=\"QuoteForeground\" Value=\"{ThemeResource MarkdownQuoteForeground}\" />\r\n        <Setter Property=\"QuoteBorderBrush\" Value=\"{ThemeResource MarkdownBorderBrush}\" />\r\n        <Setter Property=\"QuoteBorderThickness\" Value=\"4, 0, 0, 0\" />\r\n        <Setter Property=\"QuoteMargin\" Value=\"0,0,0,-2\" />\r\n        <Setter Property=\"QuotePadding\" Value=\"8,2,0,2\" />\r\n        <Setter Property=\"InlineCodeBorderThickness\" Value=\"1\" />\r\n        <Setter Property=\"InlineCodePadding\" Value=\"4, 2, 4, 2\" />\r\n\r\n        <Setter Property=\"CodeFontFamily\" Value=\"{ThemeResource MonospaceFontFamily}\"/>\r\n        <Setter Property=\"CodeBackground\" Value=\"{ThemeResource CardBackgroundFillColorDefaultBrush}\"/>\r\n        <Setter Property=\"CodeBorderBrush\" Value=\"{ThemeResource CardStrokeColorDefaultBrush}\" />\r\n        <Setter Property=\"CodeBorderThickness\" Value=\"1\" />\r\n        <Setter Property=\"CodeCornerRadius\" Value=\"4\"/>\r\n        \r\n        <Setter Property=\"InlineCodeBackground\" Value=\"{ThemeResource CardBackgroundFillColorDefaultBrush}\"/>\r\n        <Setter Property=\"InlineCodeBorderBrush\" Value=\"{ThemeResource CardStrokeColorDefaultBrush}\" />\r\n        <Setter Property=\"InlineCodeFontFamily\" Value=\"{ThemeResource MonospaceFontFamily}\"/>\r\n        <Setter Property=\"InlineCodeCornerRadius\" Value=\"2\"/>\r\n        \r\n        <Setter Property=\"CodeMargin\" Value=\"0,4\" />\r\n        <Setter Property=\"CodePadding\" Value=\"8,4\" />\r\n        <Setter Property=\"EmojiFontFamily\" Value=\"Segoe UI Emoji\" />\r\n        <Setter Property=\"Header1FontWeight\" Value=\"Bold\" />\r\n        <Setter Property=\"Header1FontSize\" Value=\"20\" />\r\n        <Setter Property=\"Header1Margin\" Value=\"0, 15, 0, 15\" />\r\n        <Setter Property=\"Header1Foreground\" Value=\"{ThemeResource DefaultTextForegroundThemeBrush}\" />\r\n        <Setter Property=\"Header2FontWeight\" Value=\"Normal\" />\r\n        <Setter Property=\"Header2FontSize\" Value=\"20\" />\r\n        <Setter Property=\"Header2Margin\" Value=\"0, 15, 0, 15\" />\r\n        <Setter Property=\"Header2Foreground\" Value=\"{ThemeResource DefaultTextForegroundThemeBrush}\" />\r\n        <Setter Property=\"Header3FontWeight\" Value=\"Bold\" />\r\n        <Setter Property=\"Header3FontSize\" Value=\"17\" />\r\n        <Setter Property=\"Header3Margin\" Value=\"0, 10, 0, 10\" />\r\n        <Setter Property=\"Header3Foreground\" Value=\"{ThemeResource DefaultTextForegroundThemeBrush}\" />\r\n        <Setter Property=\"Header4FontWeight\" Value=\"Normal\" />\r\n        <Setter Property=\"Header4FontSize\" Value=\"17\" />\r\n        <Setter Property=\"Header4Margin\" Value=\"0, 10, 0, 10\" />\r\n        <Setter Property=\"Header4Foreground\" Value=\"{ThemeResource DefaultTextForegroundThemeBrush}\" />\r\n        <Setter Property=\"Header5FontWeight\" Value=\"Bold\" />\r\n        <Setter Property=\"Header5FontSize\" Value=\"15\" />\r\n        <Setter Property=\"Header5Margin\" Value=\"0, 10, 0, 5\" />\r\n        <Setter Property=\"Header5Foreground\" Value=\"{ThemeResource DefaultTextForegroundThemeBrush}\" />\r\n        <Setter Property=\"Header6FontWeight\" Value=\"Normal\" />\r\n        <Setter Property=\"Header6FontSize\" Value=\"15\" />\r\n        <Setter Property=\"Header6Margin\" Value=\"0, 10, 0, 0\" />\r\n        <Setter Property=\"Header6Foreground\" Value=\"{ThemeResource DefaultTextForegroundThemeBrush}\" />\r\n        <Setter Property=\"HorizontalRuleBrush\" Value=\"{ThemeResource MarkdownBorderBrush}\" />\r\n        <Setter Property=\"HorizontalRuleMargin\" Value=\"0, 7, 0, 7\" />\r\n        <Setter Property=\"HorizontalRuleThickness\" Value=\"2\" />\r\n        <Setter Property=\"ListMargin\" Value=\"0, 5, 0, 5\" />\r\n        <Setter Property=\"ListGutterWidth\" Value=\"32\" />\r\n        <Setter Property=\"ListBulletSpacing\" Value=\"8\" />\r\n        <Setter Property=\"ParagraphMargin\" Value=\"0,4\" />\r\n        <Setter Property=\"TableBorderBrush\" Value=\"{ThemeResource MarkdownBorderBrush}\" />\r\n        <Setter Property=\"TableBorderThickness\" Value=\"1\" />\r\n        <Setter Property=\"TableCellPadding\" Value=\"9, 4, 9, 4\" />\r\n        <Setter Property=\"TableMargin\" Value=\"0, 5, 0, 5\" />\r\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\" />\r\n        <Setter Property=\"ColourBrushConverter\" Value=\"{StaticResource ColourBrushConverter}\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"wam:MarkdownTextBlock\">\r\n                    <Border x:Name=\"RootElement\"\r\n                            Background=\"{TemplateBinding Background}\"\r\n                            BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                            BorderThickness=\"{TemplateBinding BorderThickness}\" />\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style TargetType=\"controls:ImageEx\">\r\n        <Setter Property=\"Background\" Value=\"Transparent\" />\r\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource ApplicationForegroundThemeBrush}\" />\r\n        <Setter Property=\"IsCacheEnabled\" Value=\"True\"/>\r\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\"/>\r\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"controls:ImageEx\">\r\n                    <Grid Background=\"{TemplateBinding Background}\" CornerRadius=\"{TemplateBinding CornerRadius}\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\">\r\n                        <Image Name=\"PlaceholderImage\"\r\n                               HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                               VerticalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                               Opacity=\"1.0\"\r\n                               Source=\"{TemplateBinding PlaceholderSource}\"\r\n                               Stretch=\"{TemplateBinding PlaceholderStretch}\" />\r\n                        <Image Name=\"Image\"\r\n                               HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                               VerticalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\r\n                               NineGrid=\"{TemplateBinding NineGrid}\"\r\n                               Opacity=\"0.0\"\r\n                               Stretch=\"{TemplateBinding Stretch}\" />\r\n\r\n                        <VisualStateManager.VisualStateGroups>\r\n                            <VisualStateGroup x:Name=\"CommonStates\">\r\n                                <VisualState x:Name=\"Failed\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Image\" Storyboard.TargetProperty=\"Opacity\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PlaceholderImage\" Storyboard.TargetProperty=\"Opacity\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"1\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Loading\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"Image\" Storyboard.TargetProperty=\"Opacity\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"0\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PlaceholderImage\" Storyboard.TargetProperty=\"Opacity\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"1\" />\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Loaded\">\r\n                                    <Storyboard>\r\n                                        <DoubleAnimation AutoReverse=\"False\"\r\n                                                         BeginTime=\"0\"\r\n                                                         Storyboard.TargetName=\"Image\"\r\n                                                         Storyboard.TargetProperty=\"Opacity\"\r\n                                                         Duration=\"00:00:00.15\"\r\n                                                         From=\"0\"\r\n                                                         To=\"1\" />\r\n                                        <DoubleAnimation AutoReverse=\"False\"\r\n                                                         BeginTime=\"0\"\r\n                                                         Storyboard.TargetName=\"PlaceholderImage\"\r\n                                                         Storyboard.TargetProperty=\"Opacity\"\r\n                                                         Duration=\"00:00:00.15\"\r\n                                                         From=\"1\"\r\n                                                         To=\"0\" />\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Unloaded\" />\r\n                            </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style TargetType=\"local:FileViewer\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:FileViewer\">\r\n                    <Image Name=\"image\" Height=\"128\" />\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style TargetType=\"local:UsernameControl\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:UsernameControl\">\r\n                    <Grid DataContext=\"{TemplateBinding User}\">\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"Auto\"/>\r\n                            <ColumnDefinition Width=\"Auto\"/>\r\n                        </Grid.ColumnDefinitions>\r\n\r\n                        <TextBlock x:Name=\"authorName\"\r\n                                   VerticalAlignment=\"Bottom\"\r\n                                   FontSize=\"{TemplateBinding FontSize}\"\r\n                                   FontWeight=\"{TemplateBinding FontWeight}\"\r\n                                   Foreground=\"{Binding Color, Converter={StaticResource ColourBrushConverter}, FallbackValue={ThemeResource DefaultTextForegroundThemeBrush}}\"\r\n                                   Text=\"{Binding DisplayName}\"\r\n                                   TextWrapping=\"NoWrap\" />\r\n                        <TextBlock Visibility=\"{Binding IsBot, Converter={StaticResource BoolVisibilityConverter}}\" VerticalAlignment=\"Center\" Margin=\"8,0,0,0\" Grid.Column=\"1\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" FontSize=\"{TemplateBinding IconSize}\" FontWeight=\"Normal\" Text=\"&#xE99A;\" />\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style TargetType=\"local:ImageElement\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:ImageElement\">\r\n                    <local:ScaledContentControl TargetWidth=\"{TemplateBinding ImageWidth}\" TargetHeight=\"{TemplateBinding ImageHeight}\">\r\n                    <controls:ImageEx x:Name=\"image\"\r\n                                      CornerRadius=\"{TemplateBinding CornerRadius}\" \r\n                                      MaxWidth=\"{TemplateBinding ImageWidth}\" \r\n                                      MaxHeight=\"{TemplateBinding ImageHeight}\" \r\n                                      IsCacheEnabled=\"True\"\r\n                                      Stretch=\"Uniform\"/>\r\n                    </local:ScaledContentControl>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style TargetType=\"local:ScaledContentControl\">\r\n        <Setter Property=\"MaxWidth\" Value=\"480\"/>\r\n        <Setter Property=\"MaxHeight\" Value=\"480\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:ScaledContentControl\">\r\n                    <ContentPresenter \r\n                        x:Name=\"ContentPresenter\" \r\n                        Content=\"{TemplateBinding Content}\"\r\n                        HorizontalAlignment=\"Stretch\" \r\n                        VerticalAlignment=\"Stretch\"/>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style TargetType=\"local:IconLabelButton\" BasedOn=\"{StaticResource CleanButtonStyle}\">\r\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\"/>\r\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\"/>\r\n        <Setter Property=\"Padding\" Value=\"12\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:IconLabelButton\">\r\n                    <Grid x:Name=\"RootGrid\" Background=\"{TemplateBinding Background}\">\r\n                        <VisualStateManager.VisualStateGroups>\r\n                            <VisualStateGroup x:Name=\"CommonStates\">\r\n                                <VisualState x:Name=\"Normal\">\r\n                                    <Storyboard>\r\n                                        <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"PointerOver\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"PointerOver\"/>\r\n                                        <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ButtonRevealBackgroundPointerOver}\"/>\r\n                                        <Setter Target=\"Border.BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrushPointerOver}\"/>\r\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ButtonForegroundPointerOver}\"/>\r\n                                        <Setter Target=\"IconBlock.Foreground\" Value=\"{ThemeResource ButtonForegroundPointerOver}\"/>\r\n                                    </VisualState.Setters>\r\n                                    <Storyboard>\r\n                                        <PointerUpThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Pressed\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"Pressed\"/>\r\n                                        <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource ButtonRevealBackgroundPressed}\"/>\r\n                                        <Setter Target=\"Border.BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrushPressed}\"/>\r\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ButtonForegroundPressed}\"/>\r\n                                        <Setter Target=\"IconBlock.Foreground\" Value=\"{ThemeResource ButtonForegroundPressed}\"/>\r\n                                    </VisualState.Setters>\r\n                                    <Storyboard>\r\n                                        <PointerDownThemeAnimation Storyboard.TargetName=\"RootGrid\"/>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Disabled\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"Border.BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrushDisabled}\"/>\r\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ButtonForegroundDisabled}\"/>\r\n                                        <Setter Target=\"IconBlock.Foreground\" Value=\"{ThemeResource ButtonForegroundDisabled}\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n                        <Border x:Name=\"Border\" BorderBrush=\"{TemplateBinding BorderBrush}\" BorderThickness=\"{TemplateBinding BorderThickness}\" Padding=\"{TemplateBinding Padding}\" AutomationProperties.AccessibilityView=\"Raw\">\r\n                            <Grid HorizontalAlignment=\"Stretch\">\r\n                                <Grid.ColumnDefinitions>\r\n                                    <ColumnDefinition Width=\"Auto\"/>\r\n                                    <ColumnDefinition Width=\"*\"/>\r\n                                </Grid.ColumnDefinitions>\r\n                                <TextBlock x:Name=\"IconBlock\" Foreground=\"{TemplateBinding Foreground}\" Text=\"{TemplateBinding Icon}\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" FontSize=\"16\" Margin=\"0,0,12,0\" VerticalAlignment=\"Center\"/>\r\n                                <ContentPresenter x:Name=\"ContentPresenter\" Grid.Column=\"1\" VerticalAlignment=\"Center\" Content=\"{TemplateBinding Content}\" ContentTemplate=\"{TemplateBinding ContentTemplate}\" ContentTemplateSelector=\"{TemplateBinding ContentTemplateSelector}\" ContentTransitions=\"{TemplateBinding ContentTransitions}\"/>\r\n                            </Grid>\r\n                        </Border>\r\n\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <Style x:Key=\"MessageTextBoxStyle\" TargetType=\"TextBox\">\r\n        <Setter Property=\"MinWidth\" Value=\"{ThemeResource TextControlThemeMinWidth}\" />\r\n        <Setter Property=\"MinHeight\" Value=\"{ThemeResource TextControlThemeMinHeight}\" />\r\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource TextControlForeground}\" />\r\n        <Setter Property=\"Padding\" Value=\"10\"/>\r\n        <Setter Property=\"MaxHeight\" Value=\"90\"/>\r\n        <Setter Property=\"InputScope\" Value=\"Chat\"/>\r\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\r\n        <Setter Property=\"MaxLength\" Value=\"2000\"/>\r\n        <Setter Property=\"Background\" Value=\"Transparent\" />\r\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\" />\r\n        <Setter Property=\"TextWrapping\" Value=\"Wrap\"/>\r\n        <!--<Setter Property=\"AcceptsReturn\" Value=\"True\"/>-->\r\n        <Setter Property=\"VerticalAlignment\" Value=\"Center\"/>\r\n        <Setter Property=\"SelectionHighlightColor\" Value=\"{ThemeResource TextControlSelectionHighlightColor}\" />\r\n        <Setter Property=\"BorderThickness\" Value=\"0\" />\r\n        <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\" />\r\n        <Setter Property=\"FontSize\" Value=\"{ThemeResource ControlContentThemeFontSize}\" />\r\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Auto\" />\r\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Auto\" />\r\n        <Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Hidden\" />\r\n        <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Hidden\" />\r\n        <Setter Property=\"ScrollViewer.IsDeferredScrollingEnabled\" Value=\"False\" />\r\n        <Setter Property=\"Padding\" Value=\"{ThemeResource TextControlThemePadding}\" />\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"TextBox\">\r\n                    <Grid>\r\n                        <VisualStateManager.VisualStateGroups>\r\n                            <VisualStateGroup x:Name=\"CommonStates\">\r\n                                <VisualState x:Name=\"Disabled\">\r\n                                    <VisualState.Setters>\r\n                                        <Setter Target=\"ContentElement.Foreground\" Value=\"{ThemeResource TextControlForegroundDisabled}\"/>\r\n                                        <Setter Target=\"PlaceholderTextContentPresenter.Foreground\" Value=\"{ThemeResource TextControlPlaceholderForegroundDisabled}\"/>\r\n                                    </VisualState.Setters>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Normal\" />\r\n                            </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"*\" />\r\n                            <ColumnDefinition Width=\"Auto\" />\r\n                        </Grid.ColumnDefinitions>\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"Auto\" />\r\n                            <RowDefinition Height=\"*\" />\r\n                        </Grid.RowDefinitions>\r\n                        <Border x:Name=\"BorderElement\"\r\n                                    Grid.Row=\"1\"\r\n                                    Background=\"{TemplateBinding Background}\"\r\n                                    BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                    BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                    Grid.ColumnSpan=\"2\"\r\n                                    Grid.RowSpan=\"1\" />\r\n                        <ScrollViewer x:Name=\"ContentElement\"\r\n                                    Grid.Row=\"1\"\r\n                                    HorizontalScrollMode=\"{TemplateBinding ScrollViewer.HorizontalScrollMode}\"\r\n                                    HorizontalScrollBarVisibility=\"{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}\"\r\n                                    VerticalScrollMode=\"{TemplateBinding ScrollViewer.VerticalScrollMode}\"\r\n                                    VerticalScrollBarVisibility=\"{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}\"\r\n                                    IsHorizontalRailEnabled=\"{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}\"\r\n                                    IsVerticalRailEnabled=\"{TemplateBinding ScrollViewer.IsVerticalRailEnabled}\"\r\n                                    IsDeferredScrollingEnabled=\"{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}\"\r\n                                    Margin=\"{TemplateBinding BorderThickness}\"\r\n                                    Padding=\"{TemplateBinding Padding}\"\r\n                                    IsTabStop=\"False\"\r\n                                    VerticalAlignment=\"Center\"\r\n                                    AutomationProperties.AccessibilityView=\"Raw\"\r\n                                    ZoomMode=\"Disabled\" />\r\n                        <ContentPresenter x:Name=\"PlaceholderTextContentPresenter\"\r\n                                    Grid.Row=\"1\"\r\n                                    Opacity=\"0.56\"\r\n                                    Foreground=\"{TemplateBinding Foreground}\"\r\n                                    Margin=\"{TemplateBinding BorderThickness}\"\r\n                                    Padding=\"{TemplateBinding Padding}\"\r\n                                    Grid.ColumnSpan=\"2\"\r\n                                    VerticalAlignment=\"Center\"                                    \r\n                                    Content=\"{TemplateBinding PlaceholderText}\"\r\n                                    TextWrapping=\"NoWrap\"\r\n                                    IsHitTestVisible=\"False\" />\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <!-- These names are way too fucking long -->\r\n\r\n    <DataTemplate x:Key=\"MessageTextBoxUserSuggestionTemplate\">\r\n        <Grid Margin=\"16,0\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"24\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n                <ColumnDefinition Width=\"Auto\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <lib:PersonPicture Width=\"24\" Height=\"24\" DisplayName=\"{Binding DisplayName}\">\r\n                <lib:PersonPicture.ProfilePicture>\r\n                    <BitmapImage UriSource=\"{Binding NonAnimatedAvatarUrl}\" DecodePixelWidth=\"24\" DecodePixelHeight=\"24\" DecodePixelType=\"Logical\" />\r\n                </lib:PersonPicture.ProfilePicture>\r\n            </lib:PersonPicture>\r\n\r\n            <TextBlock Grid.Column=\"1\" VerticalAlignment=\"Center\" Margin=\"8\" Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\">\r\n                <Run>@</Run><Run Foreground=\"{ThemeResource ApplicationForegroundThemeBrush}\" Text=\"{Binding Username, Mode=OneWay}\"/>#<Run Text=\"{Binding Discriminator, Mode=OneWay}\"/>\r\n            </TextBlock>\r\n\r\n            <Ellipse Width=\"8\"\r\n                     Height=\"8\"\r\n                     Margin=\"0\"\r\n                     Grid.Column=\"2\"\r\n                     VerticalAlignment=\"Center\">\r\n                <Ellipse.Fill>\r\n                    <SolidColorBrush Color=\"{Binding Presence, Converter={StaticResource PresenceColourConverter}}\" />\r\n                </Ellipse.Fill>\r\n            </Ellipse>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"MessageTextBoxRoleSuggestionTemplate\">\r\n        <Grid Margin=\"16,0\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"24\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <Grid Width=\"24\" Height=\"24\">\r\n                <TextBlock VerticalAlignment=\"Center\" \r\n                           HorizontalAlignment=\"Center\" \r\n                           FontFamily=\"{StaticResource SymbolThemeFontFamily}\" \r\n                           FontSize=\"16\" \r\n                           Text=\"&#xE910;\" />\r\n            </Grid>\r\n\r\n            <TextBlock Margin=\"8,0\" Grid.Column=\"1\" Text=\"{Binding Name}\" VerticalAlignment=\"Center\"/>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"MessageTextBoxChannelSuggestionTemplate\">\r\n        <Grid Margin=\"16,0\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"24\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <Grid Width=\"24\" Height=\"24\">\r\n                <TextBlock VerticalAlignment=\"Center\" \r\n                           HorizontalAlignment=\"Center\" \r\n                           FontFamily=\"{StaticResource SymbolThemeFontFamily}\" \r\n                           FontSize=\"16\" \r\n                           Text=\"{Binding Converter={StaticResource ChannelSymbolConverter}}\" />\r\n            </Grid>\r\n\r\n            <TextBlock Margin=\"8,0\" Grid.Column=\"1\" Text=\"{Binding Name}\" VerticalAlignment=\"Center\"/>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"MessageTextBoxEmojiSuggestionTemplate\">\r\n        <Grid Margin=\"16,0\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"24\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <!--<Grid Width=\"24\" Height=\"24\">\r\n                <TextBlock VerticalAlignment=\"Center\" \r\n                           HorizontalAlignment=\"Center\" \r\n                           FontSize=\"18\" \r\n                           Text=\"{Binding Name}\" />\r\n            </Grid>-->\r\n\r\n            <emoji:EmojiControl Emoji=\"{Binding}\"\r\n                                Size=\"24\"/>\r\n\r\n            <TextBlock Margin=\"8,0\" Grid.Column=\"1\" Text=\"{Binding Name}\" VerticalAlignment=\"Center\"/>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"MessageTextBoxEmoteSuggestionTemplate\">\r\n        <Grid Margin=\"16,0\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"24\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n                <ColumnDefinition Width=\"Auto\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <emoji:EmojiControl Emoji=\"{Binding}\"\r\n                                Size=\"24\"/>\r\n            \r\n            <TextBlock Margin=\"8,0\" Grid.Column=\"1\" Text=\"{Binding Name}\" VerticalAlignment=\"Center\"/>\r\n\r\n            <Ellipse Grid.Column=\"2\" \r\n                     VerticalAlignment=\"Center\" \r\n                     Width=\"16\" \r\n                     Height=\"16\" \r\n                     ToolTipService.ToolTip=\"{Binding Guild.Name}\"\r\n                     Visibility=\"{Binding Guild, Converter={StaticResource HideOnNullConverter}, FallbackValue=Collapsed}\">\r\n                <Ellipse.Fill>\r\n                    <ImageBrush>\r\n                        <ImageBrush.ImageSource>\r\n                            <BitmapImage DecodePixelWidth=\"16\" DecodePixelHeight=\"16\" DecodePixelType=\"Logical\" UriSource=\"{Binding Guild.IconUrl}\"/>\r\n                        </ImageBrush.ImageSource>\r\n                    </ImageBrush>\r\n                </Ellipse.Fill>\r\n            </Ellipse>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <local:DiscordEntityTemplateSelector x:Key=\"MessageTextBoxSuggestionTemplateSelector\"\r\n                                         UserTemplate=\"{StaticResource MessageTextBoxUserSuggestionTemplate}\"\r\n                                         RoleTemplate=\"{StaticResource MessageTextBoxRoleSuggestionTemplate}\"\r\n                                         ChannelTemplate=\"{StaticResource MessageTextBoxChannelSuggestionTemplate}\"\r\n                                         EmojiTemplate=\"{StaticResource MessageTextBoxEmojiSuggestionTemplate}\"\r\n                                         EmoteTemplate=\"{StaticResource MessageTextBoxEmoteSuggestionTemplate}\" />\r\n\r\n    <Style TargetType=\"local:MessageTextBox\">\r\n        <Setter Property=\"Background\" Value=\"Transparent\" />\r\n        <Setter Property=\"BorderBrush\" Value=\"Transparent\" />\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:MessageTextBox\">\r\n                    <Grid >\r\n                        <Grid>\r\n                            <Grid.ColumnDefinitions>\r\n                                <ColumnDefinition Width=\"*\"/>\r\n                                <ColumnDefinition Width=\"Auto\"/>\r\n                                <ColumnDefinition Width=\"Auto\"/>\r\n                                <ColumnDefinition Width=\"Auto\"/>\r\n                                <ColumnDefinition Width=\"Auto\"/>\r\n                            </Grid.ColumnDefinitions>\r\n\r\n                            <!-- TextWrapping Wrap -->\r\n                            <AutoSuggestBox x:Name=\"PART_TextBox\"\r\n                                            VerticalAlignment=\"Stretch\"\r\n                                            BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                                            BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                                            Background=\"{TemplateBinding Background}\"\r\n                                            IsEnabled=\"{TemplateBinding IsEnabled}\"\r\n                                            PlaceholderText=\"{TemplateBinding PlaceholderText}\"\r\n                                            TextBoxStyle=\"{StaticResource MessageTextBoxStyle}\"\r\n                                            ItemTemplateSelector=\"{StaticResource MessageTextBoxSuggestionTemplateSelector}\">\r\n                                <AutoSuggestBox.ItemContainerStyle>\r\n                                    <Style TargetType=\"ListViewItem\">\r\n                                        <Style.Setters>\r\n                                            <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\r\n                                            <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\r\n                                            <Setter Property=\"Padding\" Value=\"0,0\" />\r\n                                        </Style.Setters>\r\n                                    </Style>\r\n                                </AutoSuggestBox.ItemContainerStyle>\r\n                            </AutoSuggestBox>\r\n\r\n                            <TextBlock x:Name=\"PART_SlowModeIcon\"\r\n                                        Margin=\"8\"\r\n                                        HorizontalAlignment=\"Right\"\r\n                                        VerticalAlignment=\"Center\"\r\n                                        FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\r\n                                        Text=\"&#xE916;\"\r\n                                        ToolTipService.ToolTip=\"{Binding SlowModeText}\"\r\n                                        Visibility=\"{Binding ShowSlowMode, Converter={StaticResource BoolVisibilityConverter}}\" />\r\n\r\n                            <ToggleButton x:Name=\"PART_EmoteButton\"\r\n                                          Grid.Column=\"1\"\r\n                                          Content=\"&#xED54;\"\r\n                                          Margin=\"4,0,0,0\"\r\n                                          Style=\"{ThemeResource IconToggleButtonStyle}\">\r\n                                <FlyoutBase.AttachedFlyout>\r\n                                    <Flyout>\r\n                                        <local:EmotePicker x:Name=\"PART_EmotePicker\" \r\n                                                        Width=\"300\" \r\n                                                        Height=\"300\" \r\n                                                        HorizontalAlignment=\"Stretch\" \r\n                                                        VerticalAlignment=\"Stretch\" \r\n                                                        Channel=\"{TemplateBinding Channel}\" />\r\n                                    </Flyout>\r\n                                </FlyoutBase.AttachedFlyout>\r\n                            </ToggleButton>\r\n\r\n                            <Button x:Name=\"PART_SendButton\"\r\n                                Grid.Column=\"2\"\r\n                                Content=\"&#xE724;\"\r\n                                Margin=\"4,0,0,0\"\r\n                                IsEnabled=\"{TemplateBinding SendButtonEnabled}\"\r\n                                Visibility=\"{TemplateBinding SendButtonVisibility}\"\r\n                                Style=\"{ThemeResource IconButtonStyle}\" />\r\n\r\n                            <Button x:Name=\"PART_SubmitButton\"\r\n                                Grid.Column=\"3\"\r\n                                Content=\"&#xE73E;\"\r\n                                Margin=\"4,0,0,0\"\r\n                                IsEnabled=\"{TemplateBinding SubmitButtonEnabled}\"\r\n                                Visibility=\"{TemplateBinding SubmitButtonVisibility}\"\r\n                                Style=\"{ThemeResource IconButtonStyle}\" />\r\n\r\n                            <Button x:Name=\"PART_CancelButton\"\r\n                                Grid.Column=\"4\"\r\n                                Content=\"&#xE711;\"\r\n                                Margin=\"4,0,0,0\"\r\n                                IsEnabled=\"{TemplateBinding CancelButtonEnabled}\"\r\n                                Visibility=\"{TemplateBinding CancelButtonVisibility}\"\r\n                                Style=\"{ThemeResource IconButtonStyle}\" />\r\n                        </Grid>\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <!-- \r\n        i'd prefer these to be in ./Templates.xaml but because that file has a code behind\r\n        windows says no\r\n    -->\r\n\r\n    <DataTemplate x:Key=\"NoIndicatorDMChannelTemplate\">\r\n        <Grid>\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"Auto\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <lib:PersonPicture Width=\"28\" Height=\"28\" DisplayName=\"{Binding Name}\" ProfilePicture=\"{Binding IconUrl}\"/>\r\n            <TextBlock Grid.Column=\"1\" VerticalAlignment=\"Center\" Margin=\"8,0,0,0\" Text=\"{Binding Name}\"/>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"NoIndicatorChannelListTemplate\">\r\n        <Grid Name=\"grid\" HorizontalAlignment=\"Stretch\" VerticalAlignment=\"Stretch\" Margin=\"2\" IsHitTestVisible=\"True\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"auto\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <TextBlock FontSize=\"16\" VerticalAlignment=\"Center\" Margin=\"0,0,8,0\" FontFamily=\"{StaticResource FluentSystemIcons}\" Text=\"{Binding Converter={StaticResource ChannelSymbolConverter}}\"/>\r\n            <TextBlock Grid.Column=\"1\" FontSize=\"14\" Text=\"{Binding Name}\" VerticalAlignment=\"Center\" HorizontalAlignment=\"Stretch\" TextTrimming=\"CharacterEllipsis\" TextWrapping=\"NoWrap\" />\r\n\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n\r\n    <Style TargetType=\"local:SidebarSearchBox\">\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"local:SidebarSearchBox\">\r\n                    <AutoSuggestBox\r\n                            x:Name=\"searchBox\"\r\n                            Grid.Row=\"1\"\r\n                            Margin=\"8,4\"\r\n                            BorderThickness=\"1\"\r\n                            PlaceholderText=\"Find some people!\"\r\n                            QueryIcon=\"Find\" />\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n    \r\n    <ControlTemplate x:Key=\"CustomNotificationTemplate\"\r\n                     TargetType=\"controls:InAppNotification\">\r\n        <Grid>\r\n            <Grid x:Name=\"RootGrid\"\r\n                  MaxWidth=\"{TemplateBinding MaxWidth}\"\r\n                  Margin=\"{TemplateBinding Margin}\"\r\n                  Padding=\"{TemplateBinding Padding}\"\r\n                  Background=\"{TemplateBinding Background}\"\r\n                  BorderBrush=\"{TemplateBinding BorderBrush}\"\r\n                  BorderThickness=\"{TemplateBinding BorderThickness}\"\r\n                  RenderTransformOrigin=\"{TemplateBinding RenderTransformOrigin}\"\r\n                  Visibility=\"{TemplateBinding Visibility}\"\r\n                  CornerRadius=\"8\">\r\n\r\n                <Grid.RenderTransform>\r\n                    <CompositeTransform />\r\n                </Grid.RenderTransform>\r\n\r\n                <ContentPresenter x:Name=\"PART_Presenter\"\r\n                                  Grid.Column=\"0\"\r\n                                  HorizontalAlignment=\"{TemplateBinding HorizontalAlignment}\"\r\n                                  VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\r\n                                  HorizontalContentAlignment=\"Stretch\"\r\n                                  VerticalContentAlignment=\"Center\"\r\n                                  ContentTransitions=\"{TemplateBinding ContentTransitions}\"\r\n                                  TextWrapping=\"WrapWholeWords\" />\r\n            </Grid>\r\n            <VisualStateManager.VisualStateGroups>\r\n                <VisualStateGroup x:Name=\"State\">\r\n                    <VisualState x:Name=\"Collapsed\">\r\n                        <Storyboard>\r\n                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\"\r\n                                                           Storyboard.TargetProperty=\"(UIElement.RenderTransform).(CompositeTransform.TranslateX)\">\r\n                                <EasingDoubleKeyFrame KeyTime=\"0\"\r\n                                                      Value=\"0\"\r\n                                                      EasingFunction=\"{StaticResource EaseExit}\" />\r\n                                <EasingDoubleKeyFrame controls:InAppNotification.KeyFrameDuration=\"{Binding AnimationDuration, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                                      Value=\"{Binding HorizontalOffset, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                                      EasingFunction=\"{StaticResource EaseExit}\" />\r\n                            </DoubleAnimationUsingKeyFrames>\r\n\r\n                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\"\r\n                                                           Storyboard.TargetProperty=\"Opacity\">\r\n                                <EasingDoubleKeyFrame KeyTime=\"0\"\r\n                                                      Value=\"1\"\r\n                                                      EasingFunction=\"{StaticResource EaseExit}\" />\r\n                                <EasingDoubleKeyFrame controls:InAppNotification.KeyFrameDuration=\"{Binding AnimationDuration, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                                      Value=\"0\"\r\n                                                      EasingFunction=\"{StaticResource EaseExit}\" />\r\n                            </DoubleAnimationUsingKeyFrames>\r\n\r\n\r\n                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\"\r\n                                                           Storyboard.TargetProperty=\"(UIElement.RenderTransform).(CompositeTransform.TranslateY)\">\r\n                                <EasingDoubleKeyFrame KeyTime=\"0\"\r\n                                                      Value=\"0\"\r\n                                                      EasingFunction=\"{StaticResource EaseExit}\" />\r\n                                <EasingDoubleKeyFrame controls:InAppNotification.KeyFrameDuration=\"{Binding AnimationDuration, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                                      Value=\"{Binding VerticalOffset, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                                      EasingFunction=\"{StaticResource EaseExit}\" />\r\n                            </DoubleAnimationUsingKeyFrames>\r\n\r\n                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\"\r\n                                                           Storyboard.TargetProperty=\"(UIElement.Visibility)\">\r\n                                <DiscreteObjectKeyFrame KeyTime=\"0\">\r\n                                    <DiscreteObjectKeyFrame.Value>\r\n                                        <Visibility>Visible</Visibility>\r\n                                    </DiscreteObjectKeyFrame.Value>\r\n                                </DiscreteObjectKeyFrame>\r\n                                <DiscreteObjectKeyFrame controls:InAppNotification.KeyFrameDuration=\"{Binding AnimationDuration, RelativeSource={RelativeSource TemplatedParent}}\">\r\n                                    <DiscreteObjectKeyFrame.Value>\r\n                                        <Visibility>Collapsed</Visibility>\r\n                                    </DiscreteObjectKeyFrame.Value>\r\n                                </DiscreteObjectKeyFrame>\r\n                            </ObjectAnimationUsingKeyFrames>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n\r\n                    <VisualState x:Name=\"Visible\">\r\n                        <Storyboard>\r\n                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\"\r\n                                                           Storyboard.TargetProperty=\"(UIElement.RenderTransform).(CompositeTransform.TranslateX)\">\r\n                                <EasingDoubleKeyFrame KeyTime=\"0\"\r\n                                                      Value=\"{Binding HorizontalOffset, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                                      EasingFunction=\"{StaticResource EaseEnter}\" />\r\n                                <EasingDoubleKeyFrame controls:InAppNotification.KeyFrameDuration=\"{Binding AnimationDuration, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                                      Value=\"0\"\r\n                                                      EasingFunction=\"{StaticResource EaseEnter}\" />\r\n                            </DoubleAnimationUsingKeyFrames>\r\n\r\n                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\"\r\n                                                           Storyboard.TargetProperty=\"Opacity\">\r\n                                <EasingDoubleKeyFrame KeyTime=\"0\"\r\n                                                      Value=\"0\"\r\n                                                      EasingFunction=\"{StaticResource EaseEnter}\" />\r\n                                <EasingDoubleKeyFrame controls:InAppNotification.KeyFrameDuration=\"{Binding AnimationDuration, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                                      Value=\"1\"\r\n                                                      EasingFunction=\"{StaticResource EaseEnter}\" />\r\n                            </DoubleAnimationUsingKeyFrames>\r\n\r\n                            <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"RootGrid\"\r\n                                                           Storyboard.TargetProperty=\"(UIElement.RenderTransform).(CompositeTransform.TranslateY)\">\r\n                                <EasingDoubleKeyFrame KeyTime=\"0\"\r\n                                                      Value=\"{Binding VerticalOffset, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                                      EasingFunction=\"{StaticResource EaseEnter}\" />\r\n                                <EasingDoubleKeyFrame controls:InAppNotification.KeyFrameDuration=\"{Binding AnimationDuration, RelativeSource={RelativeSource TemplatedParent}}\"\r\n                                                      Value=\"0\"\r\n                                                      EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n                            </DoubleAnimationUsingKeyFrames>\r\n                        </Storyboard>\r\n                    </VisualState>\r\n                </VisualStateGroup>\r\n            </VisualStateManager.VisualStateGroups>\r\n        </Grid>\r\n    </ControlTemplate>\r\n\r\n\r\n    <Style x:Key=\"CustomInAppNotificationsStyle\" TargetType=\"controls:InAppNotification\">\r\n        <Setter Property=\"Background\" Value=\"{ThemeResource SystemControlBackgroundChromeMediumBrush}\" />\r\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource SystemControlForegroundBaseHighBrush}\" />\r\n        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource SystemControlTransientBorderBrush}\" />\r\n        <Setter Property=\"Visibility\" Value=\"Collapsed\" />\r\n        <Setter Property=\"BorderThickness\" Value=\"1\" />\r\n        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\r\n        <Setter Property=\"VerticalAlignment\" Value=\"Bottom\" />\r\n        <Setter Property=\"MinHeight\" Value=\"55\" />\r\n        <Setter Property=\"FontSize\" Value=\"{ThemeResource ContentControlFontSize}\" />\r\n        <Setter Property=\"RenderTransformOrigin\" Value=\"0.5,1\" />\r\n        <Setter Property=\"Margin\" Value=\"24,12\" />\r\n        <Setter Property=\"Padding\" Value=\"16\" />\r\n        <Setter Property=\"MaxWidth\" Value=\"960\" />\r\n        <Setter Property=\"MinWidth\" Value=\"132\" />\r\n        <Setter Property=\"AnimationDuration\" Value=\"0:0:0.100\" />\r\n        <Setter Property=\"VerticalOffset\" Value=\"100\" />\r\n        <Setter Property=\"HorizontalOffset\" Value=\"0\" />\r\n        <Setter Property=\"AutomationProperties.LandmarkType\" Value=\"Custom\" />\r\n        <!--  The setter value is localized using x:Uid but we still need to set it explicitly to avoid a compiler warning  -->\r\n        <Setter x:Uid=\"WCT_InAppNotification_LandmarkProperty\" Property=\"AutomationProperties.LocalizedLandmarkType\" Value=\"Notification\" />\r\n        <Setter Property=\"AutomationProperties.LiveSetting\" Value=\"Assertive\" />\r\n        <Setter Property=\"Template\" Value=\"{StaticResource CustomNotificationTemplate}\" />\r\n    </Style>\r\n\r\n    <Thickness x:Key=\"RightPaneCloseButton_Margin\">2,0</Thickness>\r\n    <Thickness x:Key=\"RightPaneHeader_Margin\">12,0</Thickness>\r\n</ResourceDictionary>\r\n"
  },
  {
    "path": "Unicord.Universal/Themes/Styles/Backport/NavigationView_rs1.xaml",
    "content": "﻿<!-- Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT License. See LICENSE in the project root for license information. -->\n<ResourceDictionary\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n    xmlns:local=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:primitives=\"using:Microsoft.UI.Xaml.Controls.Primitives\"\n    xmlns:media=\"using:Microsoft.UI.Xaml.Media\"\n    xmlns:contract4Present=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,4)\"\n    xmlns:contract4NotPresent=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,4)\"\n    xmlns:contract7Present=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract,7)\"\n    xmlns:contract7NotPresent=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractNotPresent(Windows.Foundation.UniversalApiContract,7)\">\n\n    <ResourceDictionary.ThemeDictionaries>\n        <ResourceDictionary x:Key=\"Dark\">\n            <StaticResource x:Key=\"NavigationViewDefaultPaneBackground\" ResourceKey=\"SystemChromeMediumColor\" />\n            <StaticResource x:Key=\"NavigationViewExpandedPaneBackground\" ResourceKey=\"SystemChromeMediumColor\" />\n            <StaticResource x:Key=\"NavigationViewTopPaneBackground\" ResourceKey=\"SystemChromeMediumHighColor\" />\n\n            <StaticResource x:Key=\"NavigationViewItemBackground\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundChecked\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundCheckedPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundCheckedPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundCheckedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelected\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelectedPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelectedPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelectedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewItemForeground\" ResourceKey=\"SystemControlForegroundBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundChecked\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundCheckedPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundCheckedPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundCheckedDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelected\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelectedPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelectedPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelectedDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewItemBorderBrush\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushPressed\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushChecked\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushCheckedPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushCheckedPressed\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushCheckedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelected\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelectedPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelectedPressed\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelectedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewItemSeparatorForeground\" ResourceKey=\"SystemControlForegroundBaseLowBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewSelectionIndicatorForeground\" ResourceKey=\"SystemControlForegroundAccentBrush\" />\n\n            <StaticResource x:Key=\"TopNavigationViewItemForeground\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundSelected\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemBackgroundPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemBackgroundPressed\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemBackgroundSelected\" ResourceKey=\"SystemControlTransparentBrush\" />\n\n            <StaticResource x:Key=\"TopNavigationViewItemRevealBackgroundFocused\" ResourceKey=\"SystemControlHighlightAccentBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemRevealIconForegroundFocused\" ResourceKey=\"SystemControlHighlightAltChromeWhiteBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemRevealContentForegroundFocused\" ResourceKey=\"SystemControlHighlightAltChromeWhiteBrush\" />\n\n            <StaticResource x:Key=\"TopNavigationViewItemSeparatorForeground\" ResourceKey=\"SystemControlForegroundBaseLowBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewButtonBackgroundPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonBackgroundPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonBackgroundDisabled\" ResourceKey=\"SystemControlBackgroundBaseLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonForegroundPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonForegroundPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonForegroundDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n        </ResourceDictionary>\n\n        <ResourceDictionary x:Key=\"Light\">\n            <StaticResource x:Key=\"NavigationViewDefaultPaneBackground\" ResourceKey=\"SystemChromeMediumColor\" />\n            <StaticResource x:Key=\"NavigationViewExpandedPaneBackground\" ResourceKey=\"SystemChromeMediumColor\" />\n            <StaticResource x:Key=\"NavigationViewTopPaneBackground\" ResourceKey=\"SystemChromeMediumHighColor\" />\n\n            <StaticResource x:Key=\"NavigationViewItemBackground\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundChecked\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundCheckedPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundCheckedPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundCheckedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelected\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelectedPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelectedPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelectedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewItemForeground\" ResourceKey=\"SystemControlForegroundBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundChecked\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundCheckedPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundCheckedPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundCheckedDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelected\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelectedPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelectedPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelectedDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewItemBorderBrush\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushPressed\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushChecked\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushCheckedPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushCheckedPressed\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushCheckedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelected\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelectedPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelectedPressed\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelectedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewItemSeparatorForeground\" ResourceKey=\"SystemControlForegroundBaseLowBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewSelectionIndicatorForeground\" ResourceKey=\"SystemControlForegroundAccentBrush\" />\n\n            <StaticResource x:Key=\"TopNavigationViewItemForeground\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundSelected\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemBackgroundPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemBackgroundPressed\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemBackgroundSelected\" ResourceKey=\"SystemControlTransparentBrush\" />\n\n            <StaticResource x:Key=\"TopNavigationViewItemRevealBackgroundFocused\" ResourceKey=\"SystemControlHighlightAccentBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemRevealIconForegroundFocused\" ResourceKey=\"SystemControlHighlightAltChromeWhiteBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemRevealContentForegroundFocused\" ResourceKey=\"SystemControlHighlightAltChromeWhiteBrush\" />\n\n            <StaticResource x:Key=\"TopNavigationViewItemSeparatorForeground\" ResourceKey=\"SystemControlForegroundBaseLowBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewButtonBackgroundPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonBackgroundPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonBackgroundDisabled\" ResourceKey=\"SystemControlBackgroundBaseLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonForegroundPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonForegroundPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonForegroundDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n        </ResourceDictionary>\n\n        <ResourceDictionary x:Key=\"HighContrast\">\n            <StaticResource x:Key=\"NavigationViewDefaultPaneBackground\" ResourceKey=\"SystemChromeMediumColor\" />\n            <StaticResource x:Key=\"NavigationViewExpandedPaneBackground\" ResourceKey=\"SystemColorWindowColor\" />\n            <StaticResource x:Key=\"NavigationViewTopPaneBackground\" ResourceKey=\"SystemChromeMediumHighColor\" />\n\n            <StaticResource x:Key=\"NavigationViewItemBackground\" ResourceKey=\"SystemControlBackgroundBaseLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundDisabled\" ResourceKey=\"SystemControlBackgroundBaseLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundChecked\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundCheckedPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundCheckedPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundCheckedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelected\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelectedPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelectedPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBackgroundSelectedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewItemForeground\" ResourceKey=\"SystemControlForegroundBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundChecked\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundCheckedPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundCheckedPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundCheckedDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelected\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelectedPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelectedPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemForegroundSelectedDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewItemBorderBrush\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushPressed\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushChecked\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushCheckedPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushCheckedPressed\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushCheckedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelected\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelectedPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelectedPressed\" ResourceKey=\"SystemControlTransparentBrush\" />\n            <StaticResource x:Key=\"NavigationViewItemBorderBrushSelectedDisabled\" ResourceKey=\"SystemControlTransparentBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewItemSeparatorForeground\" ResourceKey=\"SystemControlForegroundBaseLowBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewSelectionIndicatorForeground\" ResourceKey=\"SystemColorHighlightTextColor\" />\n\n            <StaticResource x:Key=\"TopNavigationViewItemForeground\" ResourceKey=\"NavigationViewItemForeground\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundSelected\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemForegroundDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemBackgroundPointerOver\" ResourceKey=\"SystemControlHighlightAccentBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemBackgroundPressed\" ResourceKey=\"SystemControlHighlightAccentBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemBackgroundSelected\" ResourceKey=\"SystemControlHighlightAccentBrush\" />\n\n            <StaticResource x:Key=\"TopNavigationViewItemRevealBackgroundFocused\" ResourceKey=\"SystemControlHighlightAccentBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemRevealIconForegroundFocused\" ResourceKey=\"SystemControlHighlightAltChromeWhiteBrush\" />\n            <StaticResource x:Key=\"TopNavigationViewItemRevealContentForegroundFocused\" ResourceKey=\"SystemControlHighlightAltChromeWhiteBrush\" />\n\n            <StaticResource x:Key=\"TopNavigationViewItemSeparatorForeground\" ResourceKey=\"SystemControlForegroundBaseLowBrush\" />\n\n            <StaticResource x:Key=\"NavigationViewButtonBackgroundPointerOver\" ResourceKey=\"SystemControlHighlightListLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonBackgroundPressed\" ResourceKey=\"SystemControlHighlightListMediumBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonBackgroundDisabled\" ResourceKey=\"SystemControlBackgroundBaseLowBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonForegroundPointerOver\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonForegroundPressed\" ResourceKey=\"SystemControlHighlightAltBaseHighBrush\" />\n            <StaticResource x:Key=\"NavigationViewButtonForegroundDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n        </ResourceDictionary>\n    </ResourceDictionary.ThemeDictionaries>\n\n    <Thickness x:Key=\"NavigationViewAutoSuggestBoxMargin\">10,0,16,0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewAutoSuggestBoxMargin\">12,0,12,0</Thickness>\n    <x:Double x:Key=\"PaneToggleButtonSize\">40</x:Double>\n    <x:Double x:Key=\"PaneToggleButtonHeight\">40</x:Double>\n    <x:Double x:Key=\"PaneToggleButtonWidth\">40</x:Double>\n    <x:Double x:Key=\"NavigationViewCompactPaneLength\">40</x:Double>\n    <x:Double x:Key=\"NavigationViewTopPaneHeight\">40</x:Double>\n    <x:Double x:Key=\"TopNavigationViewPaneCustomContentMinWidth\">48</x:Double>\n    <x:Double x:Key=\"TopNavigationViewOverflowButtonWidth\">48</x:Double>\n    <x:Double x:Key=\"TopNavigationViewOverflowButtonHeight\">40</x:Double>\n\n    <x:Double x:Key=\"NavigationViewItemOnLeftMinHeight\">40</x:Double>\n    <x:Double x:Key=\"NavigationViewPaneHeaderRowMinHeight\">4</x:Double>\n\n    <x:Double x:Key=\"NavigationViewItemSeparatorHeight\">1</x:Double>\n    <x:Double x:Key=\"TopNavigationViewItemSeparatorWidth\">1</x:Double>\n\n    <Thickness x:Key=\"NavigationViewToggleBorderThickness\">1</Thickness>\n    <Thickness x:Key=\"NavigationViewItemBorderThickness\">1</Thickness>\n    <Thickness x:Key=\"NavigationViewItemOnLeftIconBoxMargin\">12,0,12,0</Thickness>\n    <Thickness x:Key=\"NavigationViewItemInnerHeaderMargin\">10,0,0,0</Thickness>\n    <Thickness x:Key=\"NavigationViewMinimalHeaderMargin\">8,5,0,0</Thickness>\n    <Thickness x:Key=\"NavigationViewHeaderMargin\">12,5,0,11</Thickness>\n    <Thickness x:Key=\"NavigationViewPaneTitlePresenterMargin\">8,4,0,0</Thickness>\n    <Thickness x:Key=\"NavigationViewItemMargin\">0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewItemMargin\">0</Thickness>\n    <Thickness x:Key=\"NavigationViewItemSeparatorMargin\">16,10</Thickness>\n    <Thickness x:Key=\"NavigationViewCompactItemSeparatorMargin\">16,10</Thickness>\n    <Thickness x:Key=\"TopNavigationViewItemSeparatorMargin\">10,0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewOverflowButtonMargin\">0</Thickness>\n    <Thickness x:Key=\"NavigationViewItemContentPresenterMargin\">0,0,20,0</Thickness>\n    <Thickness x:Key=\"NavigationViewCompactItemContentPresenterMargin\">0,0,0,0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewItemContentPresenterMargin\">8,0,16,0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewItemContentOnlyContentPresenterMargin\">12,0</Thickness>\n    <Thickness x:Key=\"NavigationViewItemExpandChevronMargin\">-20,0,6,0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewItemExpandChevronMargin\">-16,0,0,0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewItemIconOnlyExpandChevronMargin\">0,0,0,0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewItemContentOnlyExpandChevronMargin\">-12,0,0,0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewItemOnOverflowContentPresenterMargin\">12,0,20,0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewItemOnOverflowNoIconContentPresenterMargin\">16,0,20,0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewItemOnOverflowExpandChevronMargin\">-4,0,6,0</Thickness>\n    <Thickness x:Key=\"TopNavigationViewItemOnOverflowExpandChevronPadding\">12,0,12,0</Thickness>\n\n    <!-- The two resources below must be defined at the app level in order to take effect. -->\n    <Thickness x:Key=\"TopNavigationViewOverflowMenuPadding\">0,8</Thickness>\n    <Thickness x:Key=\"NavigationViewItemChildrenMenuFlyoutPadding\">0,8</Thickness>\n\n    <!-- The resource below must be defined at the app level in order to affect the expand/collapse chevron font size\n         used in the Top NavigationView's Overflow menu. -->\n    <x:Double x:Key=\"NavigationViewItemExpandedGlyphFontSize\">12.0</x:Double>\n    <x:String x:Key=\"NavigationViewItemExpandedGlyph\">&#xE70D;</x:String>\n\n    <Style x:Key=\"PaneToggleButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"FontSize\" Value=\"16\" />\n        <Setter Property=\"FontFamily\" Value=\"{StaticResource SymbolThemeFontFamily}\" />\n        <Setter Property=\"MinHeight\" Value=\"{StaticResource PaneToggleButtonHeight}\" />\n        <Setter Property=\"MinWidth\" Value=\"{StaticResource PaneToggleButtonWidth}\" />\n        <Setter Property=\"Padding\" Value=\"0\" />\n        <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\n        <Setter Property=\"VerticalAlignment\" Value=\"Top\" />\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n        <Setter Property=\"Background\" Value=\"{ThemeResource NavigationViewItemBackground}\" />\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource NavigationViewItemForeground}\" />\n        <Setter Property=\"BorderThickness\" Value=\"{ThemeResource NavigationViewToggleBorderThickness}\" />\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid\n                        x:Name=\"LayoutRoot\"\n                        MinWidth=\"{TemplateBinding MinWidth}\"\n                        Height=\"{TemplateBinding MinHeight}\"\n                        Margin=\"{TemplateBinding Padding}\"\n                        Background=\"{TemplateBinding Background}\"\n                        HorizontalAlignment=\"Stretch\">\n                        <Grid.ColumnDefinitions>\n                            <ColumnDefinition x:Name=\"PaneToggleButtonIconWidthColumn\" Width=\"{ThemeResource PaneToggleButtonWidth}\"/>\n                            <ColumnDefinition Width=\"*\"/>\n                        </Grid.ColumnDefinitions>\n                        <Grid.RowDefinitions>\n                            <RowDefinition Height=\"{ThemeResource PaneToggleButtonHeight}\"/>\n                        </Grid.RowDefinitions>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewButtonBackgroundPointerOver}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewButtonForegroundPointerOver}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewButtonForegroundPointerOver}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewButtonBackgroundPressed}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewButtonForegroundPressed}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewButtonForegroundPressed}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewButtonBackgroundDisabled}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewButtonForegroundDisabled}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Checked\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource ToggleButtonBackgroundChecked}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundChecked}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"CheckedPointerOver\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource ToggleButtonBackgroundCheckedPointerOver}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundCheckedPointerOver}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"CheckedPressed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource ToggleButtonBackgroundCheckedPressed}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundCheckedPressed}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"CheckedDisabled\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource ToggleButtonBackgroundCheckedDisabled}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource ToggleButtonForegroundCheckedDisabled}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n\n                        <Viewbox\n                            x:Name=\"IconHost\"\n                            Width=\"16\"\n                            Height=\"16\"\n                            HorizontalAlignment=\"Center\"\n                            VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                            AutomationProperties.AccessibilityView=\"Raw\">\n\n                            <TextBlock\n                                x:Name=\"Icon\"\n                                Text=\"&#xE700;\"\n                                FontSize=\"{TemplateBinding FontSize}\"\n                                AutomationProperties.AccessibilityView=\"Raw\"/>\n\n                        </Viewbox>\n\n                        <ContentPresenter\n                            x:Name=\"ContentPresenter\"\n                            VerticalContentAlignment=\"Center\"\n                            Content=\"{TemplateBinding Content}\"\n                            FontSize=\"{TemplateBinding FontSize}\"\n                            Grid.Column=\"1\"/>\n\n                        <Border\n                            x:Name=\"RevealBorder\"\n                            BorderBrush=\"{TemplateBinding BorderBrush}\"\n                            BorderThickness=\"{TemplateBinding BorderThickness}\"\n                            Grid.ColumnSpan=\"2\"/>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"NavigationViewPaneSearchButtonStyle\" TargetType=\"Button\">\n        <Setter Property=\"MinHeight\" Value=\"40\"/>\n        <Setter Property=\"Content\" Value=\"&#xE11A;\"/>\n        <Setter Property=\"FontFamily\" Value=\"Segoe MDL2 Assets\" />\n        <Setter Property=\"BorderThickness\" Value=\"{ThemeResource NavigationViewToggleBorderThickness}\" />\n        <Setter Property=\"Background\" Value=\"{ThemeResource NavigationViewItemBackground}\" />\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource NavigationViewItemForeground}\" />\n    </Style>\n\n    <Style x:Key=\"NavigationViewOverflowButtonStyleWhenPaneOnTop\" TargetType=\"Button\">\n        <Setter Property=\"Background\" Value=\"{ThemeResource NavigationViewItemBackground}\" />\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource TopNavigationViewItemForeground}\" />\n        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrush}\" />\n        <Setter Property=\"BorderThickness\" Value=\"{StaticResource NavigationViewItemBorderThickness}\" />\n        <Setter Property=\"Height\" Value=\"{StaticResource TopNavigationViewOverflowButtonHeight}\" />\n        <Setter Property=\"Width\" Value=\"{StaticResource TopNavigationViewOverflowButtonWidth}\" />\n        <Setter Property=\"HorizontalAlignment\" Value=\"Left\" />\n        <Setter Property=\"VerticalAlignment\" Value=\"Top\" />\n        <Setter Property=\"UseSystemFocusVisuals\" Value=\"True\" />\n        <Setter Property=\"FocusVisualMargin\" Value=\"0\" />\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid \n                        x:Name=\"RootGrid\" \n                        Height=\"{TemplateBinding Height}\"\n                        Width=\"{TemplateBinding Width}\"\n                        Background=\"{TemplateBinding Background}\">\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPointerOver}\" />\n                                        <contract4Present:Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"PointerOver\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPressed}\" />\n                                        <contract4Present:Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"Pressed\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundDisabled}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                        <Rectangle \n                            x:Name=\"PointerRectangle\" \n                            Fill=\"Transparent\"\n                            Visibility=\"Collapsed\"/>\n                        <Border\t\t\n                            x:Name=\"RevealBorder\"\t\t\n                            BorderBrush=\"{TemplateBinding BorderBrush}\"\t\t\n                            BorderThickness=\"{TemplateBinding BorderThickness}\" />\n                        <FontIcon\n                            x:Name=\"Icon\"\n                            VerticalAlignment=\"Center\"\n                            HorizontalAlignment=\"Center\"\n                            AutomationProperties.AccessibilityView=\"Raw\"\n                            FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\n                            FontSize=\"20\"\n                            Glyph=\"&#xE10C;\"\n                            Foreground=\"{TemplateBinding Foreground}\"\n                            IsHitTestVisible=\"False\" />\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"NavigationViewOverflowButtonNoLabelStyleWhenPaneOnTop\" TargetType=\"Button\">\n        <Setter Property=\"Background\" Value=\"{ThemeResource NavigationViewItemBackground}\" />\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource TopNavigationViewItemForeground}\" />\n        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrush}\" />\n        <Setter Property=\"BorderThickness\" Value=\"{StaticResource NavigationViewItemBorderThickness}\" />\n        <Setter Property=\"Height\" Value=\"{StaticResource TopNavigationViewOverflowButtonHeight}\" />\n        <Setter Property=\"Width\" Value=\"{StaticResource TopNavigationViewOverflowButtonWidth}\" />\n        <Setter Property=\"HorizontalAlignment\" Value=\"Left\" />\n        <Setter Property=\"VerticalAlignment\" Value=\"Top\" />\n        <Setter Property=\"UseSystemFocusVisuals\" Value=\"True\" />\n        <Setter Property=\"FocusVisualMargin\" Value=\"0\" />\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"Button\">\n                    <Grid \n                        x:Name=\"RootGrid\" \n                        Height=\"{TemplateBinding Height}\"\n                        Width=\"{TemplateBinding Width}\"\n                        Background=\"{TemplateBinding Background}\">\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"CommonStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPointerOver}\" />\n                                        <contract4Present:Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"PointerOver\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"RootGrid.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPressed}\" />\n                                        <contract4Present:Setter Target=\"RootGrid.(media:RevealBrush.State)\" Value=\"Pressed\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Disabled\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundDisabled}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                        <Rectangle \n                            x:Name=\"PointerRectangle\" \n                            Fill=\"Transparent\" />\n                        <Border\t\t\n                            x:Name=\"RevealBorder\"\t\t\n                            BorderBrush=\"{TemplateBinding BorderBrush}\"\t\t\n                            BorderThickness=\"{TemplateBinding BorderThickness}\" />\n                        <FontIcon\n                            x:Name=\"Icon\"\n                            VerticalAlignment=\"Center\"\n                            HorizontalAlignment=\"Center\"\n                            AutomationProperties.AccessibilityView=\"Raw\"\n                            FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\n                            FontSize=\"20\"\n                            Glyph=\"&#xE10C;\"\n                            Foreground=\"{TemplateBinding Foreground}\"\n                            IsHitTestVisible=\"False\" />\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"primitives:NavigationViewItemPresenter\" x:Key=\"MUX_NavigationViewItemPresenterStyleWhenOnLeftPane\">\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource NavigationViewItemForeground}\" />\n        <Setter Property=\"Background\" Value=\"{ThemeResource NavigationViewItemBackground}\" />\n        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrush}\" />\n        <Setter Property=\"BorderThickness\" Value=\"{StaticResource NavigationViewItemBorderThickness}\" />\n        <Setter Property=\"UseSystemFocusVisuals\" Value=\"True\" />\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"primitives:NavigationViewItemPresenter\">\n                    <Grid\n                        x:Name=\"LayoutRoot\"\n                        MinHeight=\"{ThemeResource NavigationViewItemOnLeftMinHeight}\"\n                        Background=\"{TemplateBinding Background}\"\n                        Control.IsTemplateFocusTarget=\"True\">\n                        <Grid.Resources>\n                            <Storyboard x:Name=\"ExpandCollapseRotateExpandedStoryboard\">\n                                <DoubleAnimation\n                                    Storyboard.TargetName=\"ExpandCollapseChevronRotateTransform\"\n                                    Storyboard.TargetProperty=\"Angle\"\n                                    From=\"0.0\" To=\"180.0\" Duration=\"0:0:0.1\"/>\n                            </Storyboard>\n                            <Storyboard x:Name=\"ExpandCollapseRotateCollapsedStoryboard\">\n                                <DoubleAnimation\n                                    Storyboard.TargetName=\"ExpandCollapseChevronRotateTransform\"\n                                    Storyboard.TargetProperty=\"Angle\"\n                                    From=\"180.0\" To=\"0.0\" Duration=\"0:0:0.1\"/>\n                            </Storyboard>\n                        </Grid.Resources>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"PointerStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <VisualState.Setters>\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"PointerOver\" />\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"RevealBorder.BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrushPointerOver}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPointerOver}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPointerOver}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <VisualState.Setters>\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"Pressed\" />\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"RevealBorder.BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrushPressed}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPressed}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPressed}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Selected\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewItemBackgroundSelected}\" />\n                                        <contract4Present:Setter Target=\"RevealBorder.BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrushSelected}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundSelected}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundSelected}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"PointerOverSelected\">\n                                    <VisualState.Setters>\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"PointerOver\" />\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewItemBackgroundSelectedPointerOver}\" />\n                                        <Setter Target=\"RevealBorder.BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrushSelectedPointerOver}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundSelectedPointerOver}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundSelectedPointerOver}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"PressedSelected\">\n                                    <VisualState.Setters>\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"Pressed\" />\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewItemBackgroundSelectedPressed}\" />\n                                        <Setter Target=\"RevealBorder.BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrushSelectedPressed}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundSelectedPressed}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundSelectedPressed}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n\n                            <VisualStateGroup x:Name=\"DisabledStates\">\n                                <VisualState x:Name=\"Enabled\"/>\n                                <VisualState x:Name=\"Disabled\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"RevealBorder.BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrushCheckedDisabled}\"/>\n                                        <Setter Target=\"LayoutRoot.Opacity\" Value=\"{ThemeResource ListViewItemDisabledThemeOpacity}\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n\n                            <VisualStateGroup x:Name=\"IconStates\">\n                                <VisualState x:Name=\"IconVisible\" />\n                                <VisualState x:Name=\"IconCollapsed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"IconBox.Visibility\" Value=\"Collapsed\" />\n                                        <Setter Target=\"IconColumn.Width\" Value=\"16\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n\n                            <VisualStateGroup x:Name=\"ChevronStates\">\n                                <VisualState x:Name=\"ChevronHidden\"/>\n                                <VisualState x:Name=\"ChevronVisibleOpen\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ExpandCollapseChevron.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"ExpandCollapseChevronRotateTransform.Angle\" Value=\"180\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"ChevronVisibleClosed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ExpandCollapseChevron.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"ExpandCollapseChevronRotateTransform.Angle\" Value=\"0\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n\n                            <VisualStateGroup x:Name=\"PaneAndTopLevelItemStates\">\n                                <VisualState x:Name=\"NotClosedCompactAndTopLevelItem\" />\n                                <VisualState x:Name=\"ClosedCompactAndTopLevelItem\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ContentPresenter.Margin\" Value=\"{ThemeResource NavigationViewCompactItemContentPresenterMargin}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n\n                        <Border\n                            x:Name=\"RevealBorder\"\n                            BorderBrush=\"{TemplateBinding BorderBrush}\"\n                            BorderThickness=\"{TemplateBinding BorderThickness}\" />\n                        <Grid x:Name=\"PresenterContentRootGrid\">\n                            <!-- Wrap SelectionIndicator in a grid so that its offset is 0,0 - this enables the offset animation. -->\n                            <Grid\n                                Margin=\"4,0,0,0\"\n                                HorizontalAlignment=\"Left\"\n                                VerticalAlignment=\"Center\">\n\n                                <Rectangle\n                                    x:Name=\"SelectionIndicator\"\n                                    Width=\"2\"\n                                    Height=\"24\"\n                                    Fill=\"{ThemeResource NavigationViewSelectionIndicatorForeground}\"\n                                    Opacity=\"0.0\"\n                                    contract7Present:RadiusX=\"{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource TopLeftCornerRadiusDoubleValueConverter}}\"\n                                    contract7Present:RadiusY=\"{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BottomRightCornerRadiusDoubleValueConverter}}\"\n                                    contract7NotPresent:RadiusX=\"{Binding Source={ThemeResource ControlCornerRadius}, Converter={StaticResource TopLeftCornerRadiusDoubleValueConverter}}\"\n                                    contract7NotPresent:RadiusY=\"{Binding Source={ThemeResource ControlCornerRadius}, Converter={StaticResource BottomRightCornerRadiusDoubleValueConverter}}\"/>\n                            </Grid>\n\n                            <Grid\n                                HorizontalAlignment=\"Stretch\"\n                                x:Name=\"ContentGrid\"\n                                MinHeight=\"{ThemeResource NavigationViewItemOnLeftMinHeight}\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition x:Name=\"IconColumn\" Width=\"{ThemeResource NavigationViewCompactPaneLength}\" />\n                                    <ColumnDefinition Width=\"*\" />\n                                    <ColumnDefinition Width=\"Auto\" />\n                                </Grid.ColumnDefinitions>\n\n                                <Viewbox x:Name=\"IconBox\"\n                                Height=\"16\"\n                                Margin=\"{ThemeResource NavigationViewItemOnLeftIconBoxMargin}\">\n                                    <ContentPresenter \n                                    x:Name=\"Icon\" \n                                    Content=\"{TemplateBinding Icon}\" />\n                                </Viewbox>\n\n                                <ContentPresenter\n                                    x:Name=\"ContentPresenter\"\n                                    Grid.Column=\"1\"\n                                    Margin=\"{ThemeResource NavigationViewItemContentPresenterMargin}\"\n                                    ContentTransitions=\"{TemplateBinding ContentTransitions}\"\n                                    ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                    Content=\"{TemplateBinding Content}\"\n                                    HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                    VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                    ContentTemplateSelector=\"{TemplateBinding ContentTemplateSelector}\"\n                                    Padding=\"{TemplateBinding Padding}\"\n                                    AutomationProperties.AccessibilityView=\"Raw\"/>\n\n                                <Grid\n                                    x:Name=\"ExpandCollapseChevron\"\n                                    Grid.Column=\"2\"\n                                    Visibility=\"Collapsed\"\n                                    HorizontalAlignment=\"Right\"\n                                    Width=\"40\"\n                                    Margin=\"{ThemeResource NavigationViewItemExpandChevronMargin}\"\n                                    Background=\"Transparent\">\n                                    <TextBlock\n                                        RenderTransformOrigin=\"0.5, 0.5\"\n                                        Foreground=\"{ThemeResource NavigationViewItemForeground}\"\n                                        FontSize=\"{ThemeResource NavigationViewItemExpandedGlyphFontSize}\"\n                                        Text=\"{StaticResource NavigationViewItemExpandedGlyph}\"\n                                        FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\n                                        HorizontalAlignment=\"Center\"\n                                        VerticalAlignment=\"Center\"\n                                        AutomationProperties.AccessibilityView=\"Raw\"\n                                        IsTextScaleFactorEnabled=\"False\">\n                                        <TextBlock.RenderTransform>\n                                            <RotateTransform x:Name=\"ExpandCollapseChevronRotateTransform\" Angle=\"0\"/>\n                                        </TextBlock.RenderTransform>\n                                    </TextBlock>\n                                </Grid>\n                            </Grid>\n                        </Grid>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"primitives:NavigationViewItemPresenter\" x:Key=\"MUX_NavigationViewItemPresenterStyleWhenOnLeftPaneWithRevealFocus\">\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource NavigationViewItemForeground}\" />\n        <Setter Property=\"Background\" Value=\"{ThemeResource NavigationViewItemBackground}\" />\n        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrush}\" />\n        <Setter Property=\"BorderThickness\" Value=\"{StaticResource NavigationViewItemBorderThickness}\" />\n        <Setter Property=\"UseSystemFocusVisuals\" Value=\"True\" />\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"primitives:NavigationViewItemPresenter\">\n                    <Grid\n                        x:Name=\"LayoutRoot\"\n                        MinHeight=\"{ThemeResource NavigationViewItemOnLeftMinHeight}\"\n                        Background=\"{TemplateBinding Background}\"\n                        Control.IsTemplateFocusTarget=\"True\">\n                        <Grid.Resources>\n                            <Storyboard x:Name=\"ExpandCollapseRotateExpandedStoryboard\">\n                                <DoubleAnimation\n                                    Storyboard.TargetName=\"ExpandCollapseChevronRotateTransform\"\n                                    Storyboard.TargetProperty=\"Angle\"\n                                    From=\"0.0\" To=\"180.0\" Duration=\"0:0:0.1\"/>\n                            </Storyboard>\n                            <Storyboard x:Name=\"ExpandCollapseRotateCollapsedStoryboard\">\n                                <DoubleAnimation\n                                    Storyboard.TargetName=\"ExpandCollapseChevronRotateTransform\"\n                                    Storyboard.TargetProperty=\"Angle\"\n                                    From=\"180.0\" To=\"0.0\" Duration=\"0:0:0.1\"/>\n                            </Storyboard>\n                        </Grid.Resources>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"DisabledStates\">\n                                <VisualState x:Name=\"Enabled\"/>\n                                <VisualState x:Name=\"Disabled\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Opacity\" Value=\"{ThemeResource ListViewItemDisabledThemeOpacity}\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource SystemControlHighlightAccentBrush}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource SystemControlHighlightAltChromeWhiteBrush}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource SystemControlHighlightAltChromeWhiteBrush}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"IconStates\">\n                                <VisualState x:Name=\"IconVisible\" />\n                                <VisualState x:Name=\"IconCollapsed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"IconBox.Visibility\" Value=\"Collapsed\" />\n                                        <Setter Target=\"IconColumn.Width\" Value=\"16\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"ChevronStates\">\n                                <VisualState x:Name=\"ChevronHidden\"/>\n                                <VisualState x:Name=\"ChevronVisibleOpen\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ExpandCollapseChevron.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"ExpandCollapseChevronRotateTransform.Angle\" Value=\"180\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"ChevronVisibleClosed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ExpandCollapseChevron.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"ExpandCollapseChevronRotateTransform.Angle\" Value=\"0\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"PaneAndTopLevelItemStates\">\n                                <VisualState x:Name=\"NotClosedCompactAndTopLevelItem\" />\n                                <VisualState x:Name=\"ClosedCompactAndTopLevelItem\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ContentPresenter.Margin\" Value=\"{ThemeResource NavigationViewCompactItemContentPresenterMargin}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n\n                        <Border\t\t\n                            x:Name=\"RevealBorder\"\t\t\n                            BorderBrush=\"{TemplateBinding BorderBrush}\"\t\t\n                            BorderThickness=\"{TemplateBinding BorderThickness}\" />\n                        <Grid x:Name=\"PresenterContentRootGrid\">\n                            <!-- Wrap SelectionIndicator in a grid so that its offset is 0,0 - this enables the offset animation. -->\n                            <Grid\n                                Margin=\"4,0,0,0\"\n                                HorizontalAlignment=\"Left\"\n                                VerticalAlignment=\"Center\">\n\n                                <Rectangle\n                                    x:Name=\"SelectionIndicator\"\n                                    Width=\"2\"\n                                    Height=\"24\"\n                                    Fill=\"{ThemeResource NavigationViewSelectionIndicatorForeground}\"\n                                    Opacity=\"0.0\"\n                                    contract7Present:RadiusX=\"{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource TopLeftCornerRadiusDoubleValueConverter}}\"\n                                    contract7Present:RadiusY=\"{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BottomRightCornerRadiusDoubleValueConverter}}\"\n                                    contract7NotPresent:RadiusX=\"{Binding Source={ThemeResource ControlCornerRadius}, Converter={StaticResource TopLeftCornerRadiusDoubleValueConverter}}\"\n                                    contract7NotPresent:RadiusY=\"{Binding Source={ThemeResource ControlCornerRadius}, Converter={StaticResource BottomRightCornerRadiusDoubleValueConverter}}\"/>\n                            </Grid>\n                            <Grid \n                                x:Name=\"ContentGrid\"\n                                MinHeight=\"{ThemeResource NavigationViewItemOnLeftMinHeight}\"\n                                HorizontalAlignment=\"Left\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition x:Name=\"IconColumn\" Width=\"{ThemeResource NavigationViewCompactPaneLength}\" />\n                                    <ColumnDefinition Width=\"*\" />\n                                    <ColumnDefinition Width=\"Auto\" />\n                                </Grid.ColumnDefinitions>\n\n                                <Viewbox \n                                    x:Name=\"IconBox\"                                \n                                    Height=\"16\"\n                                    Margin=\"{ThemeResource NavigationViewItemOnLeftIconBoxMargin}\">\n                                    <ContentPresenter \n                                        x:Name=\"Icon\" \n                                        Foreground=\"{TemplateBinding Foreground}\"\n                                        Content=\"{TemplateBinding Icon}\" />\n                                </Viewbox>\n\n                                <ContentPresenter \n                                    x:Name=\"ContentPresenter\"\n                                    Grid.Column=\"1\"\n                                    Foreground=\"{TemplateBinding Foreground}\"\n                                    ContentTransitions=\"{TemplateBinding ContentTransitions}\"\n                                    ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                    Content=\"{TemplateBinding Content}\"\n                                    HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                    VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                    ContentTemplateSelector=\"{TemplateBinding ContentTemplateSelector}\"\n                                    Margin=\"{ThemeResource NavigationViewItemContentPresenterMargin}\"\n                                    Padding=\"{TemplateBinding Padding}\"\n                                    AutomationProperties.AccessibilityView=\"Raw\"/>\n\n                                <Grid\n                                    x:Name=\"ExpandCollapseChevron\"\n                                    Grid.Column=\"2\"\n                                    Visibility=\"Collapsed\"\n                                    HorizontalAlignment=\"Right\"\n                                    Width=\"40\"\n                                    Margin=\"{ThemeResource NavigationViewItemExpandChevronMargin}\"\n                                    Background=\"Transparent\">\n                                    <TextBlock\n                                        Foreground=\"{ThemeResource NavigationViewItemForeground}\"\n                                        RenderTransformOrigin=\"0.5, 0.5\"\n                                        FontSize=\"{ThemeResource NavigationViewItemExpandedGlyphFontSize}\"\n                                        Text=\"{StaticResource NavigationViewItemExpandedGlyph}\"\n                                        FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\n                                        HorizontalAlignment=\"Center\"\n                                        VerticalAlignment=\"Center\"\n                                        AutomationProperties.AccessibilityView=\"Raw\"\n                                        IsTextScaleFactorEnabled=\"False\">\n                                        <TextBlock.RenderTransform>\n                                            <RotateTransform x:Name=\"ExpandCollapseChevronRotateTransform\"/>\n                                        </TextBlock.RenderTransform>\n                                    </TextBlock>\n                                </Grid>\n                            </Grid>\n                        </Grid>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"local:NavigationViewItem\" x:Key=\"MUX_NavigationViewSettingsItemStyleWhenOnTopPane\">\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource NavigationViewItemForeground}\" />\n        <Setter Property=\"Background\" Value=\"{ThemeResource NavigationViewItemBackground}\" />\n        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrush}\" />\n        <Setter Property=\"BorderThickness\" Value=\"{StaticResource NavigationViewItemBorderThickness}\" />\n        <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\" />\n        <Setter Property=\"FontWeight\" Value=\"Normal\" />\n        <Setter Property=\"FontSize\" Value=\"{ThemeResource ControlContentThemeFontSize}\" />\n        <Setter Property=\"UseSystemFocusVisuals\" Value=\"True\" />\n        <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"local:NavigationViewItem\">\n                    <Grid \n                        x:Name=\"LayoutRoot\" \n                        Background=\"{TemplateBinding Background}\"\n                        Control.IsTemplateFocusTarget=\"True\">\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"PointerStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPointerOver}\" />\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"PointerOver\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPressed}\" />\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"Pressed\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Selected\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundSelected}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundSelected}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundSelected}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"PointerOverSelected\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundSelectedPointerOver}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPointerOver}\" />\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"PointerOver\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"PressedSelected\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundSelectedPressed}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPressed}\" />\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"Pressed\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"DisabledStates\">\n                                <VisualState x:Name=\"Enabled\"/>\n                                <VisualState x:Name=\"Disabled\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundDisabled}\" />\n                                        <Setter Target=\"RevealBorder.BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrushCheckedDisabled}\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                        <Rectangle \n                            x:Name=\"PointerRectangle\" \n                            Fill=\"Transparent\" />\n                        <Border\t\t\n                            x:Name=\"RevealBorder\"\t\t\n                            BorderBrush=\"{TemplateBinding BorderBrush}\"\t\t\n                            BorderThickness=\"{TemplateBinding BorderThickness}\" >\n                        </Border>\n                        <Grid x:Name=\"ContentGrid\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\" />\n                                <ColumnDefinition Width=\"*\" />\n                            </Grid.ColumnDefinitions>\n                            <Grid.RowDefinitions>\n                                <RowDefinition x:Name=\"IconRow\" Height=\"Auto\" />\n                                <RowDefinition Height=\"*\" />\n                            </Grid.RowDefinitions>\n                            <Viewbox \n                                x:Name=\"IconBox\" \n                                Grid.Row=\"1\"\n                                Grid.Column=\"1\"\n                                Height=\"16\"\n                                Width =\"48\"\n                                Margin=\"0,0,0,0\"\n                                VerticalAlignment=\"Center\"\n                                HorizontalAlignment=\"Center\">\n                                <ContentPresenter \n                                    x:Name=\"Icon\" \n                                    Content=\"{TemplateBinding Icon}\"\n                                    Foreground=\"{TemplateBinding Foreground}\" />\n                            </Viewbox>\n                        </Grid>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"primitives:NavigationViewItemPresenter\" x:Key=\"MUX_NavigationViewItemPresenterStyleWhenOnTopPane\">\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource TopNavigationViewItemForeground}\" />\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"primitives:NavigationViewItemPresenter\">\n                    <Grid \n                        x:Name=\"LayoutRoot\" \n                        Background=\"{TemplateBinding Background}\"\n                        Control.IsTemplateFocusTarget=\"True\">\n                        <Grid.Resources>\n                            <Storyboard x:Name=\"ExpandCollapseRotateExpandedStoryboard\">\n                                <DoubleAnimation\n                                    Storyboard.TargetName=\"ExpandCollapseChevronRotateTransform\"\n                                    Storyboard.TargetProperty=\"Angle\"\n                                    From=\"0.0\" To=\"180.0\" Duration=\"0:0:0.1\"/>\n                            </Storyboard>\n                            <Storyboard x:Name=\"ExpandCollapseRotateCollapsedStoryboard\">\n                                <DoubleAnimation\n                                    Storyboard.TargetName=\"ExpandCollapseChevronRotateTransform\"\n                                    Storyboard.TargetProperty=\"Angle\"\n                                    From=\"180.0\" To=\"0.0\" Duration=\"0:0:0.1\"/>\n                            </Storyboard>\n                        </Grid.Resources>\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"PointerStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPointerOver}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPointerOver}\" />\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"PointerOver\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPressed}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPressed}\" />\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"Pressed\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Selected\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundSelected}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundSelected}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundSelected}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundSelected}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"PointerOverSelected\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundSelectedPointerOver}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPointerOver}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPointerOver}\" />\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"PointerOver\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"PressedSelected\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource TopNavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"PointerRectangle.Fill\" Value=\"{ThemeResource NavigationViewItemBackgroundSelectedPressed}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPressed}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundPressed}\" />\n                                        <contract4Present:Setter Target=\"LayoutRoot.(media:RevealBrush.State)\" Value=\"Pressed\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"DisabledStates\">\n                                <VisualState x:Name=\"Enabled\"/>\n                                <VisualState x:Name=\"Disabled\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundDisabled}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundDisabled}\" />\n                                        <Setter Target=\"RevealBorder.BorderBrush\" Value=\"{ThemeResource NavigationViewItemBorderBrushCheckedDisabled}\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"NavigationViewIconPositionStates\">\n                                <VisualState x:Name=\"IconOnLeft\" />\n                                <VisualState x:Name=\"IconOnly\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"PointerRectangle.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"LayoutRoot.MinWidth\" Value=\"48\" />\n                                        <Setter Target=\"ContentPresenter.Visibility\" Value=\"Collapsed\" />\n                                        <Setter Target=\"SelectionIndicatorGrid.Margin\" Value=\"4,0,4,4\" />\n                                        <Setter Target=\"ExpandCollapseChevron.Margin\" Value=\"{ThemeResource TopNavigationViewItemIconOnlyExpandChevronMargin}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"ContentOnly\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"IconBox.Visibility\" Value=\"Collapsed\" />\n                                        <Setter Target=\"ContentPresenter.Margin\" Value=\"{ThemeResource TopNavigationViewItemContentOnlyContentPresenterMargin}\" />\n                                        <Setter Target=\"SelectionIndicatorGrid.Margin\" Value=\"12,0,12,4\" />\n                                        <Setter Target=\"ExpandCollapseChevron.Margin\" Value=\"{ThemeResource TopNavigationViewItemContentOnlyExpandChevronMargin}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"ChevronStates\">\n                                <VisualState x:Name=\"ChevronHidden\"/>\n                                <VisualState x:Name=\"ChevronVisibleOpen\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ExpandCollapseChevron.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"ExpandCollapseChevronRotateTransform.Angle\" Value=\"180\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"ChevronVisibleClosed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ExpandCollapseChevron.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"ExpandCollapseChevronRotateTransform.Angle\" Value=\"0\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                        <Rectangle \n                            x:Name=\"PointerRectangle\" \n                            Fill=\"Transparent\"\n                            Visibility=\"Collapsed\" />\n                        <Border\t\t\n                            x:Name=\"RevealBorder\"\t\t\n                            BorderBrush=\"{TemplateBinding BorderBrush}\"\t\t\n                            BorderThickness=\"{TemplateBinding BorderThickness}\" />\n                        <Grid x:Name=\"ContentGrid\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\" />\n                                <ColumnDefinition Width=\"*\" />\n                                <ColumnDefinition Width=\"Auto\" />\n                            </Grid.ColumnDefinitions>\n                            <Viewbox \n                                x:Name=\"IconBox\" \n                                Height=\"16\"\n                                Width=\"16\"\n                                Margin=\"16,0,0,0\"\n                                VerticalAlignment=\"Center\"\n                                HorizontalAlignment=\"Center\">\n                                <ContentPresenter \n                                    x:Name=\"Icon\" \n                                    Content=\"{TemplateBinding Icon}\"\n                                    Foreground=\"{TemplateBinding Foreground}\"/>\n                            </Viewbox>\n                            <ContentPresenter\n                                x:Name=\"ContentPresenter\"\n                                Grid.Column=\"1\"\n                                Margin=\"{ThemeResource TopNavigationViewItemContentPresenterMargin}\"\n                                TextWrapping=\"NoWrap\"\n                                Foreground=\"{TemplateBinding Foreground}\"\n                                ContentTransitions=\"{TemplateBinding ContentTransitions}\"\n                                ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                Content=\"{TemplateBinding Content}\"\n                                HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                ContentTemplateSelector=\"{TemplateBinding ContentTemplateSelector}\"\n                                VerticalAlignment=\"Center\"\n                                AutomationProperties.AccessibilityView=\"Raw\"/>\n                            <Grid\n                                x:Name=\"ExpandCollapseChevron\"\n                                Grid.Column=\"2\"\n                                Visibility=\"Collapsed\"\n                                HorizontalAlignment=\"Right\"\n                                Width=\"40\"\n                                Margin=\"{ThemeResource TopNavigationViewItemExpandChevronMargin}\"\n                                Background=\"Transparent\">\n                                <TextBlock\n                                    Foreground=\"{ThemeResource NavigationViewItemForeground}\"\n                                    RenderTransformOrigin=\"0.5, 0.5\"\n                                    FontSize=\"{ThemeResource NavigationViewItemExpandedGlyphFontSize}\"\n                                    Text=\"{StaticResource NavigationViewItemExpandedGlyph}\"\n                                    FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\n                                    VerticalAlignment=\"Center\"\n                                    HorizontalAlignment=\"Center\"\n                                    AutomationProperties.AccessibilityView=\"Raw\"\n                                    IsTextScaleFactorEnabled=\"False\">\n                                    <TextBlock.RenderTransform>\n                                        <RotateTransform x:Name=\"ExpandCollapseChevronRotateTransform\"/>\n                                    </TextBlock.RenderTransform>\n                                </TextBlock>\n                            </Grid>\n                        </Grid>\n                        <Grid \n                            x:Name=\"SelectionIndicatorGrid\"\n                            Margin=\"16,0,16,4\"\n                            VerticalAlignment=\"Bottom\">\n                            <Rectangle\n                                x:Name=\"SelectionIndicator\"\n                                Height=\"2\"\n                                Fill=\"{ThemeResource NavigationViewSelectionIndicatorForeground}\"\n                                Opacity=\"0\"\n                                contract7Present:RadiusX=\"{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource TopLeftCornerRadiusDoubleValueConverter}}\"\n                                contract7Present:RadiusY=\"{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BottomRightCornerRadiusDoubleValueConverter}}\"\n                                contract7NotPresent:RadiusX=\"{Binding Source={ThemeResource ControlCornerRadius}, Converter={StaticResource TopLeftCornerRadiusDoubleValueConverter}}\"\n                                contract7NotPresent:RadiusY=\"{Binding Source={ThemeResource ControlCornerRadius}, Converter={StaticResource BottomRightCornerRadiusDoubleValueConverter}}\" />\n                        </Grid>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"primitives:NavigationViewItemPresenter\" x:Key=\"MUX_NavigationViewItemPresenterStyleWhenOnTopPaneWithRevealFocus\">\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource TopNavigationViewItemForeground}\" />\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"primitives:NavigationViewItemPresenter\">\n                    <Grid \n                        x:Name=\"LayoutRoot\"\n                        Background=\"{TemplateBinding Background}\"\n                        Control.IsTemplateFocusTarget=\"True\">\n                        <Grid.Resources>\n                            <Storyboard x:Name=\"ExpandCollapseRotateExpandedStoryboard\">\n                                <DoubleAnimation\n                                    Storyboard.TargetName=\"ExpandCollapseChevronRotateTransform\"\n                                    Storyboard.TargetProperty=\"Angle\"\n                                    From=\"0.0\" To=\"180.0\" Duration=\"0:0:0.1\"/>\n                            </Storyboard>\n                            <Storyboard x:Name=\"ExpandCollapseRotateCollapsedStoryboard\">\n                                <DoubleAnimation\n                                    Storyboard.TargetName=\"ExpandCollapseChevronRotateTransform\"\n                                    Storyboard.TargetProperty=\"Angle\"\n                                    From=\"180.0\" To=\"0.0\" Duration=\"0:0:0.1\"/>\n                            </Storyboard>\n                        </Grid.Resources>\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"DisabledStates\">\n                                <VisualState x:Name=\"Enabled\"/>\n                                <VisualState x:Name=\"Disabled\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundDisabled}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundDisabled}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"FocusStates\">\n                                <VisualState x:Name=\"Focused\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource TopNavigationViewItemRevealBackgroundFocused}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemRevealIconForegroundFocused}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource TopNavigationViewItemRevealContentForegroundFocused}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Unfocused\" />\n                                <VisualState x:Name=\"PointerFocused\" />\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"NavigationViewIconPositionStates\">\n                                <VisualState x:Name=\"IconOnLeft\" />\n                                <VisualState x:Name=\"IconOnly\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"PointerRectangle.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"LayoutRoot.MinWidth\" Value=\"48\" />\n                                        <Setter Target=\"ContentPresenter.Visibility\" Value=\"Collapsed\" />\n                                        <Setter Target=\"SelectionIndicatorGrid.Margin\" Value=\"4,0\" />\n                                        <Setter Target=\"ExpandCollapseChevron.Margin\" Value=\"{ThemeResource TopNavigationViewItemIconOnlyExpandChevronMargin}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"ContentOnly\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"IconBox.Visibility\" Value=\"Collapsed\" />\n                                        <Setter Target=\"ContentPresenter.Margin\" Value=\"{ThemeResource TopNavigationViewItemContentOnlyContentPresenterMargin}\" />\n                                        <Setter Target=\"SelectionIndicatorGrid.Margin\" Value=\"12,0\" />\n                                        <Setter Target=\"ExpandCollapseChevron.Margin\" Value=\"{ThemeResource TopNavigationViewItemContentOnlyExpandChevronMargin}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"ChevronStates\">\n                                <VisualState x:Name=\"ChevronHidden\"/>\n                                <VisualState x:Name=\"ChevronVisibleOpen\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ExpandCollapseChevron.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"ExpandCollapseChevronRotateTransform.Angle\" Value=\"180\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"ChevronVisibleClosed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ExpandCollapseChevron.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"ExpandCollapseChevronRotateTransform.Angle\" Value=\"0\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                        <Rectangle \n                            x:Name=\"PointerRectangle\" \n                            Fill=\"Transparent\"\n                            Visibility=\"Collapsed\" />\n                        <Grid x:Name=\"ContentGrid\">\n                            <Grid.ColumnDefinitions>\n                                <ColumnDefinition Width=\"Auto\" />\n                                <ColumnDefinition Width=\"*\" />\n                                <ColumnDefinition Width=\"Auto\" />\n                            </Grid.ColumnDefinitions>\n                            <Viewbox \n                                x:Name=\"IconBox\"\n                                Height=\"16\"\n                                Width=\"16\"\n                                Margin=\"16,0,0,0\"\n                                VerticalAlignment=\"Center\"\n                                HorizontalAlignment=\"Center\">\n                                <ContentPresenter \n                                    x:Name=\"Icon\" \n                                    Content=\"{TemplateBinding Icon}\"\n                                    Foreground=\"{TemplateBinding Foreground}\" />\n                            </Viewbox>\n                            <ContentPresenter\n                                x:Name=\"ContentPresenter\"\n                                Grid.Column=\"1\"\n                                Margin=\"{ThemeResource TopNavigationViewItemContentPresenterMargin}\"\n                                Foreground=\"{TemplateBinding Foreground}\"\n                                TextWrapping=\"NoWrap\"\n                                ContentTransitions=\"{TemplateBinding ContentTransitions}\"\n                                ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                Content=\"{TemplateBinding Content}\"\n                                VerticalAlignment=\"Center\"\n                                AutomationProperties.AccessibilityView=\"Raw\"/>\n                            <Grid\n                                x:Name=\"ExpandCollapseChevron\"\n                                Grid.Column=\"2\"\n                                Visibility=\"Collapsed\"\n                                HorizontalAlignment=\"Right\"\n                                Width=\"40\"\n                                Margin=\"{ThemeResource NavigationViewItemExpandChevronMargin}\"\n                                Background=\"Transparent\">\n                                <TextBlock\n                                    Foreground=\"{ThemeResource NavigationViewItemForeground}\"\n                                    RenderTransformOrigin=\"0.5, 0.5\"\n                                    FontSize=\"{ThemeResource NavigationViewItemExpandedGlyphFontSize}\"\n                                    Text=\"{StaticResource NavigationViewItemExpandedGlyph}\"\n                                    FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\n                                    VerticalAlignment=\"Center\"\n                                    HorizontalAlignment=\"Center\"\n                                    AutomationProperties.AccessibilityView=\"Raw\"\n                                    IsTextScaleFactorEnabled=\"False\">\n                                    <TextBlock.RenderTransform>\n                                        <RotateTransform x:Name=\"ExpandCollapseChevronRotateTransform\"/>\n                                    </TextBlock.RenderTransform>\n                                </TextBlock>\n                            </Grid>\n                        </Grid>\n                        <Grid \n                            x:Name=\"SelectionIndicatorGrid\"\n                            Margin=\"16,0,16,4\"\n                            VerticalAlignment=\"Bottom\">\n                            <Rectangle\n                                x:Name=\"SelectionIndicator\"\n                                Height=\"2\"\n                                Fill=\"{ThemeResource NavigationViewSelectionIndicatorForeground}\"\n                                Opacity=\"0\"\n                                contract7Present:RadiusX=\"{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource TopLeftCornerRadiusDoubleValueConverter}}\"\n                                contract7Present:RadiusY=\"{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BottomRightCornerRadiusDoubleValueConverter}}\"\n                                contract7NotPresent:RadiusX=\"{Binding Source={ThemeResource ControlCornerRadius}, Converter={StaticResource TopLeftCornerRadiusDoubleValueConverter}}\"\n                                contract7NotPresent:RadiusY=\"{Binding Source={ThemeResource ControlCornerRadius}, Converter={StaticResource BottomRightCornerRadiusDoubleValueConverter}}\"/>\n                        </Grid>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style TargetType=\"primitives:NavigationViewItemPresenter\" x:Key=\"MUX_NavigationViewItemPresenterStyleWhenOnTopPaneOverflow\">\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource TopNavigationViewItemForeground}\" />\n        <Setter Property=\"Template\">\n            <Setter.Value>\n                <ControlTemplate TargetType=\"primitives:NavigationViewItemPresenter\">\n                    <Grid\n                        x:Name=\"LayoutRoot\"\n                        Height=\"40\" \n                        Background=\"{TemplateBinding Background}\"\n                        Control.IsTemplateFocusTarget=\"True\">\n                        <Grid.Resources>\n                            <Storyboard x:Name=\"ExpandCollapseRotateExpandedStoryboard\">\n                                <DoubleAnimation\n                                    Storyboard.TargetName=\"ExpandCollapseChevronRotateTransform\"\n                                    Storyboard.TargetProperty=\"Angle\"\n                                    From=\"0.0\" To=\"180.0\" Duration=\"0:0:0.1\"/>\n                            </Storyboard>\n                            <Storyboard x:Name=\"ExpandCollapseRotateCollapsedStoryboard\">\n                                <DoubleAnimation\n                                    Storyboard.TargetName=\"ExpandCollapseChevronRotateTransform\"\n                                    Storyboard.TargetProperty=\"Angle\"\n                                    From=\"180.0\" To=\"0.0\" Duration=\"0:0:0.1\"/>\n                            </Storyboard>\n                        </Grid.Resources>\n\n                        <VisualStateManager.VisualStateGroups>\n                            <VisualStateGroup x:Name=\"PointerStates\">\n                                <VisualState x:Name=\"Normal\" />\n                                <VisualState x:Name=\"PointerOver\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewItemBackgroundPointerOver}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPointerOver}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPointerOver}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Pressed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewItemBackgroundPressed}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPressed}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPressed}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"Selected\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewItemBackgroundSelected}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundSelected}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundSelected}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"PointerOverSelected\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewItemBackgroundSelectedPointerOver}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPointerOver}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPointerOver}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"PressedSelected\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"LayoutRoot.Background\" Value=\"{ThemeResource NavigationViewItemBackgroundSelectedPressed}\" />\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPressed}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource NavigationViewItemForegroundPressed}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"DisabledStates\">\n                                <VisualState x:Name=\"Enabled\"/>\n                                <VisualState x:Name=\"Disabled\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"Icon.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundDisabled}\" />\n                                        <Setter Target=\"ContentPresenter.Foreground\" Value=\"{ThemeResource TopNavigationViewItemForegroundDisabled}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"NavigationViewIconPositionStates\">\n                                <VisualState x:Name=\"IconOnLeft\" />\n                                <VisualState x:Name=\"IconOnly\" />\n                                <VisualState x:Name=\"ContentOnly\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"IconBox.Visibility\" Value=\"Collapsed\" />\n                                        <Setter Target=\"ContentPresenter.Margin\" Value=\"{ThemeResource TopNavigationViewItemOnOverflowNoIconContentPresenterMargin}\" />\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                            <VisualStateGroup x:Name=\"ChevronStates\">\n                                <VisualState x:Name=\"ChevronHidden\"/>\n                                <VisualState x:Name=\"ChevronVisibleOpen\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ExpandCollapseChevron.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"ExpandCollapseChevronRotateTransform.Angle\" Value=\"180\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                                <VisualState x:Name=\"ChevronVisibleClosed\">\n                                    <VisualState.Setters>\n                                        <Setter Target=\"ExpandCollapseChevron.Visibility\" Value=\"Visible\" />\n                                        <Setter Target=\"ExpandCollapseChevronRotateTransform.Angle\" Value=\"0\"/>\n                                    </VisualState.Setters>\n                                </VisualState>\n                            </VisualStateGroup>\n                        </VisualStateManager.VisualStateGroups>\n                        <Grid x:Name=\"PresenterContentRootGrid\">\n                            <!-- Wrap SelectionIndicator in a grid so that its offset is 0,0 - this enables the offset animation. -->\n                            <Grid\n                                Margin=\"4,0,0,0\"\n                                HorizontalAlignment=\"Left\"\n                                VerticalAlignment=\"Center\">\n\n                                <Rectangle\n                                x:Name=\"SelectionIndicator\"\n                                Width=\"2\"\n                                Height=\"24\"\n                                Fill=\"{ThemeResource NavigationViewSelectionIndicatorForeground}\"\n                                Opacity=\"0.0\"\n                                contract7Present:RadiusX=\"{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource TopLeftCornerRadiusDoubleValueConverter}}\"\n                                contract7Present:RadiusY=\"{Binding CornerRadius, RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource BottomRightCornerRadiusDoubleValueConverter}}\"\n                                contract7NotPresent:RadiusX=\"{Binding Source={ThemeResource ControlCornerRadius}, Converter={StaticResource TopLeftCornerRadiusDoubleValueConverter}}\"\n                                contract7NotPresent:RadiusY=\"{Binding Source={ThemeResource ControlCornerRadius}, Converter={StaticResource BottomRightCornerRadiusDoubleValueConverter}}\"/>\n                            </Grid>\n                            <Grid x:Name=\"ContentGrid\">\n                                <Grid.ColumnDefinitions>\n                                    <ColumnDefinition Width=\"Auto\" />\n                                    <ColumnDefinition Width=\"*\" />\n                                    <ColumnDefinition Width=\"Auto\" />\n                                </Grid.ColumnDefinitions>\n                                <Viewbox \n                                    x:Name=\"IconBox\" \n                                    Height=\"16\"\n                                    Width=\"16\"\n                                    Margin=\"16,0,0,0\"\n                                    VerticalAlignment=\"Center\"\n                                    HorizontalAlignment=\"Center\">\n                                    <ContentPresenter \n                                        x:Name=\"Icon\" \n                                        Content=\"{TemplateBinding Icon}\"\n                                        Foreground=\"{TemplateBinding Foreground}\" />\n                                </Viewbox>\n                                <ContentPresenter\n                                    x:Name=\"ContentPresenter\"\n                                    Grid.Column=\"1\"\n                                    Margin=\"{ThemeResource TopNavigationViewItemOnOverflowContentPresenterMargin}\"\n                                    Foreground=\"{TemplateBinding Foreground}\"\n                                    TextWrapping=\"NoWrap\"\n                                    ContentTransitions=\"{TemplateBinding ContentTransitions}\"\n                                    ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                    Content=\"{TemplateBinding Content}\"\n                                    HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                    ContentTemplateSelector=\"{TemplateBinding ContentTemplateSelector}\"\n                                    VerticalAlignment=\"Center\"\n                                    AutomationProperties.AccessibilityView=\"Raw\"/>\n                                <Grid\n                                    x:Name=\"ExpandCollapseChevron\"\n                                    Grid.Column=\"2\"\n                                    Visibility=\"Collapsed\"\n                                    HorizontalAlignment=\"Right\"\n                                    Width=\"40\"\n                                    Margin=\"{ThemeResource TopNavigationViewItemOnOverflowExpandChevronMargin}\"\n                                    Padding=\"{ThemeResource TopNavigationViewItemOnOverflowExpandChevronPadding}\"\n                                    Background=\"Transparent\">\n                                    <TextBlock\n                                        Foreground=\"{ThemeResource NavigationViewItemForeground}\"\n                                        RenderTransformOrigin=\"0.5, 0.5\"\n                                        FontSize=\"{ThemeResource NavigationViewItemExpandedGlyphFontSize}\"\n                                        Text=\"{StaticResource NavigationViewItemExpandedGlyph}\"\n                                        FontFamily=\"{StaticResource SymbolThemeFontFamily}\"\n                                        HorizontalAlignment=\"Center\"\n                                        VerticalAlignment=\"Center\"\n                                        AutomationProperties.AccessibilityView=\"Raw\"\n                                        IsTextScaleFactorEnabled=\"False\">\n                                        <TextBlock.RenderTransform>\n                                            <RotateTransform x:Name=\"ExpandCollapseChevronRotateTransform\"/>\n                                        </TextBlock.RenderTransform>\n                                    </TextBlock>\n                                </Grid>\n                            </Grid>\n                        </Grid>\n                    </Grid>\n                </ControlTemplate>\n            </Setter.Value>\n        </Setter>\n    </Style>\n\n    <Style x:Key=\"NavigationViewItemHeaderTextStyle\" TargetType=\"TextBlock\" BasedOn=\"{StaticResource BaseTextBlockStyle}\">\n        <Setter Property=\"FontWeight\" Value=\"SemiBold\" />\n        <Setter Property=\"OpticalMarginAlignment\" Value=\"TrimSideBearings\" />\n        <Setter Property=\"TextWrapping\" Value=\"NoWrap\"/>\n    </Style>\n\n    <!-- based on TitleTextBlockStyle -->\n    <Style x:Key=\"NavigationViewTitleHeaderContentControlTextStyle\" TargetType=\"ContentControl\">\n        <Setter Property=\"FontWeight\" Value=\"SemiLight\" />\n        <Setter Property=\"FontSize\" Value=\"24\" />\n        <Setter Property=\"FontFamily\" Value=\"XamlAutoFontFamily\" />\n        <Setter Property=\"Margin\" Value=\"{ThemeResource NavigationViewHeaderMargin}\"/>\n        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\"/>\n    </Style>\n\n</ResourceDictionary>"
  },
  {
    "path": "Unicord.Universal/Themes/Styles/Backport/WinUIResources_21h1.xaml",
    "content": "﻿<!--  From WinUI 2.8. Copied here because a 2.7 Store update removed 21h1 styles, ty Kimbra (@metrorail)  -->\n<!--  Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT License. See LICENSE in the project root for license information.  -->\n<ResourceDictionary xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">\n    <ResourceDictionary.MergedDictionaries>\n        <ResourceDictionary>\n            <ResourceDictionary.ThemeDictionaries>\n                <ResourceDictionary x:Key=\"Default\">\n                    <x:Boolean x:Key=\"ListViewItemSelectionIndicatorVisualEnabled\">True</x:Boolean>\n                    <x:Double x:Key=\"ListViewItemContentOffsetX\">-40.5</x:Double>\n                    <x:Double x:Key=\"ListViewItemDisabledThemeOpacity\">0.3</x:Double>\n                    <x:Double x:Key=\"ListViewItemDragThemeOpacity\">0.80</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderThemeOpacity\">0.80</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderTargetThemeOpacity\">0.50</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderTargetThemeScale\">0.95</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderHintThemeOffset\">10.0</x:Double>\n                    <x:Double x:Key=\"ListViewItemSelectedBorderThemeThickness\">4</x:Double>\n                    <x:Double x:Key=\"ListViewItemMinWidth\">88</x:Double>\n                    <x:Double x:Key=\"ListViewItemMinHeight\">40</x:Double>\n                    <Thickness x:Key=\"ListViewItemCompactSelectedBorderThemeThickness\">4</Thickness>\n                    <StaticResource x:Key=\"ListViewItemBorderBackground\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundPointerOver\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundPressed\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundSelected\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundSelectedPointerOver\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundSelectedPressed\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForegroundPointerOver\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForegroundPressed\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForegroundSelected\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForegroundSelectedPointerOver\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForegroundSelectedPressed\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemFocusVisualPrimaryBrush\" ResourceKey=\"FocusStrokeColorOuterBrush\" />\n                    <StaticResource x:Key=\"ListViewItemFocusVisualSecondaryBrush\" ResourceKey=\"FocusStrokeColorInnerBrush\" />\n                    <StaticResource x:Key=\"ListViewItemFocusBorderBrush\" ResourceKey=\"FocusStrokeColorOuterBrush\" />\n                    <StaticResource x:Key=\"ListViewItemFocusSecondaryBorderBrush\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBrush\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxBrush\" ResourceKey=\"ControlAltFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemDragBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"ListViewItemDragForeground\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemPlaceholderBackground\" ResourceKey=\"ControlStrongFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"ListViewItemMultiArrangeOverlayTextBorder\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemMultiArrangeOverlayTextBackground\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <x:Boolean x:Key=\"ListViewItemSelectionCheckMarkVisualEnabled\">True</x:Boolean>\n                    <ListViewItemPresenterCheckMode x:Key=\"ListViewItemCheckMode\">Inline</ListViewItemPresenterCheckMode>\n\n                    <SolidColorBrush x:Key=\"ListViewItemCheckHintThemeBrush\" Color=\"#FFFFFFFF\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckSelectingThemeBrush\" Color=\"#FFFFFFFF\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckThemeBrush\" Color=\"#FFFFFFFF\" />\n                    <SolidColorBrush x:Key=\"ListViewItemDragBackgroundThemeBrush\" Color=\"#994617B4\" />\n                    <SolidColorBrush x:Key=\"ListViewItemDragForegroundThemeBrush\" Color=\"White\" />\n                    <SolidColorBrush x:Key=\"ListViewItemFocusBorderThemeBrush\" Color=\"#FFFFFFFF\" />\n                    <SolidColorBrush x:Key=\"ListViewItemOverlayBackgroundThemeBrush\" Color=\"#A6000000\" />\n                    <SolidColorBrush x:Key=\"ListViewItemOverlayForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n                    <SolidColorBrush x:Key=\"ListViewItemOverlaySecondaryForegroundThemeBrush\" Color=\"#99FFFFFF\" />\n                    <SolidColorBrush x:Key=\"ListViewItemPlaceholderBackgroundThemeBrush\" Color=\"#FF3D3D3D\" />\n                    <SolidColorBrush x:Key=\"ListViewItemPointerOverBackgroundThemeBrush\" Color=\"#4DFFFFFF\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedBackgroundThemeBrush\" Color=\"#FF4617B4\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedPointerOverBackgroundThemeBrush\" Color=\"#FF5F37BE\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedPointerOverBorderThemeBrush\" Color=\"#FF5F37BE\" />\n\n                    <CornerRadius x:Key=\"ListViewItemCornerRadius\">4</CornerRadius>\n                    <CornerRadius x:Key=\"ListViewItemCheckBoxCornerRadius\">3</CornerRadius>\n                    <CornerRadius x:Key=\"ListViewItemSelectionIndicatorCornerRadius\">1.5</CornerRadius>\n                    <StaticResource x:Key=\"ListViewItemCheckPressedBrush\" ResourceKey=\"TextOnAccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckDisabledBrush\" ResourceKey=\"TextOnAccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxPointerOverBrush\" ResourceKey=\"ControlAltFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxPressedBrush\" ResourceKey=\"ControlAltFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxDisabledBrush\" ResourceKey=\"ControlAltFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxSelectedBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxSelectedPointerOverBrush\" ResourceKey=\"AccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxSelectedPressedBrush\" ResourceKey=\"AccentFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxSelectedDisabledBrush\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxPointerOverBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxPressedBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxDisabledBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDisabledBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundSelectedDisabled\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemSelectionIndicatorBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemSelectionIndicatorPointerOverBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemSelectionIndicatorPressedBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemSelectionIndicatorDisabledBrush\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                </ResourceDictionary>\n                <ResourceDictionary x:Key=\"HighContrast\">\n                    <x:Boolean x:Key=\"ListViewItemSelectionIndicatorVisualEnabled\">True</x:Boolean>\n                    <x:Double x:Key=\"ListViewItemContentOffsetX\">-40.5</x:Double>\n                    <x:Double x:Key=\"ListViewItemDisabledThemeOpacity\">0.3</x:Double>\n                    <x:Double x:Key=\"ListViewItemDragThemeOpacity\">0.80</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderThemeOpacity\">0.80</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderTargetThemeOpacity\">0.50</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderTargetThemeScale\">0.95</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderHintThemeOffset\">10.0</x:Double>\n                    <x:Double x:Key=\"ListViewItemSelectedBorderThemeThickness\">4</x:Double>\n                    <x:Double x:Key=\"ListViewItemMinWidth\">88</x:Double>\n                    <x:Double x:Key=\"ListViewItemMinHeight\">40</x:Double>\n                    <Thickness x:Key=\"ListViewItemCompactSelectedBorderThemeThickness\">4</Thickness>\n                    <SolidColorBrush x:Key=\"ListViewItemBorderBackground\" Color=\"{ThemeResource SystemColorButtonFaceColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemBackground\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemBackgroundPointerOver\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemBackgroundPressed\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemBackgroundSelected\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemBackgroundSelectedPointerOver\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemBackgroundSelectedPressed\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemForeground\" Color=\"{ThemeResource SystemColorButtonTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemForegroundPointerOver\" Color=\"{ThemeResource SystemColorHighlightTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemForegroundPressed\" Color=\"{ThemeResource SystemColorHighlightTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemForegroundSelected\" Color=\"{ThemeResource SystemColorHighlightTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemForegroundSelectedPointerOver\" Color=\"{ThemeResource SystemColorHighlightTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemForegroundSelectedPressed\" Color=\"{ThemeResource SystemColorHighlightTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemFocusVisualPrimaryBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemFocusVisualSecondaryBrush\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemFocusBorderBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemFocusSecondaryBorderBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxBrush\" Color=\"{ThemeResource SystemColorButtonFaceColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemDragBackground\" Color=\"Transparent\" />\n                    <SolidColorBrush x:Key=\"ListViewItemDragForeground\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemPlaceholderBackground\" Color=\"{ThemeResource SystemColorButtonFaceColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemMultiArrangeOverlayTextBorder\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemMultiArrangeOverlayTextBackground\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <x:Boolean x:Key=\"ListViewItemSelectionCheckMarkVisualEnabled\">True</x:Boolean>\n                    <ListViewItemPresenterCheckMode x:Key=\"ListViewItemCheckMode\">Inline</ListViewItemPresenterCheckMode>\n\n                    <SolidColorBrush x:Key=\"ListViewItemCheckHintThemeBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckSelectingThemeBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckThemeBrush\" Color=\"{ThemeResource SystemColorHighlightTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemDragBackgroundThemeBrush\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemDragForegroundThemeBrush\" Color=\"{ThemeResource SystemColorHighlightTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemFocusBorderThemeBrush\" Color=\"{ThemeResource SystemColorButtonTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemOverlayBackgroundThemeBrush\" Color=\"{ThemeResource SystemColorButtonFaceColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemOverlayForegroundThemeBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemOverlaySecondaryForegroundThemeBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemPlaceholderBackgroundThemeBrush\" Color=\"{ThemeResource SystemColorGrayTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemPointerOverBackgroundThemeBrush\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedBackgroundThemeBrush\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedForegroundThemeBrush\" Color=\"{ThemeResource SystemColorHighlightTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedPointerOverBackgroundThemeBrush\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedPointerOverBorderThemeBrush\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n\n                    <CornerRadius x:Key=\"ListViewItemCornerRadius\">4</CornerRadius>\n                    <CornerRadius x:Key=\"ListViewItemCheckBoxCornerRadius\">3</CornerRadius>\n                    <CornerRadius x:Key=\"ListViewItemSelectionIndicatorCornerRadius\">1.5</CornerRadius>\n                    <SolidColorBrush x:Key=\"ListViewItemCheckPressedBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckDisabledBrush\" Color=\"{ThemeResource SystemColorGrayTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxPointerOverBrush\" Color=\"{ThemeResource SystemColorButtonFaceColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxPressedBrush\" Color=\"{ThemeResource SystemColorButtonFaceColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxDisabledBrush\" Color=\"{ThemeResource SystemColorButtonFaceColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxSelectedBrush\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxSelectedPointerOverBrush\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxSelectedPressedBrush\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxSelectedDisabledBrush\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxBorderBrush\" Color=\"{ThemeResource SystemColorButtonTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxPointerOverBorderBrush\" Color=\"{ThemeResource SystemColorButtonTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxPressedBorderBrush\" Color=\"{ThemeResource SystemColorButtonTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckBoxDisabledBorderBrush\" Color=\"{ThemeResource SystemColorButtonTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemBackgroundSelectedDisabled\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectionIndicatorBrush\" Color=\"{ThemeResource SystemColorHighlightTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectionIndicatorPointerOverBrush\" Color=\"{ThemeResource SystemColorHighlightTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectionIndicatorPressedBrush\" Color=\"{ThemeResource SystemColorHighlightTextColor}\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectionIndicatorDisabledBrush\" Color=\"{ThemeResource SystemColorGrayTextColor}\" />\n                </ResourceDictionary>\n                <ResourceDictionary x:Key=\"Light\">\n                    <x:Boolean x:Key=\"ListViewItemSelectionIndicatorVisualEnabled\">True</x:Boolean>\n                    <x:Double x:Key=\"ListViewItemContentOffsetX\">-40.5</x:Double>\n                    <x:Double x:Key=\"ListViewItemDisabledThemeOpacity\">0.3</x:Double>\n                    <x:Double x:Key=\"ListViewItemDragThemeOpacity\">0.80</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderThemeOpacity\">0.80</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderTargetThemeOpacity\">0.50</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderTargetThemeScale\">0.95</x:Double>\n                    <x:Double x:Key=\"ListViewItemReorderHintThemeOffset\">10.0</x:Double>\n                    <x:Double x:Key=\"ListViewItemSelectedBorderThemeThickness\">4</x:Double>\n                    <x:Double x:Key=\"ListViewItemMinWidth\">88</x:Double>\n                    <x:Double x:Key=\"ListViewItemMinHeight\">40</x:Double>\n                    <Thickness x:Key=\"ListViewItemCompactSelectedBorderThemeThickness\">4</Thickness>\n                    <StaticResource x:Key=\"ListViewItemBorderBackground\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundPointerOver\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundPressed\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundSelected\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundSelectedPointerOver\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundSelectedPressed\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForegroundPointerOver\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForegroundPressed\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForegroundSelected\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForegroundSelectedPressed\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemForegroundSelectedPointerOver\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemFocusVisualPrimaryBrush\" ResourceKey=\"FocusStrokeColorOuterBrush\" />\n                    <StaticResource x:Key=\"ListViewItemFocusVisualSecondaryBrush\" ResourceKey=\"FocusStrokeColorInnerBrush\" />\n                    <StaticResource x:Key=\"ListViewItemFocusBorderBrush\" ResourceKey=\"FocusStrokeColorOuterBrush\" />\n                    <StaticResource x:Key=\"ListViewItemFocusSecondaryBorderBrush\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBrush\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxBrush\" ResourceKey=\"ControlAltFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemDragBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"ListViewItemDragForeground\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemPlaceholderBackground\" ResourceKey=\"ControlStrongFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"ListViewItemMultiArrangeOverlayTextBorder\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemMultiArrangeOverlayTextBackground\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <x:Boolean x:Key=\"ListViewItemSelectionCheckMarkVisualEnabled\">True</x:Boolean>\n                    <ListViewItemPresenterCheckMode x:Key=\"ListViewItemCheckMode\">Inline</ListViewItemPresenterCheckMode>\n                    <SolidColorBrush x:Key=\"ListViewItemCheckHintThemeBrush\" Color=\"#FF4617B4\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckSelectingThemeBrush\" Color=\"#FF4617B4\" />\n                    <SolidColorBrush x:Key=\"ListViewItemCheckThemeBrush\" Color=\"#FFFFFFFF\" />\n                    <SolidColorBrush x:Key=\"ListViewItemDragBackgroundThemeBrush\" Color=\"#994617B4\" />\n                    <SolidColorBrush x:Key=\"ListViewItemDragForegroundThemeBrush\" Color=\"White\" />\n                    <SolidColorBrush x:Key=\"ListViewItemFocusBorderThemeBrush\" Color=\"#FF000000\" />\n                    <SolidColorBrush x:Key=\"ListViewItemOverlayBackgroundThemeBrush\" Color=\"#A6000000\" />\n                    <SolidColorBrush x:Key=\"ListViewItemOverlaySecondaryForegroundThemeBrush\" Color=\"#99FFFFFF\" />\n                    <SolidColorBrush x:Key=\"ListViewItemOverlayForegroundThemeBrush\" Color=\"#FFFFFFFF\" />\n                    <SolidColorBrush x:Key=\"ListViewItemPlaceholderBackgroundThemeBrush\" Color=\"#FF3D3D3D\" />\n                    <SolidColorBrush x:Key=\"ListViewItemPointerOverBackgroundThemeBrush\" Color=\"#4D000000\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedBackgroundThemeBrush\" Color=\"#FF4617B4\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedForegroundThemeBrush\" Color=\"#FF000000\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedPointerOverBackgroundThemeBrush\" Color=\"#FF5F37BE\" />\n                    <SolidColorBrush x:Key=\"ListViewItemSelectedPointerOverBorderThemeBrush\" Color=\"#FF5F37BE\" />\n\n                    <CornerRadius x:Key=\"ListViewItemCornerRadius\">4</CornerRadius>\n                    <CornerRadius x:Key=\"ListViewItemCheckBoxCornerRadius\">3</CornerRadius>\n                    <CornerRadius x:Key=\"ListViewItemSelectionIndicatorCornerRadius\">1.5</CornerRadius>\n                    <StaticResource x:Key=\"ListViewItemCheckPressedBrush\" ResourceKey=\"TextOnAccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckDisabledBrush\" ResourceKey=\"TextOnAccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxPointerOverBrush\" ResourceKey=\"ControlAltFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxPressedBrush\" ResourceKey=\"ControlAltFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxDisabledBrush\" ResourceKey=\"ControlAltFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxSelectedBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxSelectedPointerOverBrush\" ResourceKey=\"AccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxSelectedPressedBrush\" ResourceKey=\"AccentFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxSelectedDisabledBrush\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxPointerOverBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxPressedBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemCheckBoxDisabledBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDisabledBrush\" />\n                    <StaticResource x:Key=\"ListViewItemBackgroundSelectedDisabled\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"ListViewItemSelectionIndicatorBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemSelectionIndicatorPointerOverBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemSelectionIndicatorPressedBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"ListViewItemSelectionIndicatorDisabledBrush\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                </ResourceDictionary>\n            </ResourceDictionary.ThemeDictionaries>\n\n            <x:Boolean x:Key=\"ListViewBaseItemRoundedChromeEnabled\">True</x:Boolean>\n\n            <Style BasedOn=\"{StaticResource DefaultListViewItemStyle}\" TargetType=\"ListViewItem\" />\n\n            <Style x:Key=\"DefaultListViewItemStyle\" TargetType=\"ListViewItem\">\n                <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\" />\n                <Setter Property=\"FontSize\" Value=\"{ThemeResource ControlContentThemeFontSize}\" />\n                <Setter Property=\"Background\" Value=\"{ThemeResource ListViewItemBackground}\" />\n                <Setter Property=\"Foreground\" Value=\"{ThemeResource ListViewItemForeground}\" />\n                <Setter Property=\"TabNavigation\" Value=\"Local\" />\n                <Setter Property=\"IsHoldingEnabled\" Value=\"True\" />\n                <Setter Property=\"Padding\" Value=\"16,0,12,0\" />\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n                <Setter Property=\"MinWidth\" Value=\"{ThemeResource ListViewItemMinWidth}\" />\n                <Setter Property=\"MinHeight\" Value=\"{ThemeResource ListViewItemMinHeight}\" />\n                <Setter Property=\"AllowDrop\" Value=\"False\" />\n                <Setter Property=\"UseSystemFocusVisuals\" Value=\"True\" />\n                <Setter Property=\"FocusVisualMargin\" Value=\"1\" />\n                <Setter Property=\"FocusVisualPrimaryBrush\" Value=\"{ThemeResource ListViewItemFocusVisualPrimaryBrush}\" />\n                <Setter Property=\"FocusVisualPrimaryThickness\" Value=\"2\" />\n                <Setter Property=\"FocusVisualSecondaryBrush\" Value=\"{ThemeResource ListViewItemFocusVisualSecondaryBrush}\" />\n                <Setter Property=\"FocusVisualSecondaryThickness\" Value=\"1\" />\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"ListViewItem\">\n                            <ListViewItemPresenter\n                                x:Name=\"Root\"\n                                HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                CheckBoxBorderBrush=\"{ThemeResource ListViewItemCheckBoxBorderBrush}\"\n                                CheckBoxBrush=\"{ThemeResource ListViewItemCheckBoxBrush}\"\n                                CheckBoxCornerRadius=\"{ThemeResource ListViewItemCheckBoxCornerRadius}\"\n                                CheckBoxDisabledBorderBrush=\"{ThemeResource ListViewItemCheckBoxDisabledBorderBrush}\"\n                                CheckBoxDisabledBrush=\"{ThemeResource ListViewItemCheckBoxDisabledBrush}\"\n                                CheckBoxPointerOverBorderBrush=\"{ThemeResource ListViewItemCheckBoxPointerOverBorderBrush}\"\n                                CheckBoxPointerOverBrush=\"{ThemeResource ListViewItemCheckBoxPointerOverBrush}\"\n                                CheckBoxPressedBorderBrush=\"{ThemeResource ListViewItemCheckBoxPressedBorderBrush}\"\n                                CheckBoxPressedBrush=\"{ThemeResource ListViewItemCheckBoxPressedBrush}\"\n                                CheckBoxSelectedBrush=\"{ThemeResource ListViewItemCheckBoxSelectedBrush}\"\n                                CheckBoxSelectedDisabledBrush=\"{ThemeResource ListViewItemCheckBoxSelectedDisabledBrush}\"\n                                CheckBoxSelectedPointerOverBrush=\"{ThemeResource ListViewItemCheckBoxSelectedPointerOverBrush}\"\n                                CheckBoxSelectedPressedBrush=\"{ThemeResource ListViewItemCheckBoxSelectedPressedBrush}\"\n                                CheckBrush=\"{ThemeResource ListViewItemCheckBrush}\"\n                                CheckDisabledBrush=\"{ThemeResource ListViewItemCheckDisabledBrush}\"\n                                CheckMode=\"{ThemeResource ListViewItemCheckMode}\"\n                                CheckPressedBrush=\"{ThemeResource ListViewItemCheckPressedBrush}\"\n                                ContentMargin=\"{TemplateBinding Padding}\"\n                                ContentTransitions=\"{TemplateBinding ContentTransitions}\"\n                                Control.IsTemplateFocusTarget=\"True\"\n                                CornerRadius=\"{ThemeResource ListViewItemCornerRadius}\"\n                                DisabledOpacity=\"{ThemeResource ListViewItemDisabledThemeOpacity}\"\n                                DragBackground=\"{ThemeResource ListViewItemDragBackground}\"\n                                DragForeground=\"{ThemeResource ListViewItemDragForeground}\"\n                                DragOpacity=\"{ThemeResource ListViewItemDragThemeOpacity}\"\n                                FocusBorderBrush=\"{ThemeResource ListViewItemFocusBorderBrush}\"\n                                FocusSecondaryBorderBrush=\"{ThemeResource ListViewItemFocusSecondaryBorderBrush}\"\n                                FocusVisualMargin=\"{TemplateBinding FocusVisualMargin}\"\n                                FocusVisualPrimaryBrush=\"{TemplateBinding FocusVisualPrimaryBrush}\"\n                                FocusVisualPrimaryThickness=\"{TemplateBinding FocusVisualPrimaryThickness}\"\n                                FocusVisualSecondaryBrush=\"{TemplateBinding FocusVisualSecondaryBrush}\"\n                                FocusVisualSecondaryThickness=\"{TemplateBinding FocusVisualSecondaryThickness}\"\n                                PlaceholderBackground=\"{ThemeResource ListViewItemPlaceholderBackground}\"\n                                PointerOverBackground=\"{ThemeResource ListViewItemBackgroundPointerOver}\"\n                                PointerOverForeground=\"{ThemeResource ListViewItemForegroundPointerOver}\"\n                                PressedBackground=\"{ThemeResource ListViewItemBackgroundPressed}\"\n                                ReorderHintOffset=\"{ThemeResource ListViewItemReorderHintThemeOffset}\"\n                                SelectedBackground=\"{ThemeResource ListViewItemBackgroundSelected}\"\n                                SelectedDisabledBackground=\"{ThemeResource ListViewItemBackgroundSelectedDisabled}\"\n                                SelectedForeground=\"{ThemeResource ListViewItemForegroundSelected}\"\n                                SelectedPointerOverBackground=\"{ThemeResource ListViewItemBackgroundSelectedPointerOver}\"\n                                SelectedPressedBackground=\"{ThemeResource ListViewItemBackgroundSelectedPressed}\"\n                                SelectionCheckMarkVisualEnabled=\"{ThemeResource ListViewItemSelectionCheckMarkVisualEnabled}\"\n                                SelectionIndicatorBrush=\"{ThemeResource ListViewItemSelectionIndicatorBrush}\"\n                                SelectionIndicatorCornerRadius=\"{ThemeResource ListViewItemSelectionIndicatorCornerRadius}\"\n                                SelectionIndicatorDisabledBrush=\"{ThemeResource ListViewItemSelectionIndicatorDisabledBrush}\"\n                                SelectionIndicatorPointerOverBrush=\"{ThemeResource ListViewItemSelectionIndicatorPointerOverBrush}\"\n                                SelectionIndicatorPressedBrush=\"{ThemeResource ListViewItemSelectionIndicatorPressedBrush}\"\n                                SelectionIndicatorVisualEnabled=\"{ThemeResource ListViewItemSelectionIndicatorVisualEnabled}\" />\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ListViewItemExpanded\" TargetType=\"ListViewItem\">\n                <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\" />\n                <Setter Property=\"FontSize\" Value=\"{ThemeResource ControlContentThemeFontSize}\" />\n                <Setter Property=\"BorderBrush\" Value=\"{x:Null}\" />\n                <Setter Property=\"BorderThickness\" Value=\"0\" />\n                <Setter Property=\"Background\" Value=\"Transparent\" />\n                <Setter Property=\"Foreground\" Value=\"{ThemeResource ListViewItemForeground}\" />\n                <Setter Property=\"TabNavigation\" Value=\"Local\" />\n                <Setter Property=\"IsHoldingEnabled\" Value=\"True\" />\n                <Setter Property=\"Padding\" Value=\"12,0,12,0\" />\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\" />\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n                <Setter Property=\"MinWidth\" Value=\"{ThemeResource ListViewItemMinWidth}\" />\n                <Setter Property=\"MinHeight\" Value=\"{ThemeResource ListViewItemMinHeight}\" />\n                <Setter Property=\"AllowDrop\" Value=\"False\" />\n                <Setter Property=\"UseSystemFocusVisuals\" Value=\"{StaticResource UseSystemFocusVisuals}\" />\n                <Setter Property=\"FocusVisualMargin\" Value=\"0\" />\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"ListViewItem\">\n                            <Grid\n                                x:Name=\"ContentBorder\"\n                                Background=\"{TemplateBinding Background}\"\n                                BorderBrush=\"{TemplateBinding BorderBrush}\"\n                                BorderThickness=\"{TemplateBinding BorderThickness}\"\n                                Control.IsTemplateFocusTarget=\"True\"\n                                CornerRadius=\"{TemplateBinding CornerRadius}\"\n                                FocusVisualMargin=\"{TemplateBinding FocusVisualMargin}\"\n                                RenderTransformOrigin=\"0.5,0.5\">\n                                <Grid.RenderTransform>\n                                    <ScaleTransform x:Name=\"ContentBorderScale\" />\n                                </Grid.RenderTransform>\n                                <Rectangle\n                                    x:Name=\"BorderBackground\"\n                                    Control.IsTemplateFocusTarget=\"True\"\n                                    Fill=\"{ThemeResource ListViewItemBorderBackground}\"\n                                    IsHitTestVisible=\"False\"\n                                    Opacity=\"0\" />\n                                <Grid\n                                    x:Name=\"ContentPresenterGrid\"\n                                    Margin=\"0,0,0,0\"\n                                    Background=\"Transparent\">\n                                    <Grid.RenderTransform>\n                                        <TranslateTransform x:Name=\"ContentPresenterTranslateTransform\" />\n                                    </Grid.RenderTransform>\n                                    <ContentPresenter\n                                        x:Name=\"ContentPresenter\"\n                                        Margin=\"{TemplateBinding Padding}\"\n                                        HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                        VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                        Content=\"{TemplateBinding Content}\"\n                                        ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                        ContentTransitions=\"{TemplateBinding ContentTransitions}\" />\n                                </Grid>\n                                <!--\n                                    The 'Xg' text simulates the amount of space one line of text will occupy.\n                                    In the DataPlaceholder state, the Content is not loaded yet so we\n                                    approximate the size of the item using placeholder text.\n                                -->\n                                <TextBlock\n                                    x:Name=\"PlaceholderTextBlock\"\n                                    Margin=\"{TemplateBinding Padding}\"\n                                    AutomationProperties.AccessibilityView=\"Raw\"\n                                    Foreground=\"{x:Null}\"\n                                    IsHitTestVisible=\"False\"\n                                    Opacity=\"0\"\n                                    Text=\"Xg\" />\n                                <Rectangle\n                                    x:Name=\"PlaceholderRect\"\n                                    Fill=\"{ThemeResource ListViewItemPlaceholderBackground}\"\n                                    Visibility=\"Collapsed\" />\n                                <Border\n                                    x:Name=\"MultiSelectSquare\"\n                                    Width=\"20\"\n                                    Height=\"20\"\n                                    Margin=\"12,0,0,0\"\n                                    HorizontalAlignment=\"Left\"\n                                    VerticalAlignment=\"Center\"\n                                    BorderBrush=\"{ThemeResource ListViewItemCheckBrush}\"\n                                    BorderThickness=\"2\"\n                                    Visibility=\"Collapsed\">\n                                    <Border.Clip>\n                                        <RectangleGeometry Rect=\"0,0,20,20\">\n                                            <RectangleGeometry.Transform>\n                                                <TranslateTransform x:Name=\"MultiSelectClipTransform\" />\n                                            </RectangleGeometry.Transform>\n                                        </RectangleGeometry>\n                                    </Border.Clip>\n                                    <Border.RenderTransform>\n                                        <TranslateTransform x:Name=\"MultiSelectCheckBoxTransform\" />\n                                    </Border.RenderTransform>\n                                    <FontIcon\n                                        x:Name=\"MultiSelectCheck\"\n                                        FontFamily=\"{ThemeResource SymbolThemeFontFamily}\"\n                                        FontSize=\"16\"\n                                        Foreground=\"{ThemeResource ListViewItemCheckBrush}\"\n                                        Glyph=\"&#xE73E;\"\n                                        Opacity=\"0\"\n                                        Visibility=\"Collapsed\" />\n                                </Border>\n                                <Border\n                                    x:Name=\"MultiArrangeOverlayTextBorder\"\n                                    Height=\"20\"\n                                    MinWidth=\"20\"\n                                    Margin=\"12,0,0,0\"\n                                    HorizontalAlignment=\"Left\"\n                                    VerticalAlignment=\"Center\"\n                                    Background=\"{ThemeResource ListViewItemMultiArrangeOverlayTextBackground}\"\n                                    BorderBrush=\"{ThemeResource ListViewItemMultiArrangeOverlayTextBorder}\"\n                                    BorderThickness=\"2\"\n                                    IsHitTestVisible=\"False\"\n                                    Opacity=\"0\">\n                                    <TextBlock\n                                        x:Name=\"MultiArrangeOverlayText\"\n                                        HorizontalAlignment=\"Center\"\n                                        VerticalAlignment=\"Center\"\n                                        AutomationProperties.AccessibilityView=\"Raw\"\n                                        IsHitTestVisible=\"False\"\n                                        Opacity=\"0\"\n                                        Style=\"{ThemeResource CaptionTextBlockStyle}\"\n                                        Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.DragItemsCount}\" />\n                                </Border>\n\n                                <VisualStateManager.VisualStateGroups>\n                                    <VisualStateGroup x:Name=\"CommonStates\">\n                                        <VisualState x:Name=\"Normal\" />\n\n                                        <VisualState x:Name=\"PointerOver\">\n\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"BorderBackground\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderBackground\" Storyboard.TargetProperty=\"Fill\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemBackgroundPointerOver}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundPointerOver}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectSquare\" Storyboard.TargetProperty=\"BorderBrush\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundPointerOver}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectCheck\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundPointerOver}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"Pressed\">\n\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"BorderBackground\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderBackground\" Storyboard.TargetProperty=\"Fill\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemBackgroundPressed}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundPressed}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectSquare\" Storyboard.TargetProperty=\"BorderBrush\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundPressed}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectCheck\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundPressed}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"Selected\">\n\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"MultiSelectCheck\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0:0:0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"BorderBackground\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderBackground\" Storyboard.TargetProperty=\"Fill\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemBackgroundSelected}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundSelected}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectSquare\" Storyboard.TargetProperty=\"BorderBrush\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundSelected}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectCheck\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundSelected}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"PointerOverSelected\">\n\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"MultiSelectCheck\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0:0:0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"BorderBackground\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderBackground\" Storyboard.TargetProperty=\"Fill\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemBackgroundSelectedPointerOver}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundSelectedPointerOver}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectSquare\" Storyboard.TargetProperty=\"BorderBrush\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundSelectedPointerOver}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectCheck\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundSelectedPointerOver}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"PressedSelected\">\n\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"MultiSelectCheck\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0:0:0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"BorderBackground\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderBackground\" Storyboard.TargetProperty=\"Fill\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemBackgroundSelectedPressed}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundSelectedPressed}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectSquare\" Storyboard.TargetProperty=\"BorderBrush\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundSelectedPressed}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectCheck\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListViewItemForegroundSelectedPressed}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n\n                                    </VisualStateGroup>\n\n                                    <VisualStateGroup x:Name=\"DisabledStates\">\n                                        <VisualState x:Name=\"Enabled\" />\n\n                                        <VisualState x:Name=\"Disabled\">\n\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"ContentBorder\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"{ThemeResource ListViewItemDisabledThemeOpacity}\"\n                                                    Duration=\"0\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                    </VisualStateGroup>\n\n                                    <VisualStateGroup x:Name=\"MultiSelectStates\">\n                                        <VisualState x:Name=\"MultiSelectDisabled\">\n\n                                            <Storyboard>\n                                                <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectCheckBoxTransform\" Storyboard.TargetProperty=\"X\">\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"0\" />\n                                                    <SplineDoubleKeyFrame\n                                                        KeySpline=\"0.1,0.9,0.2,1\"\n                                                        KeyTime=\"0:0:0.333\"\n                                                        Value=\"-32\" />\n                                                </DoubleAnimationUsingKeyFrames>\n                                                <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectClipTransform\" Storyboard.TargetProperty=\"X\">\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"0\" />\n                                                    <SplineDoubleKeyFrame\n                                                        KeySpline=\"0.1,0.9,0.2,1\"\n                                                        KeyTime=\"0:0:0.333\"\n                                                        Value=\"32\" />\n                                                </DoubleAnimationUsingKeyFrames>\n                                                <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenterTranslateTransform\" Storyboard.TargetProperty=\"X\">\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"32\" />\n                                                    <SplineDoubleKeyFrame\n                                                        KeySpline=\"0.1,0.9,0.2,1\"\n                                                        KeyTime=\"0:0:0.333\"\n                                                        Value=\"0\" />\n                                                </DoubleAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectSquare\" Storyboard.TargetProperty=\"Visibility\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\" />\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0:0:0.333\" Value=\"Collapsed\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"MultiSelectEnabled\">\n\n                                            <Storyboard>\n                                                <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectCheckBoxTransform\" Storyboard.TargetProperty=\"X\">\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"-32\" />\n                                                    <SplineDoubleKeyFrame\n                                                        KeySpline=\"0.1,0.9,0.2,1\"\n                                                        KeyTime=\"0:0:0.333\"\n                                                        Value=\"0\" />\n                                                </DoubleAnimationUsingKeyFrames>\n                                                <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectClipTransform\" Storyboard.TargetProperty=\"X\">\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"32\" />\n                                                    <SplineDoubleKeyFrame\n                                                        KeySpline=\"0.1,0.9,0.2,1\"\n                                                        KeyTime=\"0:0:0.333\"\n                                                        Value=\"0\" />\n                                                </DoubleAnimationUsingKeyFrames>\n                                                <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenterTranslateTransform\" Storyboard.TargetProperty=\"X\">\n                                                    <EasingDoubleKeyFrame KeyTime=\"0:0:0\" Value=\"-32\" />\n                                                    <SplineDoubleKeyFrame\n                                                        KeySpline=\"0.1,0.9,0.2,1\"\n                                                        KeyTime=\"0:0:0.333\"\n                                                        Value=\"0\" />\n                                                </DoubleAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectSquare\" Storyboard.TargetProperty=\"Visibility\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MultiSelectCheck\" Storyboard.TargetProperty=\"Visibility\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentPresenterGrid\" Storyboard.TargetProperty=\"Margin\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"32,0,0,0\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n\n                                    </VisualStateGroup>\n\n                                    <VisualStateGroup x:Name=\"DataVirtualizationStates\">\n                                        <VisualState x:Name=\"DataAvailable\" />\n\n                                        <VisualState x:Name=\"DataPlaceholder\">\n\n                                            <Storyboard>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PlaceholderTextBlock\" Storyboard.TargetProperty=\"Visibility\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"PlaceholderRect\" Storyboard.TargetProperty=\"Visibility\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n\n                                    </VisualStateGroup>\n\n                                    <VisualStateGroup x:Name=\"ReorderHintStates\">\n                                        <VisualState x:Name=\"NoReorderHint\" />\n\n                                        <VisualState x:Name=\"BottomReorderHint\">\n\n                                            <Storyboard>\n                                                <DragOverThemeAnimation\n                                                    Direction=\"Bottom\"\n                                                    ToOffset=\"{ThemeResource ListViewItemReorderHintThemeOffset}\"\n                                                    TargetName=\"ContentBorder\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"TopReorderHint\">\n\n                                            <Storyboard>\n                                                <DragOverThemeAnimation\n                                                    Direction=\"Top\"\n                                                    ToOffset=\"{ThemeResource ListViewItemReorderHintThemeOffset}\"\n                                                    TargetName=\"ContentBorder\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"RightReorderHint\">\n\n                                            <Storyboard>\n                                                <DragOverThemeAnimation\n                                                    Direction=\"Right\"\n                                                    ToOffset=\"{ThemeResource ListViewItemReorderHintThemeOffset}\"\n                                                    TargetName=\"ContentBorder\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"LeftReorderHint\">\n\n                                            <Storyboard>\n                                                <DragOverThemeAnimation\n                                                    Direction=\"Left\"\n                                                    ToOffset=\"{ThemeResource ListViewItemReorderHintThemeOffset}\"\n                                                    TargetName=\"ContentBorder\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualStateGroup.Transitions>\n                                            <VisualTransition GeneratedDuration=\"0:0:0.2\" To=\"NoReorderHint\" />\n                                        </VisualStateGroup.Transitions>\n\n                                    </VisualStateGroup>\n\n                                    <VisualStateGroup x:Name=\"DragStates\">\n                                        <VisualState x:Name=\"NotDragging\" />\n\n                                        <VisualState x:Name=\"Dragging\">\n\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"ContentBorder\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"{ThemeResource ListViewItemDragThemeOpacity}\"\n                                                    Duration=\"0\" />\n                                                <DragItemThemeAnimation TargetName=\"ContentBorder\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"DraggingTarget\" />\n\n                                        <VisualState x:Name=\"MultipleDraggingPrimary\">\n\n                                            <Storyboard>\n                                                <!--\n                                                    These two Opacity animations are required - the FadeInThemeAnimations\n                                                    on the same elements animate an internal Opacity.\n                                                -->\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"MultiArrangeOverlayText\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"MultiArrangeOverlayTextBorder\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"MultiSelectSquare\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"0\"\n                                                    Duration=\"0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"MultiSelectCheck\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"0\"\n                                                    Duration=\"0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"ContentBorder\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"{ThemeResource ListViewItemDragThemeOpacity}\"\n                                                    Duration=\"0\" />\n                                                <FadeInThemeAnimation TargetName=\"MultiArrangeOverlayText\" />\n                                                <FadeInThemeAnimation TargetName=\"MultiArrangeOverlayTextBorder\" />\n                                                <DragItemThemeAnimation TargetName=\"ContentBorder\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"MultipleDraggingSecondary\" />\n\n                                        <VisualState x:Name=\"DraggedPlaceholder\" />\n\n                                        <VisualState x:Name=\"Reordering\">\n\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"ContentBorder\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"{ThemeResource ListViewItemReorderThemeOpacity}\"\n                                                    Duration=\"0:0:0.240\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"ReorderingTarget\">\n\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"ContentBorder\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"{ThemeResource ListViewItemReorderTargetThemeOpacity}\"\n                                                    Duration=\"0:0:0.240\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"ContentBorderScale\"\n                                                    Storyboard.TargetProperty=\"ScaleX\"\n                                                    To=\"{ThemeResource ListViewItemReorderTargetThemeScale}\"\n                                                    Duration=\"0:0:0.240\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"ContentBorderScale\"\n                                                    Storyboard.TargetProperty=\"ScaleY\"\n                                                    To=\"{ThemeResource ListViewItemReorderTargetThemeScale}\"\n                                                    Duration=\"0:0:0.240\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"MultipleReorderingPrimary\">\n\n                                            <Storyboard>\n                                                <!--\n                                                    These two Opacity animations are required - the FadeInThemeAnimations\n                                                    on the same elements animate an internal Opacity.\n                                                -->\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"MultiArrangeOverlayText\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"MultiArrangeOverlayTextBorder\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"MultiSelectSquare\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"0\"\n                                                    Duration=\"0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"MultiSelectCheck\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"0\"\n                                                    Duration=\"0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"ContentBorder\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"{ThemeResource ListViewItemDragThemeOpacity}\"\n                                                    Duration=\"0:0:0.240\" />\n                                                <FadeInThemeAnimation TargetName=\"MultiArrangeOverlayText\" />\n                                                <FadeInThemeAnimation TargetName=\"MultiArrangeOverlayTextBorder\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"ReorderedPlaceholder\">\n\n                                            <Storyboard>\n                                                <FadeOutThemeAnimation TargetName=\"ContentBorder\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualState x:Name=\"DragOver\">\n\n                                            <Storyboard>\n                                                <DropTargetItemThemeAnimation TargetName=\"ContentBorder\" />\n                                            </Storyboard>\n                                        </VisualState>\n\n                                        <VisualStateGroup.Transitions>\n                                            <VisualTransition GeneratedDuration=\"0:0:0.2\" To=\"NotDragging\" />\n                                        </VisualStateGroup.Transitions>\n\n                                    </VisualStateGroup>\n\n                                </VisualStateManager.VisualStateGroups>\n                            </Grid>\n\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style x:Key=\"ListPickerFlyoutPresenterItemStyle\" TargetType=\"ListViewItem\">\n                <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\" />\n                <Setter Property=\"FontSize\" Value=\"{ThemeResource ControlContentThemeFontSize}\" />\n                <Setter Property=\"Background\" Value=\"Transparent\" />\n                <Setter Property=\"TabNavigation\" Value=\"Local\" />\n                <Setter Property=\"IsHoldingEnabled\" Value=\"False\" />\n                <Setter Property=\"Margin\" Value=\"{ThemeResource ListPickerFlyoutPresenterItemMargin}\" />\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Left\" />\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Top\" />\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"ListViewItem\">\n                            <Border x:Name=\"OuterContainer\" RenderTransformOrigin=\"0.5,0.5\">\n                                <Border.RenderTransform>\n                                    <ScaleTransform x:Name=\"ContentScaleTransform\" />\n                                </Border.RenderTransform>\n                                <Grid x:Name=\"ReorderHintContent\" Background=\"Transparent\">\n                                    <Border\n                                        x:Name=\"CheckboxOuterContainer\"\n                                        Margin=\"{ThemeResource ListPickerFlyoutPresenterMultiselectCheckBoxMargin}\"\n                                        HorizontalAlignment=\"Left\"\n                                        VerticalAlignment=\"Top\">\n                                        <Border.Clip>\n                                            <RectangleGeometry Rect=\"0,0,25.5,25.5\" />\n                                        </Border.Clip>\n                                        <Grid x:Name=\"CheckboxContainer\">\n                                            <Grid.RenderTransform>\n                                                <TranslateTransform x:Name=\"CheckboxContainerTranslateTransform\" X=\"{ThemeResource ListViewItemContentOffsetX}\" />\n                                            </Grid.RenderTransform>\n                                            <Rectangle\n                                                x:Name=\"NormalRectangle\"\n                                                Width=\"25.5\"\n                                                Height=\"25.5\"\n                                                Fill=\"{ThemeResource CheckBoxBackgroundThemeBrush}\"\n                                                Stroke=\"{ThemeResource CheckBoxBorderThemeBrush}\"\n                                                StrokeThickness=\"{ThemeResource CheckBoxBorderThemeThickness}\" />\n                                            <Path\n                                                x:Name=\"CheckGlyph\"\n                                                Width=\"18.5\"\n                                                Height=\"17\"\n                                                HorizontalAlignment=\"Center\"\n                                                VerticalAlignment=\"Center\"\n                                                Data=\"M0,123 L39,93 L124,164 L256,18 L295,49 L124,240 z\"\n                                                Fill=\"{ThemeResource CheckBoxForegroundThemeBrush}\"\n                                                FlowDirection=\"LeftToRight\"\n                                                IsHitTestVisible=\"False\"\n                                                Opacity=\"0\"\n                                                Stretch=\"Fill\"\n                                                StrokeLineJoin=\"Round\"\n                                                StrokeThickness=\"2.5\" />\n                                        </Grid>\n                                    </Border>\n                                    <Border x:Name=\"ContentContainer\">\n                                        <Border\n                                            x:Name=\"ContentBorder\"\n                                            Background=\"{TemplateBinding Background}\"\n                                            BorderBrush=\"{TemplateBinding BorderBrush}\"\n                                            BorderThickness=\"{TemplateBinding BorderThickness}\">\n                                            <Border.RenderTransform>\n                                                <TranslateTransform x:Name=\"ContentBorderTranslateTransform\" />\n                                            </Border.RenderTransform>\n                                            <Grid>\n                                                <ContentPresenter\n                                                    x:Name=\"contentPresenter\"\n                                                    Margin=\"{TemplateBinding Padding}\"\n                                                    HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                                    VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                                    Content=\"{TemplateBinding Content}\"\n                                                    ContentTemplate=\"{TemplateBinding ContentTemplate}\"\n                                                    ContentTransitions=\"{TemplateBinding ContentTransitions}\"\n                                                    Style=\"{ThemeResource FlyoutPickerListViewItemContentPresenterStyle}\" />\n                                                <!--\n                                                    The 'Xg' text simulates the amount of space one line of text will occupy.\n                                                    In the DataPlaceholder state, the Content is not loaded yet so we\n                                                    approximate the size of the item using placeholder text.\n                                                -->\n                                                <TextBlock\n                                                    x:Name=\"PlaceholderTextBlock\"\n                                                    Margin=\"{TemplateBinding Padding}\"\n                                                    AutomationProperties.AccessibilityView=\"Raw\"\n                                                    Foreground=\"{x:Null}\"\n                                                    IsHitTestVisible=\"False\"\n                                                    Opacity=\"0\"\n                                                    Text=\"Xg\" />\n                                                <Rectangle\n                                                    x:Name=\"PlaceholderRect\"\n                                                    Fill=\"{ThemeResource FlyoutBackgroundThemeBrush}\"\n                                                    IsHitTestVisible=\"False\"\n                                                    Visibility=\"Collapsed\" />\n                                            </Grid>\n                                        </Border>\n                                    </Border>\n                                    <Border\n                                        x:Name=\"SelectedBorder\"\n                                        BorderBrush=\"{ThemeResource ListViewItemSelectedBackgroundThemeBrush}\"\n                                        BorderThickness=\"{ThemeResource GridViewItemMultiselectBorderThickness}\"\n                                        IsHitTestVisible=\"False\"\n                                        Opacity=\"0\">\n                                        <Grid\n                                            x:Name=\"SelectedCheckMark\"\n                                            Width=\"34\"\n                                            Height=\"34\"\n                                            HorizontalAlignment=\"Right\"\n                                            VerticalAlignment=\"Top\"\n                                            Opacity=\"0\">\n                                            <Path\n                                                x:Name=\"SelectedEarmark\"\n                                                Data=\"M0,0 L40,0 L40,40 z\"\n                                                Fill=\"{ThemeResource ListViewItemSelectedBackgroundThemeBrush}\"\n                                                Stretch=\"Fill\" />\n                                            <Path\n                                                x:Name=\"SelectedGlyph\"\n                                                Width=\"17\"\n                                                Height=\"14.5\"\n                                                Margin=\"0,1,1,0\"\n                                                HorizontalAlignment=\"Right\"\n                                                VerticalAlignment=\"Top\"\n                                                Data=\"M0,123 L39,93 L124,164 L256,18 L295,49 L124,240 z\"\n                                                Fill=\"{ThemeResource ListViewItemCheckThemeBrush}\"\n                                                FlowDirection=\"LeftToRight\"\n                                                Stretch=\"Fill\" />\n                                        </Grid>\n                                    </Border>\n                                </Grid>\n                                <VisualStateManager.VisualStateGroups>\n                                    <VisualStateGroup x:Name=\"CommonStates\">\n                                        <VisualState x:Name=\"Normal\" />\n                                        <VisualState x:Name=\"Pressed\" />\n                                        <VisualState x:Name=\"CheckboxPressed\" />\n                                        <VisualState x:Name=\"Disabled\">\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"contentPresenter\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"{ThemeResource ListViewItemDisabledThemeOpacity}\"\n                                                    Duration=\"0\" />\n                                            </Storyboard>\n                                        </VisualState>\n                                    </VisualStateGroup>\n                                    <VisualStateGroup x:Name=\"SelectionStates\">\n                                        <VisualState x:Name=\"Unselected\" />\n                                        <VisualState x:Name=\"Selected\">\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"CheckGlyph\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"SelectedCheckMark\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <ObjectAnimationUsingKeyFrames\n                                                    Storyboard.TargetName=\"contentPresenter\"\n                                                    Storyboard.TargetProperty=\"Foreground\"\n                                                    Duration=\"0\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListPickerFlyoutPresenterSelectedItemForegroundThemeBrush}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentBorder\" Storyboard.TargetProperty=\"Background\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListPickerFlyoutPresenterSelectedItemBackgroundThemeBrush}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n                                        <VisualState x:Name=\"SelectedUnfocused\">\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"CheckGlyph\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"SelectedCheckMark\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    To=\"1\"\n                                                    Duration=\"0\" />\n                                            </Storyboard>\n                                        </VisualState>\n                                    </VisualStateGroup>\n                                    <VisualStateGroup x:Name=\"DataVirtualizationStates\">\n                                        <VisualState x:Name=\"DataAvailable\" />\n                                        <VisualState x:Name=\"DataPlaceholder\">\n                                            <Storyboard>\n                                                <ObjectAnimationUsingKeyFrames\n                                                    Storyboard.TargetName=\"PlaceholderTextBlock\"\n                                                    Storyboard.TargetProperty=\"Visibility\"\n                                                    Duration=\"0\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames\n                                                    Storyboard.TargetName=\"PlaceholderRect\"\n                                                    Storyboard.TargetProperty=\"Visibility\"\n                                                    Duration=\"0\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n                                    </VisualStateGroup>\n                                    <VisualStateGroup x:Name=\"MultiSelectStates\">\n                                        <VisualState x:Name=\"NoMultiSelect\" />\n                                        <VisualState x:Name=\"ListMultiSelect\">\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"CheckboxContainerTranslateTransform\"\n                                                    Storyboard.TargetProperty=\"X\"\n                                                    To=\"0\"\n                                                    Duration=\"0\" />\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"ContentBorderTranslateTransform\"\n                                                    Storyboard.TargetProperty=\"X\"\n                                                    To=\"25.5\"\n                                                    Duration=\"0\" />\n                                            </Storyboard>\n                                        </VisualState>\n                                        <VisualState x:Name=\"GridMultiSelect\" />\n                                        <VisualStateGroup.Transitions>\n                                            <VisualTransition\n                                                GeneratedDuration=\"0:0:0.15\"\n                                                From=\"ListMultiSelect\"\n                                                To=\"NoMultiSelect\" />\n                                            <VisualTransition\n                                                GeneratedDuration=\"0:0:0.15\"\n                                                From=\"NoMultiSelect\"\n                                                To=\"ListMultiSelect\" />\n                                        </VisualStateGroup.Transitions>\n                                    </VisualStateGroup>\n                                    <VisualStateGroup x:Name=\"HighlightStates\">\n                                        <VisualState x:Name=\"NoHighlight\" />\n                                        <VisualState x:Name=\"Highlighted\">\n                                            <Storyboard>\n                                                <ObjectAnimationUsingKeyFrames\n                                                    Storyboard.TargetName=\"contentPresenter\"\n                                                    Storyboard.TargetProperty=\"Foreground\"\n                                                    Duration=\"0\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListPickerFlyoutPresenterSelectedItemForegroundThemeBrush}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentBorder\" Storyboard.TargetProperty=\"Background\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource ListPickerFlyoutPresenterSelectedItemBackgroundThemeBrush}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n                                    </VisualStateGroup>\n                                </VisualStateManager.VisualStateGroups>\n                            </Border>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n        </ResourceDictionary>\n        <ResourceDictionary>\n            <ResourceDictionary.ThemeDictionaries>\n                <ResourceDictionary x:Key=\"Default\">\n                    <CornerRadius x:Key=\"GridViewItemCornerRadius\">4</CornerRadius>\n                    <CornerRadius x:Key=\"GridViewItemCheckBoxCornerRadius\">3</CornerRadius>\n                    <Thickness x:Key=\"GridViewItemSelectedBorderThickness\">2</Thickness>\n                    <StaticResource x:Key=\"GridViewItemBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"GridViewItemForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemPointerOverBorderBrush\" ResourceKey=\"ControlStrokeColorOnAccentTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemSelectedBorderBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemSelectedPointerOverBorderBrush\" ResourceKey=\"AccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemSelectedPressedBorderBrush\" ResourceKey=\"AccentFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemSelectedDisabledBorderBrush\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemSelectedInnerBorderBrush\" ResourceKey=\"ControlSolidFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBrush\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckPressedBrush\" ResourceKey=\"TextOnAccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckDisabledBrush\" ResourceKey=\"TextOnAccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxBrush\" ResourceKey=\"ControlOnImageFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxPointerOverBrush\" ResourceKey=\"ControlOnImageFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxPressedBrush\" ResourceKey=\"ControlOnImageFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxDisabledBrush\" ResourceKey=\"ControlOnImageFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxSelectedBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxSelectedPointerOverBrush\" ResourceKey=\"AccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxSelectedPressedBrush\" ResourceKey=\"AccentFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxSelectedDisabledBrush\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxPointerOverBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxPressedBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxDisabledBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemFocusVisualPrimaryBrush\" ResourceKey=\"FocusStrokeColorOuterBrush\" />\n                    <StaticResource x:Key=\"GridViewItemFocusVisualSecondaryBrush\" ResourceKey=\"FocusStrokeColorInnerBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundPointerOver\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemForegroundPointerOver\" ResourceKey=\"TextFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundSelected\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemForegroundSelected\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundSelectedPointerOver\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundPressed\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundSelectedPressed\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundSelectedDisabled\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                </ResourceDictionary>\n                <ResourceDictionary x:Key=\"HighContrast\">\n                    <CornerRadius x:Key=\"GridViewItemCornerRadius\">4</CornerRadius>\n                    <CornerRadius x:Key=\"GridViewItemCheckBoxCornerRadius\">3</CornerRadius>\n                    <Thickness x:Key=\"GridViewItemSelectedBorderThickness\">2</Thickness>\n                    <SolidColorBrush x:Key=\"GridViewItemBackground\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemForeground\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemPointerOverBorderBrush\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemSelectedBorderBrush\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemSelectedPointerOverBorderBrush\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemSelectedPressedBorderBrush\" Color=\"{ThemeResource SystemColorHighlightColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemSelectedDisabledBorderBrush\" Color=\"{ThemeResource SystemColorGrayTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemSelectedInnerBorderBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckPressedBrush\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckDisabledBrush\" Color=\"{ThemeResource SystemColorGrayTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxBrush\" Color=\"{ThemeResource SystemColorButtonFaceColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxPointerOverBrush\" Color=\"{ThemeResource SystemColorButtonFaceColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxPressedBrush\" Color=\"{ThemeResource SystemColorButtonFaceColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxDisabledBrush\" Color=\"{ThemeResource SystemColorButtonFaceColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxSelectedBrush\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxSelectedPointerOverBrush\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxSelectedPressedBrush\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxSelectedDisabledBrush\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxBorderBrush\" Color=\"{ThemeResource SystemColorButtonTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxPointerOverBorderBrush\" Color=\"{ThemeResource SystemColorButtonTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxPressedBorderBrush\" Color=\"{ThemeResource SystemColorButtonTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemCheckBoxDisabledBorderBrush\" Color=\"{ThemeResource SystemColorButtonTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemFocusVisualPrimaryBrush\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemFocusVisualSecondaryBrush\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemBackgroundPointerOver\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemForegroundPointerOver\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemBackgroundSelected\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemForegroundSelected\" Color=\"{ThemeResource SystemColorWindowTextColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemBackgroundSelectedPointerOver\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemBackgroundPressed\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemBackgroundSelectedPressed\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                    <SolidColorBrush x:Key=\"GridViewItemBackgroundSelectedDisabled\" Color=\"{ThemeResource SystemColorWindowColor}\" />\n                </ResourceDictionary>\n                <ResourceDictionary x:Key=\"Light\">\n                    <CornerRadius x:Key=\"GridViewItemCornerRadius\">4</CornerRadius>\n                    <CornerRadius x:Key=\"GridViewItemCheckBoxCornerRadius\">3</CornerRadius>\n                    <Thickness x:Key=\"GridViewItemSelectedBorderThickness\">2</Thickness>\n                    <StaticResource x:Key=\"GridViewItemBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"GridViewItemForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemPointerOverBorderBrush\" ResourceKey=\"ControlStrokeColorOnAccentTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemSelectedBorderBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemSelectedPointerOverBorderBrush\" ResourceKey=\"AccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemSelectedPressedBorderBrush\" ResourceKey=\"AccentFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemSelectedDisabledBorderBrush\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemSelectedInnerBorderBrush\" ResourceKey=\"ControlSolidFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBrush\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckPressedBrush\" ResourceKey=\"TextOnAccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckDisabledBrush\" ResourceKey=\"TextOnAccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxBrush\" ResourceKey=\"ControlOnImageFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxPointerOverBrush\" ResourceKey=\"ControlOnImageFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxPressedBrush\" ResourceKey=\"ControlOnImageFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxDisabledBrush\" ResourceKey=\"ControlOnImageFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxSelectedBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxSelectedPointerOverBrush\" ResourceKey=\"AccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxSelectedPressedBrush\" ResourceKey=\"AccentFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxSelectedDisabledBrush\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxPointerOverBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxPressedBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemCheckBoxDisabledBorderBrush\" ResourceKey=\"ControlStrongStrokeColorDisabledBrush\" />\n                    <StaticResource x:Key=\"GridViewItemFocusVisualPrimaryBrush\" ResourceKey=\"FocusStrokeColorOuterBrush\" />\n                    <StaticResource x:Key=\"GridViewItemFocusVisualSecondaryBrush\" ResourceKey=\"FocusStrokeColorInnerBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundPointerOver\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemForegroundPointerOver\" ResourceKey=\"TextFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundSelected\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemForegroundSelected\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundSelectedPointerOver\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundPressed\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundSelectedPressed\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"GridViewItemBackgroundSelectedDisabled\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                </ResourceDictionary>\n            </ResourceDictionary.ThemeDictionaries>\n\n            <Style BasedOn=\"{StaticResource DefaultGridViewItemStyle}\" TargetType=\"GridViewItem\" />\n\n            <Style x:Key=\"DefaultGridViewItemStyle\" TargetType=\"GridViewItem\">\n                <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\" />\n                <Setter Property=\"FontSize\" Value=\"{ThemeResource ControlContentThemeFontSize}\" />\n                <Setter Property=\"Background\" Value=\"{ThemeResource GridViewItemBackground}\" />\n                <Setter Property=\"Foreground\" Value=\"{ThemeResource GridViewItemForeground}\" />\n                <Setter Property=\"TabNavigation\" Value=\"Local\" />\n                <Setter Property=\"IsHoldingEnabled\" Value=\"True\" />\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n                <Setter Property=\"Margin\" Value=\"0,0,4,4\" />\n                <Setter Property=\"MinWidth\" Value=\"{ThemeResource GridViewItemMinWidth}\" />\n                <Setter Property=\"MinHeight\" Value=\"{ThemeResource GridViewItemMinHeight}\" />\n                <Setter Property=\"AllowDrop\" Value=\"True\" />\n                <Setter Property=\"UseSystemFocusVisuals\" Value=\"{StaticResource UseSystemFocusVisuals}\" />\n                <Setter Property=\"FocusVisualMargin\" Value=\"-3\" />\n                <Setter Property=\"FocusVisualPrimaryBrush\" Value=\"{ThemeResource GridViewItemFocusVisualPrimaryBrush}\" />\n                <Setter Property=\"FocusVisualPrimaryThickness\" Value=\"2\" />\n                <Setter Property=\"FocusVisualSecondaryBrush\" Value=\"{ThemeResource GridViewItemFocusVisualSecondaryBrush}\" />\n                <Setter Property=\"FocusVisualSecondaryThickness\" Value=\"1\" />\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"GridViewItem\">\n                            <ListViewItemPresenter\n                                x:Name=\"Root\"\n                                HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                CheckBoxBorderBrush=\"{ThemeResource GridViewItemCheckBoxBorderBrush}\"\n                                CheckBoxBrush=\"{ThemeResource GridViewItemCheckBoxBrush}\"\n                                CheckBoxCornerRadius=\"{ThemeResource GridViewItemCheckBoxCornerRadius}\"\n                                CheckBoxDisabledBorderBrush=\"{ThemeResource GridViewItemCheckBoxDisabledBorderBrush}\"\n                                CheckBoxDisabledBrush=\"{ThemeResource GridViewItemCheckBoxDisabledBrush}\"\n                                CheckBoxPointerOverBorderBrush=\"{ThemeResource GridViewItemCheckBoxPointerOverBorderBrush}\"\n                                CheckBoxPointerOverBrush=\"{ThemeResource GridViewItemCheckBoxPointerOverBrush}\"\n                                CheckBoxPressedBorderBrush=\"{ThemeResource GridViewItemCheckBoxPressedBorderBrush}\"\n                                CheckBoxPressedBrush=\"{ThemeResource GridViewItemCheckBoxPressedBrush}\"\n                                CheckBoxSelectedBrush=\"{ThemeResource GridViewItemCheckBoxSelectedBrush}\"\n                                CheckBoxSelectedDisabledBrush=\"{ThemeResource GridViewItemCheckBoxSelectedDisabledBrush}\"\n                                CheckBoxSelectedPointerOverBrush=\"{ThemeResource GridViewItemCheckBoxSelectedPointerOverBrush}\"\n                                CheckBoxSelectedPressedBrush=\"{ThemeResource GridViewItemCheckBoxSelectedPressedBrush}\"\n                                CheckBrush=\"{ThemeResource GridViewItemCheckBrush}\"\n                                CheckDisabledBrush=\"{ThemeResource GridViewItemCheckDisabledBrush}\"\n                                CheckMode=\"{ThemeResource GridViewItemCheckMode}\"\n                                CheckPressedBrush=\"{ThemeResource GridViewItemCheckPressedBrush}\"\n                                ContentMargin=\"{TemplateBinding Padding}\"\n                                ContentTransitions=\"{TemplateBinding ContentTransitions}\"\n                                Control.IsTemplateFocusTarget=\"True\"\n                                CornerRadius=\"{ThemeResource GridViewItemCornerRadius}\"\n                                DisabledOpacity=\"{ThemeResource ListViewItemDisabledThemeOpacity}\"\n                                DragBackground=\"{ThemeResource GridViewItemDragBackground}\"\n                                DragForeground=\"{ThemeResource GridViewItemDragForeground}\"\n                                DragOpacity=\"{ThemeResource ListViewItemDragThemeOpacity}\"\n                                FocusBorderBrush=\"{ThemeResource GridViewItemFocusBorderBrush}\"\n                                FocusVisualMargin=\"{TemplateBinding FocusVisualMargin}\"\n                                FocusVisualPrimaryBrush=\"{TemplateBinding FocusVisualPrimaryBrush}\"\n                                FocusVisualPrimaryThickness=\"{TemplateBinding FocusVisualPrimaryThickness}\"\n                                FocusVisualSecondaryBrush=\"{TemplateBinding FocusVisualSecondaryBrush}\"\n                                FocusVisualSecondaryThickness=\"{TemplateBinding FocusVisualSecondaryThickness}\"\n                                PlaceholderBackground=\"{ThemeResource GridViewItemPlaceholderBackground}\"\n                                PointerOverBackground=\"{ThemeResource GridViewItemBackgroundPointerOver}\"\n                                PointerOverBorderBrush=\"{ThemeResource GridViewItemPointerOverBorderBrush}\"\n                                PointerOverForeground=\"{ThemeResource GridViewItemForegroundPointerOver}\"\n                                PressedBackground=\"{ThemeResource GridViewItemBackgroundPressed}\"\n                                ReorderHintOffset=\"{ThemeResource GridViewItemReorderHintThemeOffset}\"\n                                SelectedBackground=\"{ThemeResource GridViewItemBackgroundSelected}\"\n                                SelectedBorderBrush=\"{ThemeResource GridViewItemSelectedBorderBrush}\"\n                                SelectedBorderThickness=\"{ThemeResource GridViewItemSelectedBorderThickness}\"\n                                SelectedDisabledBackground=\"{ThemeResource GridViewItemBackgroundSelectedDisabled}\"\n                                SelectedDisabledBorderBrush=\"{ThemeResource GridViewItemSelectedDisabledBorderBrush}\"\n                                SelectedForeground=\"{ThemeResource GridViewItemForegroundSelected}\"\n                                SelectedInnerBorderBrush=\"{ThemeResource GridViewItemSelectedInnerBorderBrush}\"\n                                SelectedPointerOverBackground=\"{ThemeResource GridViewItemBackgroundSelectedPointerOver}\"\n                                SelectedPointerOverBorderBrush=\"{ThemeResource GridViewItemSelectedPointerOverBorderBrush}\"\n                                SelectedPressedBackground=\"{ThemeResource GridViewItemBackgroundSelectedPressed}\"\n                                SelectedPressedBorderBrush=\"{ThemeResource GridViewItemSelectedPressedBorderBrush}\"\n                                SelectionCheckMarkVisualEnabled=\"{ThemeResource GridViewItemSelectionCheckMarkVisualEnabled}\" />\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n        </ResourceDictionary>\n        <ResourceDictionary>\n            <ResourceDictionary.ThemeDictionaries>\n                <ResourceDictionary x:Key=\"Default\">\n                    <StaticResource x:Key=\"CalendarViewFocusVisualPrimaryBrush\" ResourceKey=\"FocusStrokeColorOuterBrush\" />\n                    <StaticResource x:Key=\"CalendarViewFocusVisualSecondaryBrush\" ResourceKey=\"FocusStrokeColorInnerBrush\" />\n                    <StaticResource x:Key=\"CalendarViewFocusBorderBrush\" ResourceKey=\"AccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBlackoutStrikethroughBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedHoverBorderBrush\" ResourceKey=\"AccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedPressedBorderBrush\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedDisabledBorderBrush\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedBorderBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHoverBorderBrush\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewPressedBorderBrush\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodaySelectedInnerBorderBrush\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayForeground\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewDisabledForeground\" ResourceKey=\"TextFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBlackoutForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedForeground\" ResourceKey=\"AccentTextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedHoverForeground\" ResourceKey=\"AccentTextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedPressedForeground\" ResourceKey=\"AccentTextFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedDisabledForeground\" ResourceKey=\"AccentTextFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewPressedForeground\" ResourceKey=\"TextFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopeForeground\" ResourceKey=\"TextFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopeHoverForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopePressedForeground\" ResourceKey=\"TextFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemHoverBackground\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemPressedBackground\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemDisabledBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemBorderBrush\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayBackground\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayBlackoutBackground\" ResourceKey=\"AccentFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayBlackoutForeground\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayHoverBackground\" ResourceKey=\"AccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayPressedBackground\" ResourceKey=\"AccentFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayDisabledBackground\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBlackoutBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopeBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBackground\" ResourceKey=\"ControlFillColorInputActiveBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBorderBrush\" ResourceKey=\"ControlStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewWeekDayForegroundDisabled\" ResourceKey=\"TextFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBackgroundPointerOver\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBackgroundPressed\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForeground\" ResourceKey=\"ControlStrongFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForegroundPointerOver\" ResourceKey=\"ControlStrongFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForegroundPressed\" ResourceKey=\"ControlStrongFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForegroundDisabled\" ResourceKey=\"ControlStrongFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForegroundPointerOver\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForegroundPressed\" ResourceKey=\"TextFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForegroundDisabled\" ResourceKey=\"TextFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBorderBrushPointerOver\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBorderBrush\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n\n                    <StaticResource x:Key=\"CalendarViewDayItemFontSize\" ResourceKey=\"ControlContentThemeFontSize\" />\n                    <StaticResource x:Key=\"CalendarViewMonthYearItemFontSize\" ResourceKey=\"ControlContentThemeFontSize\" />\n\n                    <x:Boolean x:Key=\"CalendarViewBaseItemRoundedChromeEnabled\">True</x:Boolean>\n                    <x:Double x:Key=\"CalendarViewFirstOfMonthLabelFontSize\">8</x:Double>\n                    <x:Double x:Key=\"CalendarViewFirstOfYearDecadeLabelFontSize\">8</x:Double>\n                    <x:Double x:Key=\"CalendarViewHeaderNavigationButtonFontSize\">14</x:Double>\n                    <x:Double x:Key=\"CalendarViewNavigationButtonFontSize\">8</x:Double>\n                    <Thickness x:Key=\"CalendarViewDayItemMargin\">0,3,0,0</Thickness>\n                    <Thickness x:Key=\"CalendarViewWeekDayMargin\">1,13,1,13</Thickness>\n                    <Thickness x:Key=\"CalendarViewWeekDayPadding\">0</Thickness>\n                    <Thickness x:Key=\"CalendarViewMonthYearItemMargin\">0</Thickness>\n                    <Thickness x:Key=\"CalendarViewFirstOfMonthLabelMargin\">0,2,0,0</Thickness>\n                    <Thickness x:Key=\"CalendarViewFirstOfYearDecadeLabelMargin\">0,9,0,0</Thickness>\n                    <Thickness x:Key=\"CalendarViewHeaderNavigationButtonPadding\">8,7,8,8</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationButtonPadding\">12,11.5,12,11.5</Thickness>\n                    <Thickness x:Key=\"CalendarViewHeaderNavigationButtonMargin\">7,6,3,7</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationPreviousButtonMargin\">3,6,3,7</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationNextButtonMargin\">3,6,7,7</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationButtonFocusVisualMargin\">-2</Thickness>\n                    <FontWeight x:Key=\"CalendarViewHeaderNavigationFontWeight\">SemiBold</FontWeight>\n                    <FontWeight x:Key=\"CalendarViewWeekDayFontWeight\">SemiBold</FontWeight>\n                    <FontWeight x:Key=\"CalendarViewTodayFontWeight\">Normal</FontWeight>\n                </ResourceDictionary>\n                <ResourceDictionary x:Key=\"HighContrast\">\n                    <StaticResource x:Key=\"CalendarViewFocusVisualPrimaryBrush\" ResourceKey=\"SystemColorWindowTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewFocusVisualSecondaryBrush\" ResourceKey=\"SystemColorWindowColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewFocusBorderBrush\" ResourceKey=\"SystemControlForegroundBaseHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBlackoutStrikethroughBrush\" ResourceKey=\"SystemColorButtonTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedHoverBorderBrush\" ResourceKey=\"SystemControlHighlightListAccentMediumBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedPressedBorderBrush\" ResourceKey=\"SystemControlHighlightListAccentHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedDisabledBorderBrush\" ResourceKey=\"SystemColorGrayTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedBorderBrush\" ResourceKey=\"SystemControlHighlightAccentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHoverBorderBrush\" ResourceKey=\"SystemControlHighlightBaseMediumLowBrush\" />\n                    <StaticResource x:Key=\"CalendarViewPressedBorderBrush\" ResourceKey=\"SystemControlHighlightBaseMediumBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodaySelectedInnerBorderBrush\" ResourceKey=\"SystemControlHighlightAltChromeWhiteBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayForeground\" ResourceKey=\"SystemControlHighlightAltChromeWhiteBrush\" />\n                    <StaticResource x:Key=\"CalendarViewDisabledForeground\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBlackoutForeground\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedForeground\" ResourceKey=\"SystemControlHighlightBaseHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedHoverForeground\" ResourceKey=\"SystemControlHighlightBaseHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedPressedForeground\" ResourceKey=\"SystemControlHighlightBaseHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedDisabledForeground\" ResourceKey=\"SystemColorGrayTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewPressedForeground\" ResourceKey=\"SystemControlHighlightBaseHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopeForeground\" ResourceKey=\"SystemControlHyperlinkBaseHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopeHoverForeground\" ResourceKey=\"SystemControlHyperlinkBaseHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopePressedForeground\" ResourceKey=\"SystemControlHighlightBaseHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemHoverBackground\" ResourceKey=\"SystemColorWindowColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemPressedBackground\" ResourceKey=\"SystemColorWindowColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemDisabledBackground\" ResourceKey=\"SystemControlTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemBorderBrush\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemForeground\" ResourceKey=\"SystemControlForegroundBaseHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayBackground\" ResourceKey=\"SystemColorHighlightColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayBlackoutBackground\" ResourceKey=\"SystemColorHighlightColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayBlackoutForeground\" ResourceKey=\"SystemControlHighlightAltChromeWhiteBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayHoverBackground\" ResourceKey=\"SystemColorHighlightColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayPressedBackground\" ResourceKey=\"SystemColorHighlightColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayDisabledBackground\" ResourceKey=\"SystemColorHighlightColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBlackoutBackground\" ResourceKey=\"SystemControlTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopeBackground\" ResourceKey=\"SystemControlDisabledChromeMediumLowBrush\" />\n                    <StaticResource x:Key=\"CalendarViewForeground\" ResourceKey=\"SystemControlHyperlinkBaseMediumHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBackground\" ResourceKey=\"SystemControlBackgroundAltHighBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBorderBrush\" ResourceKey=\"SystemControlForegroundChromeMediumBrush\" />\n                    <StaticResource x:Key=\"CalendarViewWeekDayForegroundDisabled\" ResourceKey=\"SystemControlDisabledBaseMediumLowBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBackground\" ResourceKey=\"SystemControlTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBackgroundPointerOver\" ResourceKey=\"SystemColorHighlightColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBackgroundPressed\" ResourceKey=\"SystemColorHighlightColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForeground\" ResourceKey=\"SystemColorButtonTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForegroundPointerOver\" ResourceKey=\"SystemColorHighlightTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForegroundPressed\" ResourceKey=\"SystemColorHighlightTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForegroundDisabled\" ResourceKey=\"SystemColorGrayTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForeground\" ResourceKey=\"SystemColorButtonTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForegroundPointerOver\" ResourceKey=\"SystemColorHighlightTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForegroundPressed\" ResourceKey=\"SystemColorHighlightTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForegroundDisabled\" ResourceKey=\"SystemColorGrayTextColorBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBorderBrushPointerOver\" ResourceKey=\"SystemControlTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBorderBrush\" ResourceKey=\"SystemControlTransparentBrush\" />\n\n                    <StaticResource x:Key=\"CalendarViewDayItemFontSize\" ResourceKey=\"ControlContentThemeFontSize\" />\n                    <StaticResource x:Key=\"CalendarViewMonthYearItemFontSize\" ResourceKey=\"ControlContentThemeFontSize\" />\n\n                    <x:Boolean x:Key=\"CalendarViewBaseItemRoundedChromeEnabled\">True</x:Boolean>\n                    <x:Double x:Key=\"CalendarViewFirstOfMonthLabelFontSize\">8</x:Double>\n                    <x:Double x:Key=\"CalendarViewFirstOfYearDecadeLabelFontSize\">8</x:Double>\n                    <x:Double x:Key=\"CalendarViewHeaderNavigationButtonFontSize\">14</x:Double>\n                    <x:Double x:Key=\"CalendarViewNavigationButtonFontSize\">8</x:Double>\n                    <Thickness x:Key=\"CalendarViewDayItemMargin\">0,3,0,0</Thickness>\n                    <Thickness x:Key=\"CalendarViewWeekDayMargin\">1,13,1,13</Thickness>\n                    <Thickness x:Key=\"CalendarViewWeekDayPadding\">0</Thickness>\n                    <Thickness x:Key=\"CalendarViewMonthYearItemMargin\">0</Thickness>\n                    <Thickness x:Key=\"CalendarViewFirstOfMonthLabelMargin\">0,2,0,0</Thickness>\n                    <Thickness x:Key=\"CalendarViewFirstOfYearDecadeLabelMargin\">0,9,0,0</Thickness>\n                    <Thickness x:Key=\"CalendarViewHeaderNavigationButtonPadding\">8,7,8,8</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationButtonPadding\">12,11.5,12,11.5</Thickness>\n                    <Thickness x:Key=\"CalendarViewHeaderNavigationButtonMargin\">7,6,3,7</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationPreviousButtonMargin\">3,6,3,7</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationNextButtonMargin\">3,6,7,7</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationButtonFocusVisualMargin\">-2</Thickness>\n                    <FontWeight x:Key=\"CalendarViewHeaderNavigationFontWeight\">SemiBold</FontWeight>\n                    <FontWeight x:Key=\"CalendarViewWeekDayFontWeight\">SemiBold</FontWeight>\n                    <FontWeight x:Key=\"CalendarViewTodayFontWeight\">Normal</FontWeight>\n                </ResourceDictionary>\n                <ResourceDictionary x:Key=\"Light\">\n                    <StaticResource x:Key=\"CalendarViewFocusVisualPrimaryBrush\" ResourceKey=\"FocusStrokeColorOuterBrush\" />\n                    <StaticResource x:Key=\"CalendarViewFocusVisualSecondaryBrush\" ResourceKey=\"FocusStrokeColorInnerBrush\" />\n                    <StaticResource x:Key=\"CalendarViewFocusBorderBrush\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBlackoutStrikethroughBrush\" ResourceKey=\"ControlStrongStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedHoverBorderBrush\" ResourceKey=\"AccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedPressedBorderBrush\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedDisabledBorderBrush\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedBorderBrush\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHoverBorderBrush\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewPressedBorderBrush\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodaySelectedInnerBorderBrush\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayForeground\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewDisabledForeground\" ResourceKey=\"TextFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBlackoutForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedForeground\" ResourceKey=\"AccentTextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedHoverForeground\" ResourceKey=\"AccentTextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedPressedForeground\" ResourceKey=\"AccentTextFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewSelectedDisabledForeground\" ResourceKey=\"AccentTextFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewPressedForeground\" ResourceKey=\"TextFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopeForeground\" ResourceKey=\"TextFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopeHoverForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopePressedForeground\" ResourceKey=\"TextFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemHoverBackground\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemPressedBackground\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemDisabledBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemBorderBrush\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewCalendarItemForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayBackground\" ResourceKey=\"AccentFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayBlackoutBackground\" ResourceKey=\"AccentFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayBlackoutForeground\" ResourceKey=\"TextOnAccentFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayHoverBackground\" ResourceKey=\"AccentFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayPressedBackground\" ResourceKey=\"AccentFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewTodayDisabledBackground\" ResourceKey=\"AccentFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBlackoutBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewOutOfScopeBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBackground\" ResourceKey=\"ControlFillColorInputActiveBrush\" />\n                    <StaticResource x:Key=\"CalendarViewBorderBrush\" ResourceKey=\"ControlStrokeColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewWeekDayForegroundDisabled\" ResourceKey=\"TextFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBackground\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBackgroundPointerOver\" ResourceKey=\"SubtleFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBackgroundPressed\" ResourceKey=\"SubtleFillColorTertiaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForeground\" ResourceKey=\"ControlStrongFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForegroundPointerOver\" ResourceKey=\"ControlStrongFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForegroundPressed\" ResourceKey=\"ControlStrongFillColorDefaultBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonForegroundDisabled\" ResourceKey=\"ControlStrongFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForeground\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForegroundPointerOver\" ResourceKey=\"TextFillColorPrimaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForegroundPressed\" ResourceKey=\"TextFillColorSecondaryBrush\" />\n                    <StaticResource x:Key=\"CalendarViewHeaderNavigationButtonForegroundDisabled\" ResourceKey=\"TextFillColorDisabledBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBorderBrushPointerOver\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n                    <StaticResource x:Key=\"CalendarViewNavigationButtonBorderBrush\" ResourceKey=\"SubtleFillColorTransparentBrush\" />\n\n                    <StaticResource x:Key=\"CalendarViewDayItemFontSize\" ResourceKey=\"ControlContentThemeFontSize\" />\n                    <StaticResource x:Key=\"CalendarViewMonthYearItemFontSize\" ResourceKey=\"ControlContentThemeFontSize\" />\n\n                    <x:Boolean x:Key=\"CalendarViewBaseItemRoundedChromeEnabled\">True</x:Boolean>\n                    <x:Double x:Key=\"CalendarViewFirstOfMonthLabelFontSize\">8</x:Double>\n                    <x:Double x:Key=\"CalendarViewFirstOfYearDecadeLabelFontSize\">8</x:Double>\n                    <x:Double x:Key=\"CalendarViewHeaderNavigationButtonFontSize\">14</x:Double>\n                    <x:Double x:Key=\"CalendarViewNavigationButtonFontSize\">8</x:Double>\n                    <Thickness x:Key=\"CalendarViewDayItemMargin\">0,3,0,0</Thickness>\n                    <Thickness x:Key=\"CalendarViewWeekDayMargin\">1,13,1,13</Thickness>\n                    <Thickness x:Key=\"CalendarViewWeekDayPadding\">0</Thickness>\n                    <Thickness x:Key=\"CalendarViewMonthYearItemMargin\">0</Thickness>\n                    <Thickness x:Key=\"CalendarViewFirstOfMonthLabelMargin\">0,2,0,0</Thickness>\n                    <Thickness x:Key=\"CalendarViewFirstOfYearDecadeLabelMargin\">0,9,0,0</Thickness>\n                    <Thickness x:Key=\"CalendarViewHeaderNavigationButtonPadding\">8,7,8,8</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationButtonPadding\">12,11.5,12,11.5</Thickness>\n                    <Thickness x:Key=\"CalendarViewHeaderNavigationButtonMargin\">7,6,3,7</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationPreviousButtonMargin\">3,6,3,7</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationNextButtonMargin\">3,6,7,7</Thickness>\n                    <Thickness x:Key=\"CalendarViewNavigationButtonFocusVisualMargin\">-2</Thickness>\n                    <FontWeight x:Key=\"CalendarViewHeaderNavigationFontWeight\">SemiBold</FontWeight>\n                    <FontWeight x:Key=\"CalendarViewWeekDayFontWeight\">SemiBold</FontWeight>\n                    <FontWeight x:Key=\"CalendarViewTodayFontWeight\">Normal</FontWeight>\n                </ResourceDictionary>\n            </ResourceDictionary.ThemeDictionaries>\n\n            <Style TargetType=\"CalendarViewDayItem\">\n                <Setter Property=\"MinWidth\" Value=\"40\" />\n                <Setter Property=\"MinHeight\" Value=\"40\" />\n                <Setter Property=\"Margin\" Value=\"1\" />\n                <Setter Property=\"Padding\" Value=\"0,0,0,4\" />\n                <Setter Property=\"UseSystemFocusVisuals\" Value=\"True\" />\n                <Setter Property=\"FocusVisualMargin\" Value=\"-3\" />\n                <Setter Property=\"FocusVisualPrimaryBrush\" Value=\"{ThemeResource CalendarViewFocusVisualPrimaryBrush}\" />\n                <Setter Property=\"FocusVisualPrimaryThickness\" Value=\"2\" />\n                <Setter Property=\"FocusVisualSecondaryBrush\" Value=\"{ThemeResource CalendarViewFocusVisualSecondaryBrush}\" />\n                <Setter Property=\"FocusVisualSecondaryThickness\" Value=\"1\" />\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"CalendarViewDayItem\" />\n                    </Setter.Value>\n                </Setter>\n            </Style>\n\n            <Style BasedOn=\"{StaticResource DefaultCalendarViewStyle}\" TargetType=\"CalendarView\" />\n\n            <Style x:Key=\"DefaultCalendarViewStyle\" TargetType=\"CalendarView\">\n                <Setter Property=\"BlackoutStrikethroughBrush\" Value=\"{ThemeResource CalendarViewBlackoutStrikethroughBrush}\" />\n                <Setter Property=\"SelectedHoverBorderBrush\" Value=\"{ThemeResource CalendarViewSelectedHoverBorderBrush}\" />\n                <Setter Property=\"SelectedPressedBorderBrush\" Value=\"{ThemeResource CalendarViewSelectedPressedBorderBrush}\" />\n                <Setter Property=\"SelectedDisabledBorderBrush\" Value=\"{ThemeResource CalendarViewSelectedDisabledBorderBrush}\" />\n                <Setter Property=\"SelectedBorderBrush\" Value=\"{ThemeResource CalendarViewSelectedBorderBrush}\" />\n                <Setter Property=\"HoverBorderBrush\" Value=\"{ThemeResource CalendarViewHoverBorderBrush}\" />\n                <Setter Property=\"PressedBorderBrush\" Value=\"{ThemeResource CalendarViewPressedBorderBrush}\" />\n                <Setter Property=\"CalendarItemBorderBrush\" Value=\"{ThemeResource CalendarViewCalendarItemBorderBrush}\" />\n                <Setter Property=\"TodaySelectedInnerBorderBrush\" Value=\"{ThemeResource CalendarViewTodaySelectedInnerBorderBrush}\" />\n                <Setter Property=\"TodayForeground\" Value=\"{ThemeResource CalendarViewTodayForeground}\" />\n                <Setter Property=\"DisabledForeground\" Value=\"{ThemeResource CalendarViewDisabledForeground}\" />\n                <Setter Property=\"BlackoutForeground\" Value=\"{ThemeResource CalendarViewBlackoutForeground}\" />\n                <Setter Property=\"SelectedForeground\" Value=\"{ThemeResource CalendarViewSelectedForeground}\" />\n                <Setter Property=\"SelectedHoverForeground\" Value=\"{ThemeResource CalendarViewSelectedHoverForeground}\" />\n                <Setter Property=\"SelectedPressedForeground\" Value=\"{ThemeResource CalendarViewSelectedPressedForeground}\" />\n                <Setter Property=\"SelectedDisabledForeground\" Value=\"{ThemeResource CalendarViewSelectedDisabledForeground}\" />\n                <Setter Property=\"PressedForeground\" Value=\"{ThemeResource CalendarViewPressedForeground}\" />\n                <Setter Property=\"OutOfScopeForeground\" Value=\"{ThemeResource CalendarViewOutOfScopeForeground}\" />\n                <Setter Property=\"OutOfScopeHoverForeground\" Value=\"{ThemeResource CalendarViewOutOfScopeHoverForeground}\" />\n                <Setter Property=\"OutOfScopePressedForeground\" Value=\"{ThemeResource CalendarViewOutOfScopePressedForeground}\" />\n                <Setter Property=\"CalendarItemForeground\" Value=\"{ThemeResource CalendarViewCalendarItemForeground}\" />\n                <Setter Property=\"TodayBackground\" Value=\"{ThemeResource CalendarViewTodayBackground}\" />\n                <Setter Property=\"TodayBlackoutBackground\" Value=\"{ThemeResource CalendarViewTodayBlackoutBackground}\" />\n                <Setter Property=\"TodayBlackoutForeground\" Value=\"{ThemeResource CalendarViewTodayBlackoutForeground}\" />\n                <Setter Property=\"TodayHoverBackground\" Value=\"{ThemeResource CalendarViewTodayHoverBackground}\" />\n                <Setter Property=\"TodayPressedBackground\" Value=\"{ThemeResource CalendarViewTodayPressedBackground}\" />\n                <Setter Property=\"TodayDisabledBackground\" Value=\"{ThemeResource CalendarViewTodayDisabledBackground}\" />\n                <Setter Property=\"BlackoutBackground\" Value=\"{ThemeResource CalendarViewBlackoutBackground}\" />\n                <Setter Property=\"OutOfScopeBackground\" Value=\"{ThemeResource CalendarViewOutOfScopeBackground}\" />\n                <Setter Property=\"CalendarItemBackground\" Value=\"{ThemeResource CalendarViewCalendarItemBackground}\" />\n                <Setter Property=\"CalendarItemHoverBackground\" Value=\"{ThemeResource CalendarViewCalendarItemHoverBackground}\" />\n                <Setter Property=\"CalendarItemPressedBackground\" Value=\"{ThemeResource CalendarViewCalendarItemPressedBackground}\" />\n                <Setter Property=\"CalendarItemDisabledBackground\" Value=\"{ThemeResource CalendarViewCalendarItemDisabledBackground}\" />\n                <Setter Property=\"Foreground\" Value=\"{ThemeResource CalendarViewForeground}\" />\n                <Setter Property=\"Background\" Value=\"{ThemeResource CalendarViewBackground}\" />\n                <Setter Property=\"BorderBrush\" Value=\"{ThemeResource CalendarViewBorderBrush}\" />\n                <Setter Property=\"DayItemFontFamily\" Value=\"XamlAutoFontFamily\" />\n                <Setter Property=\"DayItemFontSize\" Value=\"{ThemeResource CalendarViewDayItemFontSize}\" />\n                <Setter Property=\"DayItemMargin\" Value=\"{ThemeResource CalendarViewDayItemMargin}\" />\n                <Setter Property=\"FirstOfMonthLabelFontFamily\" Value=\"XamlAutoFontFamily\" />\n                <Setter Property=\"FirstOfMonthLabelFontSize\" Value=\"{ThemeResource CalendarViewFirstOfMonthLabelFontSize}\" />\n                <Setter Property=\"FirstOfMonthLabelMargin\" Value=\"{ThemeResource CalendarViewFirstOfMonthLabelMargin}\" />\n                <Setter Property=\"MonthYearItemFontFamily\" Value=\"XamlAutoFontFamily\" />\n                <Setter Property=\"MonthYearItemFontSize\" Value=\"{ThemeResource CalendarViewMonthYearItemFontSize}\" />\n                <Setter Property=\"MonthYearItemMargin\" Value=\"{ThemeResource CalendarViewMonthYearItemMargin}\" />\n                <Setter Property=\"FirstOfYearDecadeLabelFontFamily\" Value=\"XamlAutoFontFamily\" />\n                <Setter Property=\"FirstOfYearDecadeLabelFontSize\" Value=\"{ThemeResource CalendarViewFirstOfYearDecadeLabelFontSize}\" />\n                <Setter Property=\"FirstOfYearDecadeLabelMargin\" Value=\"{ThemeResource CalendarViewFirstOfYearDecadeLabelMargin}\" />\n                <Setter Property=\"TodayFontWeight\" Value=\"{ThemeResource CalendarViewTodayFontWeight}\" />\n                <Setter Property=\"CalendarItemBorderThickness\" Value=\"1\" />\n                <Setter Property=\"BorderThickness\" Value=\"1\" />\n                <Setter Property=\"HorizontalAlignment\" Value=\"Left\" />\n                <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n                <Setter Property=\"HorizontalContentAlignment\" Value=\"Stretch\" />\n                <Setter Property=\"VerticalContentAlignment\" Value=\"Stretch\" />\n                <Setter Property=\"IsTabStop\" Value=\"False\" />\n                <Setter Property=\"UseSystemFocusVisuals\" Value=\"{StaticResource UseSystemFocusVisuals}\" />\n                <Setter Property=\"CornerRadius\" Value=\"{ThemeResource ControlCornerRadius}\" />\n                <Setter Property=\"Template\">\n                    <Setter.Value>\n                        <ControlTemplate TargetType=\"CalendarView\">\n                            <Border\n                                Background=\"{TemplateBinding Background}\"\n                                BorderBrush=\"{TemplateBinding BorderBrush}\"\n                                BorderThickness=\"{TemplateBinding BorderThickness}\"\n                                CornerRadius=\"{TemplateBinding CornerRadius}\">\n                                <Border.Resources>\n                                    <Style\n                                        x:Key=\"WeekDayNameStyle\"\n                                        BasedOn=\"{StaticResource CaptionTextBlockStyle}\"\n                                        TargetType=\"TextBlock\">\n                                        <Setter Property=\"HorizontalAlignment\" Value=\"Center\" />\n                                        <Setter Property=\"VerticalAlignment\" Value=\"Center\" />\n                                        <Setter Property=\"FontWeight\" Value=\"{ThemeResource CalendarViewWeekDayFontWeight}\" />\n                                        <Setter Property=\"Margin\" Value=\"{ThemeResource CalendarViewWeekDayMargin}\" />\n                                        <Setter Property=\"Padding\" Value=\"{ThemeResource CalendarViewWeekDayPadding}\" />\n                                    </Style>\n                                    <Style x:Key=\"HeaderNavigationButtonStyle\" TargetType=\"Button\">\n                                        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n                                        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n                                        <Setter Property=\"UseSystemFocusVisuals\" Value=\"{StaticResource UseSystemFocusVisuals}\" />\n                                        <Setter Property=\"FontSize\" Value=\"{ThemeResource CalendarViewHeaderNavigationButtonFontSize}\" />\n                                        <Setter Property=\"FontWeight\" Value=\"{ThemeResource CalendarViewHeaderNavigationFontWeight}\" />\n                                        <Setter Property=\"Foreground\" Value=\"{ThemeResource CalendarViewHeaderNavigationButtonForeground}\" />\n                                        <Setter Property=\"Background\" Value=\"{ThemeResource CalendarViewNavigationButtonBackground}\" />\n                                        <Setter Property=\"Margin\" Value=\"{ThemeResource CalendarViewHeaderNavigationButtonMargin}\" />\n                                        <Setter Property=\"Padding\" Value=\"{ThemeResource CalendarViewHeaderNavigationButtonPadding}\" />\n                                        <Setter Property=\"BackgroundSizing\" Value=\"InnerBorderEdge\" />\n                                        <Setter Property=\"CornerRadius\" Value=\"{StaticResource ControlCornerRadius}\" />\n                                        <Setter Property=\"FocusVisualMargin\" Value=\"{StaticResource CalendarViewNavigationButtonFocusVisualMargin}\" />\n                                        <Setter Property=\"Template\">\n                                            <Setter.Value>\n                                                <ControlTemplate TargetType=\"Button\">\n                                                    <ContentPresenter\n                                                        x:Name=\"Text\"\n                                                        Padding=\"{TemplateBinding Padding}\"\n                                                        HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                                        VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                                        AutomationProperties.AccessibilityView=\"Raw\"\n                                                        Background=\"{TemplateBinding Background}\"\n                                                        BackgroundSizing=\"{TemplateBinding BackgroundSizing}\"\n                                                        BorderBrush=\"{ThemeResource CalendarViewNavigationButtonBorderBrush}\"\n                                                        BorderThickness=\"{TemplateBinding BorderThickness}\"\n                                                        Content=\"{TemplateBinding Content}\"\n                                                        CornerRadius=\"{TemplateBinding CornerRadius}\"\n                                                        Foreground=\"{TemplateBinding Foreground}\">\n                                                        <VisualStateManager.VisualStateGroups>\n                                                            <VisualStateGroup x:Name=\"CommonStates\">\n                                                                <VisualState x:Name=\"Normal\" />\n                                                                <VisualState x:Name=\"PointerOver\">\n                                                                    <VisualState.Setters>\n                                                                        <Setter Target=\"Text.Background\" Value=\"{ThemeResource CalendarViewNavigationButtonBackgroundPointerOver}\" />\n                                                                        <Setter Target=\"Text.BorderBrush\" Value=\"{ThemeResource CalendarViewNavigationButtonBorderBrushPointerOver}\" />\n                                                                        <Setter Target=\"Text.Foreground\" Value=\"{ThemeResource CalendarViewHeaderNavigationButtonForegroundPointerOver}\" />\n                                                                    </VisualState.Setters>\n                                                                </VisualState>\n                                                                <VisualState x:Name=\"Pressed\">\n                                                                    <VisualState.Setters>\n                                                                        <Setter Target=\"Text.Background\" Value=\"{ThemeResource CalendarViewNavigationButtonBackgroundPressed}\" />\n                                                                        <Setter Target=\"Text.Foreground\" Value=\"{ThemeResource CalendarViewHeaderNavigationButtonForegroundPressed}\" />\n                                                                    </VisualState.Setters>\n                                                                </VisualState>\n                                                                <VisualState x:Name=\"Disabled\">\n                                                                    <VisualState.Setters>\n                                                                        <Setter Target=\"Text.Foreground\" Value=\"{ThemeResource CalendarViewHeaderNavigationButtonForegroundDisabled}\" />\n                                                                    </VisualState.Setters>\n                                                                </VisualState>\n                                                            </VisualStateGroup>\n                                                        </VisualStateManager.VisualStateGroups>\n                                                    </ContentPresenter>\n                                                </ControlTemplate>\n                                            </Setter.Value>\n                                        </Setter>\n                                    </Style>\n                                    <Style x:Key=\"NavigationButtonStyle\" TargetType=\"Button\">\n                                        <Setter Property=\"HorizontalAlignment\" Value=\"Stretch\" />\n                                        <Setter Property=\"VerticalAlignment\" Value=\"Stretch\" />\n                                        <Setter Property=\"UseSystemFocusVisuals\" Value=\"{StaticResource UseSystemFocusVisuals}\" />\n                                        <Setter Property=\"FontFamily\" Value=\"{ThemeResource SymbolThemeFontFamily}\" />\n                                        <Setter Property=\"FontSize\" Value=\"{ThemeResource CalendarViewNavigationButtonFontSize}\" />\n                                        <Setter Property=\"Background\" Value=\"{ThemeResource CalendarViewNavigationButtonBackground}\" />\n                                        <Setter Property=\"Foreground\" Value=\"{ThemeResource CalendarViewNavigationButtonForeground}\" />\n                                        <Setter Property=\"Padding\" Value=\"{ThemeResource CalendarViewNavigationButtonPadding}\" />\n                                        <Setter Property=\"BackgroundSizing\" Value=\"InnerBorderEdge\" />\n                                        <Setter Property=\"CornerRadius\" Value=\"{StaticResource ControlCornerRadius}\" />\n                                        <Setter Property=\"FocusVisualMargin\" Value=\"{StaticResource CalendarViewNavigationButtonFocusVisualMargin}\" />\n                                        <Setter Property=\"IsTabStop\" Value=\"True\" />\n                                        <Setter Property=\"Template\">\n                                            <Setter.Value>\n                                                <ControlTemplate TargetType=\"Button\">\n                                                    <ContentPresenter\n                                                        x:Name=\"Text\"\n                                                        Padding=\"{TemplateBinding Padding}\"\n                                                        HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                                        VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\"\n                                                        AutomationProperties.AccessibilityView=\"Raw\"\n                                                        Background=\"{TemplateBinding Background}\"\n                                                        BackgroundSizing=\"{TemplateBinding BackgroundSizing}\"\n                                                        BorderBrush=\"{ThemeResource CalendarViewNavigationButtonBorderBrush}\"\n                                                        BorderThickness=\"{TemplateBinding BorderThickness}\"\n                                                        Content=\"{TemplateBinding Content}\"\n                                                        CornerRadius=\"{TemplateBinding CornerRadius}\">\n                                                        <VisualStateManager.VisualStateGroups>\n                                                            <VisualStateGroup x:Name=\"CommonStates\">\n                                                                <VisualState x:Name=\"Normal\" />\n                                                                <VisualState x:Name=\"PointerOver\">\n                                                                    <VisualState.Setters>\n                                                                        <Setter Target=\"Text.Background\" Value=\"{ThemeResource CalendarViewNavigationButtonBackgroundPointerOver}\" />\n                                                                        <Setter Target=\"Text.BorderBrush\" Value=\"{ThemeResource CalendarViewNavigationButtonBorderBrushPointerOver}\" />\n                                                                        <Setter Target=\"Text.Foreground\" Value=\"{ThemeResource CalendarViewNavigationButtonForegroundPointerOver}\" />\n                                                                    </VisualState.Setters>\n                                                                </VisualState>\n                                                                <VisualState x:Name=\"Pressed\">\n                                                                    <VisualState.Setters>\n                                                                        <Setter Target=\"Text.Background\" Value=\"{ThemeResource CalendarViewNavigationButtonBackgroundPressed}\" />\n                                                                        <Setter Target=\"Text.Foreground\" Value=\"{ThemeResource CalendarViewNavigationButtonForegroundPressed}\" />\n                                                                    </VisualState.Setters>\n                                                                </VisualState>\n                                                                <VisualState x:Name=\"Disabled\">\n                                                                    <VisualState.Setters>\n                                                                        <Setter Target=\"Text.Foreground\" Value=\"{ThemeResource CalendarViewNavigationButtonForegroundDisabled}\" />\n                                                                    </VisualState.Setters>\n                                                                </VisualState>\n                                                            </VisualStateGroup>\n                                                        </VisualStateManager.VisualStateGroups>\n                                                    </ContentPresenter>\n                                                </ControlTemplate>\n                                            </Setter.Value>\n                                        </Setter>\n                                    </Style>\n                                    <Style x:Key=\"ScrollViewerStyle\" TargetType=\"ScrollViewer\">\n                                        <Setter Property=\"HorizontalScrollMode\" Value=\"Disabled\" />\n                                        <Setter Property=\"VerticalScrollMode\" Value=\"Enabled\" />\n                                        <Setter Property=\"VerticalSnapPointsType\" Value=\"Optional\" />\n                                        <Setter Property=\"ZoomMode\" Value=\"Disabled\" />\n                                        <Setter Property=\"TabNavigation\" Value=\"Once\" />\n                                        <Setter Property=\"BringIntoViewOnFocusChange\" Value=\"False\" />\n                                        <Setter Property=\"Template\" Value=\"{StaticResource ScrollViewerScrollBarlessTemplate}\" />\n                                    </Style>\n                                </Border.Resources>\n                                <Grid\n                                    MinWidth=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.MinViewWidth}\"\n                                    HorizontalAlignment=\"{TemplateBinding HorizontalContentAlignment}\"\n                                    VerticalAlignment=\"{TemplateBinding VerticalContentAlignment}\">\n                                    <Grid.RowDefinitions>\n                                        <RowDefinition Height=\"Auto\" />\n                                        <RowDefinition Height=\"Auto\" />\n                                        <RowDefinition Height=\"*\" />\n                                    </Grid.RowDefinitions>\n                                    <Grid>\n                                        <Grid.ColumnDefinitions>\n                                            <ColumnDefinition Width=\"*\" />\n                                            <ColumnDefinition Width=\"Auto\" />\n                                            <ColumnDefinition Width=\"Auto\" />\n                                        </Grid.ColumnDefinitions>\n                                        <Button\n                                            x:Name=\"HeaderButton\"\n                                            HorizontalContentAlignment=\"Left\"\n                                            Content=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.HeaderText}\"\n                                            IsEnabled=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.HasMoreViews}\"\n                                            Style=\"{StaticResource HeaderNavigationButtonStyle}\" />\n                                        <Button\n                                            x:Name=\"PreviousButton\"\n                                            Grid.Column=\"1\"\n                                            Margin=\"{ThemeResource CalendarViewNavigationPreviousButtonMargin}\"\n                                            HorizontalContentAlignment=\"Center\"\n                                            Content=\"&#xEDDB;\"\n                                            IsEnabled=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.HasMoreContentBefore}\"\n                                            Style=\"{StaticResource NavigationButtonStyle}\" />\n                                        <Button\n                                            x:Name=\"NextButton\"\n                                            Grid.Column=\"2\"\n                                            Margin=\"{ThemeResource CalendarViewNavigationNextButtonMargin}\"\n                                            HorizontalContentAlignment=\"Center\"\n                                            Content=\"&#xEDDC;\"\n                                            IsEnabled=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.HasMoreContentAfter}\"\n                                            Style=\"{StaticResource NavigationButtonStyle}\" />\n                                    </Grid>\n                                    <Border\n                                        Grid.Row=\"1\"\n                                        Height=\"1\"\n                                        BorderBrush=\"{TemplateBinding BorderBrush}\"\n                                        BorderThickness=\"1\" />\n                                    <Grid x:Name=\"Views\" Grid.Row=\"2\">\n                                        <Grid.Clip>\n                                            <RectangleGeometry Rect=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.ClipRect}\" />\n                                        </Grid.Clip>\n                                        <Border x:Name=\"BackgroundLayer\">\n                                            <Border.RenderTransform>\n                                                <ScaleTransform x:Name=\"BackgroundTransform\" CenterX=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CenterX}\" CenterY=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CenterY}\" />\n                                            </Border.RenderTransform>\n                                        </Border>\n                                        <Grid x:Name=\"MonthView\">\n                                            <Grid.RowDefinitions>\n                                                <RowDefinition Height=\"Auto\" />\n                                                <RowDefinition Height=\"*\" />\n                                            </Grid.RowDefinitions>\n                                            <Grid.RenderTransform>\n                                                <ScaleTransform x:Name=\"MonthViewTransform\" CenterX=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CenterX}\" CenterY=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CenterY}\" />\n                                            </Grid.RenderTransform>\n                                            <Grid\n                                                x:Name=\"WeekDayNames\"\n                                                Margin=\"2,2,2,0\"\n                                                Background=\"{TemplateBinding Background}\">\n                                                <Grid.ColumnDefinitions>\n                                                    <ColumnDefinition Width=\"*\" />\n                                                    <ColumnDefinition Width=\"*\" />\n                                                    <ColumnDefinition Width=\"*\" />\n                                                    <ColumnDefinition Width=\"*\" />\n                                                    <ColumnDefinition Width=\"*\" />\n                                                    <ColumnDefinition Width=\"*\" />\n                                                    <ColumnDefinition Width=\"*\" />\n                                                </Grid.ColumnDefinitions>\n                                                <TextBlock\n                                                    x:Name=\"WeekDay1\"\n                                                    Foreground=\"{TemplateBinding CalendarItemForeground}\"\n                                                    Style=\"{StaticResource WeekDayNameStyle}\"\n                                                    Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.WeekDay1}\" />\n                                                <TextBlock\n                                                    x:Name=\"WeekDay2\"\n                                                    Grid.Column=\"1\"\n                                                    Foreground=\"{TemplateBinding CalendarItemForeground}\"\n                                                    Style=\"{StaticResource WeekDayNameStyle}\"\n                                                    Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.WeekDay2}\" />\n                                                <TextBlock\n                                                    x:Name=\"WeekDay3\"\n                                                    Grid.Column=\"2\"\n                                                    Foreground=\"{TemplateBinding CalendarItemForeground}\"\n                                                    Style=\"{StaticResource WeekDayNameStyle}\"\n                                                    Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.WeekDay3}\" />\n                                                <TextBlock\n                                                    x:Name=\"WeekDay4\"\n                                                    Grid.Column=\"3\"\n                                                    Foreground=\"{TemplateBinding CalendarItemForeground}\"\n                                                    Style=\"{StaticResource WeekDayNameStyle}\"\n                                                    Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.WeekDay4}\" />\n                                                <TextBlock\n                                                    x:Name=\"WeekDay5\"\n                                                    Grid.Column=\"4\"\n                                                    Foreground=\"{TemplateBinding CalendarItemForeground}\"\n                                                    Style=\"{StaticResource WeekDayNameStyle}\"\n                                                    Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.WeekDay5}\" />\n                                                <TextBlock\n                                                    x:Name=\"WeekDay6\"\n                                                    Grid.Column=\"5\"\n                                                    Foreground=\"{TemplateBinding CalendarItemForeground}\"\n                                                    Style=\"{StaticResource WeekDayNameStyle}\"\n                                                    Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.WeekDay6}\" />\n                                                <TextBlock\n                                                    x:Name=\"WeekDay7\"\n                                                    Grid.Column=\"6\"\n                                                    Foreground=\"{TemplateBinding CalendarItemForeground}\"\n                                                    Style=\"{StaticResource WeekDayNameStyle}\"\n                                                    Text=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.WeekDay7}\" />\n                                            </Grid>\n                                            <ScrollViewer\n                                                x:Name=\"MonthViewScrollViewer\"\n                                                Grid.Row=\"1\"\n                                                Margin=\"2\"\n                                                IsFocusEngagementEnabled=\"True\"\n                                                Style=\"{StaticResource ScrollViewerStyle}\">\n                                                <CalendarPanel x:Name=\"MonthViewPanel\" />\n                                            </ScrollViewer>\n                                        </Grid>\n                                        <ScrollViewer\n                                            x:Name=\"YearViewScrollViewer\"\n                                            Margin=\"2\"\n                                            IsFocusEngagementEnabled=\"True\"\n                                            Style=\"{StaticResource ScrollViewerStyle}\"\n                                            UseLayoutRounding=\"False\"\n                                            Visibility=\"Collapsed\">\n                                            <ScrollViewer.RenderTransform>\n                                                <ScaleTransform x:Name=\"YearViewTransform\" CenterX=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CenterX}\" CenterY=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CenterY}\" />\n                                            </ScrollViewer.RenderTransform>\n                                            <CalendarPanel x:Name=\"YearViewPanel\" />\n                                        </ScrollViewer>\n                                        <ScrollViewer\n                                            x:Name=\"DecadeViewScrollViewer\"\n                                            Margin=\"2\"\n                                            IsFocusEngagementEnabled=\"True\"\n                                            Style=\"{StaticResource ScrollViewerStyle}\"\n                                            UseLayoutRounding=\"False\"\n                                            Visibility=\"Collapsed\">\n                                            <ScrollViewer.RenderTransform>\n                                                <ScaleTransform x:Name=\"DecadeViewTransform\" CenterX=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CenterX}\" CenterY=\"{Binding RelativeSource={RelativeSource TemplatedParent}, Path=TemplateSettings.CenterY}\" />\n                                            </ScrollViewer.RenderTransform>\n                                            <CalendarPanel x:Name=\"DecadeViewPanel\" />\n                                        </ScrollViewer>\n                                    </Grid>\n                                </Grid>\n                                <VisualStateManager.VisualStateGroups>\n                                    <VisualStateGroup x:Name=\"CommonStates\">\n                                        <VisualState x:Name=\"Normal\" />\n                                        <VisualState x:Name=\"Disabled\">\n                                            <Storyboard>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"WeekDay1\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource CalendarViewWeekDayForegroundDisabled}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"WeekDay2\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource CalendarViewWeekDayForegroundDisabled}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"WeekDay3\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource CalendarViewWeekDayForegroundDisabled}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"WeekDay4\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource CalendarViewWeekDayForegroundDisabled}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"WeekDay5\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource CalendarViewWeekDayForegroundDisabled}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"WeekDay6\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource CalendarViewWeekDayForegroundDisabled}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"WeekDay7\" Storyboard.TargetProperty=\"Foreground\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource CalendarViewWeekDayForegroundDisabled}\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n                                    </VisualStateGroup>\n                                    <VisualStateGroup x:Name=\"HeaderButtonStates\">\n                                        <VisualState x:Name=\"ViewChanged\" />\n                                        <VisualState x:Name=\"ViewChanging\">\n                                            <Storyboard>\n                                                <DoubleAnimation\n                                                    Storyboard.TargetName=\"HeaderButton\"\n                                                    Storyboard.TargetProperty=\"Opacity\"\n                                                    From=\"0\"\n                                                    To=\"1\"\n                                                    Duration=\"0:0:0.167\" />\n                                            </Storyboard>\n                                        </VisualState>\n                                    </VisualStateGroup>\n                                    <VisualStateGroup x:Name=\"DisplayModeStates\">\n                                        <VisualState x:Name=\"Month\" />\n                                        <VisualState x:Name=\"Year\">\n                                            <Storyboard>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MonthViewScrollViewer\" Storyboard.TargetProperty=\"IsEnabled\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0:0:0\" Value=\"False\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MonthView\" Storyboard.TargetProperty=\"Opacity\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0:0:0\" Value=\"0\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewScrollViewer\" Storyboard.TargetProperty=\"Visibility\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0:0:0\" Value=\"Visible\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n                                        <VisualState x:Name=\"Decade\">\n                                            <Storyboard>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MonthViewScrollViewer\" Storyboard.TargetProperty=\"IsEnabled\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0:0:0\" Value=\"False\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"MonthView\" Storyboard.TargetProperty=\"Opacity\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0:0:0\" Value=\"0\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"DecadeViewScrollViewer\" Storyboard.TargetProperty=\"Visibility\">\n                                                    <DiscreteObjectKeyFrame KeyTime=\"0:0:0\" Value=\"Visible\" />\n                                                </ObjectAnimationUsingKeyFrames>\n                                            </Storyboard>\n                                        </VisualState>\n                                        <VisualStateGroup.Transitions>\n                                            <VisualTransition From=\"Month\" To=\"Year\">\n                                                <Storyboard>\n                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewScrollViewer\" Storyboard.TargetProperty=\"Visibility\">\n                                                        <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Visible\" />\n                                                    </ObjectAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MonthView\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"0\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewScrollViewer\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0\" Value=\"0\" />\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MonthViewTransform\" Storyboard.TargetProperty=\"ScaleX\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"0.84\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MonthViewTransform\" Storyboard.TargetProperty=\"ScaleY\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"0.84\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewTransform\" Storyboard.TargetProperty=\"ScaleX\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"1.29\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewTransform\" Storyboard.TargetProperty=\"ScaleY\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"1.29\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundLayer\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <LinearDoubleKeyFrame KeyTime=\"0:0:0.000\" Value=\"0\" />\n                                                        <LinearDoubleKeyFrame KeyTime=\"0:0:0.200\" Value=\"0\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                </Storyboard>\n                                            </VisualTransition>\n                                            <VisualTransition From=\"Year\" To=\"Month\">\n                                                <Storyboard>\n                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewScrollViewer\" Storyboard.TargetProperty=\"IsHitTestVisible\">\n                                                        <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"False\" />\n                                                    </ObjectAnimationUsingKeyFrames>\n                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewScrollViewer\" Storyboard.TargetProperty=\"Visibility\">\n                                                        <DiscreteObjectKeyFrame KeyTime=\"0:0:0\" Value=\"Visible\" />\n                                                    </ObjectAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewScrollViewer\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"0\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MonthView\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0\" Value=\"0\" />\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewTransform\" Storyboard.TargetProperty=\"ScaleX\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"1.29\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewTransform\" Storyboard.TargetProperty=\"ScaleY\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"1.29\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MonthViewTransform\" Storyboard.TargetProperty=\"ScaleX\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0.84\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MonthViewTransform\" Storyboard.TargetProperty=\"ScaleY\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0.84\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundTransform\" Storyboard.TargetProperty=\"ScaleX\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0.84\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundTransform\" Storyboard.TargetProperty=\"ScaleY\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0.84\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundLayer\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <LinearDoubleKeyFrame KeyTime=\"0:0:0.000\" Value=\"0\" />\n                                                        <LinearDoubleKeyFrame KeyTime=\"0:0:0.200\" Value=\"0\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                </Storyboard>\n                                            </VisualTransition>\n                                            <VisualTransition From=\"Year\" To=\"Decade\">\n                                                <Storyboard>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MonthView\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0\" Value=\"0\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewScrollViewer\" Storyboard.TargetProperty=\"Visibility\">\n                                                        <DiscreteObjectKeyFrame KeyTime=\"0:0:0\" Value=\"Visible\" />\n                                                    </ObjectAnimationUsingKeyFrames>\n                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"DecadeViewScrollViewer\" Storyboard.TargetProperty=\"Visibility\">\n                                                        <DiscreteObjectKeyFrame KeyTime=\"0:0:0\" Value=\"Visible\" />\n                                                    </ObjectAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewScrollViewer\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"0\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"DecadeViewScrollViewer\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0\" Value=\"0\" />\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewTransform\" Storyboard.TargetProperty=\"ScaleX\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"0.84\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewTransform\" Storyboard.TargetProperty=\"ScaleY\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"0.84\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"DecadeViewTransform\" Storyboard.TargetProperty=\"ScaleX\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"1.29\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"DecadeViewTransform\" Storyboard.TargetProperty=\"ScaleY\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"1.29\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundLayer\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <LinearDoubleKeyFrame KeyTime=\"0:0:0.000\" Value=\"0\" />\n                                                        <LinearDoubleKeyFrame KeyTime=\"0:0:0.200\" Value=\"0\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                </Storyboard>\n                                            </VisualTransition>\n                                            <VisualTransition From=\"Decade\" To=\"Year\">\n                                                <Storyboard>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"MonthView\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0\" Value=\"0\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewScrollViewer\" Storyboard.TargetProperty=\"Visibility\">\n                                                        <DiscreteObjectKeyFrame KeyTime=\"0:0:0\" Value=\"Visible\" />\n                                                    </ObjectAnimationUsingKeyFrames>\n                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"DecadeViewScrollViewer\" Storyboard.TargetProperty=\"Visibility\">\n                                                        <DiscreteObjectKeyFrame KeyTime=\"0:0:0\" Value=\"Visible\" />\n                                                    </ObjectAnimationUsingKeyFrames>\n                                                    <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"DecadeViewScrollViewer\" Storyboard.TargetProperty=\"IsHitTestVisible\">\n                                                        <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"False\" />\n                                                    </ObjectAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"DecadeViewScrollViewer\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"0\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewScrollViewer\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0\" Value=\"0\" />\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"DecadeViewTransform\" Storyboard.TargetProperty=\"ScaleX\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"1.29\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"DecadeViewTransform\" Storyboard.TargetProperty=\"ScaleY\">\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.150\"\n                                                            Value=\"1.29\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewTransform\" Storyboard.TargetProperty=\"ScaleX\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0.84\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"YearViewTransform\" Storyboard.TargetProperty=\"ScaleY\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0.84\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundTransform\" Storyboard.TargetProperty=\"ScaleX\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0.84\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundTransform\" Storyboard.TargetProperty=\"ScaleY\">\n                                                        <DiscreteDoubleKeyFrame KeyTime=\"0:0:0.150\" Value=\"0.84\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetName=\"BackgroundLayer\" Storyboard.TargetProperty=\"Opacity\">\n                                                        <LinearDoubleKeyFrame KeyTime=\"0:0:0.000\" Value=\"0\" />\n                                                        <LinearDoubleKeyFrame KeyTime=\"0:0:0.200\" Value=\"0\" />\n                                                        <SplineDoubleKeyFrame\n                                                            KeySpline=\"{StaticResource ControlFastOutSlowInKeySpline}\"\n                                                            KeyTime=\"0:0:0.500\"\n                                                            Value=\"1\" />\n                                                    </DoubleAnimationUsingKeyFrames>\n                                                </Storyboard>\n                                            </VisualTransition>\n                                        </VisualStateGroup.Transitions>\n                                    </VisualStateGroup>\n                                </VisualStateManager.VisualStateGroups>\n                            </Border>\n                        </ControlTemplate>\n                    </Setter.Value>\n                </Setter>\n            </Style>\n        </ResourceDictionary>\n    </ResourceDictionary.MergedDictionaries>\n</ResourceDictionary>\n"
  },
  {
    "path": "Unicord.Universal/Themes/Styles/Fluent.xaml",
    "content": "﻿<ResourceDictionary \n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" \n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:media=\"using:Microsoft.UI.Xaml.Media\"\n    xmlns:toolkit_media=\"using:Microsoft.Toolkit.Uwp.UI.Media\"\n    xmlns:ui=\"using:Microsoft.Toolkit.Uwp.UI\" \n    xmlns:w1803=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)\">\n    <ResourceDictionary.MergedDictionaries>\n        <lib:XamlControlsResources lib:ControlsResourcesVersion=\"Version1\">\n            <lib:XamlControlsResources.MergedDictionaries>\n                <ResourceDictionary>\n                    <!-- Windows 10 circa 1703 Styling -->\n                    <ResourceDictionary.ThemeDictionaries>\n                        <ResourceDictionary x:Key=\"Light\">\n                            <Color x:Key=\"BackgroundTertiaryColour\">#FFF5F5F5</Color>\n                            <Color x:Key=\"BackgroundSecondaryColour\">#FFF0F0F0</Color>\n                            <Color x:Key=\"BackgroundPrimaryColour\">#FFEEEEEE</Color>\n                        </ResourceDictionary>\n                        <ResourceDictionary x:Key=\"Dark\">\n                            <Color x:Key=\"BackgroundPrimaryColour\">#FF0F0F0F</Color>\n                            <Color x:Key=\"BackgroundSecondaryColour\">#FF181818</Color>\n                            <Color x:Key=\"BackgroundTertiaryColour\">#FF1C1C1C</Color>\n                        </ResourceDictionary>\n                    </ResourceDictionary.ThemeDictionaries>\n\n                    <CornerRadius x:Key=\"ControlCornerRadius\">0,0,0,0</CornerRadius>\n                    <CornerRadius x:Key=\"OverlayCornerRadius\">0,0,0,0</CornerRadius>\n\n                    <CornerRadius x:Key=\"AccountsSettings_ProfileCard_CornerRadius\">0</CornerRadius>\n                    <CornerRadius x:Key=\"AccountsSettings_ProfileCard_BannerCornerRadius\">0</CornerRadius>\n\n                    <!-- General -->\n\n                    <SolidColorBrush x:Key=\"General_Page_BackgroundBrush\" Color=\"{ThemeResource BackgroundPrimaryColour}\"/>\n\n                    <Style x:Key=\"CleanButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource ButtonRevealStyle}\">\n                        <Setter Property=\"Background\" Value=\"Transparent\"/>\n                        <Setter Property=\"Foreground\" Value=\"{ThemeResource ButtonForeground}\" />\n                        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrush}\" />\n                        <Setter Property=\"BorderThickness\" Value=\"{ThemeResource ButtonRevealBorderThemeThickness}\" />\n                        <Setter Property=\"w1803:Control.CornerRadius\" Value=\"0\"/>\n                    </Style>\n\n                    <Style x:Key=\"StretchyIconButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource CleanButtonStyle}\">\n                        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrush}\" />\n                        <Setter Property=\"FontFamily\" Value=\"{ThemeResource SymbolThemeFontFamily}\"/>\n                        <Setter Property=\"FontSize\" Value=\"16\"/>\n                    </Style>\n\n                    <Style x:Key=\"IconButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource StretchyIconButtonStyle}\">\n                        <Setter Property=\"MinWidth\" Value=\"40\"/>\n                        <Setter Property=\"MinHeight\" Value=\"40\"/>\n                        <Setter Property=\"Padding\" Value=\"8\" />\n                    </Style>\n\n                    <Style x:Key=\"StretchyIconToggleButtonStyle\" TargetType=\"ToggleButton\" BasedOn=\"{StaticResource ToggleButtonRevealStyle}\">\n                        <Setter Property=\"Background\" Value=\"Transparent\"/>\n                        <Setter Property=\"FontFamily\" Value=\"{ThemeResource SymbolThemeFontFamily}\"/>\n                        <Setter Property=\"FontSize\" Value=\"16\"/>\n                        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                        <Setter Property=\"UseLayoutRounding\" Value=\"True\"/>\n                        <Setter Property=\"Foreground\" Value=\"{ThemeResource ButtonForeground}\" />\n                        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource ButtonRevealBorderBrush}\" />\n                        <Setter Property=\"BorderThickness\" Value=\"{ThemeResource ButtonRevealBorderThemeThickness}\" />\n                        <Setter Property=\"w1803:Control.CornerRadius\" Value=\"0\"/>\n                    </Style>\n\n                    <Style x:Key=\"IconToggleButtonStyle\" TargetType=\"ToggleButton\" BasedOn=\"{StaticResource StretchyIconToggleButtonStyle}\">\n                        <Setter Property=\"MinWidth\" Value=\"40\"/>\n                        <Setter Property=\"MinHeight\" Value=\"40\"/>\n                        <Setter Property=\"Padding\" Value=\"8\" />\n                    </Style>\n\n                    <media:AcrylicBrush x:Key=\"SidebarPrimaryAcrylicElementBrush\" \n                  BackgroundSource=\"Backdrop\" \n                  TintOpacity=\"0.60\" \n                  FallbackColor=\"{ThemeResource BackgroundPrimaryColour}\" \n                  TintColor=\"{ThemeResource BackgroundPrimaryColour}\" />\n\n\n                    <media:AcrylicBrush x:Key=\"SidebarSecondaryAcrylicElementBrush\" \n                  BackgroundSource=\"Backdrop\" \n                  TintOpacity=\"0.80\" \n                  FallbackColor=\"{ThemeResource BackgroundSecondaryColour}\" \n                  TintColor=\"{ThemeResource BackgroundSecondaryColour}\" />\n\n                    <!--<ThemeResource x:Key=\"DefaultGridViewItemStyle\" ResourceKey=\"GridViewItemRevealStyle\"/>\n                    <ThemeResource x:Key=\"UnicordListViewItemStyle\" ResourceKey=\"ListViewItemRevealStyle\"/>-->\n\n                    <Style x:Key=\"UnicordListViewItemStyle\" TargetType=\"ListViewItem\" BasedOn=\"{StaticResource ListViewItemRevealStyle}\"/>\n\n\n                    <SolidColorBrush x:Key=\"BackgroundPrimaryBrush\" Color=\"{ThemeResource BackgroundPrimaryColour}\"/>\n                    <SolidColorBrush x:Key=\"BackgroundSecondaryBrush\" Color=\"{ThemeResource BackgroundSecondaryColour}\"/>\n                    <SolidColorBrush x:Key=\"BackgroundTertiaryBrush\" Color=\"{ThemeResource BackgroundTertiaryColour}\"/>\n                    <SolidColorBrush x:Key=\"MainBackgroundBrush\" Color=\"{ThemeResource BackgroundTertiaryColour}\"/>\n\n                    <CornerRadius x:Key=\"ZeroCornerRadius\">0</CornerRadius>\n                    <Thickness x:Key=\"ZeroThickness\">0</Thickness>\n\n                    <!-- DiscordPage -->\n\n                    <Thickness x:Key=\"DiscordPage_SecondaryGridMargin\">0,0,0,0</Thickness>\n\n                    <SolidColorBrush x:Key=\"DiscordPage_SecondaryGrid_BorderBrush\" Color=\"Transparent\"/>\n\n                    <Thickness x:Key=\"DiscordPage_SecondaryGrid_BorderThickness\">0</Thickness>\n                    <Thickness x:Key=\"DiscordPage_SecondaryGrid_BottomItem_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"DiscordPage_SecondaryGrid_CornerRadius\">0</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_SecondaryGrid_BottomItem_CornerRadius\">0</CornerRadius>\n                    <Thickness x:Key=\"DiscordPage_SecondaryGrid_SplitMargin\">0</Thickness>\n\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness\">0,0,0,0</Thickness>\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness_TwoPaneLeft\">0,0,0,0</Thickness>\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness_TwoPaneRight\">0,0,0,0</Thickness>\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness_ThreePane\">0,0,0,0</Thickness>\n\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius\">0,0,0,0</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius_TwoPaneLeft\">0,0,0,0</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius_TwoPaneRight\">0,0,0,0</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius_ThreePane\">0,0,0,0</CornerRadius>\n\n                    <SolidColorBrush x:Key=\"DiscordPage_MainContent_Background\" Color=\"{ThemeResource BackgroundTertiaryColour}\"/>\n                    <SolidColorBrush x:Key=\"DiscordPage_MainContent_BorderBrush\" Color=\"Transparent\"/>\n\n                    <Thickness x:Key=\"DiscordPage_RightSplitPaneGrid_Margin\">0</Thickness>\n                    <SolidColorBrush x:Key=\"DiscordPage_RightSplitPaneGrid_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"DiscordPage_RightSplitPaneGrid_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"DiscordPage_RightSplitPaneGrid_CornerRadius\">0</CornerRadius>\n\n                    <media:AcrylicBrush x:Key=\"DiscordPage_PrimarySidebar_BackgroundBrush\" \n                  BackgroundSource=\"HostBackdrop\" \n                  TintOpacity=\"0.60\" \n                  FallbackColor=\"{ThemeResource BackgroundPrimaryColour}\" \n                  TintColor=\"{ThemeResource BackgroundPrimaryColour}\" />\n\n                    <media:AcrylicBrush x:Key=\"DiscordPage_SecondaryGrid_Background\" \n                  BackgroundSource=\"HostBackdrop\" \n                  TintOpacity=\"0.80\" \n                  FallbackColor=\"{ThemeResource BackgroundSecondaryColour}\" \n                  TintColor=\"{ThemeResource BackgroundSecondaryColour}\" />\n\n                    <!-- User Pill specific resources -->\n                    <media:AcrylicBrush x:Key=\"DiscordPage_UserPill_Background\" \n                  BackgroundSource=\"HostBackdrop\" \n                  TintOpacity=\"0.80\" \n                  FallbackColor=\"{ThemeResource BackgroundSecondaryColour}\" \n                  TintColor=\"{ThemeResource BackgroundSecondaryColour}\" />\n                    <CornerRadius x:Key=\"DiscordPage_UserPill_CornerRadius\">0</CornerRadius>\n                    <x:String x:Key=\"DiscordPage_UserPill_SecondaryFontFamily\">Segoe UI</x:String>\n\n                    <media:AcrylicBrush x:Key=\"DiscordPage_RightSplitPaneGrid_Background\" \n                  BackgroundSource=\"HostBackdrop\" \n                  TintOpacity=\"0.80\" \n                  FallbackColor=\"{ThemeResource BackgroundSecondaryColour}\" \n                  TintColor=\"{ThemeResource BackgroundSecondaryColour}\" />\n\n                    <toolkit_media:AttachedCardShadow x:Key=\"DiscordPage_SidebarSecondaryShadow\" \n                        Color=\"{ThemeResource SystemChromeBlackMediumLowColor}\" \n                        BlurRadius=\"8\"\n                        CornerRadius=\"0\"/>\n\n                    <StaticResource x:Key=\"DiscordPage_Separator_BorderBrush\" ResourceKey=\"SystemControlForegroundBaseLowBrush\"/>\n\n                    <Style x:Key=\"DiscordPage_RightMainGridStyle\" TargetType=\"Grid\">\n                        <Setter Property=\"ui:Effects.Shadow\" Value=\"{StaticResource DiscordPage_SidebarSecondaryShadow}\"/>\n                    </Style>\n\n                    <Style x:Key=\"DiscordPage_SidebarSecondaryStyle\" TargetType=\"Grid\">\n                        <Setter Property=\"ui:Effects.Shadow\" Value=\"{StaticResource DiscordPage_SidebarSecondaryShadow}\"/>\n                    </Style>\n\n                    <Style x:Key=\"DiscordPage_RightSplitPaneStyle\" TargetType=\"Grid\">\n                        <Setter Property=\"ui:Effects.Shadow\" Value=\"{StaticResource DiscordPage_SidebarSecondaryShadow}\"/>\n                    </Style>\n\n                    <!-- FriendsPage -->\n\n                    <SolidColorBrush x:Key=\"FriendsPage_RelationshipItem_Background\" Color=\"Transparent\"/>\n                    <SolidColorBrush x:Key=\"FriendsPage_RelationshipItem_BorderBrush\" Color=\"Transparent\"/>\n                    <CornerRadius x:Key=\"FriendsPage_RelationshipItem_CornerRadius\">0</CornerRadius>\n\n                    <!-- ChannelPage -->\n\n                    <Style x:Key=\"ChannelPageHeaderButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource IconButtonStyle}\">\n                        <Setter Property=\"Margin\" Value=\"2,0,0,0\"/>\n                    </Style>\n\n                    <Style x:Key=\"ChannelPageHeaderToggleButtonStyle\" TargetType=\"ToggleButton\" BasedOn=\"{StaticResource IconToggleButtonStyle}\">\n                        <Setter Property=\"Margin\" Value=\"2,0,0,0\"/>\n                    </Style>\n\n                    <StaticResource x:Key=\"ChannelPage_Header_Background\" ResourceKey=\"SystemControlBackgroundChromeMediumBrush\"/>\n                    <SolidColorBrush x:Key=\"ChannelPage_Header_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"ChannelPage_Header_BorderThickness\">0</Thickness>\n\n                    <StaticResource x:Key=\"ChannelPage_MessageInput_Background\" ResourceKey=\"SystemControlBackgroundChromeMediumBrush\"/>\n                    <SolidColorBrush x:Key=\"ChannelPage_MessageInput_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"ChannelPage_MessageInput_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"ChannelPage_MessageInput_CornerRadius\">0</CornerRadius>\n                    <Thickness x:Key=\"ChannelPage_MessageInput_Margin\">0</Thickness>\n\n                    <StaticResource x:Key=\"SettingsPage_MainBorder_Background\" ResourceKey=\"General_Page_BackgroundBrush\"/>\n\n                    <StaticResource x:Key=\"RichEmbed_Background\" ResourceKey=\"SystemControlBackgroundChromeMediumBrush\"/>\n                    <SolidColorBrush x:Key=\"RichEmbed_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"RichEmbed_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"RichEmbed_CornerRadius\">0</CornerRadius>\n                    <CornerRadius x:Key=\"RichEmbed_Inner_CornerRadius\">0</CornerRadius>\n\n                    <Thickness x:Key=\"RichEmbed_InnerPadding\">12,8,8,8</Thickness>\n\n                    <StaticResource x:Key=\"ImageEmbed_Background\" ResourceKey=\"SystemControlBackgroundChromeMediumBrush\"/>\n                    <SolidColorBrush x:Key=\"ImageEmbed_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"ImageEmbed_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"ImageEmbed_CornerRadius\">0</CornerRadius>\n\n                    <StaticResource x:Key=\"Attachment_Background\" ResourceKey=\"SystemControlBackgroundChromeMediumBrush\"/>\n                    <SolidColorBrush x:Key=\"Attachment_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"Attachment_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"Attachment_CornerRadius\">0</CornerRadius>\n\n                    <SolidColorBrush x:Key=\"AudioMediaTransportControls_ControlPanel_Background\" Color=\"Transparent\"/>\n                    <SolidColorBrush x:Key=\"AudioMediaTransportControls_ControlPanel_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"AudioMediaTransportControls_ControlPanel_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"AudioMediaTransportControls_ControlPanel_CornerRadius\">0</CornerRadius>\n                    <Thickness x:Key=\"AudioMediaTransportControls_ControlPanel_Padding\">0</Thickness>\n\n                    <x:Double x:Key=\"MediaPlayer_AudioOnly_MaxHeight\">52</x:Double>\n                </ResourceDictionary>\n            </lib:XamlControlsResources.MergedDictionaries>\n        </lib:XamlControlsResources>\n    </ResourceDictionary.MergedDictionaries>\n</ResourceDictionary>\n    "
  },
  {
    "path": "Unicord.Universal/Themes/Styles/Performance.xaml",
    "content": "﻿<ResourceDictionary \n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" \n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:media=\"using:Microsoft.UI.Xaml.Media\"\n    xmlns:toolkit_media=\"using:Microsoft.Toolkit.Uwp.UI.Media\"\n    xmlns:ui=\"using:Microsoft.Toolkit.Uwp.UI\" \n    xmlns:w1803=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)\">\n    <ResourceDictionary.MergedDictionaries>\n        <lib:XamlControlsResources lib:ControlsResourcesVersion=\"Version1\">\n            <lib:XamlControlsResources.MergedDictionaries>\n                <ResourceDictionary>\n                    <!-- Windows 10 circa 1703 Styling -->\n                    <ResourceDictionary.ThemeDictionaries>\n                        <ResourceDictionary x:Key=\"Light\">\n                            <Color x:Key=\"BackgroundTertiaryColour\">#FFF5F5F5</Color>\n                            <Color x:Key=\"BackgroundSecondaryColour\">#FFF0F0F0</Color>\n                            <Color x:Key=\"BackgroundPrimaryColour\">#FFEEEEEE</Color>\n                        </ResourceDictionary>\n                        <ResourceDictionary x:Key=\"Dark\">\n                            <Color x:Key=\"BackgroundPrimaryColour\">#FF0F0F0F</Color>\n                            <Color x:Key=\"BackgroundSecondaryColour\">#FF181818</Color>\n                            <Color x:Key=\"BackgroundTertiaryColour\">#FF1C1C1C</Color>\n                        </ResourceDictionary>\n                    </ResourceDictionary.ThemeDictionaries>\n                    <ResourceDictionary.MergedDictionaries>\n                        <ResourceDictionary Source=\"ms-appx:///Themes/Styles/Backport/NavigationView_rs1.xaml\"/>\n                    </ResourceDictionary.MergedDictionaries>\n\n                    <Style x:Key=\"UnicordListViewItemStyle\" TargetType=\"ListViewItem\" BasedOn=\"{StaticResource DefaultListViewItemStyle}\"/>\n                    \n                    <CornerRadius x:Key=\"ControlCornerRadius\">0,0,0,0</CornerRadius>\n                    <CornerRadius x:Key=\"OverlayCornerRadius\">0,0,0,0</CornerRadius>\n\n                    <CornerRadius x:Key=\"AccountsSettings_ProfileCard_CornerRadius\">0</CornerRadius>\n                    <CornerRadius x:Key=\"AccountsSettings_ProfileCard_BannerCornerRadius\">0</CornerRadius>\n\n                    <SolidColorBrush x:Key=\"General_Page_BackgroundBrush\" Color=\"{ThemeResource BackgroundPrimaryColour}\"/>\n\n                    <!-- General -->\n\n                    <Style x:Key=\"CleanButtonStyle\" TargetType=\"Button\">\n                        <Setter Property=\"Background\" Value=\"Transparent\"/>\n                        <Setter Property=\"Foreground\" Value=\"{ThemeResource ButtonForeground}\" />\n                        <Setter Property=\"w1803:Control.CornerRadius\" Value=\"0\"/>\n                    </Style>\n\n                    <Style x:Key=\"StretchyIconButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource CleanButtonStyle}\">\n                        <Setter Property=\"FontFamily\" Value=\"{ThemeResource SymbolThemeFontFamily}\"/>\n                        <Setter Property=\"FontSize\" Value=\"16\"/>\n                    </Style>\n\n                    <Style x:Key=\"IconButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource StretchyIconButtonStyle}\">\n                        <Setter Property=\"MinWidth\" Value=\"40\"/>\n                        <Setter Property=\"MinHeight\" Value=\"40\"/>\n                        <Setter Property=\"Padding\" Value=\"8\" />\n                    </Style>\n\n                    <Style x:Key=\"StretchyIconToggleButtonStyle\" TargetType=\"ToggleButton\">\n                        <Setter Property=\"Background\" Value=\"Transparent\"/>\n                        <Setter Property=\"FontFamily\" Value=\"{ThemeResource SymbolThemeFontFamily}\"/>\n                        <Setter Property=\"FontSize\" Value=\"16\"/>\n                        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                        <Setter Property=\"UseLayoutRounding\" Value=\"True\"/>\n                        <Setter Property=\"Foreground\" Value=\"{ThemeResource ButtonForeground}\" />\n                        <Setter Property=\"w1803:Control.CornerRadius\" Value=\"0\"/>\n                    </Style>\n\n                    <Style x:Key=\"IconToggleButtonStyle\" TargetType=\"ToggleButton\" BasedOn=\"{StaticResource StretchyIconToggleButtonStyle}\">\n                        <Setter Property=\"MinWidth\" Value=\"40\"/>\n                        <Setter Property=\"MinHeight\" Value=\"40\"/>\n                        <Setter Property=\"Padding\" Value=\"8\" />\n                    </Style>\n\n                    <Style TargetType=\"GridViewItem\" x:Key=\"DefaultGridViewItemStyle\">\n                        <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\" />\n                        <Setter Property=\"FontSize\" Value=\"{ThemeResource ControlContentThemeFontSize}\" />\n                        <Setter Property=\"Background\" Value=\"{ThemeResource GridViewItemBackground}\" />\n                        <Setter Property=\"Foreground\" Value=\"{ThemeResource GridViewItemForeground}\" />\n                        <Setter Property=\"TabNavigation\" Value=\"Local\" />\n                        <Setter Property=\"IsHoldingEnabled\" Value=\"True\" />\n                        <Setter Property=\"HorizontalContentAlignment\" Value=\"Center\" />\n                        <Setter Property=\"VerticalContentAlignment\" Value=\"Center\" />\n                        <Setter Property=\"Margin\" Value=\"0,0,4,4\" />\n                        <Setter Property=\"MinWidth\" Value=\"{ThemeResource GridViewItemMinWidth}\" />\n                        <Setter Property=\"MinHeight\" Value=\"{ThemeResource GridViewItemMinHeight}\" />\n                        <Setter Property=\"AllowDrop\" Value=\"False\" />\n                        <Setter Property=\"UseSystemFocusVisuals\" Value=\"{StaticResource UseSystemFocusVisuals}\" />\n                        <Setter Property=\"FocusVisualMargin\" Value=\"-2\" />\n                        <Setter Property=\"Template\">\n                            <Setter.Value>\n                                <ControlTemplate TargetType=\"GridViewItem\">\n                                    <ListViewItemPresenter ContentTransitions=\"{TemplateBinding ContentTransitions}\" \n                                           x:Name=\"Root\" \n                                           Control.IsTemplateFocusTarget=\"True\" \n                                           FocusVisualMargin=\"{TemplateBinding FocusVisualMargin}\"\n                                           SelectionCheckMarkVisualEnabled=\"{ThemeResource GridViewItemSelectionCheckMarkVisualEnabled}\" \n                                           CheckBrush=\"{ThemeResource GridViewItemCheckBrush}\" \n                                           CheckBoxBrush=\"{ThemeResource GridViewItemCheckBoxBrush}\"\n                                           DragBackground=\"{ThemeResource GridViewItemDragBackground}\" \n                                           DragForeground=\"{ThemeResource GridViewItemDragForeground}\" \n                                           FocusBorderBrush=\"{ThemeResource GridViewItemFocusBorderBrush}\" \n                                           FocusSecondaryBorderBrush=\"{ThemeResource GridViewItemFocusSecondaryBorderBrush}\" \n                                           PlaceholderBackground=\"{ThemeResource GridViewItemPlaceholderBackground}\" \n                                           PointerOverBackground=\"{ThemeResource GridViewItemBackgroundPointerOver}\" \n                                           PointerOverForeground=\"{ThemeResource GridViewItemForegroundPointerOver}\" \n                                           SelectedBackground=\"{ThemeResource GridViewItemBackgroundSelected}\" \n                                           SelectedForeground=\"{ThemeResource GridViewItemForegroundSelected}\" \n                                           SelectedPointerOverBackground=\"{ThemeResource GridViewItemBackgroundSelectedPointerOver}\" \n                                           PressedBackground=\"{ThemeResource GridViewItemBackgroundPressed}\" \n                                           SelectedPressedBackground=\"{ThemeResource GridViewItemBackgroundSelectedPressed}\" \n                                           DisabledOpacity=\"{ThemeResource ListViewItemDisabledThemeOpacity}\" \n                                           DragOpacity=\"{ThemeResource ListViewItemDragThemeOpacity}\" \n                                           ReorderHintOffset=\"{ThemeResource GridViewItemReorderHintThemeOffset}\" \n                                           HorizontalContentAlignment=\"{TemplateBinding HorizontalContentAlignment}\" \n                                           VerticalContentAlignment=\"{TemplateBinding VerticalContentAlignment}\" \n                                           ContentMargin=\"{TemplateBinding Padding}\" \n                                           CheckMode=\"{ThemeResource GridViewItemCheckMode}\" />\n                                </ControlTemplate>\n                            </Setter.Value>\n                        </Setter>\n                    </Style>\n\n                    <SolidColorBrush x:Key=\"BackgroundPrimaryBrush\" Color=\"{ThemeResource BackgroundPrimaryColour}\"/>\n                    <SolidColorBrush x:Key=\"BackgroundSecondaryBrush\" Color=\"{ThemeResource BackgroundSecondaryColour}\"/>\n                    <SolidColorBrush x:Key=\"BackgroundTertiaryBrush\" Color=\"{ThemeResource BackgroundTertiaryColour}\"/>\n                    <SolidColorBrush x:Key=\"MainBackgroundBrush\" Color=\"{ThemeResource BackgroundTertiaryColour}\"/>\n\n                    <CornerRadius x:Key=\"ZeroCornerRadius\">0</CornerRadius>\n                    <Thickness x:Key=\"ZeroThickness\">0</Thickness>\n\n                    <!-- DiscordPage -->\n\n                    <SolidColorBrush x:Key=\"DiscordPage_PrimarySidebar_BackgroundBrush\" \n                     Color=\"{ThemeResource BackgroundPrimaryColour}\" />\n\n                    <Thickness x:Key=\"DiscordPage_SecondaryGridMargin\">0,0,0,0</Thickness>\n\n                    <SolidColorBrush x:Key=\"DiscordPage_SecondaryGrid_Background\" \n                     Color=\"{ThemeResource BackgroundSecondaryColour}\" />\n                    <SolidColorBrush x:Key=\"DiscordPage_SecondaryGrid_BorderBrush\" Color=\"Transparent\"/>\n\n                    <Thickness x:Key=\"DiscordPage_SecondaryGrid_BorderThickness\">0</Thickness>\n                    <Thickness x:Key=\"DiscordPage_SecondaryGrid_BottomItem_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"DiscordPage_SecondaryGrid_CornerRadius\">0</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_SecondaryGrid_BottomItem_CornerRadius\">0</CornerRadius>\n\n                    <!-- User Pill specific resources -->\n                    <SolidColorBrush x:Key=\"DiscordPage_UserPill_Background\" \n                    Color=\"{ThemeResource BackgroundSecondaryColour}\" />\n                    <CornerRadius x:Key=\"DiscordPage_UserPill_CornerRadius\">0</CornerRadius>\n                    <x:String x:Key=\"DiscordPage_UserPill_SecondaryFontFamily\">Segoe UI</x:String>\n\n                    <Thickness x:Key=\"DiscordPage_SecondaryGrid_SplitMargin\">0</Thickness>\n\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness\">0,0,0,0</Thickness>\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness_TwoPaneLeft\">0,0,0,0</Thickness>\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness_TwoPaneRight\">0,0,0,0</Thickness>\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness_ThreePane\">0,0,0,0</Thickness>\n\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius\">0,0,0,0</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius_TwoPaneLeft\">0,0,0,0</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius_TwoPaneRight\">0,0,0,0</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius_ThreePane\">0,0,0,0</CornerRadius>\n\n                    <SolidColorBrush x:Key=\"DiscordPage_MainContent_Background\" Color=\"{ThemeResource BackgroundTertiaryColour}\"/>\n                    <SolidColorBrush x:Key=\"DiscordPage_MainContent_BorderBrush\" Color=\"Transparent\"/>\n\n                    <SolidColorBrush x:Key=\"DiscordPage_RightSplitPaneGrid_Background\" Color=\"{ThemeResource BackgroundSecondaryColour}\" />\n\n                    <Thickness x:Key=\"DiscordPage_RightSplitPaneGrid_Margin\">0</Thickness>\n                    <SolidColorBrush x:Key=\"DiscordPage_RightSplitPaneGrid_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"DiscordPage_RightSplitPaneGrid_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"DiscordPage_RightSplitPaneGrid_CornerRadius\">0</CornerRadius>\n                    \n                    <StaticResource x:Key=\"DiscordPage_Separator_BorderBrush\" ResourceKey=\"SystemControlForegroundBaseLowBrush\"/>\n\n                    <Style x:Key=\"DiscordPage_RightMainGridStyle\" TargetType=\"Grid\"/>\n                    <Style x:Key=\"DiscordPage_SidebarSecondaryStyle\" TargetType=\"Grid\"/>\n                    <Style x:Key=\"DiscordPage_RightSplitPaneStyle\" TargetType=\"Grid\"/>\n\n                    <!-- FriendsPage -->\n\n                    <SolidColorBrush x:Key=\"FriendsPage_RelationshipItem_Background\" Color=\"Transparent\"/>\n                    <SolidColorBrush x:Key=\"FriendsPage_RelationshipItem_BorderBrush\" Color=\"Transparent\"/>\n                    <CornerRadius x:Key=\"FriendsPage_RelationshipItem_CornerRadius\">0</CornerRadius>\n\n                    <!-- ChannelPage -->\n\n                    <Style x:Key=\"ChannelPageHeaderButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource IconButtonStyle}\">\n                        <Setter Property=\"Margin\" Value=\"2,0,0,0\"/>\n                    </Style>\n\n                    <Style x:Key=\"ChannelPageHeaderToggleButtonStyle\" TargetType=\"ToggleButton\" BasedOn=\"{StaticResource IconToggleButtonStyle}\">\n                        <Setter Property=\"Margin\" Value=\"2,0,0,0\"/>\n                    </Style>\n\n                    <StaticResource x:Key=\"ChannelPage_Header_Background\" ResourceKey=\"SystemControlBackgroundChromeMediumBrush\"/>\n                    <SolidColorBrush x:Key=\"ChannelPage_Header_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"ChannelPage_Header_BorderThickness\">0</Thickness>\n\n                    <StaticResource x:Key=\"ChannelPage_MessageInput_Background\" ResourceKey=\"SystemControlBackgroundChromeMediumBrush\"/>\n                    <SolidColorBrush x:Key=\"ChannelPage_MessageInput_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"ChannelPage_MessageInput_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"ChannelPage_MessageInput_CornerRadius\">0</CornerRadius>\n                    <Thickness x:Key=\"ChannelPage_MessageInput_Margin\">0</Thickness>\n\n                    <StaticResource x:Key=\"SettingsPage_MainBorder_Background\" ResourceKey=\"General_Page_BackgroundBrush\"/>\n\n                    <StaticResource x:Key=\"RichEmbed_Background\" ResourceKey=\"SystemControlBackgroundChromeMediumBrush\"/>\n                    <SolidColorBrush x:Key=\"RichEmbed_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"RichEmbed_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"RichEmbed_CornerRadius\">0</CornerRadius>\n                    <CornerRadius x:Key=\"RichEmbed_Inner_CornerRadius\">0</CornerRadius>\n\n                    <Thickness x:Key=\"RichEmbed_InnerPadding\">12,8,8,8</Thickness>\n\n                    <StaticResource x:Key=\"ImageEmbed_Background\" ResourceKey=\"SystemControlBackgroundChromeMediumLowBrush\"/>\n                    <SolidColorBrush x:Key=\"ImageEmbed_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"ImageEmbed_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"ImageEmbed_CornerRadius\">0</CornerRadius>\n\n                    <StaticResource x:Key=\"Attachment_Background\" ResourceKey=\"SystemControlBackgroundChromeMediumBrush\"/>\n                    <SolidColorBrush x:Key=\"Attachment_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"Attachment_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"Attachment_CornerRadius\">0</CornerRadius>\n                    \n                    <SolidColorBrush x:Key=\"AudioMediaTransportControls_ControlPanel_Background\" Color=\"Transparent\"/>\n                    <SolidColorBrush x:Key=\"AudioMediaTransportControls_ControlPanel_BorderBrush\" Color=\"Transparent\"/>\n                    <Thickness x:Key=\"AudioMediaTransportControls_ControlPanel_BorderThickness\">0</Thickness>\n                    <CornerRadius x:Key=\"AudioMediaTransportControls_ControlPanel_CornerRadius\">0</CornerRadius>\n                    <Thickness x:Key=\"AudioMediaTransportControls_ControlPanel_Padding\">0</Thickness>\n\n                    <x:Double x:Key=\"MediaPlayer_AudioOnly_MaxHeight\">52</x:Double>\n                </ResourceDictionary>\n            </lib:XamlControlsResources.MergedDictionaries>\n        </lib:XamlControlsResources>\n    </ResourceDictionary.MergedDictionaries>\n</ResourceDictionary>"
  },
  {
    "path": "Unicord.Universal/Themes/Styles/SunValley.xaml",
    "content": "﻿<ResourceDictionary \n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" \n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\n    xmlns:media=\"using:Microsoft.UI.Xaml.Media\"\n    xmlns:toolkit_media=\"using:Microsoft.Toolkit.Uwp.UI.Media\"\n    xmlns:ui=\"using:Microsoft.Toolkit.Uwp.UI\" \n    xmlns:w1803=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation?IsApiContractPresent(Windows.Foundation.UniversalApiContract, 7)\">\n    <ResourceDictionary.MergedDictionaries>\n        <lib:XamlControlsResources lib:ControlsResourcesVersion=\"Version2\">\n            <!-- Windows 11 Styling -->\n            <lib:XamlControlsResources.MergedDictionaries>\n                <ResourceDictionary>\n                    <!-- General -->\n                    <Style x:Key=\"UnicordListViewItemStyle\" TargetType=\"ListViewItem\" BasedOn=\"{StaticResource DefaultListViewItemStyle}\"/>\n\n                    <SolidColorBrush x:Key=\"General_Page_BackgroundBrush\" Color=\"Transparent\"/>\n\n                    <FontFamily x:Key=\"PivotHeaderItemFontFamily\">Segoe UI Variable</FontFamily>\n                    <FontWeight x:Key=\"PivotHeaderItemThemeFontWeight\">Semibold</FontWeight>\n\n                    <CornerRadius x:Key=\"AccountsSettings_ProfileCard_CornerRadius\">8</CornerRadius>\n                    <CornerRadius x:Key=\"AccountsSettings_ProfileCard_BannerCornerRadius\">8,8,0,0</CornerRadius>\n\n                    <Style x:Key=\"CleanButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource DefaultButtonStyle}\">\n                        <Setter Property=\"Background\" Value=\"Transparent\"/>\n                    </Style>\n\n                    <Style x:Key=\"StretchyIconButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource CleanButtonStyle}\">\n                        <Setter Property=\"BorderBrush\" Value=\"Transparent\" />\n                        <Setter Property=\"FontFamily\" Value=\"{StaticResource SymbolThemeFontFamily}\"/>\n                        <Setter Property=\"FontSize\" Value=\"16\"/>\n                    </Style>\n\n                    <Style x:Key=\"IconButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource StretchyIconButtonStyle}\">\n                        <Setter Property=\"Padding\" Value=\"8\" />\n                    </Style>\n\n                    <Style x:Key=\"StretchyIconToggleButtonStyle\" TargetType=\"ToggleButton\" BasedOn=\"{StaticResource DefaultToggleButtonStyle}\">\n                        <Setter Property=\"Background\" Value=\"Transparent\"/>\n                        <Setter Property=\"FontFamily\" Value=\"{StaticResource SymbolThemeFontFamily}\"/>\n                        <Setter Property=\"FontSize\" Value=\"16\"/>\n                        <Setter Property=\"BorderThickness\" Value=\"1\"/>\n                        <Setter Property=\"UseLayoutRounding\" Value=\"True\"/>\n                        <Setter Property=\"BorderBrush\" Value=\"Transparent\" />\n                    </Style>\n\n                    <Style x:Key=\"IconToggleButtonStyle\" TargetType=\"ToggleButton\" BasedOn=\"{StaticResource StretchyIconToggleButtonStyle}\">\n                        <Setter Property=\"Padding\" Value=\"8\" />\n                    </Style>\n\n                    <!-- DiscordPage -->\n\n                    <SolidColorBrush x:Key=\"DiscordPage_PrimarySidebar_BackgroundBrush\" Color=\"Transparent\"/>\n\n                    <Thickness x:Key=\"DiscordPage_SecondaryGridMargin\">0,0,4,0</Thickness>\n                    <StaticResource x:Key=\"DiscordPage_SecondaryGrid_Background\" ResourceKey=\"LayerFillColorDefaultBrush\"/>\n                    <StaticResource x:Key=\"DiscordPage_SecondaryGrid_BorderBrush\" ResourceKey=\"CardStrokeColorDefaultBrush\"/>\n\n                    <Thickness x:Key=\"DiscordPage_SecondaryGrid_BorderThickness\">1</Thickness>\n                    <Thickness x:Key=\"DiscordPage_SecondaryGrid_BottomItem_BorderThickness\">1,1,1,0</Thickness>\n\n                    <CornerRadius x:Key=\"DiscordPage_SecondaryGrid_CornerRadius\">4,4,0,0</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_SecondaryGrid_BottomItem_CornerRadius\">4,4,0,0</CornerRadius>\n\n                    <!-- User Pill specific resources -->\n                    <media:AcrylicBrush x:Key=\"DiscordPage_UserPill_Background\" \n                  BackgroundSource=\"Backdrop\" \n                  TintOpacity=\"0.70\" \n                  FallbackColor=\"{ThemeResource LayerFillColorDefault}\" \n                  TintColor=\"{ThemeResource LayerFillColorDefault}\" />\n                    <CornerRadius x:Key=\"DiscordPage_UserPill_CornerRadius\">8</CornerRadius>\n                    <x:String x:Key=\"DiscordPage_UserPill_SecondaryFontFamily\">Segoe UI Variable Small</x:String>\n\n                    <Thickness x:Key=\"DiscordPage_SecondaryGrid_SplitMargin\">0,0,0,0</Thickness>\n\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness\">0,1,0,0</Thickness>\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness_TwoPaneLeft\">1,1,0,0</Thickness>\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness_TwoPaneRight\">0,1,1,0</Thickness>\n                    <Thickness x:Key=\"DiscordPage_MainContent_BorderThickness_ThreePane\">1,1,1,0</Thickness>\n\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius\">4</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius_TwoPaneLeft\">4,0,0,0</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius_TwoPaneRight\">0,4,0,0</CornerRadius>\n                    <CornerRadius x:Key=\"DiscordPage_MainContent_CornerRadius_ThreePane\">4,4,0,0</CornerRadius>\n\n                    <StaticResource x:Key=\"DiscordPage_MainContent_Background\" ResourceKey=\"LayerFillColorDefaultBrush\"/>\n                    <StaticResource x:Key=\"DiscordPage_MainContent_BorderBrush\" ResourceKey=\"CardStrokeColorDefaultBrush\"/>\n\n                    <Style x:Key=\"DiscordPage_RightMainGridStyle\" TargetType=\"Grid\"/>\n                    <Style x:Key=\"DiscordPage_SidebarSecondaryStyle\" TargetType=\"Grid\"/>\n                    <Style x:Key=\"DiscordPage_RightSplitPaneStyle\" TargetType=\"Grid\"/>\n\n                    <Thickness x:Key=\"DiscordPage_RightSplitPaneGrid_Margin\">4,0,0,0</Thickness>\n                    <StaticResource x:Key=\"DiscordPage_RightSplitPaneGrid_Background\" ResourceKey=\"LayerFillColorDefaultBrush\"/>\n                    <StaticResource x:Key=\"DiscordPage_RightSplitPaneGrid_BorderBrush\" ResourceKey=\"CardStrokeColorDefaultBrush\"/>\n                    <Thickness x:Key=\"DiscordPage_RightSplitPaneGrid_BorderThickness\">1,1,0,0</Thickness>\n                    <CornerRadius x:Key=\"DiscordPage_RightSplitPaneGrid_CornerRadius\">4,0,0,0</CornerRadius>\n\n                    <StaticResource x:Key=\"DiscordPage_Separator_BorderBrush\" ResourceKey=\"DividerStrokeColorDefaultBrush\"/>\n                    \n                    <!-- FriendsPage -->\n\n                    <StaticResource x:Key=\"FriendsPage_RelationshipItem_Background\" ResourceKey=\"LayerFillColorDefaultBrush\"/>\n                    <StaticResource x:Key=\"FriendsPage_RelationshipItem_BorderBrush\" ResourceKey=\"CardStrokeColorDefaultBrush\"/>\n                    <CornerRadius x:Key=\"FriendsPage_RelationshipItem_CornerRadius\">4</CornerRadius>\n\n                    <!-- ChannelPage -->\n\n                    <Style x:Key=\"ChannelPageHeaderButtonStyle\" TargetType=\"Button\" BasedOn=\"{StaticResource IconButtonStyle}\">\n                        <Setter Property=\"Margin\" Value=\"2\"/>\n                    </Style>\n\n                    <Style x:Key=\"ChannelPageHeaderToggleButtonStyle\" TargetType=\"ToggleButton\" BasedOn=\"{StaticResource IconToggleButtonStyle}\">\n                        <Setter Property=\"Margin\" Value=\"2\"/>\n                    </Style>\n\n                    <SolidColorBrush x:Key=\"ChannelPage_Header_Background\" Color=\"Transparent\"/>\n                    <StaticResource x:Key=\"ChannelPage_Header_BorderBrush\" ResourceKey=\"DividerStrokeColorDefaultBrush\"/>\n                    <Thickness x:Key=\"ChannelPage_Header_BorderThickness\">0,0,0,1</Thickness>\n\n                    <StaticResource x:Key=\"ChannelPage_MessageInput_Background\" ResourceKey=\"LayerFillColorDefaultBrush\"/>\n                    <StaticResource x:Key=\"ChannelPage_MessageInput_BorderBrush\" ResourceKey=\"CardStrokeColorDefaultBrush\"/>\n                    <Thickness x:Key=\"ChannelPage_MessageInput_BorderThickness\">1</Thickness>\n                    <CornerRadius x:Key=\"ChannelPage_MessageInput_CornerRadius\">4</CornerRadius>\n                    <Thickness x:Key=\"ChannelPage_MessageInput_Margin\">12,0,12,12</Thickness>\n\n                    <StaticResource x:Key=\"SettingsPage_MainBorder_Background\" ResourceKey=\"AcrylicInAppFillColorBaseBrush\"/>\n\n                    <StaticResource x:Key=\"RichEmbed_Background\" ResourceKey=\"CardBackgroundFillColorDefaultBrush\"/>\n                    <StaticResource x:Key=\"RichEmbed_BorderBrush\" ResourceKey=\"CardStrokeColorDefaultBrush\"/>\n                    <Thickness x:Key=\"RichEmbed_BorderThickness\">1</Thickness>\n                    <CornerRadius x:Key=\"RichEmbed_CornerRadius\">4</CornerRadius>\n                    <CornerRadius x:Key=\"RichEmbed_Inner_CornerRadius\">3</CornerRadius>\n\n                    <Thickness x:Key=\"RichEmbed_InnerPadding\">16,12,12,12</Thickness>\n\n                    <StaticResource x:Key=\"ImageEmbed_Background\" ResourceKey=\"CardBackgroundFillColorSecondaryBrush\"/>\n                    <StaticResource x:Key=\"ImageEmbed_BorderBrush\" ResourceKey=\"CardStrokeColorDefaultBrush\"/>\n                    <Thickness x:Key=\"ImageEmbed_BorderThickness\">1</Thickness>\n                    <CornerRadius x:Key=\"ImageEmbed_CornerRadius\">2</CornerRadius>\n\n                    <StaticResource x:Key=\"Attachment_Background\" ResourceKey=\"CardBackgroundFillColorDefaultBrush\"/>\n                    <StaticResource x:Key=\"Attachment_BorderBrush\" ResourceKey=\"CardStrokeColorDefaultBrush\"/>\n                    <Thickness x:Key=\"Attachment_BorderThickness\">1</Thickness>\n                    <CornerRadius x:Key=\"Attachment_CornerRadius\">4</CornerRadius>\n\n                    <StaticResource x:Key=\"AudioMediaTransportControls_ControlPanel_Background\" ResourceKey=\"CardBackgroundFillColorDefaultBrush\"/>\n                    <StaticResource x:Key=\"AudioMediaTransportControls_ControlPanel_BorderBrush\" ResourceKey=\"CardStrokeColorDefaultBrush\"/>\n                    <Thickness x:Key=\"AudioMediaTransportControls_ControlPanel_BorderThickness\">1</Thickness>\n                    <CornerRadius x:Key=\"AudioMediaTransportControls_ControlPanel_CornerRadius\">4</CornerRadius>\n                    <Thickness x:Key=\"AudioMediaTransportControls_ControlPanel_Padding\">4</Thickness>\n\n                    <x:Double x:Key=\"MediaPlayer_AudioOnly_MaxHeight\">44</x:Double>\n                </ResourceDictionary>\n            </lib:XamlControlsResources.MergedDictionaries>\n        </lib:XamlControlsResources>\n        <ResourceDictionary Source=\"ms-appx:///Themes/Styles/Backport/WinUIResources_21h1.xaml\"/>\n    </ResourceDictionary.MergedDictionaries>\n</ResourceDictionary>\n    "
  },
  {
    "path": "Unicord.Universal/Themes/Templates.xaml",
    "content": "﻿<ResourceDictionary\r\n    x:Class=\"Unicord.Universal.Resources.Templates\"\r\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" \r\n    xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\r\n    xmlns:local=\"using:Unicord.Universal.Resources\"\r\n    xmlns:wam=\"using:Unicord.Universal.Controls\"\r\n    xmlns:models=\"using:Unicord.Universal.Models\"\r\n    xmlns:entities=\"using:DSharpPlus.Entities\"\r\n    xmlns:lib=\"using:Microsoft.UI.Xaml.Controls\"\r\n    xmlns:media=\"using:Microsoft.UI.Xaml.Media\"\r\n    xmlns:flyouts=\"using:Unicord.Universal.Controls.Flyouts\"\r\n    xmlns:controls=\"using:Unicord.Universal.Controls\"\r\n    xmlns:presence=\"using:Unicord.Universal.Controls.Presence\"\r\n    xmlns:users=\"using:Unicord.Universal.Controls.Users\"\r\n    xmlns:i=\"using:Microsoft.Xaml.Interactivity\"\r\n    xmlns:core=\"using:Microsoft.Xaml.Interactions.Core\" \r\n    xmlns:media1=\"using:Microsoft.Xaml.Interactions.Media\" \r\n    xmlns:channels=\"using:Unicord.Universal.Controls.Channels\"\r\n    xmlns:channelVMs=\"using:Unicord.Universal.Models.Channels\"\r\n    xmlns:guildVMs=\"using:Unicord.Universal.Models.Guild\" \r\n    xmlns:userVMs=\"using:Unicord.Universal.Models.User\"\r\n    x:DefaultBindMode=\"OneWay\">\r\n\r\n    <ResourceDictionary.MergedDictionaries>\r\n        <Presences xmlns=\"using:Unicord.Universal.Resources.Controls\"/>\r\n        <Messages xmlns=\"using:Unicord.Universal.Resources.Controls\"/>\r\n        <ResourceDictionary Source=\"Controls/Emoji.xaml\"/>\r\n        <ResourceDictionary Source=\"Controls/Users.xaml\"/>\r\n        <ResourceDictionary Source=\"Controls/Permissions.xaml\"/>\r\n        <ResourceDictionary Source=\"Controls/UniversalWebView.xaml\"/>\r\n        <ResourceDictionary Source=\"Controls/Flyouts.xaml\"/>\r\n        <Channels xmlns=\"using:Unicord.Universal.Resources.Controls\"/>\r\n    </ResourceDictionary.MergedDictionaries>\r\n\r\n    <Style x:Key=\"ChannelNameTextBoxStyle\" TargetType=\"TextBox\">\r\n        <Setter Property=\"Foreground\" Value=\"{ThemeResource TextControlForeground}\"/>\r\n        <Setter Property=\"Background\" Value=\"{ThemeResource TextControlBackground}\"/>\r\n        <Setter Property=\"BorderBrush\" Value=\"{ThemeResource TextControlBorderBrush}\"/>\r\n        <Setter Property=\"SelectionHighlightColor\" Value=\"{ThemeResource TextControlSelectionHighlightColor}\"/>\r\n        <Setter Property=\"BorderThickness\" Value=\"2,2,2,2\"/>\r\n        <Setter Property=\"FontFamily\" Value=\"{ThemeResource ContentControlThemeFontFamily}\"/>\r\n        <Setter Property=\"FontSize\" Value=\"{ThemeResource ControlContentThemeFontSize}\"/>\r\n        <Setter Property=\"ScrollViewer.HorizontalScrollMode\" Value=\"Auto\"/>\r\n        <Setter Property=\"ScrollViewer.VerticalScrollMode\" Value=\"Auto\"/>\r\n        <Setter Property=\"ScrollViewer.HorizontalScrollBarVisibility\" Value=\"Hidden\"/>\r\n        <Setter Property=\"ScrollViewer.VerticalScrollBarVisibility\" Value=\"Hidden\"/>\r\n        <Setter Property=\"ScrollViewer.IsDeferredScrollingEnabled\" Value=\"False\"/>\r\n        <Setter Property=\"Padding\" Value=\"{ThemeResource TextControlThemePadding}\"/>\r\n        <Setter Property=\"Template\">\r\n            <Setter.Value>\r\n                <ControlTemplate TargetType=\"TextBox\">\r\n                    <Grid>\r\n                        <Grid.Resources>\r\n                            <Style x:Name=\"DeleteButtonStyle\" TargetType=\"Button\">\r\n                                <Setter Property=\"Template\">\r\n                                    <Setter.Value>\r\n                                        <ControlTemplate TargetType=\"Button\">\r\n                                            <Grid x:Name=\"ButtonLayoutGrid\" Background=\"{ThemeResource TextControlButtonBackground}\" BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{ThemeResource TextControlButtonBorderBrush}\">\r\n                                                <VisualStateManager.VisualStateGroups>\r\n                                                    <VisualStateGroup x:Name=\"CommonStates\">\r\n                                                        <VisualState x:Name=\"Normal\"/>\r\n                                                        <VisualState x:Name=\"PointerOver\">\r\n                                                            <Storyboard>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ButtonLayoutGrid\" Storyboard.TargetProperty=\"Background\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBackgroundPointerOver}\"/>\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ButtonLayoutGrid\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBorderBrushPointerOver}\"/>\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"GlyphElement\" Storyboard.TargetProperty=\"Foreground\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonForegroundPointerOver}\"/>\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                            </Storyboard>\r\n                                                        </VisualState>\r\n                                                        <VisualState x:Name=\"Pressed\">\r\n                                                            <Storyboard>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ButtonLayoutGrid\" Storyboard.TargetProperty=\"Background\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBackgroundPressed}\"/>\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ButtonLayoutGrid\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonBorderBrushPressed}\"/>\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                                <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"GlyphElement\" Storyboard.TargetProperty=\"Foreground\">\r\n                                                                    <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlButtonForegroundPressed}\"/>\r\n                                                                </ObjectAnimationUsingKeyFrames>\r\n                                                            </Storyboard>\r\n                                                        </VisualState>\r\n                                                        <VisualState x:Name=\"Disabled\">\r\n                                                            <Storyboard>\r\n                                                                <DoubleAnimation Duration=\"0\" Storyboard.TargetName=\"ButtonLayoutGrid\" Storyboard.TargetProperty=\"Opacity\" To=\"0\"/>\r\n                                                            </Storyboard>\r\n                                                        </VisualState>\r\n                                                    </VisualStateGroup>\r\n                                                </VisualStateManager.VisualStateGroups>\r\n                                                <TextBlock x:Name=\"GlyphElement\" AutomationProperties.AccessibilityView=\"Raw\" FontStyle=\"Normal\" FontFamily=\"{StaticResource SymbolThemeFontFamily}\" Foreground=\"{ThemeResource TextControlButtonForeground}\" FontSize=\"12\" HorizontalAlignment=\"Center\" Text=\"&#xE10A;\" VerticalAlignment=\"Center\"/>\r\n                                            </Grid>\r\n                                        </ControlTemplate>\r\n                                    </Setter.Value>\r\n                                </Setter>\r\n                            </Style>\r\n                        </Grid.Resources>\r\n                        <Grid.ColumnDefinitions>\r\n                            <ColumnDefinition Width=\"Auto\"/>\r\n                            <ColumnDefinition Width=\"*\"/>\r\n                            <ColumnDefinition Width=\"Auto\"/>\r\n                        </Grid.ColumnDefinitions>\r\n                        <Grid.RowDefinitions>\r\n                            <RowDefinition Height=\"Auto\"/>\r\n                            <RowDefinition Height=\"*\"/>\r\n                            <RowDefinition Height=\"Auto\"/>\r\n                        </Grid.RowDefinitions>\r\n                        <VisualStateManager.VisualStateGroups>\r\n                            <VisualStateGroup x:Name=\"CommonStates\">\r\n                                <VisualState x:Name=\"Normal\"/>\r\n                                <VisualState x:Name=\"Disabled\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"HeaderContentPresenter\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlHeaderForegroundDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBackgroundDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ElementElement\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TransparentBrush}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBorderBrushDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentElement\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlForegroundDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ElementText\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlForegroundDisabled}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"PointerOver\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBorderBrushPointerOver}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ElementElement\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBorderBrushPointerOver}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBackgroundPointerOver}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentElement\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlForegroundPointerOver}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"Focused\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBackgroundFocused}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ElementElement\" Storyboard.TargetProperty=\"Background\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBorderBrushFocused}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"BorderElement\" Storyboard.TargetProperty=\"BorderBrush\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlBorderBrushFocused}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentElement\" Storyboard.TargetProperty=\"Foreground\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"{ThemeResource TextControlForegroundFocused}\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"ContentElement\" Storyboard.TargetProperty=\"RequestedTheme\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\" Value=\"Light\"/>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                            </VisualStateGroup>\r\n                            <VisualStateGroup x:Name=\"ButtonStates\">\r\n                                <VisualState x:Name=\"ButtonVisible\">\r\n                                    <Storyboard>\r\n                                        <ObjectAnimationUsingKeyFrames Storyboard.TargetName=\"DeleteButton\" Storyboard.TargetProperty=\"Visibility\">\r\n                                            <DiscreteObjectKeyFrame KeyTime=\"0\">\r\n                                                <DiscreteObjectKeyFrame.Value>\r\n                                                    <Visibility>Visible</Visibility>\r\n                                                </DiscreteObjectKeyFrame.Value>\r\n                                            </DiscreteObjectKeyFrame>\r\n                                        </ObjectAnimationUsingKeyFrames>\r\n                                    </Storyboard>\r\n                                </VisualState>\r\n                                <VisualState x:Name=\"ButtonCollapsed\"/>\r\n                            </VisualStateGroup>\r\n                        </VisualStateManager.VisualStateGroups>\r\n                        <ContentPresenter x:Name=\"HeaderContentPresenter\" ContentTemplate=\"{TemplateBinding HeaderTemplate}\" Content=\"{TemplateBinding Header}\" Grid.ColumnSpan=\"3\" Grid.Column=\"0\" FontWeight=\"Normal\" Foreground=\"{ThemeResource TextControlHeaderForeground}\" Margin=\"{StaticResource TextBoxTopHeaderMargin}\" Grid.Row=\"0\" TextWrapping=\"Wrap\" VerticalAlignment=\"Top\" Visibility=\"Collapsed\" x:DeferLoadStrategy=\"Lazy\"/>\r\n                        <Border x:Name=\"BorderElement\" Background=\"{TemplateBinding Background}\" BorderThickness=\"{TemplateBinding BorderThickness}\" BorderBrush=\"{TemplateBinding BorderBrush}\" Grid.ColumnSpan=\"3\" Grid.Column=\"0\" Control.IsTemplateFocusTarget=\"True\" MinHeight=\"{ThemeResource TextControlThemeMinHeight}\" MinWidth=\"{ThemeResource TextControlThemeMinWidth}\" Grid.RowSpan=\"1\" Grid.Row=\"1\"/>\r\n                        <Grid x:Name=\"ElementElement\" Grid.Row=\"1\" Margin=\"2,2,-2,2\" Padding=\"{TemplateBinding Padding}\" Background=\"{TemplateBinding BorderBrush}\">\r\n                            <TextBlock x:Name=\"ElementText\" Text=\"#\" Foreground=\"{TemplateBinding Foreground}\" FontFamily=\"{TemplateBinding FontFamily}\" FontSize=\"{TemplateBinding FontSize}\"  />\r\n                        </Grid>\r\n                        <ScrollViewer x:Name=\"ContentElement\" AutomationProperties.AccessibilityView=\"Raw\" Grid.Column=\"1\" HorizontalScrollBarVisibility=\"{TemplateBinding ScrollViewer.HorizontalScrollBarVisibility}\" HorizontalScrollMode=\"{TemplateBinding ScrollViewer.HorizontalScrollMode}\" IsDeferredScrollingEnabled=\"{TemplateBinding ScrollViewer.IsDeferredScrollingEnabled}\" IsHorizontalRailEnabled=\"{TemplateBinding ScrollViewer.IsHorizontalRailEnabled}\" IsTabStop=\"False\" IsVerticalRailEnabled=\"{TemplateBinding ScrollViewer.IsVerticalRailEnabled}\" Margin=\"{TemplateBinding BorderThickness}\" Padding=\"{TemplateBinding Padding}\" Grid.Row=\"1\" VerticalScrollMode=\"{TemplateBinding ScrollViewer.VerticalScrollMode}\" VerticalScrollBarVisibility=\"{TemplateBinding ScrollViewer.VerticalScrollBarVisibility}\" ZoomMode=\"Disabled\"/>\r\n                        <TextBlock x:Name=\"PlaceholderTextContentPresenter\" Grid.ColumnSpan=\"2\" Grid.Column=\"1\" Opacity=\"0.57\" IsHitTestVisible=\"False\" Margin=\"{TemplateBinding BorderThickness}\" Padding=\"{TemplateBinding Padding}\" Grid.Row=\"1\" Text=\"{TemplateBinding PlaceholderText}\" TextWrapping=\"{TemplateBinding TextWrapping}\" TextAlignment=\"{TemplateBinding TextAlignment}\"/>\r\n                        <Button x:Name=\"DeleteButton\" AutomationProperties.AccessibilityView=\"Raw\" BorderThickness=\"{TemplateBinding BorderThickness}\" Grid.Column=\"2\" FontSize=\"{TemplateBinding FontSize}\" IsTabStop=\"False\" MinWidth=\"34\" Margin=\"{ThemeResource HelperButtonThemePadding}\" Grid.Row=\"1\" Style=\"{ThemeResource DeleteButtonStyle}\" VerticalAlignment=\"Stretch\" Visibility=\"Collapsed\"/>\r\n                        <ContentPresenter x:Name=\"DescriptionPresenter\" AutomationProperties.AccessibilityView=\"Raw\"  Content=\"{TemplateBinding Description}\" Grid.ColumnSpan=\"2\" Grid.Column=\"0\" Foreground=\"{ThemeResource SystemControlDescriptionTextForegroundBrush}\" Grid.Row=\"2\" x:Load=\"False\"/>\r\n                    </Grid>\r\n                </ControlTemplate>\r\n            </Setter.Value>\r\n        </Setter>\r\n    </Style>\r\n\r\n    <DataTemplate x:Key=\"VoiceMemberListTemplate\" x:DataType=\"entities:DiscordMember\">\r\n        <Grid Margin=\"0,4\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"auto\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n            </Grid.ColumnDefinitions>\r\n            <lib:PersonPicture Margin=\"0,0,8,0\" Width=\"16\" Height=\"16\" DisplayName=\"{Binding DisplayName}\">\r\n                <lib:PersonPicture.ProfilePicture>\r\n                    <BitmapImage UriSource=\"{Binding NonAnimatedAvatarUrl}\" DecodePixelWidth=\"16\" DecodePixelHeight=\"16\" DecodePixelType=\"Logical\" />\r\n                </lib:PersonPicture.ProfilePicture>\r\n            </lib:PersonPicture>\r\n            <TextBlock Grid.Column=\"1\" Style=\"{ThemeResource CaptionTextBlockStyle}\" Text=\"{Binding DisplayName}\"/>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"ChannelListTemplate\" x:DataType=\"channelVMs:ChannelListViewModel\">\r\n        <channels:ChannelListControl Channel=\"{Binding}\" />\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"ChannelListThreadTemplate\" x:DataType=\"channelVMs:ChannelListViewModel\">\r\n        <channels:ChannelListControl Channel=\"{Binding}\" Style=\"{StaticResource ThreadChannelListStyle}\" />\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"DMChannelListTemplate\" x:DataType=\"channelVMs:ChannelListViewModel\">\r\n        <channels:ChannelListControl Channel=\"{Binding}\" Style=\"{StaticResource DirectMessageChannelListStyle}\"/>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"GroupChannelListTemplate\" x:DataType=\"channelVMs:ChannelListViewModel\">\r\n        <channels:ChannelListControl Channel=\"{Binding}\" Style=\"{StaticResource GroupChannelListStyle}\"/>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"ChannelListCategoryTemplate\" x:DataType=\"channelVMs:ChannelListViewModel\">\r\n        <Border ContextFlyout=\"{StaticResource ChannelContextFlyout}\"\r\n                VerticalAlignment=\"Stretch\" \r\n                Background=\"Transparent\" \r\n                Margin=\"10,8,8,2\"\r\n                Opacity=\"{x:Bind MutedOpacity}\">\r\n            <TextBlock FontSize=\"12\"\r\n                       Foreground=\"{ThemeResource ApplicationSecondaryForegroundThemeBrush}\"\r\n                       FontWeight=\"SemiBold\"\r\n                       Text=\"{x:Bind Name, Converter={StaticResource TitleCaseConverter}}\" \r\n                       TextWrapping=\"NoWrap\" />\r\n        </Border>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"ChannelListVoiceTemplate\" x:DataType=\"channelVMs:ChannelListViewModel\">\r\n        <channels:ChannelListControl Channel=\"{Binding}\"/>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"RoleTemplate\" x:DataType=\"userVMs:RoleViewModel\">\r\n        <Border BorderThickness=\"1\"\r\n                BorderBrush=\"{x:Bind Color}\" \r\n                Padding=\"4,4,4,4\"\r\n                CornerRadius=\"2\"\r\n                MinWidth=\"24\">\r\n            <TextBlock Foreground=\"{x:Bind Color}\" \r\n                       FontSize=\"12\" Text=\"{x:Bind Name}\" VerticalAlignment=\"Center\" TextAlignment=\"Center\"/>\r\n        </Border>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"TypingUserTemplate\" x:DataType=\"userVMs:UserViewModel\">\r\n        <Grid>\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"Auto\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n            </Grid.ColumnDefinitions>\r\n            <Ellipse Width=\"16\" Height=\"16\" Margin=\"0,0,8,0\">\r\n                <Ellipse.Fill>\r\n                    <ImageBrush>\r\n                        <ImageBrush.ImageSource>\r\n                            <BitmapImage UriSource=\"{x:Bind AvatarUrl}\" DecodePixelWidth=\"16\" DecodePixelHeight=\"16\"/>\r\n                        </ImageBrush.ImageSource>\r\n                    </ImageBrush>\r\n                </Ellipse.Fill>\r\n            </Ellipse>\r\n            <TextBlock Grid.Column=\"1\" Text=\"{x:Bind DisplayName}\" FontSize=\"12\" Foreground=\"{Binding Color, Converter={StaticResource ColourBrushConverter}, FallbackValue={ThemeResource DefaultTextForegroundThemeBrush}}\" Margin=\"0,0,4,0\"/>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n\r\n    <DataTemplate x:Key=\"GuildsListTemplate\" x:DataType=\"guildVMs:GuildListViewModel\">\r\n        <!--<lib:TreeViewItem IsSelected=\"{x:Bind IsSelected}\" >-->\r\n        <Grid Background=\"Transparent\"\r\n              ContextFlyout=\"{StaticResource GuildContextFlyout}\"\r\n              ToolTipService.ToolTip=\"{x:Bind Name}\"\r\n              ToolTipService.Placement=\"Left\"\r\n              Loaded=\"OnGuildsListItemLoaded\"\r\n              Height=\"55\">\r\n            <lib:PersonPicture x:Phase=\"1\" Margin=\"0,4\" Width=\"38\" Height=\"38\" DisplayName=\"{x:Bind Name}\" ProfilePicture=\"{Binding IconUrl}\"/>\r\n            <lib:InfoBadge x:Phase=\"2\" VerticalAlignment=\"Top\"\r\n                           HorizontalAlignment=\"Right\"\r\n                           Margin=\"8,4\"\r\n                           MinWidth=\"8\"\r\n                           MinHeight=\"8\"\r\n                           Value=\"{x:Bind MentionCount}\"\r\n                           Visibility=\"{Binding Unread, Converter={StaticResource BoolVisibilityConverter}}\"/>\r\n        </Grid>\r\n        <!--</lib:TreeViewItem>-->\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"GuildsListFolderTemplate\" x:DataType=\"guildVMs:GuildListFolderViewModel\">\r\n        <!--<lib:TreeViewItem ItemsSource=\"{x:Bind Children}\" \r\n                          IsExpanded=\"{Binding IsExpanded}\" >-->\r\n        <Grid ToolTipService.ToolTip=\"{x:Bind Name}\"\r\n              ToolTipService.Placement=\"Left\"\r\n              Loaded=\"OnGuildsListFolderItemLoaded\">\r\n            <Ellipse Margin=\"0,4\" \r\n                         Width=\"42\" \r\n                         Height=\"42\"\r\n                         Opacity=\"0.3\"\r\n                         Fill=\"{Binding Color, Converter={StaticResource ColourBrushConverter}}\"/>\r\n\r\n            <FontIcon x:Name=\"ExpandedGlyph\" \r\n                            FontFamily=\"{StaticResource SymbolThemeFontFamily}\" \r\n                            Glyph=\"&#xE70D;\" \r\n                            RenderTransformOrigin=\"0.5,0.5\"\r\n                            Opacity=\"0\">\r\n                <FontIcon.RenderTransform>\r\n                    <RotateTransform x:Name=\"ExpandedGlyphTransform\" />\r\n                </FontIcon.RenderTransform>\r\n            </FontIcon>\r\n\r\n            <Grid Margin=\"0,4\" Width=\"36\" Height=\"36\">\r\n                <Grid.ColumnDefinitions>\r\n                    <ColumnDefinition Width=\"*\"/>\r\n                    <ColumnDefinition Width=\"*\"/>\r\n                </Grid.ColumnDefinitions>\r\n                <Grid.RowDefinitions>\r\n                    <RowDefinition Height=\"*\"/>\r\n                    <RowDefinition Height=\"*\"/>\r\n                </Grid.RowDefinitions>\r\n\r\n                <Ellipse x:Name=\"Ellipse1\" Grid.Column=\"0\" Grid.Row=\"0\" Margin=\"1\">\r\n                    <Ellipse.RenderTransform>\r\n                        <TranslateTransform x:Name=\"EllipseTransform1\" />\r\n                    </Ellipse.RenderTransform>\r\n                    <Ellipse.Fill>\r\n                        <ImageBrush ImageSource=\"{Binding Icon1}\"/>\r\n                    </Ellipse.Fill>\r\n                </Ellipse>\r\n                <Ellipse x:Name=\"Ellipse2\" Grid.Column=\"0\" Grid.Row=\"1\" Margin=\"1\">\r\n                    <Ellipse.RenderTransform>\r\n                        <TranslateTransform x:Name=\"EllipseTransform2\" />\r\n                    </Ellipse.RenderTransform>\r\n                    <Ellipse.Fill>\r\n                        <ImageBrush ImageSource=\"{Binding Icon2}\"/>\r\n                    </Ellipse.Fill>\r\n                </Ellipse>\r\n                <Ellipse x:Name=\"Ellipse3\" Grid.Column=\"1\" Grid.Row=\"0\" Margin=\"1\">\r\n                    <Ellipse.RenderTransform>\r\n                        <TranslateTransform x:Name=\"EllipseTransform3\" />\r\n                    </Ellipse.RenderTransform>\r\n                    <Ellipse.Fill>\r\n                        <ImageBrush ImageSource=\"{Binding Icon3}\"/>\r\n                    </Ellipse.Fill>\r\n                </Ellipse>\r\n                <Ellipse x:Name=\"Ellipse4\" Grid.Column=\"1\" Grid.Row=\"1\" Margin=\"1\">\r\n                    <Ellipse.RenderTransform>\r\n                        <TranslateTransform x:Name=\"EllipseTransform4\" />\r\n                    </Ellipse.RenderTransform>\r\n                    <Ellipse.Fill>\r\n                        <ImageBrush ImageSource=\"{Binding Icon4}\"/>\r\n                    </Ellipse.Fill>\r\n                </Ellipse>\r\n            </Grid>\r\n\r\n            <lib:InfoBadge x:Name=\"UnreadIndicator\"\r\n                           x:Load=\"{x:Bind Unread}\" \r\n                           x:Phase=\"2\"\r\n                           Grid.ColumnSpan=\"2\"\r\n                           Grid.RowSpan=\"2\"\r\n                           VerticalAlignment=\"Top\"\r\n                           HorizontalAlignment=\"Right\"\r\n                           Margin=\"8,4\"\r\n                           MinWidth=\"8\"\r\n                           MinHeight=\"8\"\r\n                           Value=\"{x:Bind MentionCount}\"/>\r\n\r\n            <i:Interaction.Behaviors>\r\n                <core:DataTriggerBehavior Binding=\"{x:Bind IsExpanded}\"\r\n                                              ComparisonCondition=\"Equal\"\r\n                                              Value=\"True\">\r\n                    <media1:ControlStoryboardAction>\r\n                        <media1:ControlStoryboardAction.Storyboard>\r\n                            <Storyboard>\r\n                                <DoubleAnimation From=\"0\" To=\"1\" Storyboard.TargetName=\"ExpandedGlyph\" Storyboard.TargetProperty=\"Opacity\" Duration=\"0:0:0.25\"/>\r\n                                <DoubleAnimation From=\"359\" To=\"0\" Storyboard.TargetName=\"ExpandedGlyphTransform\" Storyboard.TargetProperty=\"Angle\" Duration=\"0:0:0.5\" EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n\r\n                                <DoubleAnimation From=\"0\" To=\"200\" Storyboard.TargetName=\"EllipseTransform1\" Storyboard.TargetProperty=\"Y\" Duration=\"0:0:0.2\" BeginTime=\"0:0:0.15\" EasingFunction=\"{StaticResource EaseExit}\"/>\r\n                                <DoubleAnimation From=\"1\" To=\"0\" Storyboard.TargetName=\"Ellipse1\" Storyboard.TargetProperty=\"Opacity\" Duration=\"0:0:0.2\" BeginTime=\"0:0:0.15\"/>\r\n\r\n                                <DoubleAnimation From=\"0\" To=\"200\" Storyboard.TargetName=\"EllipseTransform2\" Storyboard.TargetProperty=\"Y\" Duration=\"0:0:0.2\"  BeginTime=\"0:0:0.1\" EasingFunction=\"{StaticResource EaseExit}\"/>\r\n                                <DoubleAnimation From=\"1\" To=\"0\" Storyboard.TargetName=\"Ellipse2\" Storyboard.TargetProperty=\"Opacity\" Duration=\"0:0:0.2\" BeginTime=\"0:0:0.1\"/>\r\n\r\n                                <DoubleAnimation From=\"0\" To=\"200\" Storyboard.TargetName=\"EllipseTransform3\" Storyboard.TargetProperty=\"Y\" Duration=\"0:0:0.2\" BeginTime=\"0:0:0.05\" EasingFunction=\"{StaticResource EaseExit}\"/>\r\n                                <DoubleAnimation From=\"1\" To=\"0\" Storyboard.TargetName=\"Ellipse3\" Storyboard.TargetProperty=\"Opacity\" Duration=\"0:0:0.2\" BeginTime=\"0:0:0.05\"/>\r\n\r\n                                <DoubleAnimation From=\"0\" To=\"200\" Storyboard.TargetName=\"EllipseTransform4\" Storyboard.TargetProperty=\"Y\" Duration=\"0:0:0.2\" EasingFunction=\"{StaticResource EaseExit}\"/>\r\n                                <DoubleAnimation From=\"1\" To=\"0\" Storyboard.TargetName=\"Ellipse4\" Storyboard.TargetProperty=\"Opacity\" Duration=\"0:0:0.2\"/>\r\n                            </Storyboard>\r\n                        </media1:ControlStoryboardAction.Storyboard>\r\n                    </media1:ControlStoryboardAction>\r\n                </core:DataTriggerBehavior>\r\n                <core:DataTriggerBehavior Binding=\"{x:Bind IsExpanded}\"\r\n                                              ComparisonCondition=\"Equal\"\r\n                                              Value=\"False\">\r\n                    <media1:ControlStoryboardAction>\r\n                        <media1:ControlStoryboardAction.Storyboard>\r\n                            <Storyboard>\r\n                                <DoubleAnimation From=\"1\" To=\"0\" Storyboard.TargetName=\"ExpandedGlyph\" Storyboard.TargetProperty=\"Opacity\" Duration=\"0:0:0.25\"/>\r\n                                <DoubleAnimation From=\"0\" To=\"270\" Storyboard.TargetName=\"ExpandedGlyphTransform\" Storyboard.TargetProperty=\"Angle\" Duration=\"0:0:0.25\" EasingFunction=\"{StaticResource EaseExit}\"/>\r\n\r\n                                <DoubleAnimation From=\"200\" To=\"0\" Storyboard.TargetName=\"EllipseTransform4\" Storyboard.TargetProperty=\"Y\" Duration=\"0:0:0.2\" BeginTime=\"0:0:0.15\" EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n                                <DoubleAnimation From=\"0\" To=\"1\" Storyboard.TargetName=\"Ellipse4\" Storyboard.TargetProperty=\"Opacity\" Duration=\"0:0:0.2\" BeginTime=\"0:0:0.15\"/>\r\n\r\n                                <DoubleAnimation From=\"200\" To=\"0\" Storyboard.TargetName=\"EllipseTransform3\" Storyboard.TargetProperty=\"Y\" Duration=\"0:0:0.2\"  BeginTime=\"0:0:0.1\" EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n                                <DoubleAnimation From=\"0\" To=\"1\" Storyboard.TargetName=\"Ellipse3\" Storyboard.TargetProperty=\"Opacity\" Duration=\"0:0:0.2\" BeginTime=\"0:0:0.1\"/>\r\n\r\n                                <DoubleAnimation From=\"200\" To=\"0\" Storyboard.TargetName=\"EllipseTransform2\" Storyboard.TargetProperty=\"Y\" Duration=\"0:0:0.2\" BeginTime=\"0:0:0.05\" EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n                                <DoubleAnimation From=\"0\" To=\"1\" Storyboard.TargetName=\"Ellipse2\" Storyboard.TargetProperty=\"Opacity\" Duration=\"0:0:0.2\" BeginTime=\"0:0:0.05\"/>\r\n\r\n                                <DoubleAnimation From=\"200\" To=\"0\" Storyboard.TargetName=\"EllipseTransform1\" Storyboard.TargetProperty=\"Y\" Duration=\"0:0:0.2\" EasingFunction=\"{StaticResource EaseEnter}\"/>\r\n                                <DoubleAnimation From=\"0\" To=\"1\" Storyboard.TargetName=\"Ellipse1\" Storyboard.TargetProperty=\"Opacity\" Duration=\"0:0:0.2\"/>\r\n                            </Storyboard>\r\n                        </media1:ControlStoryboardAction.Storyboard>\r\n                    </media1:ControlStoryboardAction>\r\n                </core:DataTriggerBehavior>\r\n            </i:Interaction.Behaviors>\r\n        </Grid>\r\n        <!--</lib:TreeViewItem>-->\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"DMChannelTemplate\" x:DataType=\"channelVMs:DmChannelListViewModel\">\r\n        <Grid Margin=\"0,0,4,0\" Opacity=\"{x:Bind MutedOpacity}\" ContextFlyout=\"{StaticResource DirectMessageContextFlyout}\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"Auto\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n                <ColumnDefinition MinWidth=\"16\" Width=\"Auto\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <users:AvatarControl Margin=\"2,0,0,0\"\r\n                                 Style=\"{ThemeResource SmallAvatarWithPresenceStyle}\" \r\n                                 Width=\"32\" \r\n                                 Height=\"32\"\r\n                                 Source=\"{x:Bind IconUrl}\" \r\n                                 Presence=\"{x:Bind Recipient.Presence}\" />\r\n\r\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Center\" Margin=\"8,0,0,0\">\r\n                <TextBlock Text=\"{x:Bind Name}\"/>\r\n                <presence:InlinePresenceControl Presence=\"{x:Bind Recipient.Presence, Mode=OneWay}\" />\r\n            </StackPanel>\r\n\r\n            <lib:InfoBadge x:Name=\"unreadIndicator\" \r\n                           x:Load=\"{x:Bind Unread, Mode=OneWay}\" \r\n                           Grid.Column=\"2\" \r\n                           HorizontalAlignment=\"Center\" \r\n                           VerticalAlignment=\"Center\"\r\n                           MinWidth=\"8\"\r\n                           MinHeight=\"8\"\r\n                           Margin=\"0\"\r\n                           Value=\"{x:Bind ReadState.MentionCount, Mode=OneWay}\" />\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"GroupChannelTemplate\" x:DataType=\"channelVMs:DmChannelListViewModel\">\r\n        <Grid Padding=\"0,4\" Opacity=\"{x:Bind MutedOpacity}\" ContextFlyout=\"{StaticResource DirectMessageContextFlyout}\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"Auto\"/>\r\n                <ColumnDefinition Width=\"*\"/>\r\n                <ColumnDefinition MinWidth=\"16\" Width=\"Auto\"/>\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <lib:PersonPicture Width=\"32\" Height=\"32\" DisplayName=\"{x:Bind Name}\">\r\n                <lib:PersonPicture.ProfilePicture>\r\n                    <BitmapImage UriSource=\"{x:Bind IconUrl}\" DecodePixelWidth=\"32\" DecodePixelType=\"Logical\" />\r\n                </lib:PersonPicture.ProfilePicture>\r\n            </lib:PersonPicture>\r\n\r\n            <StackPanel Grid.Column=\"1\" VerticalAlignment=\"Center\" Margin=\"8,0,0,0\">\r\n                <TextBlock Text=\"{x:Bind Name}\"/>\r\n            </StackPanel>\r\n\r\n\r\n            <lib:InfoBadge x:Name=\"unreadIndicator\" \r\n                           x:Load=\"{x:Bind Unread}\" \r\n                           Grid.Column=\"2\" \r\n                           HorizontalAlignment=\"Center\" \r\n                           VerticalAlignment=\"Center\"\r\n                           MinWidth=\"8\"\r\n                           MinHeight=\"8\"\r\n                           Margin=\"0\"\r\n                           Value=\"{x:Bind ReadState.MentionCount}\"/>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n    <DataTemplate x:Key=\"UserListTemplate\">\r\n        <Grid ContextFlyout=\"{StaticResource UserListContextFlyout}\">\r\n            <Grid.ColumnDefinitions>\r\n                <ColumnDefinition Width=\"Auto\" />\r\n                <ColumnDefinition Width=\"*\" />\r\n            </Grid.ColumnDefinitions>\r\n\r\n            <users:AvatarControl Style=\"{StaticResource SmallAvatarWithPresenceStyle}\"\r\n                                 Width=\"38\"\r\n                                 Height=\"38\"\r\n                                 Source=\"{Binding AvatarUrl}\"\r\n                                 Presence=\"{Binding Presence}\"/>\r\n            <Grid\r\n                Grid.Column=\"1\"\r\n                Margin=\"8,0\"\r\n                VerticalAlignment=\"Center\">\r\n                <Grid.RowDefinitions>\r\n                    <RowDefinition Height=\"Auto\" />\r\n                    <RowDefinition Height=\"Auto\" />\r\n                </Grid.RowDefinitions>\r\n                <controls:UsernameControl User=\"{Binding}\" />\r\n                <presence:InlinePresenceControl Grid.Row=\"1\" Presence=\"{Binding Presence}\"/>\r\n            </Grid>\r\n        </Grid>\r\n    </DataTemplate>\r\n\r\n</ResourceDictionary>\r\n"
  },
  {
    "path": "Unicord.Universal/Themes/Templates.xaml.cs",
    "content": "﻿using Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls.Primitives;\nusing Windows.UI.Xaml.Controls;\nusing MUXC = Microsoft.UI.Xaml.Controls;\nusing Unicord.Universal.Models.Guild;\nusing System.ComponentModel;\nusing Unicord.Universal.Extensions;\n\nnamespace Unicord.Universal.Resources\n{\n    public sealed partial class Templates : ResourceDictionary\n    {\n        public Templates()\n        {\n            InitializeComponent();\n        }\n\n        private void OnGuildsListFolderItemLoaded(object sender, RoutedEventArgs e)\n        {\n            // hack for RS2 \n            var parent = ((Grid)sender).FindParent<MUXC.TreeViewItem>();\n            if (parent == null) return;\n\n            var vm = (GuildListFolderViewModel)(((Grid)sender).DataContext);\n            if (vm == null) return;\n\n            long token = -1;\n            void DependencyPropertyChangedCallback(DependencyObject sender, DependencyProperty e)\n            {\n                vm.IsExpanded = parent.IsExpanded;\n            }\n\n            void ViewModelPropertyChangedCallback(object o, PropertyChangedEventArgs ev)\n            {\n                if (ev.PropertyName == nameof(vm.IsExpanded))\n                    parent.IsExpanded = vm.IsExpanded;\n            }\n\n            void Unloaded(object sender, RoutedEventArgs e)\n            {\n                vm.PropertyChanged -= ViewModelPropertyChangedCallback;\n                if (token != -1)\n                    parent.UnregisterPropertyChangedCallback(MUXC.TreeViewItem.IsExpandedProperty, token);\n                parent.Unloaded -= Unloaded;\n            }\n\n            parent.ItemsSource = vm.Children;\n            parent.IsExpanded = vm.IsExpanded;\n\n            parent.Unloaded += Unloaded;\n            vm.PropertyChanged += ViewModelPropertyChangedCallback;\n            token = parent.RegisterPropertyChangedCallback(MUXC.TreeViewItem.IsExpandedProperty, DependencyPropertyChangedCallback);\n        }\n\n        private void OnGuildsListItemLoaded(object sender, RoutedEventArgs e)\n        {\n            // hack for RS2 \n            var parent = ((Grid)sender).FindParent<MUXC.TreeViewItem>();\n            if (parent == null) return;\n\n            var vm = (GuildListViewModel)(((Grid)sender).DataContext);\n            if (vm == null) return;\n\n            long token = -1;\n            void DependencyPropertyChangedCallback(DependencyObject sender, DependencyProperty e)\n            {\n                vm.IsSelected = parent.IsSelected;\n            }\n\n            void ViewModelPropertyChangedCallback(object o, PropertyChangedEventArgs ev)\n            {\n                if (ev.PropertyName == nameof(vm.IsSelected))\n                    parent.IsSelected = vm.IsSelected;\n            }\n\n            void Unloaded(object sender, RoutedEventArgs e)\n            {\n                vm.PropertyChanged -= ViewModelPropertyChangedCallback;\n                if (token != -1)\n                    parent.UnregisterPropertyChangedCallback(SelectorItem.IsSelectedProperty, token);\n                parent.Unloaded -= Unloaded;\n            }\n\n            parent.IsSelected = vm.IsSelected;\n\n            parent.Unloaded += Unloaded;\n            vm.PropertyChanged += ViewModelPropertyChangedCallback;\n            token = parent.RegisterPropertyChangedCallback(SelectorItem.IsSelectedProperty, DependencyPropertyChangedCallback);\n\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Themes/ThemeResources.cs",
    "content": "﻿using System;\nusing Unicord.Universal.Services;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls.Primitives;\n\nnamespace Unicord.Universal.Themes\n{\n    internal class ThemeResources : ResourceDictionary\n    {\n        public ThemeResources()\n        {\n            var theme = ThemeService.GetForCurrentView()\n                .GetTheme();\n\n            Uri uri = theme switch\n            {\n                AppTheme.OLED => new Uri(\"ms-appx:///Themes/Styles/OLED.xaml\"),\n                AppTheme.Fluent => new Uri(\"ms-appx:///Themes/Styles/Fluent.xaml\"),\n                AppTheme.Performance => new Uri(\"ms-appx:///Themes/Styles/Performance.xaml\"),\n                AppTheme.SunValley => new Uri(\"ms-appx:///Themes/Styles/SunValley.xaml\"),\n                _ => throw new InvalidOperationException(\"Unknown theme\"),\n            };\n\n            Application.LoadComponent(this, uri, ComponentResourceLocation.Application);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Tools.cs",
    "content": "using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading.Tasks;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing Humanizer.Bytes;\r\nusing Unicord.Universal.Extensions;\r\nusing WamWooWam.Core;\r\nusing Windows.ApplicationModel.DataTransfer;\r\nusing Windows.Foundation;\r\nusing Windows.Foundation.Metadata;\r\nusing Windows.Graphics.Imaging;\r\nusing Windows.Security.Credentials;\r\nusing Windows.Storage;\r\nusing Windows.Storage.Streams;\r\nusing Windows.System;\r\nusing Windows.UI.Xaml;\r\nusing Windows.UI.Xaml.Controls;\r\nusing Windows.UI.Xaml.Input;\r\nusing Windows.Web.Http;\r\nusing Windows.Win32;\r\nusing Windows.Win32.Foundation;\r\nusing Windows.Win32.UI.Shell;\r\nusing static Unicord.Constants;\r\n\r\nnamespace Unicord.Universal\r\n{\r\n    public static class Tools\r\n    {\r\n        private const int NITRO_UPLOAD_LIMIT = 104_857_600;\r\n        private const int NITRO_CLASSIC_UPLOAD_LIMIT = 52_428_800;\r\n        private const int NITRO_BASIC_UPLOAD_LIMIT = 52_428_800;\r\n        private const int UPLOAD_LIMIT = 26_214_400;\r\n\r\n        public static HttpClient HttpClient => _httpClient.Value;\r\n\r\n        private static Lazy<HttpClient> _httpClient = new Lazy<HttpClient>(() => new HttpClient());\r\n\r\n        public static string ToFileSizeString(long size)\r\n        {\r\n            if (size < 0)\r\n                return \"-\" + ToFileSizeString((ulong)-size);\r\n            else\r\n                return ToFileSizeString((ulong)size);\r\n        }\r\n\r\n        public static string ToFileSizeString(ulong size)\r\n        {\r\n            return ByteSize.FromBytes(size).ToString(\"#.##\");\r\n        }\r\n\r\n        public static Task DownloadToFileAsync(Uri url, StorageFile file)\r\n        {\r\n            return DownloadToFileAsync(url, file, new Progress<HttpProgress>());\r\n        }\r\n\r\n        public static Task DownloadToFileAsync(Uri url, StorageFile file, IProgress<double?> progress)\r\n        {\r\n            void HttpProgressToDouble(HttpProgress p)\r\n            {\r\n                if (p.TotalBytesToReceive.HasValue)\r\n                {\r\n                    progress?.Report(p.BytesReceived / (double)p.TotalBytesToReceive.Value);\r\n                }\r\n                else\r\n                {\r\n                    progress?.Report(null);\r\n                }\r\n            }\r\n\r\n            return DownloadToFileAsync(url, file, new Progress<HttpProgress>(HttpProgressToDouble));\r\n        }\r\n\r\n        public static async Task DownloadToFileAsync(Uri url, StorageFile file, IProgress<HttpProgress> progress)\r\n        {\r\n            CachedFileManager.DeferUpdates(file);\r\n\r\n            var message = new HttpRequestMessage(HttpMethod.Get, url);\r\n            var resp = await HttpClient.SendRequestAsync(message).AsTask(progress);\r\n\r\n            var content = await resp.Content.ReadAsInputStreamAsync();\r\n            var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite);\r\n\r\n            await RandomAccessStream.CopyAndCloseAsync(content, fileStream);\r\n            await CachedFileManager.CompleteUpdatesAsync(file);\r\n        }\r\n\r\n        internal static void ResetPasswordVault()\r\n        {\r\n            try\r\n            {\r\n                var passwordVault = new PasswordVault();\r\n                foreach (var c in passwordVault.FindAllByResource(TOKEN_IDENTIFIER))\r\n                {\r\n                    passwordVault.Remove(c);\r\n                }\r\n            }\r\n            catch { }\r\n        }\r\n\r\n        public static void AddAccelerator(this UIElement element, VirtualKey key, VirtualKeyModifiers modifiers, TypedEventHandler<KeyboardAccelerator, KeyboardAcceleratorInvokedEventArgs> handler)\r\n        {\r\n            if (!ApiInformation.IsTypePresent(\"Windows.UI.Xaml.Input.KeyboardAccelerator\")) return;\r\n\r\n            var emoteAccelerator = new KeyboardAccelerator() { Key = key, Modifiers = modifiers, ScopeOwner = element };\r\n            emoteAccelerator.Invoked += handler;\r\n\r\n            if (ApiInformation.IsTypePresent(\"Windows.UI.Xaml.Input.KeyboardAcceleratorPlacementMode\"))\r\n                element.KeyboardAcceleratorPlacementMode = KeyboardAcceleratorPlacementMode.Hidden;\r\n            element.KeyboardAccelerators.Add(emoteAccelerator);\r\n        }\r\n\r\n        public static void AddAccelerator(this UIElement target, VirtualKey key, VirtualKeyModifiers modifiers)\r\n        {\r\n            if (!ApiInformation.IsTypePresent(\"Windows.UI.Xaml.Input.KeyboardAccelerator\")) return;\r\n\r\n            var emoteAccelerator = new KeyboardAccelerator() { Key = key, Modifiers = modifiers, ScopeOwner = target.FindParent<Page>() };\r\n            target.KeyboardAccelerators.Add(emoteAccelerator);\r\n        }\r\n\r\n        public static async Task<StorageFile> GetImageFileFromDataPackage(DataPackageView dataPackageView)\r\n        {\r\n            var file = await ApplicationData.Current.TemporaryFolder.CreateFileAsync($\"{Strings.RandomString(12)}.png\");\r\n\r\n            using (var stream = await file.OpenAsync(FileAccessMode.ReadWrite))\r\n            using (var bmp = await (await dataPackageView.GetBitmapAsync()).OpenReadAsync())\r\n            {\r\n                var decoder = await BitmapDecoder.CreateAsync(bmp);\r\n                using (var softwareBmp = await decoder.GetSoftwareBitmapAsync(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Straight))\r\n                {\r\n                    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, stream);\r\n                    encoder.SetSoftwareBitmap(softwareBmp);\r\n                    await encoder.FlushAsync();\r\n                }\r\n            }\r\n\r\n            return file;\r\n        }\r\n\r\n        public static unsafe string GetItemTypeFromExtension(string extension, string fallback = null)\r\n        {\r\n            try\r\n            {\r\n                uint len = 0;\r\n                HRESULT hr;\r\n                if ((hr = PInvoke.AssocQueryString(ASSOCF.ASSOCF_NONE, ASSOCSTR.ASSOCSTR_FRIENDLYAPPNAME, extension, \"\", null, ref len)) != HRESULT.S_FALSE)\r\n                    hr.ThrowOnFailure();\r\n\r\n                char[] buf = new char[len];\r\n                fixed (char* bufPtr = buf)\r\n                {\r\n                    PInvoke.AssocQueryString(ASSOCF.ASSOCF_NONE, ASSOCSTR.ASSOCSTR_FRIENDLYAPPNAME, extension, \"\", new PWSTR(bufPtr), ref len)\r\n                        .ThrowOnFailure();\r\n\r\n                    return new string(bufPtr);\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Logger.LogError(ex);\r\n            }\r\n\r\n            return fallback;\r\n        }\r\n\r\n        /// <summary>\r\n        /// Returns true if <paramref name=\"current\"/> is higher in the role hierarchy than <paramref name=\"member\"/>.\r\n        /// </summary>\r\n        /// <param name=\"current\">The current guild member</param>\r\n        /// <param name=\"member\">The guild member to check against</param>\r\n        public static bool CheckRoleHierarchy(DiscordMember current, DiscordMember member)\r\n        {\r\n            if (member == null || current == null)\r\n            {\r\n                return false;\r\n            }\r\n\r\n            // i love discord\r\n            var memberTopRole = member.Roles.OrderByDescending(r => r?.Position).FirstOrDefault();\r\n            var currentTopRole = current.Roles.OrderByDescending(r => r?.Position).FirstOrDefault();\r\n\r\n            return (memberTopRole?.Position ?? 0) < (currentTopRole?.Position ?? 0);\r\n        }\r\n\r\n        public static bool IsAccessible(this DiscordChannel channel)\r\n        {\r\n            if (channel.Type == ChannelType.Category)\r\n                return false;\r\n\r\n            if (channel is DiscordDmChannel || channel.Type == ChannelType.Private || channel.Type == ChannelType.Group)\r\n                return true;\r\n\r\n            if (channel.Guild != null)\r\n            {\r\n                if (channel.Guild.IsOwner)\r\n                    return true;\r\n\r\n                var perms = channel.PermissionsFor(channel.Guild.CurrentMember);\r\n                return perms.HasPermission(Permissions.AccessChannels) || perms.HasPermission(Permissions.Administrator);\r\n            }\r\n\r\n            return false;\r\n        }\r\n\r\n        // adapted from corefx\r\n        // https://github.com/dotnet/corefx/blob/master/src/Common/src/CoreLib/System/Array.cs\r\n        public static int BinarySearch<TCollection>(this IList<TCollection> collection, TCollection item)\r\n            where TCollection : IComparable<TCollection>\r\n        {\r\n            var lo = 0;\r\n            var hi = collection.Count - 1;\r\n\r\n            while (lo <= hi)\r\n            {\r\n                var i = lo + ((hi - lo) >> 1);\r\n                var c = collection[i].CompareTo(item);\r\n\r\n                if (c == 0)\r\n                {\r\n                    return i < 0 ? ~i : i;\r\n                }\r\n\r\n                if (c < 0)\r\n                {\r\n                    lo = i + 1;\r\n                }\r\n                else\r\n                {\r\n                    hi = i - 1;\r\n                }\r\n            }\r\n\r\n            return ~lo < 0 ? lo : ~lo;\r\n        }\r\n\r\n        public static bool HasNitro(this DiscordUser user) => user.PremiumType != 0;\r\n        public static int UploadLimit(this DiscordUser user) => user.PremiumType switch\r\n        {\r\n            PremiumType.NitroClassic => NITRO_CLASSIC_UPLOAD_LIMIT,\r\n            PremiumType.Nitro => NITRO_UPLOAD_LIMIT,\r\n            PremiumType.NitroBasic => NITRO_BASIC_UPLOAD_LIMIT,\r\n            _ => UPLOAD_LIMIT\r\n        };\r\n    }\r\n\r\n}\r\n\r\n// fun things i have to define because the C# compiler team decided to be dickwads\r\n\r\nnamespace System.Runtime.CompilerServices\r\n{\r\n    public class IsExternalInit { }\r\n}"
  },
  {
    "path": "Unicord.Universal/Unicord.Universal.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\r\n  <PropertyGroup>\r\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\r\n    <Platform Condition=\" '$(Platform)' == '' \">x86</Platform>\r\n    <ProjectGuid>{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}</ProjectGuid>\r\n    <OutputType>AppContainerExe</OutputType>\r\n    <AppDesignerFolder>Properties</AppDesignerFolder>\r\n    <RootNamespace>Unicord.Universal</RootNamespace>\r\n    <AssemblyName>Unicord.Universal</AssemblyName>\r\n    <DefaultLanguage>en-US</DefaultLanguage>\r\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\r\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\r\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\r\n    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>\r\n    <FileAlignment>512</FileAlignment>\r\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\r\n    <WindowsXamlEnableOverview>true</WindowsXamlEnableOverview>\r\n    <AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>\r\n    <LangVersion>12</LangVersion>\r\n    <!-- While we technically target 1709, I want to manually target 1703 for Windows Phone support -->\r\n    <AppxOSMinVersionReplaceManifestVersion>false</AppxOSMinVersionReplaceManifestVersion>\r\n    <AppxOSMaxVersionTestedReplaceManifestVersion>false</AppxOSMaxVersionTestedReplaceManifestVersion>\r\n    <!-- lol, lmao -->\r\n    <SkipMicrosoftUIXamlCheckTargetPlatformVersion>true</SkipMicrosoftUIXamlCheckTargetPlatformVersion>\r\n    <GenerateAppInstallerFile>False</GenerateAppInstallerFile>\r\n    <PackageCertificateKeyFile>Unicord.Universal_TemporaryKey.pfx</PackageCertificateKeyFile>\r\n    <AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>\r\n    <AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>\r\n    <GenerateTestArtifacts>True</GenerateTestArtifacts>\r\n    <AppxBundle>Always</AppxBundle>\r\n    <AppxBundlePlatforms>arm</AppxBundlePlatforms>\r\n    <HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>\r\n    <GenerateTemporaryStoreCertificate>True</GenerateTemporaryStoreCertificate>\r\n    <PackageCertificateThumbprint>2B9388FE3BA91067A7367141578ADD1436AEB76C</PackageCertificateThumbprint>\r\n    <IncludeSourceRevisionInInformationalVersion>true</IncludeSourceRevisionInInformationalVersion>\r\n    <IlcParameters>/ExtraNutcArguments:\"/d2threads8\"</IlcParameters>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\r\n    <DefineConstants>TRACE;DEBUG;NETFX_CORE;WINDOWS_UWP;CODE_ANALYSIS;DISABLE_XAML_GENERATED_MAIN</DefineConstants>\r\n    <NoWarn>;2008</NoWarn>\r\n    <DebugType>full</DebugType>\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <UseVSHostingProcess>false</UseVSHostingProcess>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <Prefer32Bit>true</Prefer32Bit>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\r\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <NoWarn>;2008</NoWarn>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>x86</PlatformTarget>\r\n    <UseVSHostingProcess>false</UseVSHostingProcess>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <Prefer32Bit>true</Prefer32Bit>\r\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants>\r\n    <NoWarn>;2008</NoWarn>\r\n    <DebugType>full</DebugType>\r\n    <PlatformTarget>ARM</PlatformTarget>\r\n    <UseVSHostingProcess>false</UseVSHostingProcess>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <Prefer32Bit>true</Prefer32Bit>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\r\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <NoWarn>;2008</NoWarn>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>ARM</PlatformTarget>\r\n    <UseVSHostingProcess>false</UseVSHostingProcess>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <Prefer32Bit>true</Prefer32Bit>\r\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM64'\">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <OutputPath>bin\\ARM64\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants>\r\n    <NoWarn>;2008</NoWarn>\r\n    <DebugType>full</DebugType>\r\n    <PlatformTarget>ARM64</PlatformTarget>\r\n    <UseVSHostingProcess>false</UseVSHostingProcess>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <Prefer32Bit>true</Prefer32Bit>\r\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM64'\">\r\n    <OutputPath>bin\\ARM64\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <NoWarn>;2008</NoWarn>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>ARM64</PlatformTarget>\r\n    <UseVSHostingProcess>false</UseVSHostingProcess>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <Prefer32Bit>true</Prefer32Bit>\r\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\r\n    <DebugSymbols>true</DebugSymbols>\r\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\r\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants>\r\n    <NoWarn>;2008</NoWarn>\r\n    <DebugType>full</DebugType>\r\n    <PlatformTarget>x64</PlatformTarget>\r\n    <UseVSHostingProcess>false</UseVSHostingProcess>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <Prefer32Bit>true</Prefer32Bit>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n    <UseDotNetNativeToolchain>false</UseDotNetNativeToolchain>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\r\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\r\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP;DISABLE_XAML_GENERATED_MAIN</DefineConstants>\r\n    <Optimize>true</Optimize>\r\n    <NoWarn>;2008</NoWarn>\r\n    <DebugType>pdbonly</DebugType>\r\n    <PlatformTarget>x64</PlatformTarget>\r\n    <UseVSHostingProcess>false</UseVSHostingProcess>\r\n    <ErrorReport>prompt</ErrorReport>\r\n    <Prefer32Bit>true</Prefer32Bit>\r\n    <UseDotNetNativeToolchain>true</UseDotNetNativeToolchain>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  <PropertyGroup>\r\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"App.xaml.cs\">\r\n      <DependentUpon>App.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Commands\\Channels\\AcknowledgeChannelCommand.cs\" />\r\n    <Compile Include=\"Commands\\Channels\\MuteChannelCommand.cs\" />\r\n    <Compile Include=\"Commands\\Guild\\AcknowledgeGuildCommand.cs\" />\r\n    <Compile Include=\"Commands\\Guild\\MuteGuildCommand.cs\" />\r\n    <Compile Include=\"Commands\\Member\\ChangeNicknameCommand.cs\" />\r\n    <Compile Include=\"Commands\\Channels\\OpenInNewWindowCommand.cs\" />\r\n    <Compile Include=\"Commands\\Generic\\CopyIdCommand.cs\" />\r\n    <Compile Include=\"Commands\\Messages\\CopyMessageCommand.cs\" />\r\n    <Compile Include=\"Commands\\Generic\\CopyUrlCommand.cs\" />\r\n    <Compile Include=\"Commands\\Messages\\DeleteMessageCommand.cs\" />\r\n    <Compile Include=\"Commands\\DiscordCommand.cs\" />\r\n    <Compile Include=\"Commands\\EditChannelCommand.cs\" />\r\n    <Compile Include=\"Commands\\Generic\\DownloadCommand.cs\" />\r\n    <Compile Include=\"Commands\\Generic\\ShareCommand.cs\" />\r\n    <Compile Include=\"Commands\\Member\\KickCommand.cs\" />\r\n    <Compile Include=\"Commands\\Member\\BanCommand.cs\" />\r\n    <Compile Include=\"Commands\\Channels\\PinChannelToStartCommand.cs\" />\r\n    <Compile Include=\"Commands\\Messages\\PinMessageCommand.cs\" />\r\n    <Compile Include=\"Commands\\Messages\\ReactCommand.cs\" />\r\n    <Compile Include=\"Commands\\Messages\\ReplyCommand.cs\" />\r\n    <Compile Include=\"Commands\\NullCommand.cs\" />\r\n    <Compile Include=\"Commands\\SettingsCommand.cs\" />\r\n    <Compile Include=\"Commands\\Users\\SendMessageCommand.cs\" />\r\n    <Compile Include=\"Commands\\Users\\ShowUserOverlayCommand.cs\" />\r\n    <Compile Include=\"Controls\\Channels\\ChannelIconControl.cs\" />\r\n    <Compile Include=\"Controls\\Channels\\ChannelListControl.cs\" />\r\n    <Compile Include=\"Controls\\Channels\\ChannelPageHeaderControl.xaml.cs\">\r\n      <DependentUpon>ChannelPageHeaderControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Messages\\Embeds\\EmbedControl.xaml.cs\">\r\n      <DependentUpon>EmbedControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Messages\\Embeds\\EmbedFieldsView.cs\" />\r\n    <Compile Include=\"Controls\\Messages\\Embeds\\ImageEmbedControl.xaml.cs\">\r\n      <DependentUpon>ImageEmbedControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Messages\\Embeds\\VideoEmbedControl.xaml.cs\">\r\n      <DependentUpon>VideoEmbedControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\UniformGrid\\TakenSpotsReferenceHolder.cs\" />\r\n    <Compile Include=\"Controls\\UniformGrid\\UniformGrid.cs\" />\r\n    <Compile Include=\"Controls\\UniformGrid\\UniformGrid.Helpers.cs\" />\r\n    <Compile Include=\"Controls\\UniformGrid\\UniformGrid.Properties.cs\" />\r\n    <Compile Include=\"Converters\\Messages\\EmbedTemplateSelector.cs\" />\r\n    <Compile Include=\"Converters\\Static.cs\" />\r\n    <Compile Include=\"Dialogs\\CaptchaRequestDialog.xaml.cs\">\r\n      <DependentUpon>CaptchaRequestDialog.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Extensions\\ChannelTypeExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\CollectionExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\DiscordColorExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\AvatarExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\ShiftEnterExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\FocusExtensions.cs\" />\r\n    <Compile Include=\"Extensions\\MessengerExtensions.cs\" />\r\n    <Compile Include=\"Models\\Channels\\ChannelPageViewModelBase.cs\" />\r\n    <Compile Include=\"Models\\Channels\\ChannelViewModel.cs\" />\r\n    <Compile Include=\"Models\\Channels\\ForumChannelViewModel.cs\" />\r\n    <Compile Include=\"Models\\Channels\\ForumThreadsCollection.cs\" />\r\n    <Compile Include=\"Models\\Channels\\ForumThreadViewModel.cs\" />\r\n    <Compile Include=\"Models\\Channels\\PinsPageViewModel.cs\" />\r\n    <Compile Include=\"Models\\Channels\\ReadStateViewModel.cs\" />\r\n    <Compile Include=\"Controls\\CustomMediaTransportControls.cs\" />\r\n    <Compile Include=\"Controls\\Emoji\\EmojiControl.cs\" />\r\n    <Compile Include=\"Controls\\EmotePicker.xaml.cs\">\r\n      <DependentUpon>EmotePicker.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\FileViewer.cs\" />\r\n    <Compile Include=\"Controls\\Flyouts\\AddServerFlyout.xaml.cs\">\r\n      <DependentUpon>AddServerFlyout.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Flyouts\\ChannelContextFlyout.xaml.cs\">\r\n      <DependentUpon>ChannelContextFlyout.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Flyouts\\DirectMessageContextFlyout.xaml.cs\">\r\n      <DependentUpon>DirectMessageContextFlyout.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Flyouts\\GuildContextFlyout.xaml.cs\">\r\n      <DependentUpon>GuildContextFlyout.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Flyouts\\MessageContextFlyout.xaml.cs\">\r\n      <DependentUpon>MessageContextFlyout.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Flyouts\\UserFlyout.xaml.cs\">\r\n      <DependentUpon>UserFlyout.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Flyouts\\UserListContextFlyout.xaml.cs\">\r\n      <DependentUpon>UserListContextFlyout.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\IconLabelButton.cs\" />\r\n    <Compile Include=\"Controls\\ImageElement.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\CodeBlockResolvingEventArgs.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\ImageResolvingEventArgs.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\LinkClickedEventArgs.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\MarkdownRenderedEventArgs.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\MarkdownTextBlock.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\MarkdownTextBlock.Dimensions.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\MarkdownTextBlock.Events.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\MarkdownTextBlock.Methods.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\MarkdownTextBlock.Properties.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Core\\IParser.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Core\\ParseHelpers.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Core\\SchemaBase.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Core\\StringValueAttribute.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\CodeBlock.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\HeaderBlock.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\HorizontalRuleBlock.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\LinkReferenceBlock.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\ListBlock.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\List\\ListItemBlock.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\List\\ListItemBuilder.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\List\\ListItemPreamble.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\List\\NestedListInfo.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\ParagraphBlock.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\QuoteBlock.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Blocks\\TableBlock.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Enums\\ColumnAlignment.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Enums\\HyperlinkType.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Enums\\InlineParseMethod.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Enums\\ListStyle.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Enums\\MarkdownBlockType.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Enums\\MarkdownInlineType.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Helpers\\Common.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Helpers\\DebuggingReporter.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Helpers\\InlineParseResult.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Helpers\\InlineTripCharHelper.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Helpers\\LineInfo.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\BoldItalicTextInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\BoldTextInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\CodeInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\DiscordInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\EmojiInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\HyperlinkInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\IInlineContainer.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\IInlineLeaf.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\ILinkElement.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\ImageInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\ItalicTextInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\LinkAnchorInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\MarkdownLinkInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\SpoilerTextInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\StrikethroughTextInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\TextRunInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Inlines\\UnderlineTextInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\MarkdownBlock.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\MarkdownDocument.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\MarkdownElement.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\MarkdownInline.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Render\\IRenderContext.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Render\\MarkdownRendererBase.Blocks.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Render\\MarkdownRendererBase.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Parsers\\Markdown\\Render\\MarkdownRendererBase.Inlines.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\ICodeBlockResolver.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\IImageResolver.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\ILinkRegister.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\InlineRenderContext.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\MarkdownRenderer.Blocks.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\MarkdownRenderer.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\MarkdownRenderer.Dimensions.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\MarkdownRenderer.Inlines.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\MarkdownRenderer.Properties.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\MarkdownTable.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\RenderContext.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\RenderContextIncorrectException.cs\" />\r\n    <Compile Include=\"Controls\\Markdown\\Render\\UIElementCollectionRenderContext.cs\" />\r\n    <Compile Include=\"Controls\\Messages\\AttachmentControl.cs\" />\r\n    <Compile Include=\"Controls\\Messages\\AttachmentMediaControl.cs\" />\r\n    <Compile Include=\"Controls\\Messages\\MessageControl.cs\" />\r\n    <Compile Include=\"Controls\\Messages\\MessageEditTools.cs\" />\r\n    <Compile Include=\"Controls\\Messages\\StickerControl.cs\" />\r\n    <Compile Include=\"Controls\\Messages\\SystemMessageControl.cs\" />\r\n    <Compile Include=\"Controls\\MessageTextBox.cs\" />\r\n    <Compile Include=\"Controls\\Presence\\InlinePresenceControl.xaml.cs\">\r\n      <DependentUpon>InlinePresenceControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Presence\\PresenceControl.xaml.cs\">\r\n      <DependentUpon>PresenceControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Presence\\StatusIndicator.cs\" />\r\n    <Compile Include=\"Controls\\PreviewPaneAuroraControl.xaml.cs\">\r\n      <DependentUpon>PreviewPaneAuroraControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\RangeSelector\\RangeChangedEventArgs.cs\" />\r\n    <Compile Include=\"Controls\\RangeSelector\\RangeSelector.cs\" />\r\n    <Compile Include=\"Controls\\RichPresenceControl.xaml.cs\">\r\n      <DependentUpon>RichPresenceControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\ScaledContentControl.cs\" />\r\n    <Compile Include=\"Controls\\Settings\\Converters.cs\" />\r\n    <Compile Include=\"Controls\\Settings\\SettingsBlockControl.xaml.cs\">\r\n      <DependentUpon>SettingsBlockControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\Settings\\SettingsDisplayControl.xaml.cs\">\r\n      <DependentUpon>SettingsDisplayControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\SidebarSearchBox.cs\" />\r\n    <Compile Include=\"Controls\\UniversalWebView.cs\" />\r\n    <Compile Include=\"Controls\\UploadItemsControl.xaml.cs\">\r\n      <DependentUpon>UploadItemsControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Controls\\UsernameControl.cs\" />\r\n    <Compile Include=\"Controls\\Users\\AvatarControl.cs\" />\r\n    <Compile Include=\"Controls\\Voice\\VoiceConnectionControl.xaml.cs\">\r\n      <DependentUpon>VoiceConnectionControl.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Converters\\BoolConverter.cs\" />\r\n    <Compile Include=\"Converters\\BoolOpacityConverter.cs\" />\r\n    <Compile Include=\"Converters\\BoolVisibilityConverter.cs\" />\r\n    <Compile Include=\"Converters\\ChannelSymbolConverter.cs\" />\r\n    <Compile Include=\"Converters\\ChannelTypeTemplateSelector.cs\" />\r\n    <Compile Include=\"Converters\\ColourBrushConverter.cs\" />\r\n    <Compile Include=\"Converters\\DateTimeConverter.cs\" />\r\n    <Compile Include=\"Converters\\FileSizeConverter.cs\" />\r\n    <Compile Include=\"Converters\\GuildListTemplateSelector.cs\" />\r\n    <Compile Include=\"Converters\\HideOnNullConverter.cs\" />\r\n    <Compile Include=\"Converters\\Messages\\AttachmentTemplateSelector.cs\" />\r\n    <Compile Include=\"Converters\\Messages\\AttachmentTypeConverter.cs\" />\r\n    <Compile Include=\"Converters\\Messages\\ComponentTemplateSelector.cs\" />\r\n    <Compile Include=\"Converters\\MessageTemplateSelector.cs\" />\r\n    <Compile Include=\"Converters\\PresenceConverters.cs\" />\r\n    <Compile Include=\"Converters\\ThumbnailImageConverter.cs\" />\r\n    <Compile Include=\"Converters\\TitleCaseConverter.cs\" />\r\n    <Compile Include=\"Converters\\TruncateConverter.cs\" />\r\n    <Compile Include=\"Converters\\UriConverter.cs\" />\r\n    <Compile Include=\"Dialogs\\BanDialog.xaml.cs\">\r\n      <DependentUpon>BanDialog.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Dialogs\\ChangeNicknameDialog.xaml.cs\">\r\n      <DependentUpon>ChangeNicknameDialog.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Dialogs\\ConfirmationDialog.xaml.cs\">\r\n      <DependentUpon>ConfirmationDialog.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Dialogs\\CreateServerDialog.xaml.cs\">\r\n      <DependentUpon>CreateServerDialog.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Dialogs\\DeleteMessageDialog.xaml.cs\">\r\n      <DependentUpon>DeleteMessageDialog.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Dialogs\\ErrorDialog.xaml.cs\">\r\n      <DependentUpon>ErrorDialog.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Dialogs\\GuildDialog.xaml.cs\">\r\n      <DependentUpon>GuildDialog.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Dialogs\\KickDialog.xaml.cs\">\r\n      <DependentUpon>KickDialog.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Dialogs\\PinMessageDialog.xaml.cs\">\r\n      <DependentUpon>PinMessageDialog.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Dialogs\\ProfileOverlay.xaml.cs\">\r\n      <DependentUpon>ProfileOverlay.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Dialogs\\TokenDialog.xaml.cs\">\r\n      <DependentUpon>TokenDialog.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Integration\\ContactListManager.cs\" />\r\n    <Compile Include=\"Integration\\JumpListManager.cs\" />\r\n    <Compile Include=\"Integration\\WindowsHelloManager.cs\" />\r\n    <Compile Include=\"Interop\\BitmapInterop.cs\" />\r\n    <Compile Include=\"MainPage.xaml.cs\">\r\n      <DependentUpon>MainPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Misc\\Emoji.cs\" />\r\n    <Compile Include=\"Misc\\ListViewBehaviour.cs\" />\r\n    <Compile Include=\"Misc\\Logger.cs\" />\r\n    <Compile Include=\"Models\\ChannelEditViewModel.cs\" />\r\n    <Compile Include=\"Models\\ChannelPermissionEditViewModel.cs\" />\r\n    <Compile Include=\"Models\\Channels\\ChannelListViewModel.cs\" />\r\n    <Compile Include=\"Models\\Channels\\DmChannelListViewModel.cs\" />\r\n    <Compile Include=\"Models\\Channels\\ChannelPageViewModel.cs\" />\r\n    <Compile Include=\"Models\\CreateServerModel.cs\" />\r\n    <Compile Include=\"Models\\DiscordPageViewModel.cs\" />\r\n    <Compile Include=\"Models\\DMChannelsViewModel.cs\" />\r\n    <Compile Include=\"Models\\Emoji\\EmojiViewModel.cs\" />\r\n    <Compile Include=\"Models\\FileUploadModel.cs\" />\r\n    <Compile Include=\"Models\\FriendsPageViewModel.cs\" />\r\n    <Compile Include=\"Models\\Guild\\GuildChannelListViewModel.cs\" />\r\n    <Compile Include=\"Models\\Guild\\GuildViewModel.cs\" />\r\n    <Compile Include=\"Models\\Guild\\GuildListFolderViewModel.cs\" />\r\n    <Compile Include=\"Models\\Guild\\GuildListViewModel.cs\" />\r\n    <Compile Include=\"Models\\Guild\\IGuildListViewModel.cs\" />\r\n    <Compile Include=\"Models\\ISnowflake.cs\" />\r\n    <Compile Include=\"Models\\MainPageArgs.cs\" />\r\n    <Compile Include=\"Models\\Messages\\AttachmentViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\Components\\ActionRowComponentViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\Components\\ButtonComponentViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\Components\\ComponentViewModelBase.cs\" />\r\n    <Compile Include=\"Models\\Messages\\Components\\UnknownComponentViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\Embeds\\EmbedAuthorViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\Embeds\\EmbedFieldViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\Embeds\\EmbedFooterViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\Embeds\\EmbedImageViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\Embeds\\EmbedVideoViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\EmbedViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\MessageEditViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\MessageViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\MessageViewModel.WelcomeStrings.cs\" />\r\n    <Compile Include=\"Models\\Messages\\ReactionViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messages\\StickerViewModel.cs\" />\r\n    <Compile Include=\"Models\\Messaging\\DiscordClientMessenger.cs\" />\r\n    <Compile Include=\"Models\\Messaging\\DiscordMessages.cs\" />\r\n    <Compile Include=\"Models\\Relationships\\RelationshipViewModel.cs\" />\r\n    <Compile Include=\"Models\\Channels\\SearchPageViewModel.cs\" />\r\n    <Compile Include=\"Models\\Settings\\AccountsSettingsModel.cs\" />\r\n    <Compile Include=\"Models\\Settings\\NotificationsSettingsModel.cs\" />\r\n    <Compile Include=\"Models\\Settings\\MediaSettingsModel.cs\" />\r\n    <Compile Include=\"Models\\Settings\\MessagingSettingsModel.cs\" />\r\n    <Compile Include=\"Models\\Settings\\SecuritySettingsModel.cs\" />\r\n    <Compile Include=\"Models\\Settings\\ThemesSettingsModel.cs\" />\r\n    <Compile Include=\"Models\\Settings\\RootSettingsModel.cs\" />\r\n    <Compile Include=\"Models\\Settings\\VoiceSettingsModel.cs\" />\r\n    <Compile Include=\"Models\\SharePageViewModel.cs\" />\r\n    <Compile Include=\"Models\\User\\PresenceViewModel.cs\" />\r\n    <Compile Include=\"Models\\User\\RoleViewModel.cs\" />\r\n    <Compile Include=\"Models\\User\\UserViewModel.cs\" />\r\n    <Compile Include=\"Models\\ViewModelBase.cs\" />\r\n    <Compile Include=\"Models\\Voice\\Transport\\VoiceDispatch.cs\" />\r\n    <Compile Include=\"Models\\Voice\\Transport\\VoiceStateUpdatePayload.cs\" />\r\n    <Compile Include=\"Models\\Voice\\VoiceConnectionModel.cs\" />\r\n    <Compile Include=\"Pages\\ChannelPage.xaml.cs\">\r\n      <DependentUpon>ChannelPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\DiscordPage.xaml.cs\">\r\n      <DependentUpon>DiscordPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\LoginPage.xaml.cs\">\r\n      <DependentUpon>LoginPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Management\\ChannelEditPage.xaml.cs\">\r\n      <DependentUpon>ChannelEditPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Management\\Channel\\ChannelEditOverviewPage.xaml.cs\">\r\n      <DependentUpon>ChannelEditOverviewPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Management\\Channel\\ChannelEditPermissionsPage.xaml.cs\">\r\n      <DependentUpon>ChannelEditPermissionsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Overlay\\AttachmentOverlayPage.xaml.cs\">\r\n      <DependentUpon>AttachmentOverlayPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Overlay\\UserInfoOverlayPage.xaml.cs\">\r\n      <DependentUpon>UserInfoOverlayPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Settings\\AboutSettingsPage.xaml.cs\">\r\n      <DependentUpon>AboutSettingsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Settings\\AccountsSettingsPage.xaml.cs\">\r\n      <DependentUpon>AccountsSettingsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Settings\\DebugSettingsPage.xaml.cs\">\r\n      <DependentUpon>DebugSettingsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Settings\\MediaSettingsPage.xaml.cs\">\r\n      <DependentUpon>MediaSettingsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Settings\\MessagingSettingsPage.xaml.cs\">\r\n      <DependentUpon>MessagingSettingsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Settings\\NotificationsSettingsPage.xaml.cs\">\r\n      <DependentUpon>NotificationsSettingsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Settings\\SecuritySettingsPage.xaml.cs\">\r\n      <DependentUpon>SecuritySettingsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Settings\\SettingsPage.xaml.cs\">\r\n      <DependentUpon>SettingsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Settings\\ThemesSettingsPage.xaml.cs\">\r\n      <DependentUpon>ThemesSettingsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Settings\\VoiceSettingsPage.xaml.cs\">\r\n      <DependentUpon>VoiceSettingsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\SharePage.xaml.cs\">\r\n      <DependentUpon>SharePage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Subpages\\AgeGatePage.xaml.cs\">\r\n      <DependentUpon>AgeGatePage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Subpages\\DMChannelsPage.xaml.cs\">\r\n      <DependentUpon>DMChannelsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Subpages\\ForumChannelPage.xaml.cs\">\r\n      <DependentUpon>ForumChannelPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Subpages\\FriendsPage.xaml.cs\">\r\n      <DependentUpon>FriendsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Subpages\\GuildChannelListPage.xaml.cs\">\r\n      <DependentUpon>GuildChannelListPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Subpages\\PinsPage.xaml.cs\">\r\n      <DependentUpon>PinsPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Subpages\\SearchPage.xaml.cs\">\r\n      <DependentUpon>SearchPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\Subpages\\UserListPage.xaml.cs\">\r\n      <DependentUpon>UserListPage.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Pages\\VideoEditor.xaml.cs\">\r\n      <DependentUpon>VideoEditor.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Program.cs\" />\r\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\r\n    <Compile Include=\"Services\\DiscordManager.cs\" />\r\n    <Compile Include=\"Services\\Platform.cs\" />\r\n    <Compile Include=\"Services\\SplitPaneService.cs\" />\r\n    <Compile Include=\"Services\\ThemeService.cs\" />\r\n    <Compile Include=\"Themes\\Controls\\Channels.xaml.cs\">\r\n      <DependentUpon>Channels.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Themes\\Controls\\Messages.xaml.cs\">\r\n      <DependentUpon>Messages.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Themes\\Controls\\Presences.xaml.cs\">\r\n      <DependentUpon>Presences.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Themes\\Templates.xaml.cs\">\r\n      <DependentUpon>Templates.xaml</DependentUpon>\r\n    </Compile>\r\n    <Compile Include=\"Services\\BackgroundNotificationService.cs\" />\r\n    <Compile Include=\"Services\\BaseService.cs\" />\r\n    <Compile Include=\"Services\\DiscordNavigationService.cs\" />\r\n    <Compile Include=\"Services\\FullscreenService.cs\" />\r\n    <Compile Include=\"Services\\OverlayService.cs\" />\r\n    <Compile Include=\"Services\\SettingsService.cs\" />\r\n    <Compile Include=\"Services\\SwipeOpenService.cs\" />\r\n    <Compile Include=\"Services\\Windowing\\ApplicationViewWindowingService.cs\" />\r\n    <Compile Include=\"Services\\Windowing\\WindowingService.cs\" />\r\n    <Compile Include=\"Themes\\ThemeResources.cs\" />\r\n    <Compile Include=\"Tools.cs\" />\r\n    <Compile Include=\"Utilities\\AdaptiveFlyout.cs\" />\r\n    <Compile Include=\"Utilities\\EmojiUtilities.cs\" />\r\n    <Compile Include=\"Utilities\\MediaTranscoding.cs\" />\r\n    <Compile Include=\"Utilities\\NetworkHelper.cs\" />\r\n    <Compile Include=\"Utilities\\SwipeOpenHelper.cs\" />\r\n    <Compile Include=\"Utilities\\UIUtilities.cs\" />\r\n    <Compile Include=\"Utilities\\WebPHelpers.cs\" />\r\n    <Compile Include=\"Extensions\\VisualTreeExtensions.cs\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <AppxManifest Include=\"Package.appxmanifest\">\r\n      <SubType>Designer</SubType>\r\n    </AppxManifest>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <Content Include=\"Assets\\Captcha\\hCaptcha.html\" />\r\n    <Content Include=\"Assets\\DiscordClyde.Dark.svg\" />\r\n    <Content Include=\"Assets\\DiscordClyde.Light.svg\" />\r\n    <Content Include=\"Assets\\DiscordLogo.Dark.svg\" />\r\n    <Content Include=\"Assets\\DiscordLogo.Default.svg\" />\r\n    <Content Include=\"Assets\\DiscordLogo.Light.svg\" />\r\n    <Content Include=\"Assets\\DiscordSplashScreen.Dark.svg\" />\r\n    <Content Include=\"Assets\\DiscordSplashScreen.Light.svg\" />\r\n    <Content Include=\"Assets\\DiscordWordMark.Dark.svg\" />\r\n    <Content Include=\"Assets\\DiscordWordMark.Light.svg\" />\r\n    <Content Include=\"Assets\\example-avatar.png\" />\r\n    <Content Include=\"Assets\\Store\\BadgeLogo.scale-100.png\" />\r\n    <Content Include=\"Assets\\Store\\BadgeLogo.scale-125.png\" />\r\n    <Content Include=\"Assets\\Store\\BadgeLogo.scale-150.png\" />\r\n    <Content Include=\"Assets\\Store\\BadgeLogo.scale-200.png\" />\r\n    <Content Include=\"Assets\\Store\\BadgeLogo.scale-400.png\" />\r\n    <Content Include=\"Assets\\Store\\LargeTile.scale-100.png\" />\r\n    <Content Include=\"Assets\\Store\\LargeTile.scale-125.png\" />\r\n    <Content Include=\"Assets\\Store\\LargeTile.scale-150.png\" />\r\n    <Content Include=\"Assets\\Store\\LargeTile.scale-200.png\" />\r\n    <Content Include=\"Assets\\Store\\LargeTile.scale-400.png\" />\r\n    <Content Include=\"Assets\\Store\\SmallTile.scale-100.png\" />\r\n    <Content Include=\"Assets\\Store\\SmallTile.scale-125.png\" />\r\n    <Content Include=\"Assets\\Store\\SmallTile.scale-150.png\" />\r\n    <Content Include=\"Assets\\Store\\SmallTile.scale-200.png\" />\r\n    <Content Include=\"Assets\\Store\\SmallTile.scale-400.png\" />\r\n    <Content Include=\"Assets\\Store\\SplashScreen.light.scale-100.png\" />\r\n    <Content Include=\"Assets\\Store\\SplashScreen.light.scale-125.png\" />\r\n    <Content Include=\"Assets\\Store\\SplashScreen.light.scale-150.png\" />\r\n    <Content Include=\"Assets\\Store\\SplashScreen.light.scale-200.png\" />\r\n    <Content Include=\"Assets\\Store\\SplashScreen.light.scale-400.png\" />\r\n    <Content Include=\"Assets\\Store\\SplashScreen.scale-100.png\" />\r\n    <Content Include=\"Assets\\Store\\SplashScreen.scale-125.png\" />\r\n    <Content Include=\"Assets\\Store\\SplashScreen.scale-150.png\" />\r\n    <Content Include=\"Assets\\Store\\SplashScreen.scale-200.png\" />\r\n    <Content Include=\"Assets\\Store\\SplashScreen.scale-400.png\" />\r\n    <Content Include=\"Assets\\Store\\Square150x150Logo.scale-100.png\" />\r\n    <Content Include=\"Assets\\Store\\Square150x150Logo.scale-125.png\" />\r\n    <Content Include=\"Assets\\Store\\Square150x150Logo.scale-150.png\" />\r\n    <Content Include=\"Assets\\Store\\Square150x150Logo.scale-200.png\" />\r\n    <Content Include=\"Assets\\Store\\Square150x150Logo.scale-400.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.altform-lightunplated_targetsize-16.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.altform-lightunplated_targetsize-24.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.altform-lightunplated_targetsize-256.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.altform-lightunplated_targetsize-32.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.altform-lightunplated_targetsize-48.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.altform-unplated_targetsize-16.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.altform-unplated_targetsize-24.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.altform-unplated_targetsize-256.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.altform-unplated_targetsize-32.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.altform-unplated_targetsize-48.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.scale-100.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.scale-125.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.scale-150.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.scale-200.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.scale-400.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.targetsize-16.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.targetsize-24.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.targetsize-256.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.targetsize-32.png\" />\r\n    <Content Include=\"Assets\\Store\\Square44x44Logo.targetsize-48.png\" />\r\n    <Content Include=\"Assets\\Store\\StoreLogo.scale-100.png\" />\r\n    <Content Include=\"Assets\\Store\\StoreLogo.scale-125.png\" />\r\n    <Content Include=\"Assets\\Store\\StoreLogo.scale-150.png\" />\r\n    <Content Include=\"Assets\\Store\\StoreLogo.scale-200.png\" />\r\n    <Content Include=\"Assets\\Store\\StoreLogo.scale-400.png\" />\r\n    <Content Include=\"Assets\\Store\\Wide310x150Logo.scale-100.png\" />\r\n    <Content Include=\"Assets\\Store\\Wide310x150Logo.scale-125.png\" />\r\n    <Content Include=\"Assets\\Store\\Wide310x150Logo.scale-150.png\" />\r\n    <Content Include=\"Assets\\Store\\Wide310x150Logo.scale-200.png\" />\r\n    <Content Include=\"Assets\\Store\\Wide310x150Logo.scale-400.png\" />\r\n    <Content Include=\"Controls\\Markdown\\About.txt\" />\r\n    <None Include=\"Package.StoreAssociation.xml\" />\r\n    <Content Include=\"NativeMethods.txt\" />\r\n    <Content Include=\"Properties\\Default.rd.xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <PackageReference Include=\"ColorCode.UWP\">\r\n      <Version>2.0.12</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"CommunityToolkit.Mvvm\">\r\n      <Version>8.3.2</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Humanizer\">\r\n      <Version>2.8.2</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.AppCenter\">\r\n      <Version>5.0.5</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.AppCenter.Analytics\">\r\n      <Version>5.0.5</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.AppCenter.Crashes\">\r\n      <Version>5.0.5</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging\">\r\n      <Version>8.0.0</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.Extensions.Logging.Debug\">\r\n      <Version>8.0.0</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\r\n      <Version>6.2.14</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.Toolkit.Uwp.Notifications\">\r\n      <Version>7.1.3</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.Toolkit.Uwp.UI.Lottie\">\r\n      <Version>7.1.1</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.Web.WebView2\" Condition=\"'$(Platform)' != 'ARM'\">\r\n      <Version>1.0.2739.15</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.Web.WebView2.Undocked\">\r\n      <Version>1.0.2739.170</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.Windows.CsWin32\">\r\n      <Version>0.3.106</Version>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\r\n      <PrivateAssets>all</PrivateAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.Xaml.Behaviors.Uwp.Managed\">\r\n      <Version>2.0.1</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.UI.Xaml\">\r\n      <Version>2.7.3</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Shim.System.Numerics\">\r\n      <Version>6.0.0</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"TenMica\">\r\n      <Version>1.0.0-beta</Version>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Unicord.Universal.Voice\">\r\n      <Version>1.0.2</Version>\r\n    </PackageReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ApplicationDefinition Include=\"App.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </ApplicationDefinition>\r\n    <Page Include=\"Controls\\Channels\\ChannelPageHeaderControl.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Controls\\EmotePicker.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Flyouts\\AddServerFlyout.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Flyouts\\ChannelContextFlyout.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Flyouts\\DirectMessageContextFlyout.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Flyouts\\GuildContextFlyout.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Flyouts\\MessageContextFlyout.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Flyouts\\UserFlyout.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Flyouts\\UserListContextFlyout.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Messages\\Embeds\\EmbedControl.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Controls\\Messages\\Embeds\\ImageEmbedControl.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Controls\\Messages\\Embeds\\VideoEmbedControl.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Controls\\Presence\\InlinePresenceControl.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Presence\\PresenceControl.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\PreviewPaneAuroraControl.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\RichPresenceControl.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Settings\\SettingsBlockControl.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Settings\\SettingsDisplayControl.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\UploadItemsControl.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Controls\\Voice\\VoiceConnectionControl.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\BanDialog.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\CaptchaRequestDialog.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\ChangeNicknameDialog.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\ConfirmationDialog.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\CreateServerDialog.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\DeleteMessageDialog.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\ErrorDialog.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\GuildDialog.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\KickDialog.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\PinMessageDialog.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\ProfileOverlay.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Dialogs\\TokenDialog.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"MainPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\ChannelPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\DiscordPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\LoginPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Management\\ChannelEditPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Management\\Channel\\ChannelEditOverviewPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Management\\Channel\\ChannelEditPermissionsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Overlay\\AttachmentOverlayPage.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Pages\\Overlay\\UserInfoOverlayPage.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Pages\\Settings\\AboutSettingsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Settings\\AccountsSettingsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Settings\\DebugSettingsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Settings\\MediaSettingsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Settings\\MessagingSettingsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Settings\\NotificationsSettingsPage.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Pages\\Settings\\SecuritySettingsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Settings\\SettingsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Settings\\ThemesSettingsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Settings\\VoiceSettingsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\SharePage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Subpages\\AgeGatePage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Subpages\\DMChannelsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Subpages\\ForumChannelPage.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Pages\\Subpages\\FriendsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Subpages\\GuildChannelListPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Subpages\\PinsPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Subpages\\SearchPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\Subpages\\UserListPage.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Pages\\VideoEditor.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\Colours.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\Controls\\Channels.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Themes\\Controls\\Emoji.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\Controls\\Messages.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\Controls\\Permissions.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\Controls\\Presences.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\Controls\\UniversalWebView.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\Controls\\Users.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\CustomStyles.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\Generic.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\Controls\\Flyouts.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\Styles\\Backport\\WinUIResources_21h1.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n    <Page Include=\"Themes\\Styles\\Fluent.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Themes\\Styles\\Backport\\NavigationView_rs1.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Themes\\Styles\\Performance.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Themes\\Styles\\SunValley.xaml\">\r\n      <SubType>Designer</SubType>\r\n      <Generator>MSBuild:Compile</Generator>\r\n    </Page>\r\n    <Page Include=\"Themes\\Templates.xaml\">\r\n      <Generator>MSBuild:Compile</Generator>\r\n      <SubType>Designer</SubType>\r\n    </Page>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Assets\\emoji.json\" />\r\n    <Content Include=\"Assets\\FiraCode-Regular.ttf\" />\r\n    <Content Include=\"Assets\\FluentSystemIcons-Regular.ttf\" />\r\n    <Content Include=\"Assets\\segmdl2.ttf\" />\r\n    <Content Include=\"Assets\\SegoeIcons.ttf\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\AboutSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\AccountsSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\AgeGatePage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\ChannelPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\Controls.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\Converters.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\Dialogs.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\DMChannelsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\Flyouts.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\FriendsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\LoginPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\MediaSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\MessagingSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\Permissions.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\PinsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\Resources.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\SearchPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\SecuritySettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\SettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\ThemesSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\UserListPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\VideoEditor.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\Voice.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\VoiceSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\AboutSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\AccountsSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\AgeGatePage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\ChannelPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\Controls.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\Converters.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\Dialogs.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\DMChannelsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\Flyouts.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\FriendsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\LoginPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\MediaSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\MessagingSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\Permissions.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\PinsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\NotificationsSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ja-JP\\NotificationsSettingsPage.resw\" />\r\n    <None Include=\"Resources\\ru-RU\\Readme\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\Resources.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\SearchPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\SecuritySettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\SettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\ThemesSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\UserListPage.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\VideoEditor.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\Voice.resw\" />\r\n    <PRIResource Include=\"Resources\\ru-RU\\VoiceSettingsPage.resw\" />\r\n    <None Include=\"Unicord.Universal_TemporaryKey.pfx\" />\r\n    <PRIResource Include=\"Resources\\fr\\VoiceSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\Voice.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\VideoEditor.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\UserListPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\ThemesSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\SettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\SecuritySettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\Resources.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\PinsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\MessagingSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\MediaSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\LoginPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\FriendsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\Flyouts.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\DMChannelsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\Dialogs.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\Converters.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\Controls.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\ChannelPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\AgeGatePage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\AccountsSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\fr\\AboutSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\VoiceSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\Voice.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\VideoEditor.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\UserListPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\ThemesSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\SettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\SecuritySettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\SearchPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\Resources.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\PinsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\MessagingSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\MediaSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\LoginPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\FriendsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\Flyouts.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\DMChannelsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\Dialogs.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\Converters.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\Controls.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\ChannelPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\AgeGatePage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\AccountsSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-US\\AboutSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\VoiceSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\Voice.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\VideoEditor.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\UserListPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\ThemesSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\SettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\SecuritySettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\SearchPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\Resources.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\PinsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\Permissions.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\MessagingSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\MediaSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\LoginPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\FriendsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\Flyouts.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\DMChannelsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\Dialogs.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\Converters.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\Controls.resw\">\r\n      <SubType>Designer</SubType>\r\n    </PRIResource>\r\n    <PRIResource Include=\"Resources\\en-GB\\ChannelPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\AgeGatePage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\AccountsSettingsPage.resw\" />\r\n    <PRIResource Include=\"Resources\\en-GB\\AboutSettingsPage.resw\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Libraries\\DSharpPlus\\DSharpPlus.Rest\\DSharpPlus.Rest.csproj\">\r\n      <Project>{c01b8589-13fe-4a6d-b159-6644977f58de}</Project>\r\n      <Name>DSharpPlus.Rest</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\DSharpPlus\\DSharpPlus.Windows\\DSharpPlus.Windows.csproj\">\r\n      <Project>{1b172f49-372a-4f15-8353-9bdaba6e2331}</Project>\r\n      <Name>DSharpPlus.Windows</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\DSharpPlus\\DSharpPlus\\DSharpPlus.csproj\">\r\n      <Project>{0f4b3af7-9320-41ae-82d0-3737949499c7}</Project>\r\n      <Name>DSharpPlus</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\MomentSharp\\MomentSharp\\MomentSharp.csproj\">\r\n      <Project>{8a4a933c-c579-4c36-9133-7d6721f99aec}</Project>\r\n      <Name>MomentSharp</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\unicode.net\\unicode\\Unicode.csproj\">\r\n      <Project>{c5ca3873-bf6a-4711-abed-f9d27d37ffb2}</Project>\r\n      <Name>Unicode</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WamWooWam.Core\\WamWooWam.Core\\WamWooWam.Core.csproj\">\r\n      <Project>{6e8e3c2c-a7d2-4971-a97d-fa831e3ecf15}</Project>\r\n      <Name>WamWooWam.Core</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Animations\\Microsoft.Toolkit.Uwp.UI.Animations.csproj\">\r\n      <Project>{70274a56-341b-490d-8ceb-5bf6e9b819ab}</Project>\r\n      <Name>Microsoft.Toolkit.Uwp.UI.Animations</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Behaviors\\Microsoft.Toolkit.Uwp.UI.Behaviors.csproj\">\r\n      <Project>{d4ff799d-0df2-495a-adc9-3bbc4aef8971}</Project>\r\n      <Name>Microsoft.Toolkit.Uwp.UI.Behaviors</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls.Core\\Microsoft.Toolkit.Uwp.UI.Controls.Core.csproj\">\r\n      <Project>{e9faabfb-d726-42c1-83c1-cb46a29fea81}</Project>\r\n      <Name>Microsoft.Toolkit.Uwp.UI.Controls.Core</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls.Input\\Microsoft.Toolkit.Uwp.UI.Controls.Input.csproj\">\r\n      <Project>{af1be4e9-e2e1-4729-b076-b3725d8e21ee}</Project>\r\n      <Name>Microsoft.Toolkit.Uwp.UI.Controls.Input</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls.Layout\\Microsoft.Toolkit.Uwp.UI.Controls.Layout.csproj\">\r\n      <Project>{a26cbe8e-c713-4e2b-96dd-721e7eb7839f}</Project>\r\n      <Name>Microsoft.Toolkit.Uwp.UI.Controls.Layout</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls.Media\\Microsoft.Toolkit.Uwp.UI.Controls.Media.csproj\">\r\n      <Project>{43bd2a36-9e12-4788-80ae-2377e41e6d05}</Project>\r\n      <Name>Microsoft.Toolkit.Uwp.UI.Controls.Media</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls.Primitives\\Microsoft.Toolkit.Uwp.UI.Controls.Primitives.csproj\">\r\n      <Project>{84ab7dc5-95c9-4cf8-a370-d077e9e9ef1a}</Project>\r\n      <Name>Microsoft.Toolkit.Uwp.UI.Controls.Primitives</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls\\Microsoft.Toolkit.Uwp.UI.Controls.csproj\">\r\n      <Name>Microsoft.Toolkit.Uwp.UI.Controls</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Media\\Microsoft.Toolkit.Uwp.UI.Media.csproj\">\r\n      <Name>Microsoft.Toolkit.Uwp.UI.Media</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI\\Microsoft.Toolkit.Uwp.UI.csproj\">\r\n      <Project>{bcef3a53-5965-49ec-9c7d-e700ebfb93b6}</Project>\r\n      <Name>Microsoft.Toolkit.Uwp.UI</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp\\Microsoft.Toolkit.Uwp.csproj\">\r\n      <Project>{805f80df-75c6-4c2f-8fd9-b47f6d0df5a3}</Project>\r\n      <Name>Microsoft.Toolkit.Uwp</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit\\Microsoft.Toolkit.csproj\">\r\n      <Project>{58278e92-f06d-4585-a94a-ed3f98480e26}</Project>\r\n      <Name>Microsoft.Toolkit</Name>\r\n    </ProjectReference>\r\n    <ProjectReference Include=\"..\\Unicord.Universal.Background.Tasks\\Unicord.Universal.Background.Tasks.csproj\">\r\n      <Project>{69f44648-37cd-4b20-8814-2baf85b4f624}</Project>\r\n      <Name>Unicord.Universal.Background.Tasks</Name>\r\n    </ProjectReference>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <SDKReference Include=\"WindowsDesktop, Version=10.0.22621.0\">\r\n      <Name>Windows Desktop Extensions for the UWP</Name>\r\n    </SDKReference>\r\n    <SDKReference Include=\"WindowsMobile, Version=10.0.22621.0\">\r\n      <Name>Windows Mobile Extensions for the UWP</Name>\r\n    </SDKReference>\r\n  </ItemGroup>\r\n  <ItemGroup />\r\n  <Import Project=\"..\\Unicord.Universal.Shared\\Unicord.Universal.Shared.projitems\" Label=\"Shared\" />\r\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\r\n    <VisualStudioVersion>14.0</VisualStudioVersion>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|Win32'\">\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'\">\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|Win32'\">\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|AnyCPU'\">\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\r\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \r\n       Other similar extension points exist, see Microsoft.Common.targets.\r\n  <Target Name=\"BeforeBuild\">\r\n  </Target>\r\n  <Target Name=\"AfterBuild\">\r\n  </Target>\r\n  -->\r\n</Project>"
  },
  {
    "path": "Unicord.Universal/Utilities/AdaptiveFlyout.cs",
    "content": "﻿using System;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Utilities\n{\n    public abstract class AdaptiveFlyout : UserControl\n    {\n        public AdaptiveFlyout(object param)\n        {\n            DataContext = param;\n        }\n    }\n\n    public static class AdaptiveFlyoutUtilities\n    {\n        public static void ShowAdaptiveFlyout<TFlyout>(object parameter, FrameworkElement showAt) where TFlyout : AdaptiveFlyout\n        {\n            var flyout = (AdaptiveFlyout)Activator.CreateInstance(typeof(TFlyout), new[] { parameter });\n            //if (AnalyticsInfo.VersionInfo.DeviceFamily == \"Windows.Mobile\")\n            //{\n            //    var page = Window.Current.Content.FindChild<MainPage>();\n            //}\n            //else\n            //{\n                var flyoutContainer = new Flyout() { Content = flyout };\n                flyoutContainer.ShowAt(showAt);\n            //}\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Utilities/EmojiUtilities.cs",
    "content": "﻿using System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing NeoSmart.Unicode;\nusing Unicord.Universal.Misc;\nusing Unicord.Universal.Models.Channels;\nusing Unicord.Universal.Services;\n\nnamespace Unicord.Universal.Utilities\n{\n    internal class EmojiUtilities\n    {\n        public static IList<EmojiGroup> GetEmoji(ChannelViewModel channel, string searchTerm = null)\n        {\n            var culture = CultureInfo.InvariantCulture.CompareInfo;\n            var hasSearchTerm = !string.IsNullOrWhiteSpace(searchTerm);\n\n            bool FilterEmoji(SingleEmoji e)\n                => (!hasSearchTerm || culture.IndexOf(e.Name, searchTerm, CompareOptions.IgnoreCase) >= 0);\n\n            var emoteList = GetAllowedEmotes(channel, searchTerm)\n                .ToList();\n\n            emoteList.AddRange(Emoji.All.Where(FilterEmoji)\n                .GroupBy(e => e.Group)\n                .Where(g => g.Any())\n                .Select(g => new EmojiGroup(g.Key, g)));\n\n            return emoteList;\n        }\n\n        public static IEnumerable<EmojiGroup> GetAllowedEmotes(ChannelViewModel channel, string searchTerm = null)\n        {\n            var hasNitro = DiscordManager.Discord.CurrentUser.HasNitro();\n            var culture = CultureInfo.InvariantCulture.CompareInfo;\n            var hasSearchTerm = !string.IsNullOrWhiteSpace(searchTerm);\n\n            bool FilterEmoji(DiscordEmoji e)\n                => (hasNitro || !e.IsAnimated) &&\n                e.IsAvailable\n                && (!hasSearchTerm || culture.IndexOf(e.Name, searchTerm, CompareOptions.IgnoreCase) >= 0);\n\n            if (hasNitro && (channel.Channel.IsPrivate || channel.Channel.CurrentPermissions.HasPermission(Permissions.UseExternalEmojis)))\n            {\n                // all availiable emoji \n                var guildOrder = GetOrderedGuildsList();\n\n                return DiscordManager.Discord.Guilds.Values\n                    .OrderBy(g => guildOrder.IndexOf(g.Id))\n                    .Select(g => new EmojiGroup(g, g.Emojis.Values.Where(FilterEmoji)))\n                    .Where(g => g.Any());\n            }\n            else\n            {\n                // just this server's emoji\n                if (channel.Guild == null)\n                    return [];\n                var group = new EmojiGroup(channel.Guild.Guild, channel.Guild.Guild.Emojis.Values.Where(FilterEmoji));\n\n                return group.Count > 0 ? [group] : [];\n            }\n        }\n\n        public static List<ulong> GetOrderedGuildsList()\n        {\n            var guilds = DiscordManager.Discord.Guilds;\n            var folders = DiscordManager.Discord.UserSettings?.GuildFolders;\n            var ids = new List<ulong>();\n            foreach (var folder in (folders ?? []))\n            {\n                if (folder.Id == null || folder.Id == 0)\n                {\n                    foreach (var id in folder.GuildIds)\n                    {\n                        if (guilds.TryGetValue(id, out var server))\n                        {\n                            ids.Add(id);\n                        }\n                    }\n\n                    continue;\n                }\n            }\n\n            foreach (var guild in DiscordManager.Discord.Guilds.Values)\n            {\n                if (!ids.Contains(guild.Id))\n                    ids.Add(guild.Id);\n            }\n\n            return ids;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Utilities/MediaTranscoding.cs",
    "content": "﻿using Microsoft.AppCenter.Analytics;\r\nusing System;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing WamWooWam.Core;\r\nusing Windows.Graphics.Imaging;\r\nusing Windows.Media.MediaProperties;\r\nusing Windows.Media.Transcoding;\r\nusing Windows.Storage;\r\nusing Windows.Storage.FileProperties;\r\nusing static Unicord.Constants;\r\n\r\nnamespace Unicord.Universal.Utilities\r\n{\r\n    internal static class MediaTranscoding\r\n    {\r\n        public static async Task<bool> TryTranscodeVideoAsync(IStorageFile input, IStorageFile output, IProgress<double?> progress, CancellationToken token = default)\r\n        {\r\n            try\r\n            {\r\n                Analytics.TrackEvent(\"MediaTranscoding_VideoTranscodeRequested\");\r\n\r\n                var props = await (input as IStorageItemProperties).Properties.GetVideoPropertiesAsync();\r\n                var profile = CreateVideoEncodingProfileFromProps(props);\r\n\r\n                return await TryTranscodeMediaAsync(input, output, profile, progress, token);\r\n            }\r\n            finally\r\n            {\r\n                Analytics.TrackEvent(\"MediaTranscoding_VideoTranscodeComplete\");\r\n            }\r\n        }\r\n\r\n        public static Task<bool> TryTranscodeAudioAsync(IStorageFile input, IStorageFile output, bool hq, IProgress<double?> progress, CancellationToken token = default)\r\n        {\r\n            try\r\n            {\r\n                Analytics.TrackEvent(\"MediaTranscoding_AudioTranscodeRequested\");\r\n\r\n                var profile = MediaEncodingProfile.CreateMp3(hq ? AudioEncodingQuality.High : AudioEncodingQuality.Medium);\r\n                return TryTranscodeMediaAsync(input, output, profile, progress, token);\r\n            }\r\n            finally\r\n            {\r\n                Analytics.TrackEvent(\"MediaTranscoding_AudioTranscodeComplete\");\r\n            }\r\n        }\r\n\r\n        public static async Task<bool> TryTranscodePhotoAsync(IStorageFile input, IStorageFile output, IProgress<double?> progress, CancellationToken token = default)\r\n        {\r\n            try\r\n            {\r\n                Analytics.TrackEvent(\"MediaTranscoding_PhotoTranscodeRequested\");\r\n\r\n                progress.Report(null);\r\n\r\n                try\r\n                {\r\n                    using (var inputStream = await input.OpenAsync(FileAccessMode.Read))\r\n                    using (var outputStream = await output.OpenAsync(FileAccessMode.ReadWrite))\r\n                    {\r\n                        var decoder = await BitmapDecoder.CreateAsync(inputStream);\r\n                        double width = (int)decoder.PixelWidth;\r\n                        double height = (int)decoder.PixelHeight;\r\n\r\n                        Drawing.ScaleProportions(ref width, ref height, 4096, 4096);\r\n\r\n                        var encoder = await BitmapEncoder.CreateForTranscodingAsync(outputStream, decoder);\r\n                        encoder.BitmapTransform.ScaledWidth = (uint)width;\r\n                        encoder.BitmapTransform.ScaledHeight = (uint)height;\r\n                        await encoder.FlushAsync();\r\n\r\n                        return true;\r\n                    }\r\n                }\r\n                catch\r\n                {\r\n                    return false;\r\n                }\r\n            }\r\n            finally\r\n            {\r\n                Analytics.TrackEvent(\"MediaTranscoding_PhotoTranscodeComplete\");\r\n            }\r\n        }\r\n\r\n        public static async Task<bool> TryTranscodeMediaAsync(IStorageFile input, IStorageFile output, MediaEncodingProfile profile, IProgress<double?> progress, CancellationToken token = default)\r\n        {\r\n            var transcoder = new MediaTranscoder() { VideoProcessingAlgorithm = (MediaVideoProcessingAlgorithm)App.RoamingSettings.Read(VIDEO_PROCESSING, (int)MediaVideoProcessingAlgorithm.Default) };\r\n            var prep = await transcoder.PrepareFileTranscodeAsync(input, output, profile);\r\n\r\n            if (prep.CanTranscode)\r\n            {\r\n                await prep.TranscodeAsync()\r\n                          .AsTask(token, new Progress<double>((d) => progress?.Report(d)));\r\n                return true;\r\n            }\r\n\r\n            transcoder = null;\r\n\r\n            return false;\r\n        }\r\n\r\n        public static MediaEncodingProfile CreateVideoEncodingProfileFromProps(VideoProperties props)\r\n        {\r\n            var width = (double)props.Width;\r\n            var height = (double)props.Height;\r\n\r\n            double maxWidth = App.RoamingSettings.Read(VIDEO_WIDTH, DEFAULT_VIDEO_WIDTH);\r\n            double maxHeight = App.RoamingSettings.Read(VIDEO_HEIGHT, DEFAULT_VIDEO_HEIGHT);\r\n\r\n            Drawing.ScaleProportions(ref width, ref height, maxWidth, maxHeight);\r\n            var bitrate = App.RoamingSettings.Read(VIDEO_BITRATE, DEFAULT_VIDEO_BITRATE);\r\n\r\n            if (width == 0)\r\n                width = maxWidth;\r\n            if (height == 0)\r\n                height = maxHeight;\r\n\r\n            var profile = new MediaEncodingProfile()\r\n            {\r\n                Container = new ContainerEncodingProperties() { Subtype = MediaEncodingSubtypes.Mpeg4 },\r\n                Video = new VideoEncodingProperties()\r\n                {\r\n                    Width = (uint)(Math.Round(width / 2.0) * 2),\r\n                    Height = (uint)(Math.Round(height / 2.0) * 2),\r\n                    Subtype = MediaEncodingSubtypes.H264,\r\n                    Bitrate = bitrate\r\n                },\r\n                Audio = new AudioEncodingProperties()\r\n                {\r\n                    Bitrate = App.RoamingSettings.Read(AUDIO_BITRATE, DEFAULT_AUDIO_BITRATE),\r\n                    BitsPerSample = 16,\r\n                    ChannelCount = 2,\r\n                    SampleRate = App.RoamingSettings.Read(AUDIO_SAMPLERATE, DEFAULT_AUDIO_SAMPLERATE),\r\n                    Subtype = MediaEncodingSubtypes.Aac\r\n                }\r\n            };\r\n\r\n            return profile;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal/Utilities/NetworkHelper.cs",
    "content": "﻿using Windows.Networking.Connectivity;\n\nnamespace Unicord.Universal.Utilities\n{\n    /// <summary>\n    /// Provides some static properties that give information about the current network state.\n    /// </summary>\n    internal static class NetworkHelper\n    {\n        public static bool IsNetworkConnected { get; private set; }\n        public static bool IsNetworkLimited { get; private set; }\n\n        static NetworkHelper()\n        {\n            UpdateNetworkInfo();\n            NetworkInformation.NetworkStatusChanged += NetworkInformation_NetworkStatusChanged;\n        }\n\n        private static void UpdateNetworkInfo()\n        {\n            var profile = NetworkInformation.GetInternetConnectionProfile();\n            if (profile != null)\n            {\n                IsNetworkConnected = profile.GetNetworkConnectivityLevel() == NetworkConnectivityLevel.InternetAccess;\n\n                var cost = profile.GetConnectionCost();\n                if (profile.IsWwanConnectionProfile || cost == null || cost.NetworkCostType != NetworkCostType.Unrestricted || cost.Roaming)\n                {\n                    IsNetworkLimited = true;\n                }\n            }\n            else\n            {\n                IsNetworkConnected = false;\n            }\n        }\n\n        private static void NetworkInformation_NetworkStatusChanged(object sender)\n        {\n            UpdateNetworkInfo();\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Utilities/SwipeOpenHelper.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing Windows.UI.Input;\nusing Windows.UI.Xaml;\nusing Windows.UI.Xaml.Input;\nusing Windows.UI.Xaml.Media;\nusing Windows.UI.Xaml.Media.Animation;\n\nnamespace Unicord.Universal.Utilities\n{\n    internal class SwipeOpenHelper\n    {\n        private class AdditionalElementHandlerData\n        {\n            public PointerEventHandler Pressed;\n            public PointerEventHandler Moved;\n            public PointerEventHandler Released;\n            public PointerEventHandler Cancelled;\n        }\n\n        private GestureRecognizer _recogniser;\n        private UIElement _target;\n        private UIElement _reference;\n        private TranslateTransform _transform;\n        private Storyboard _openAnimation;\n        private Storyboard _closeAnimation;\n        private Dictionary<UIElement, AdditionalElementHandlerData> _attachedElements;\n        private double _xTotal = 0.0;\n        private bool _isActive;\n\n        private UIElement _capturedElement;\n        private Pointer _capturedPointer;\n\n        public bool IsEnabled { get; set; } \n\n        public SwipeOpenHelper(UIElement target, UIElement reference, Storyboard openAnimation, Storyboard closeAnimation)\n        {\n            _attachedElements = new Dictionary<UIElement, AdditionalElementHandlerData>();\n            _recogniser = new GestureRecognizer() { GestureSettings = GestureSettings.ManipulationTranslateX };\n            _target = target;\n            _reference = reference;\n            _transform = _target.RenderTransform as TranslateTransform;\n            _openAnimation = openAnimation;\n            _closeAnimation = closeAnimation;\n\n            target.AddHandler(UIElement.PointerPressedEvent, new PointerEventHandler(OnPointerPressed), false);\n            target.AddHandler(UIElement.PointerMovedEvent, new PointerEventHandler(OnPointerMoved), false);\n            target.AddHandler(UIElement.PointerReleasedEvent, new PointerEventHandler(OnPointerReleased), false);\n            target.AddHandler(UIElement.PointerCanceledEvent, new PointerEventHandler(OnPointerCanceled), false);\n\n            _recogniser.ManipulationStarted += OnManipulationStarted;\n            _recogniser.ManipulationUpdated += OnManipulationUpdated;\n            _recogniser.ManipulationCompleted += OnManipulationCompleted;\n        }\n\n        public void AddAdditionalElement(UIElement element, bool handled = true)\n        {\n            AddEventHandlers(element, handled);\n\n            if (element is FrameworkElement fel)\n            {\n                fel.Unloaded += OnAdditionalElementUnloaded;\n            }\n        }\n\n        private void OnAdditionalElementUnloaded(object sender, RoutedEventArgs e)\n        {\n            var element = sender as UIElement;\n            (sender as FrameworkElement).Unloaded -= OnAdditionalElementUnloaded;\n\n            RemoveEventHandlers(element);\n        }\n\n        private void AddEventHandlers(UIElement element, bool handled)\n        {\n            var data = new AdditionalElementHandlerData()\n            {\n                Pressed = new PointerEventHandler(OnPointerPressed),\n                Moved = new PointerEventHandler(OnPointerMoved),\n                Released = new PointerEventHandler(OnPointerReleased),\n                Cancelled = new PointerEventHandler(OnPointerCanceled)\n            };\n\n            if (!_attachedElements.ContainsKey(element))\n            {\n                _attachedElements.Add(element, data);\n                element.AddHandler(UIElement.PointerPressedEvent, data.Pressed, handled);\n                element.AddHandler(UIElement.PointerMovedEvent, data.Moved, handled);\n                element.AddHandler(UIElement.PointerReleasedEvent, data.Released, handled);\n                element.AddHandler(UIElement.PointerCanceledEvent, data.Cancelled, handled);\n            }\n        }\n\n        private void RemoveEventHandlers(UIElement element)\n        {\n            if (_attachedElements.TryGetValue(element, out var data))\n            {\n                element.RemoveHandler(UIElement.PointerPressedEvent, data.Pressed);\n                element.RemoveHandler(UIElement.PointerMovedEvent, data.Moved);\n                element.RemoveHandler(UIElement.PointerReleasedEvent, data.Released);\n                element.RemoveHandler(UIElement.PointerCanceledEvent, data.Cancelled);\n\n                _attachedElements.Remove(element);\n            }\n        }\n\n        private void OnPointerPressed(object sender, PointerRoutedEventArgs e)\n        {\n            if (!IsEnabled)\n                return;\n\n            if (_recogniser.IsActive)\n            {\n                _recogniser.CompleteGesture();\n                if (_capturedElement != null && _capturedPointer != null)\n                    _capturedElement.ReleasePointerCapture(_capturedPointer);\n\n                _capturedElement = null;\n                _capturedPointer = null;\n            }\n\n            _capturedElement = (sender as UIElement);\n            _capturedPointer = e.Pointer;\n            _capturedElement.CapturePointer(_capturedPointer);\n            _recogniser.ProcessDownEvent(e.GetCurrentPoint(_reference));\n        }\n\n        private void OnPointerMoved(object sender, PointerRoutedEventArgs e)\n        {\n            if (!IsEnabled)\n                return;\n\n            _recogniser.ProcessMoveEvents(e.GetIntermediatePoints(_reference));\n        }\n\n        private void OnPointerReleased(object sender, PointerRoutedEventArgs e)\n        {\n            if (!IsEnabled || _capturedElement == null)\n                return;\n\n            _recogniser.ProcessUpEvent(e.GetCurrentPoint(_reference));\n            _capturedElement.ReleasePointerCapture(_capturedPointer);\n            _capturedElement = null;\n        }\n\n        private void OnPointerCanceled(object sender, PointerRoutedEventArgs e)\n        {\n            if (!IsEnabled || _capturedElement == null)\n                return;\n\n            _recogniser.CompleteGesture();\n            _capturedElement.ReleasePointerCapture(_capturedPointer);\n            _capturedElement = null;\n        }\n\n        private void OnManipulationStarted(GestureRecognizer sender, ManipulationStartedEventArgs args)\n        {\n            if (!IsEnabled)\n                return;\n\n            _xTotal = _transform.X;\n        }\n\n        private void OnManipulationUpdated(GestureRecognizer sender, ManipulationUpdatedEventArgs args)\n        {\n            if (!IsEnabled)\n                return;\n\n            _xTotal += args.Delta.Translation.X;\n\n            if (_xTotal > 16)\n                _isActive = true;\n\n            if (_isActive)\n            {\n                //var delta = Math.Max(Math.Abs(276 - _xTotal), 64) / 64d;\n                _transform.X = Math.Max(Math.Min(_xTotal, 276), 0);\n            }\n        }\n\n        private void OnManipulationCompleted(GestureRecognizer sender, ManipulationCompletedEventArgs args)\n        {\n            if (!IsEnabled)\n                return;\n\n            if (_xTotal > 128)\n            {\n                _openAnimation.Begin();\n            }\n            else\n            {\n                _closeAnimation.Begin();\n            }\n\n            _xTotal = 0;\n            _isActive = false;\n        }\n\n        internal void Cancel()\n        {\n            _recogniser.CompleteGesture();\n            _isActive = false;\n            _xTotal = 0;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Utilities/UIUtilities.cs",
    "content": "﻿using System;\nusing System.Threading.Tasks;\nusing Unicord.Universal.Dialogs;\nusing Windows.ApplicationModel.Resources;\nusing Windows.UI.Xaml.Controls;\n\nnamespace Unicord.Universal.Utilities\n{\n    internal static class UIUtilities\n    {\n        private static Lazy<ResourceLoader> _resources\n            = new Lazy<ResourceLoader>(() => ResourceLoader.GetForViewIndependentUse(\"Dialogs\"));\n\n        public static async Task ShowErrorDialogAsync(string title, string content, string icon = null, string resourceMap = null)\n        {\n            try\n            {\n                var resources = resourceMap != null ? ResourceLoader.GetForViewIndependentUse(resourceMap) : _resources.Value;   \n                \n                var actualTitle = resources.GetString(title);\n                var actualContent = resources.GetString(content);\n\n                var dialog = new ErrorDialog()\n                {\n                    Title = string.IsNullOrWhiteSpace(actualTitle) ? title : actualTitle,\n                    Content = string.IsNullOrWhiteSpace(actualContent) ? content : actualContent\n                };\n\n                if (icon != null)\n                {\n                    dialog.Icon = icon;\n                }\n\n                await dialog.ShowAsync();\n            }\n            catch { }\n        }\n\n        public static async Task<bool> ShowYesNoDialogAsync(string title, string content, string icon = null)\n        {\n            try\n            {\n                var dialog = new ConfirmationDialog() { Title = title, Content = content };\n\n                if (icon != null)\n                {\n                    dialog.Icon = icon;\n                }\n\n                return await dialog.ShowAsync() == ContentDialogResult.Primary ? true : false;\n            }\n            catch\n            {\n                return false;\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal/Utilities/WebPHelpers.cs",
    "content": "﻿using System;\nusing Windows.Foundation.Metadata;\nusing Windows.Graphics.Imaging;\nusing static Unicord.Constants;\n\nnamespace Unicord.Universal.Utilities;\n\ninternal static class WebPHelpers\n{\n\n    private static readonly Lazy<bool> hasWebPSupport = new Lazy<bool>(() => CheckWebPSupport());\n\n    public static bool ShouldUseWebP\n        => HasWebPSupport() && App.LocalSettings.Read(ENABLE_WEBP, ENABLE_WEBP_DEFAULT);\n\n    public static bool HasWebPSupport()\n        => hasWebPSupport.Value;\n\n    private static bool CheckWebPSupport()\n    {\n        if (!ApiInformation.IsApiContractPresent(\"Windows.Foundation.UniversalApiContract\", 7, 0))\n            return false;\n\n        foreach (var item in BitmapDecoder.GetDecoderInformationEnumerator())\n        {\n            if (item.CodecId == BitmapDecoder.WebpDecoderId)\n                return true;\n        }\n\n        return false;\n    }\n}"
  },
  {
    "path": "Unicord.Universal.Background/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n  <runtime>\n    <GCConserveMemory enabled=\"5\"/>\n  </runtime>\n  <System.Windows.Forms.ApplicationConfigurationSection>\n    <add key=\"DpiAwareness\" value=\"PerMonitorV2\" />\n  </System.Windows.Forms.ApplicationConfigurationSection>\n</configuration>"
  },
  {
    "path": "Unicord.Universal.Background/NativeMethods.txt",
    "content": "﻿EnumWindows\nFindWindowEx\nIsWindowVisible\nIsIconic\nGetClassName\nGetWindowThreadProcessId\nOpenProcess\nCloseHandle\nGetPackageFullName\nGetCurrentPackageFullName\nDwmGetWindowAttribute\nDwmSetWindowAttribute\nWIN32_ERROR\nMAX_PATH\n"
  },
  {
    "path": "Unicord.Universal.Background/NotificationApplicationContext.cs",
    "content": "﻿using System;\r\nusing System.Diagnostics;\r\nusing System.Linq;\r\nusing System.Reflection;\r\nusing System.Threading.Tasks;\r\nusing System.Windows.Forms;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing DSharpPlus.EventArgs;\r\nusing Unicord.Universal.Shared;\r\nusing Windows.ApplicationModel;\r\nusing Windows.Storage;\r\nusing Windows.Win32.Foundation;\r\nusing static Windows.Win32.Graphics.Dwm.DWMWINDOWATTRIBUTE;\r\nusing static Windows.Win32.PInvoke;\r\n\r\nnamespace Unicord.Universal.Background\r\n{\r\n    class NotificationApplicationContext : ApplicationContext\r\n    {\r\n        private DiscordClient _discord = null;\r\n        private BadgeManager _badgeManager = null;\r\n        private TileManager _tileManager;\r\n        private SecondaryTileManager _secondaryTileManager;\r\n        private ToastManager _toastManager = null;\r\n\r\n        private readonly NotifyIcon _notifyIcon;\r\n        private readonly ContextMenu _contextMenu;\r\n        private readonly MenuItem _openMenuItem;\r\n        private readonly MenuItem _closeMenuItem;\r\n\r\n        private Task _connectTask;\r\n        private string _token = null;\r\n\r\n        private static readonly FieldInfo _windowField\r\n            = typeof(NotifyIcon).GetField(\"window\", BindingFlags.NonPublic | BindingFlags.Instance);\r\n\r\n        public NotificationApplicationContext()\r\n        {\r\n            Application.ApplicationExit += OnApplicationExit;\r\n\r\n            if (!TryGetToken(out _token))\r\n            {\r\n                ExitThread();\r\n            }\r\n\r\n            _notifyIcon = new NotifyIcon();\r\n            _notifyIcon.Icon = Properties.Resources.TrayIcon;\r\n            _notifyIcon.Text = \"Unicord\";\r\n            _notifyIcon.DoubleClick += OnOpenMenuItemClicked;\r\n\r\n            _contextMenu = new ContextMenu();\r\n\r\n            _openMenuItem = new MenuItem(\"Open Unicord\");\r\n            _openMenuItem.Click += OnOpenMenuItemClicked;\r\n            _contextMenu.MenuItems.Add(_openMenuItem);\r\n\r\n            _contextMenu.MenuItems.Add(\"-\");\r\n\r\n            _closeMenuItem = new MenuItem(\"Close\");\r\n            _closeMenuItem.Click += OnCloseMenuItemClicked;\r\n            _contextMenu.MenuItems.Add(_closeMenuItem);\r\n\r\n            _notifyIcon.ContextMenu = _contextMenu;\r\n            _notifyIcon.Visible = true;\r\n\r\n            EnableDarkMode(_notifyIcon);\r\n\r\n            _connectTask = Task.Run(async () => await InitialiseAsync());\r\n        }\r\n\r\n        // here be dragons and awful hacks\r\n        private void EnableDarkMode(NotifyIcon notifyIcon)\r\n        {\r\n            var osVersion = Environment.OSVersion.Version;\r\n\r\n            // Windows 10 1809 and later\r\n            if (osVersion.Major < 10 || osVersion.Build < 17763)\r\n                return;\r\n\r\n            try\r\n            {\r\n                var hwnd = new HWND(((NativeWindow)_windowField.GetValue(notifyIcon)).Handle);\r\n                if (osVersion.Build < 18362)\r\n                {\r\n                    UxThemePrivate.AllowDarkModeForWindow(hwnd, true);\r\n                }\r\n                else\r\n                {\r\n                    UxThemePrivate.SetPreferredAppMode(UxThemePrivate.PreferredAppMode.AllowDark);\r\n                }\r\n\r\n                UxThemePrivate.FlushMenuThemes();\r\n            }\r\n            catch\r\n            {\r\n                // ignore this, it doesn't matter\r\n            }\r\n        }\r\n\r\n        private async void OnOpenMenuItemClicked(object sender, EventArgs e)\r\n        {\r\n            var appListEntries = await Package.Current.GetAppListEntriesAsync();\r\n            var app = appListEntries.FirstOrDefault();\r\n            if (app != null)\r\n                await app.LaunchAsync();\r\n        }\r\n\r\n        private void OnCloseMenuItemClicked(object sender, EventArgs e)\r\n        {\r\n            this.ExitThread();\r\n        }\r\n\r\n        private async Task InitialiseAsync()\r\n        {\r\n            try\r\n            {\r\n                _discord = new DiscordClient(new DiscordConfiguration()\r\n                {\r\n                    TokenType = TokenType.User,\r\n                    Token = _token,\r\n                    MessageCacheSize = 0,\r\n                    ReconnectIndefinitely = true\r\n                });\r\n\r\n                _badgeManager = new BadgeManager(_discord);\r\n                _tileManager = new TileManager(_discord);\r\n                _secondaryTileManager = new SecondaryTileManager(_discord);\r\n                _toastManager = new ToastManager();\r\n\r\n                _discord.Ready += OnReady;\r\n                _discord.Resumed += OnResumed;\r\n                _discord.MessageCreated += OnDiscordMessage;\r\n                _discord.MessageUpdated += OnMessageUpdated;\r\n                _discord.MessageAcknowledged += OnMessageAcknowledged;\r\n\r\n                await _discord.ConnectAsync(status: UserStatus.Invisible, idlesince: DateTimeOffset.Now);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Debug.WriteLine(ex);\r\n                this.ExitThread();\r\n            }\r\n        }\r\n\r\n        private void OnApplicationExit(object sender, EventArgs e)\r\n        {\r\n            if (_discord != null)\r\n                _discord.DisconnectAsync().GetAwaiter().GetResult();\r\n\r\n            if (_notifyIcon != null)\r\n            {\r\n                _notifyIcon.Visible = false;\r\n                _notifyIcon.Dispose();\r\n            }\r\n        }\r\n\r\n        private async Task OnReady(DiscordClient client, ReadyEventArgs e)\r\n        {\r\n            await _tileManager.InitialiseAsync();\r\n            _badgeManager.Update();\r\n\r\n            _ = Task.Run(GCTask);\r\n        }\r\n\r\n        private Task OnResumed(DiscordClient sender, ResumedEventArgs args)\r\n        {\r\n            _ = Task.Run(GCTask);\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private async Task GCTask()\r\n        {\r\n            await Task.Delay(5000);\r\n            GC.Collect(2, GCCollectionMode.Forced, true, true);\r\n        }\r\n\r\n        private async Task OnDiscordMessage(DiscordClient client, MessageCreateEventArgs e)\r\n        {\r\n            try\r\n            {\r\n                if (NotificationUtils.WillShowToast(client, e.Message))\r\n                {\r\n                    _toastManager?.HandleMessage(client, e.Message, UnicordFinder.IsUnicordVisible());\r\n                    _badgeManager?.Update();\r\n\r\n                    if (_tileManager != null)\r\n                        await _tileManager.HandleMessageAsync(e.Message);\r\n                }\r\n\r\n                if (_secondaryTileManager != null)\r\n                    await _secondaryTileManager.HandleMessageAsync(client, e.Message);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Debug.WriteLine(ex);\r\n            }\r\n        }\r\n\r\n        private Task OnMessageUpdated(DiscordClient client, MessageUpdateEventArgs e)\r\n        {\r\n            try\r\n            {\r\n                if (NotificationUtils.WillShowToast(client, e.Message))\r\n                {\r\n                    _toastManager?.HandleMessageUpdated(client, e.Message);\r\n                }\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                Debug.WriteLine(ex);\r\n            }\r\n\r\n            return Task.CompletedTask;\r\n        }\r\n\r\n        private async Task OnMessageAcknowledged(DiscordClient client, MessageAcknowledgeEventArgs e)\r\n        {\r\n            try\r\n            {\r\n                _badgeManager?.Update();\r\n                _toastManager?.HandleAcknowledge(e.Channel);\r\n\r\n                if (_tileManager != null)\r\n                    await _tileManager.HandleAcknowledgeAsync(e.Channel);\r\n\r\n                if (_secondaryTileManager != null)\r\n                    await _secondaryTileManager.HandleAcknowledgeAsync(e.Channel);\r\n            }\r\n            catch (Exception ex)\r\n            {\r\n                // TODO: log\r\n                Debug.WriteLine(ex);\r\n            }\r\n        }\r\n\r\n        private bool TryGetToken(out string token)\r\n        {\r\n#if DEBUG // for testing\r\n            var args = Environment.GetCommandLineArgs();\r\n            if (args.Length == 2)\r\n            {\r\n                token = args[1];\r\n                return true;\r\n            }\r\n#endif\r\n\r\n            if (ApplicationData.Current.LocalSettings.Values.TryGetValue(\"Token\", out var s))\r\n            {\r\n                token = (string)s;\r\n                return true;\r\n            }\r\n\r\n            token = null;\r\n            return false;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal.Background/Program.cs",
    "content": "﻿using System;\r\nusing System.Threading;\r\nusing System.Windows.Forms;\r\n\r\nnamespace Unicord.Universal.Background\r\n{\r\n    class Program\r\n    {\r\n        [STAThread]\r\n        static void Main(string[] args)\r\n        {\r\n            using var mutex = new Mutex(true, \"{88FE061B-B4D8-41F4-99FE-15870E0F535B}\", out var createdNew);\r\n            if (!createdNew) \r\n                return;\r\n\r\n            Application.EnableVisualStyles();\r\n            Application.SetCompatibleTextRenderingDefault(false);\r\n            Application.Run(new NotificationApplicationContext());\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal.Background/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace Unicord.Universal.Background.Properties {\n    using System;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"16.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"Unicord.Universal.Background.Properties.Resources\", typeof(Resources).Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized resource of type System.Drawing.Icon similar to (Icon).\n        /// </summary>\n        internal static System.Drawing.Icon TrayIcon {\n            get {\n                object obj = ResourceManager.GetObject(\"TrayIcon\", resourceCulture);\n                return ((System.Drawing.Icon)(obj));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal.Background/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <assembly alias=\"System.Windows.Forms\" name=\"System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\" />\n  <data name=\"TrayIcon\" type=\"System.Resources.ResXFileRef, System.Windows.Forms\">\n    <value>..\\trayicon.ico;System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>\n  </data>\n</root>"
  },
  {
    "path": "Unicord.Universal.Background/Unicord.Universal.Background.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk.WindowsDesktop\">\r\n\r\n  <PropertyGroup>\r\n    <OutputType>WinExe</OutputType>\r\n    <TargetFramework>net472</TargetFramework>\r\n    <UseWindowsForms>true</UseWindowsForms>\r\n    <RuntimeIdentifiers>win-x64;win-x86;win-arm;win7-x64;win7-x86;win7-arm</RuntimeIdentifiers>\r\n    <GenerateResourceUsePreserializedResources>true</GenerateResourceUsePreserializedResources>\r\n    <LangVersion>9</LangVersion>\r\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\r\n  </PropertyGroup>\r\n  \r\n  <ItemGroup>\r\n    <PackageReference Include=\"Microsoft.Toolkit.Uwp.Notifications\" Version=\"7.1.3\" />\r\n    <PackageReference Include=\"Microsoft.Windows.CsWin32\" Version=\"0.3.106\">\r\n      <PrivateAssets>all</PrivateAssets>\r\n      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>\r\n    </PackageReference>\r\n    <PackageReference Include=\"Microsoft.Windows.SDK.Contracts\" Version=\"10.0.26100.1\" />\r\n    <PackageReference Include=\"System.Memory\" Version=\"4.5.5\" />\r\n    <PackageReference Include=\"System.Resources.Extensions\" Version=\"8.0.0\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\libraries\\DSharpPlus\\DSharpPlus\\DSharpPlus.csproj\" />\r\n    <ProjectReference Include=\"..\\Libraries\\MomentSharp\\MomentSharp\\MomentSharp.csproj\" />\r\n    <ProjectReference Include=\"..\\Libraries\\WamWooWam.Core\\WamWooWam.Core\\WamWooWam.Core.csproj\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <Content Include=\"TrayIcon.ico\">\r\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\r\n    </Content>\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <Reference Include=\"System.Web\" />\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <Compile Update=\"Properties\\Resources.Designer.cs\">\r\n      <DesignTime>True</DesignTime>\r\n      <AutoGen>True</AutoGen>\r\n      <DependentUpon>Resources.resx</DependentUpon>\r\n    </Compile>\r\n  </ItemGroup>\r\n\r\n  <ItemGroup>\r\n    <EmbeddedResource Update=\"Properties\\Resources.resx\">\r\n      <Generator>ResXFileCodeGenerator</Generator>\r\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\r\n    </EmbeddedResource>\r\n  </ItemGroup>\r\n\r\n  <Import Project=\"..\\Unicord.Universal.Shared\\Unicord.Universal.Shared.projitems\" Label=\"Shared\" />\r\n</Project>\r\n"
  },
  {
    "path": "Unicord.Universal.Background/UnicordFinder.cs",
    "content": "﻿using System;\nusing Windows.Win32.Foundation;\nusing static Windows.Win32.Foundation.WIN32_ERROR;\nusing static Windows.Win32.Graphics.Dwm.DWMWINDOWATTRIBUTE;\nusing static Windows.Win32.PInvoke;\nusing static Windows.Win32.System.Threading.PROCESS_ACCESS_RIGHTS;\n\nnamespace Unicord.Universal.Background\n{\n    internal class UnicordFinder\n    {\n        private static unsafe (HWND hWndUnicord, HWND hWndApplicationFrameHost) FindUnicordWindow()\n        {\n            uint packageNameLen;\n            if (GetCurrentPackageFullName(&packageNameLen, null) == APPMODEL_ERROR_NO_PACKAGE)\n                throw new InvalidOperationException();\n\n            string packageName;\n            char[] packageNameChars = new char[packageNameLen];\n            fixed (char* packageNameCharsPtr = packageNameChars)\n            {\n                if (GetCurrentPackageFullName(&packageNameLen, packageNameCharsPtr) != ERROR_SUCCESS)\n                    throw new InvalidOperationException();\n\n                packageName = new string(packageNameCharsPtr);\n            }\n\n            HWND hWndUnicord = HWND.Null, hWndApplicationFrame = HWND.Null;\n\n            unsafe BOOL IsUnicord(HWND hWnd, LPARAM lParam)\n            {\n                string className;\n                char[] name = new char[MAX_PATH];\n                fixed (char* namePtr = name)\n                {\n                    if (GetClassName(hWnd, namePtr, (int)MAX_PATH) <= 0)\n                        return true;\n\n                    className = new string(namePtr);\n                }\n\n                if (string.CompareOrdinal(className, \"ApplicationFrameWindow\") != 0)\n                    return true;\n\n                HWND hWndChild = FindWindowEx(hWnd, HWND.Null, \"Windows.UI.Core.CoreWindow\", null);\n                if (hWndChild == null)\n                    return true;\n\n                uint procId;\n                if (GetWindowThreadProcessId(hWndChild, &procId) == 0)\n                    return true;\n\n                HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION, false, procId);\n                if (hProcess == null)\n                    return true;\n\n                try\n                {\n                    uint fullNameLen;\n                    if (GetPackageFullName(hProcess, &fullNameLen, null) != ERROR_INSUFFICIENT_BUFFER)\n                        return true;\n\n                    string fullName;\n                    char[] fullNameChars = new char[fullNameLen];\n                    fixed (char* fullNameCharsPtr = fullNameChars)\n                    {\n                        if (GetPackageFullName(hProcess, &fullNameLen, fullNameCharsPtr) != ERROR_SUCCESS)\n                            return true;\n\n                        fullName = new string(fullNameCharsPtr);\n                    }\n\n                    if (packageName == fullName)\n                    {\n                        hWndUnicord = hWndChild;\n                        hWndApplicationFrame = hWnd;\n                        return false;\n                    }\n                }\n                finally\n                {\n                    CloseHandle(hProcess);\n                }\n\n                return false;\n            }\n\n            EnumWindows(IsUnicord, IntPtr.Zero);\n\n            return (hWndUnicord, hWndApplicationFrame);\n        }\n\n        public static unsafe bool IsUnicordVisible()\n        {\n            var (hWndUnicord, hWndApplicationFrameHost) = FindUnicordWindow();\n\n            if (hWndUnicord == HWND.Null || hWndApplicationFrameHost == HWND.Null) \n                return false;\n\n            if (!IsWindowVisible(hWndApplicationFrameHost) || !IsWindowVisible(hWndApplicationFrameHost))\n                return false;\n\n            if (IsIconic(hWndApplicationFrameHost) || IsIconic(hWndUnicord))\n                return false;\n\n            uint dwIsCloaked;\n\n            if (DwmGetWindowAttribute(hWndUnicord, DWMWA_CLOAKED, &dwIsCloaked, sizeof(uint)).Succeeded\n                && dwIsCloaked != 0)\n                return false;\n\n            if (DwmGetWindowAttribute(hWndApplicationFrameHost, DWMWA_CLOAKED, &dwIsCloaked, sizeof(uint)).Succeeded\n                && dwIsCloaked != 0)\n                return false;\n\n            return true;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal.Background/UxThemePrivate.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Runtime.InteropServices;\nusing System.Text;\nusing System.Threading.Tasks;\nusing Windows.Win32.Foundation;\n\nnamespace Unicord.Universal.Background\n{\n    internal class UxThemePrivate\n    {\n        public enum PreferredAppMode : int\n        {\n            Default,\n            AllowDark,\n            ForceDark,\n            ForceLight,\n            Max\n        };\n\n        [DllImport(\"uxtheme.dll\", EntryPoint = \"#133\", SetLastError = true, CharSet = CharSet.Unicode)]\n        public static extern BOOL AllowDarkModeForWindow(HWND hwnd, BOOL allow);\n\n        [DllImport(\"uxtheme.dll\", EntryPoint = \"#135\", SetLastError = true, CharSet = CharSet.Unicode)]\n        public static extern BOOL SetPreferredAppMode(PreferredAppMode preferredAppMode);\n\n        [DllImport(\"uxtheme.dll\", EntryPoint = \"#136\", SetLastError = true, CharSet = CharSet.Unicode)]\n        public static extern void FlushMenuThemes();\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal.Background.Tasks/PeriodicNotificationsTask.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusing DSharpPlus;\nusing Unicord.Universal.Shared;\nusing Windows.ApplicationModel.Background;\nusing Windows.Security.Credentials;\nusing Windows.UI.Notifications;\n\nnamespace Unicord.Universal.Background.Tasks\n{\n    public sealed class PeriodicNotificationsTask : IBackgroundTask\n    {\n        public async void Run(IBackgroundTaskInstance taskInstance)\n        {\n            var deferral = taskInstance.GetDeferral();\n            try\n            {\n                if (!TryGetToken(out string token))\n                    return;\n\n                var tileUpdateManager = TileUpdateManager.CreateTileUpdaterForApplication();\n                var toastNotifier = ToastNotificationManager.CreateToastNotifier();\n\n                var restClient = new DiscordRestClient(new DiscordConfiguration() { Token = token, TokenType = TokenType.User });\n                await restClient.InitializeAsync();\n\n                var mentions = await restClient.GetUserMentionsAsync(25, true, true);\n\n                foreach (var mention in mentions)\n                {\n                    if (!NotificationUtils.WillShowToast(restClient, mention))\n                        continue;\n\n                    var tileNotification = NotificationUtils.CreateTileNotificationForMessage(restClient, mention);\n                    var toastNotification = NotificationUtils.CreateToastNotificationForMessage(restClient, mention);\n\n                    tileUpdateManager.Update(tileNotification);\n                    toastNotifier.Show(toastNotification);\n                }\n            }\n            finally\n            {\n                deferral.Complete();\n            }\n        }\n\n        internal static bool TryGetToken(out string token)\n        {\n            try\n            {\n                var passwordVault = new PasswordVault();\n                var credential = passwordVault.Retrieve(Constants.TOKEN_IDENTIFIER, \"Default\");\n                credential.RetrievePassword();\n\n                token = credential.Password;\n                return true;\n            }\n            catch { }\n\n            token = null;\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal.Background.Tasks/Properties/AssemblyInfo.cs",
    "content": "﻿using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled through the following \n// set of attributes. Change these attribute values to modify the information\n// associated with an assembly.\n[assembly: AssemblyTitle(\"Unicord.Universal.Background.Tasks\")]\n[assembly: AssemblyDescription(\"\")]\n[assembly: AssemblyConfiguration(\"\")]\n[assembly: AssemblyCompany(\"\")]\n[assembly: AssemblyProduct(\"Unicord.Universal.Background.Tasks\")]\n[assembly: AssemblyCopyright(\"Copyright ©  2024\")]\n[assembly: AssemblyTrademark(\"\")]\n[assembly: AssemblyCulture(\"\")]\n\n// Version information for an assembly consists of the following four values:\n//\n//      Major Version\n//      Minor Version \n//      Build Number\n//      Revision\n//\n[assembly: AssemblyVersion(\"1.0.0.0\")]\n[assembly: AssemblyFileVersion(\"1.0.0.0\")]\n[assembly: ComVisible(false)]\n"
  },
  {
    "path": "Unicord.Universal.Background.Tasks/RealtimeNotificationsTask.cs",
    "content": "﻿using System;\nusing System.Diagnostics;\nusing System.Threading.Tasks;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing DSharpPlus.EventArgs;\nusing Unicord.Universal.Shared;\nusing Windows.ApplicationModel.Background;\nusing Windows.Security.Credentials;\n\nnamespace Unicord.Universal.Background.Tasks\n{\n    public sealed class RealtimeNotificationsTask : IBackgroundTask\n    {\n        private BackgroundTaskDeferral _deferral;\n        private DiscordClient _discord;\n        private BadgeManager _badgeManager;\n        private TileManager _tileManager;\n        private SecondaryTileManager _secondaryTileManager;\n        private ToastManager _toastManager;\n\n        public async void Run(IBackgroundTaskInstance taskInstance)\n        {\n            _deferral = taskInstance.GetDeferral();\n\n            try\n            {\n                if (!TryGetToken(out string token))\n                {\n                    _deferral.Complete();\n                    return;\n                }\n\n                _discord = new DiscordClient(new DiscordConfiguration()\n                {\n                    TokenType = TokenType.User,\n                    Token = token,\n                    MessageCacheSize = 16,\n                    ReconnectIndefinitely = true\n                });\n\n                _badgeManager = new BadgeManager(_discord);\n                _tileManager = new TileManager(_discord);\n                _secondaryTileManager = new SecondaryTileManager(_discord);\n                _toastManager = new ToastManager();\n\n                _discord.Ready += OnReady;\n                _discord.Resumed += OnResumed;\n                _discord.MessageCreated += OnDiscordMessage;\n                _discord.MessageUpdated += OnMessageUpdated;\n                _discord.MessageAcknowledged += OnMessageAcknowledged;\n\n                await _discord.ConnectAsync(status: UserStatus.Invisible, idlesince: DateTimeOffset.Now);\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine(ex);\n                _deferral.Complete();\n            }\n        }\n\n        private async Task OnReady(DiscordClient client, ReadyEventArgs e)\n        {\n            await _tileManager.InitialiseAsync();\n            _badgeManager.Update();\n\n            _ = Task.Run(GCTask);\n        }\n\n        private Task OnResumed(DiscordClient sender, ResumedEventArgs args)\n        {\n            _ = Task.Run(GCTask);\n            return Task.CompletedTask;\n        }\n\n        private async Task GCTask()\n        {\n            await Task.Delay(5000);\n            GC.Collect(2, GCCollectionMode.Forced, true, true);\n        }\n\n        private async Task OnDiscordMessage(DiscordClient client, MessageCreateEventArgs e)\n        {\n            try\n            {\n                if (NotificationUtils.WillShowToast(client, e.Message))\n                {\n                    _toastManager?.HandleMessage(client, e.Message, false);\n                    _badgeManager?.Update();\n\n                    if (_tileManager != null)\n                        await _tileManager.HandleMessageAsync(e.Message);\n                }\n\n                if (_secondaryTileManager != null)\n                    await _secondaryTileManager.HandleMessageAsync(client, e.Message);\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine(ex);\n            }\n        }\n\n        private Task OnMessageUpdated(DiscordClient client, MessageUpdateEventArgs e)\n        {\n            try\n            {\n                if (NotificationUtils.WillShowToast(client, e.Message))\n                {\n                    _toastManager?.HandleMessageUpdated(client, e.Message);\n                }\n            }\n            catch (Exception ex)\n            {\n                Debug.WriteLine(ex);\n            }\n\n            return Task.CompletedTask;\n        }\n\n        private async Task OnMessageAcknowledged(DiscordClient client, MessageAcknowledgeEventArgs e)\n        {\n            try\n            {\n                _badgeManager?.Update();\n                _toastManager?.HandleAcknowledge(e.Channel);\n\n                if (_tileManager != null)\n                    await _tileManager.HandleAcknowledgeAsync(e.Channel);\n\n                if (_secondaryTileManager != null)\n                    await _secondaryTileManager.HandleAcknowledgeAsync(e.Channel);\n            }\n            catch (Exception ex)\n            {\n                // TODO: log\n                Debug.WriteLine(ex);\n            }\n        }\n\n        internal static bool TryGetToken(out string token)\n        {\n            try\n            {\n                var passwordVault = new PasswordVault();\n                var credential = passwordVault.Retrieve(Constants.TOKEN_IDENTIFIER, \"Default\");\n                credential.RetrievePassword();\n\n                token = credential.Password;\n                return true;\n            }\n            catch { }\n\n            token = null;\n            return false;\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal.Background.Tasks/Unicord.Universal.Background.Tasks.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProjectGuid>{69F44648-37CD-4B20-8814-2BAF85B4F624}</ProjectGuid>\n    <OutputType>winmdobj</OutputType>\n    <AppDesignerFolder>Properties</AppDesignerFolder>\n    <RootNamespace>Unicord.Universal.Background.Tasks</RootNamespace>\n    <AssemblyName>Unicord.Universal.Background.Tasks</AssemblyName>\n    <DefaultLanguage>en-US</DefaultLanguage>\n    <TargetPlatformIdentifier>UAP</TargetPlatformIdentifier>\n    <TargetPlatformVersion Condition=\" '$(TargetPlatformVersion)' == '' \">10.0.22621.0</TargetPlatformVersion>\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\n    <MinimumVisualStudioVersion>14</MinimumVisualStudioVersion>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <AllowCrossPlatformRetargeting>false</AllowCrossPlatformRetargeting>\n    <LangVersion>9</LangVersion>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <DebugType>full</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>bin\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <PlatformTarget>AnyCPU</PlatformTarget>\n    <DebugType>pdbonly</DebugType>\n    <Optimize>true</Optimize>\n    <OutputPath>bin\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x86\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x86'\">\n    <PlatformTarget>x86</PlatformTarget>\n    <OutputPath>bin\\x86\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM'\">\n    <PlatformTarget>ARM</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM'\">\n    <PlatformTarget>ARM</PlatformTarget>\n    <OutputPath>bin\\ARM\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\ARM64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|ARM64'\">\n    <PlatformTarget>ARM64</PlatformTarget>\n    <OutputPath>bin\\ARM64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Debug|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <DebugSymbols>true</DebugSymbols>\n    <OutputPath>bin\\x64\\Debug\\</OutputPath>\n    <DefineConstants>DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>full</DebugType>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup Condition=\"'$(Configuration)|$(Platform)' == 'Release|x64'\">\n    <PlatformTarget>x64</PlatformTarget>\n    <OutputPath>bin\\x64\\Release\\</OutputPath>\n    <DefineConstants>TRACE;NETFX_CORE;WINDOWS_UWP</DefineConstants>\n    <Optimize>true</Optimize>\n    <NoWarn>;2008</NoWarn>\n    <DebugType>pdbonly</DebugType>\n    <UseVSHostingProcess>false</UseVSHostingProcess>\n    <ErrorReport>prompt</ErrorReport>\n  </PropertyGroup>\n  <PropertyGroup>\n    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>\n  </PropertyGroup>\n  <ItemGroup>\n    <Compile Include=\"RealtimeNotificationsTask.cs\" />\n    <Compile Include=\"PeriodicNotificationsTask.cs\" />\n    <Compile Include=\"Properties\\AssemblyInfo.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.NETCore.UniversalWindowsPlatform\">\n      <Version>6.2.14</Version>\n    </PackageReference>\n    <PackageReference Include=\"Microsoft.Toolkit.Uwp.Notifications\">\n      <Version>7.1.3</Version>\n    </PackageReference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\Libraries\\DSharpPlus\\DSharpPlus.Rest\\DSharpPlus.Rest.csproj\">\n      <Project>{c01b8589-13fe-4a6d-b159-6644977f58de}</Project>\n      <Name>DSharpPlus.Rest</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Libraries\\DSharpPlus\\DSharpPlus\\DSharpPlus.csproj\">\n      <Project>{0f4b3af7-9320-41ae-82d0-3737949499c7}</Project>\n      <Name>DSharpPlus</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Libraries\\MomentSharp\\MomentSharp\\MomentSharp.csproj\">\n      <Project>{8a4a933c-c579-4c36-9133-7d6721f99aec}</Project>\n      <Name>MomentSharp</Name>\n    </ProjectReference>\n    <ProjectReference Include=\"..\\Libraries\\WamWooWam.Core\\WamWooWam.Core\\WamWooWam.Core.csproj\">\n      <Project>{6e8e3c2c-a7d2-4971-a97d-fa831e3ecf15}</Project>\n      <Name>WamWooWam.Core</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <Import Project=\"..\\Unicord.Universal.Shared\\Unicord.Universal.Shared.projitems\" Label=\"Shared\" />\n  <PropertyGroup Condition=\" '$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '14.0' \">\n    <VisualStudioVersion>14.0</VisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\Microsoft\\WindowsXaml\\v$(VisualStudioVersion)\\Microsoft.Windows.UI.Xaml.CSharp.targets\" />\n  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. \n       Other similar extension points exist, see Microsoft.Common.targets.\n  <Target Name=\"BeforeBuild\">\n  </Target>\n  <Target Name=\"AfterBuild\">\n  </Target>\n  -->\n</Project>"
  },
  {
    "path": "Unicord.Universal.Package/Package.ARM.Debug.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n         xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n         xmlns:uap2=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/2\"\n         xmlns:uap3=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/3\"\n\t\t\t\t xmlns:uap4=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/4\"\n         xmlns:uap5=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/5\"\n         xmlns:rescap=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities\"\n         xmlns:desktop=\"http://schemas.microsoft.com/appx/manifest/desktop/windows10\"\n         xmlns:desktop5=\"http://schemas.microsoft.com/appx/manifest/desktop/windows10/5\"\n         xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n\t\t\t\t IgnorableNamespaces=\"uap mp uap2 uap3 uap4 uap5 desktop desktop5 rescap\">\n  <Identity Name=\"24101WamWooWamRD.Unicord.Canary\" Publisher=\"CN=0F22111D-EDF0-42F0-B58D-26C4C5C5054B\" Version=\"1.2.7.0\" />\n  <mp:PhoneIdentity PhoneProductId=\"5783aabf-3049-421f-ae1d-e88bd89018f1\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\" />\n  <Properties>\n    <DisplayName>ms-resource:AppDisplayName</DisplayName>\n    <PublisherDisplayName>Wan Kerr Co. Ltd.</PublisherDisplayName>\n    <Logo>Assets\\Store\\StoreLogo.png</Logo>\n  </Properties>\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.15035.0\" MaxVersionTested=\"10.0.16299.0\" />\n  </Dependencies>\n  <Resources>\n    <Resource Language=\"EN-GB\" />\n    <Resource Language=\"EN-US\" />\n    <Resource Language=\"FR\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"Unicord.Universal.App\">\n      <uap:VisualElements DisplayName=\"ms-resource:DevAppDisplayName\" Square150x150Logo=\"Assets\\Store\\Square150x150Logo.png\" Square44x44Logo=\"Assets\\Store\\Square44x44Logo.png\" Description=\"ms-resource:AppDisplayDescription\" BackgroundColor=\"transparent\">\n        <uap:LockScreen Notification=\"badge\" BadgeLogo=\"Assets\\Store\\BadgeLogo.png\" />\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Store\\Wide310x150Logo.png\" Square310x310Logo=\"Assets\\Store\\LargeTile.png\" Square71x71Logo=\"Assets\\Store\\SmallTile.png\" ShortName=\"Unicord Canary\">\n          <uap:ShowNameOnTiles>\n            <uap:ShowOn Tile=\"square150x150Logo\" />\n            <uap:ShowOn Tile=\"wide310x150Logo\" />\n            <uap:ShowOn Tile=\"square310x310Logo\" />\n          </uap:ShowNameOnTiles>\n        </uap:DefaultTile>\n        <uap:SplashScreen Image=\"Assets\\Store\\SplashScreen.png\" BackgroundColor=\"#7289DA\" />\n        <uap:InitialRotationPreference>\n          <uap:Rotation Preference=\"portrait\" />\n        </uap:InitialRotationPreference>\n      </uap:VisualElements>\n      <Extensions>\n        <uap:Extension Category=\"windows.voipCall\">\n        </uap:Extension>\n        <uap4:Extension Category=\"windows.contactPanel\">\n          <uap4:ContactPanel />\n        </uap4:Extension>\n        <uap:Extension Category=\"windows.shareTarget\">\n          <uap:ShareTarget Description=\"Share to Discord\">\n            <uap:SupportedFileTypes>\n              <uap:SupportsAnyFileType />\n            </uap:SupportedFileTypes>\n            <uap:DataFormat>StorageItem</uap:DataFormat>\n            <uap:DataFormat>Bitmap</uap:DataFormat>\n            <uap:DataFormat>Text</uap:DataFormat>\n            <uap:DataFormat>WebLink</uap:DataFormat>\n          </uap:ShareTarget>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.protocol\">\n          <uap:Protocol Name=\"ms-contact-profile\">\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\n            <uap:DisplayName>Unicord</uap:DisplayName>\n          </uap:Protocol>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.protocol\">\n          <uap:Protocol Name=\"ms-ipmessaging\">\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\n            <uap:DisplayName>Unicord</uap:DisplayName>\n          </uap:Protocol>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.protocol\">\n          <uap:Protocol Name=\"unicord-debug\">\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\n            <uap:DisplayName>Unicord</uap:DisplayName>\n          </uap:Protocol>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.appService\" EntryPoint=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\">\n          <uap:AppService Name=\"com.wankerr.Unicord.Voice\" ServerName=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\" />\n        </uap:Extension>\n        <Extension Category=\"windows.backgroundTasks\" EntryPoint=\"Unicord.Universal.Voice.Background.VoiceBackgroundTask\">\n          <BackgroundTasks ServerName=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\">\n            <Task Type=\"systemEvent\" />\n          </BackgroundTasks>\n        </Extension>\n        <Extension Category=\"windows.backgroundTasks\" EntryPoint=\"Unicord.Universal.Background.NotificationBackgroundTask\">\n          <BackgroundTasks>\n            <Task Type=\"systemEvent\" />\n            <Task Type=\"pushNotification\"/>\n            <Task Type=\"general\"/>\n          </BackgroundTasks>\n        </Extension>\n        <uap:Extension Category=\"windows.fileTypeAssociation\">\n          <uap:FileTypeAssociation Name=\"uni-theme\">\n            <uap:DisplayName>Unicord Theme</uap:DisplayName>\n            <uap:SupportedFileTypes>\n              <uap:FileType ContentType=\"application/x-unicord-theme\">.uni-theme</uap:FileType>\n            </uap:SupportedFileTypes>\n          </uap:FileTypeAssociation>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.appService\">\n          <uap:AppService Name=\"com.wankerr.Unicord.Notifications\" />\n        </uap:Extension>\n        <uap:Extension Category=\"windows.protocol\">\n          <uap:Protocol Name=\"unicord\">\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\n            <uap:DisplayName>Unicord</uap:DisplayName>\n          </uap:Protocol>\n        </uap:Extension>\n      </Extensions>\n      <uap:ApplicationContentUriRules>\n        <uap:Rule Type=\"include\" Match=\"https://*.discord.com\" WindowsRuntimeAccess=\"none\"/>\n        <uap:Rule Type=\"include\" Match=\"https://discord.com\" WindowsRuntimeAccess=\"none\"/>\n        <uap:Rule Type=\"include\" Match=\"https://*.discordapp.com\" WindowsRuntimeAccess=\"none\"/>\n        <uap:Rule Type=\"include\" Match=\"https://discordapp.com\" WindowsRuntimeAccess=\"none\"/>\n      </uap:ApplicationContentUriRules>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n    <uap:Capability Name=\"videosLibrary\" />\n    <uap:Capability Name=\"picturesLibrary\" />\n    <uap:Capability Name=\"contacts\" />\n    <uap:Capability Name=\"voipCall\" />\n    <uap:Capability Name=\"phoneCall\" />\n    <rescap:Capability Name=\"runFullTrust\"/>\n    <DeviceCapability Name=\"microphone\" />\n    <DeviceCapability Name=\"webcam\" />\n  </Capabilities>\n</Package>\n"
  },
  {
    "path": "Unicord.Universal.Package/Package.ARM.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n         xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n         xmlns:uap2=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/2\"\n         xmlns:uap3=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/3\"\n\t\t\t\t xmlns:uap4=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/4\"\n         xmlns:uap5=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/5\"\n         xmlns:rescap=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities\"\n         xmlns:desktop=\"http://schemas.microsoft.com/appx/manifest/desktop/windows10\"\n         xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n\t\t\t\t IgnorableNamespaces=\"uap mp uap2 uap3 uap4 uap5 rescap\">\n  <Identity Name=\"24101WamWooWamRD.Unicord\" Publisher=\"CN=0F22111D-EDF0-42F0-B58D-26C4C5C5054B\" Version=\"1.7.6.0\" />\n  <mp:PhoneIdentity PhoneProductId=\"5783aabf-3049-421f-ae1d-e88bd89018f2\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\" />\n  <Properties>\n    <DisplayName>ms-resource:AppDisplayName</DisplayName>\n    <PublisherDisplayName>Wan Kerr Co. Ltd.</PublisherDisplayName>\n    <Logo>Assets\\Store\\StoreLogo.png</Logo>\n  </Properties>\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.15035.0\" MaxVersionTested=\"10.0.16299.0\" />\n  </Dependencies>\n  <Resources>\n    <Resource Language=\"EN-GB\" />\n    <Resource Language=\"EN-US\" />\n    <Resource Language=\"FR\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"Unicord.Universal.App\">\n      <uap:VisualElements DisplayName=\"ms-resource:AppDisplayName\" Square150x150Logo=\"Assets\\Store\\Square150x150Logo.png\" Square44x44Logo=\"Assets\\Store\\Square44x44Logo.png\" Description=\"ms-resource:AppDisplayDescription\" BackgroundColor=\"transparent\">\n        <uap:LockScreen Notification=\"badge\" BadgeLogo=\"Assets\\Store\\BadgeLogo.png\" />\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Store\\Wide310x150Logo.png\" Square310x310Logo=\"Assets\\Store\\LargeTile.png\" Square71x71Logo=\"Assets\\Store\\SmallTile.png\" ShortName=\"Unicord\">\n          <uap:ShowNameOnTiles>\n            <uap:ShowOn Tile=\"square150x150Logo\" />\n            <uap:ShowOn Tile=\"wide310x150Logo\" />\n            <uap:ShowOn Tile=\"square310x310Logo\" />\n          </uap:ShowNameOnTiles>\n        </uap:DefaultTile>\n        <uap:SplashScreen Image=\"Assets\\Store\\SplashScreen.png\" BackgroundColor=\"#7289DA\" />\n        <uap:InitialRotationPreference>\n          <uap:Rotation Preference=\"portrait\" />\n        </uap:InitialRotationPreference>\n      </uap:VisualElements>\n      <Extensions>\n        <uap:Extension Category=\"windows.voipCall\">\n        </uap:Extension>\n        <uap4:Extension Category=\"windows.contactPanel\">\n          <uap4:ContactPanel />\n        </uap4:Extension>\n        <uap:Extension Category=\"windows.shareTarget\">\n          <uap:ShareTarget Description=\"Share to Discord\">\n            <uap:SupportedFileTypes>\n              <uap:SupportsAnyFileType />\n            </uap:SupportedFileTypes>\n            <uap:DataFormat>StorageItem</uap:DataFormat>\n            <uap:DataFormat>Bitmap</uap:DataFormat>\n            <uap:DataFormat>Text</uap:DataFormat>\n            <uap:DataFormat>WebLink</uap:DataFormat>\n          </uap:ShareTarget>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.protocol\">\n          <uap:Protocol Name=\"ms-contact-profile\">\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\n            <uap:DisplayName>Unicord</uap:DisplayName>\n          </uap:Protocol>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.protocol\">\n          <uap:Protocol Name=\"ms-ipmessaging\">\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\n            <uap:DisplayName>Unicord</uap:DisplayName>\n          </uap:Protocol>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.protocol\">\n          <uap:Protocol Name=\"unicord\">\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\n            <uap:DisplayName>Unicord</uap:DisplayName>\n          </uap:Protocol>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.appService\" EntryPoint=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\">\n          <uap:AppService Name=\"com.wankerr.Unicord.Voice\" ServerName=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\" />\n        </uap:Extension>\n        <Extension Category=\"windows.backgroundTasks\" EntryPoint=\"Unicord.Universal.Voice.Background.VoiceBackgroundTask\">\n          <BackgroundTasks ServerName=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\">\n            <Task Type=\"systemEvent\" />\n          </BackgroundTasks>\n        </Extension>\n        <uap:Extension Category=\"windows.fileTypeAssociation\">\n          <uap:FileTypeAssociation Name=\"uni-theme\">\n            <uap:DisplayName>Unicord Theme</uap:DisplayName>\n            <uap:SupportedFileTypes>\n              <uap:FileType ContentType=\"application/x-unicord-theme\">.uni-theme</uap:FileType>\n            </uap:SupportedFileTypes>\n          </uap:FileTypeAssociation>\n        </uap:Extension>\n      </Extensions>\n      <uap:ApplicationContentUriRules>\n        <uap:Rule Type=\"include\" Match=\"https://*.discord.com\" WindowsRuntimeAccess=\"none\"/>\n        <uap:Rule Type=\"include\" Match=\"https://discord.com\" WindowsRuntimeAccess=\"none\"/>\n        <uap:Rule Type=\"include\" Match=\"https://*.discordapp.com\" WindowsRuntimeAccess=\"none\"/>\n        <uap:Rule Type=\"include\" Match=\"https://discordapp.com\" WindowsRuntimeAccess=\"none\"/>\n      </uap:ApplicationContentUriRules>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n    <uap:Capability Name=\"videosLibrary\" />\n    <uap:Capability Name=\"picturesLibrary\" />\n    <uap:Capability Name=\"contacts\" />\n    <uap:Capability Name=\"voipCall\" />\n    <uap:Capability Name=\"phoneCall\" />\n    <rescap:Capability Name=\"runFullTrust\"/>\n    <DeviceCapability Name=\"microphone\" />\n    <DeviceCapability Name=\"webcam\" />\n  </Capabilities>\n</Package>\n"
  },
  {
    "path": "Unicord.Universal.Package/Package.Debug.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\n         xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\n         xmlns:uap2=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/2\"\n         xmlns:uap3=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/3\"\n\t\t\t\t xmlns:uap4=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/4\"\n         xmlns:uap5=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/5\"\n         xmlns:rescap=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities\"\n         xmlns:desktop=\"http://schemas.microsoft.com/appx/manifest/desktop/windows10\"\n         xmlns:desktop5=\"http://schemas.microsoft.com/appx/manifest/desktop/windows10/5\"\n         xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\n\t\t\t\t IgnorableNamespaces=\"uap mp uap2 uap3 uap4 uap5 desktop desktop5 rescap\">\n  <Identity Name=\"24101WamWooWamRD.Unicord.Canary\" Publisher=\"CN=Wan Kerr Co. Ltd.\" Version=\"1.7.6.0\" />\n  <mp:PhoneIdentity PhoneProductId=\"5783aabf-3049-421f-ae1d-e88bd89018f1\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\" />\n  <Properties>\n    <DisplayName>ms-resource:AppDisplayName</DisplayName>\n    <PublisherDisplayName>Wan Kerr Co. Ltd.</PublisherDisplayName>\n    <Logo>Assets\\Store\\StoreLogo.png</Logo>\n  </Properties>\n  <Dependencies>\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.15035.0\" MaxVersionTested=\"10.0.16299.0\" />\n  </Dependencies>\n  <Resources>\n    <Resource Language=\"EN-GB\" />\n    <Resource Language=\"EN-US\" />\n    <Resource Language=\"FR\" />\n  </Resources>\n  <Applications>\n    <Application Id=\"App\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"Unicord.Universal.App\">\n      <uap:VisualElements DisplayName=\"ms-resource:DevAppDisplayName\" Square150x150Logo=\"Assets\\Store\\Square150x150Logo.png\" Square44x44Logo=\"Assets\\Store\\Square44x44Logo.png\" Description=\"ms-resource:AppDisplayDescription\" BackgroundColor=\"transparent\">\n        <uap:LockScreen Notification=\"badge\" BadgeLogo=\"Assets\\Store\\BadgeLogo.png\" />\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Store\\Wide310x150Logo.png\" Square310x310Logo=\"Assets\\Store\\LargeTile.png\" Square71x71Logo=\"Assets\\Store\\SmallTile.png\" ShortName=\"Unicord Canary\">\n          <uap:ShowNameOnTiles>\n            <uap:ShowOn Tile=\"square150x150Logo\" />\n            <uap:ShowOn Tile=\"wide310x150Logo\" />\n            <uap:ShowOn Tile=\"square310x310Logo\" />\n          </uap:ShowNameOnTiles>\n        </uap:DefaultTile>\n        <uap:SplashScreen Image=\"Assets\\Store\\SplashScreen.png\" BackgroundColor=\"#7289DA\" />\n        <uap:InitialRotationPreference>\n          <uap:Rotation Preference=\"portrait\" />\n        </uap:InitialRotationPreference>\n      </uap:VisualElements>\n      <Extensions>\n        <uap:Extension Category=\"windows.voipCall\">\n        </uap:Extension>\n        <uap4:Extension Category=\"windows.contactPanel\">\n          <uap4:ContactPanel />\n        </uap4:Extension>\n        <uap:Extension Category=\"windows.shareTarget\">\n          <uap:ShareTarget Description=\"Share to Discord\">\n            <uap:SupportedFileTypes>\n              <uap:SupportsAnyFileType />\n            </uap:SupportedFileTypes>\n            <uap:DataFormat>StorageItem</uap:DataFormat>\n            <uap:DataFormat>Bitmap</uap:DataFormat>\n            <uap:DataFormat>Text</uap:DataFormat>\n            <uap:DataFormat>WebLink</uap:DataFormat>\n          </uap:ShareTarget>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.protocol\">\n          <uap:Protocol Name=\"ms-contact-profile\">\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\n            <uap:DisplayName>Unicord</uap:DisplayName>\n          </uap:Protocol>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.protocol\">\n          <uap:Protocol Name=\"ms-ipmessaging\">\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\n            <uap:DisplayName>Unicord</uap:DisplayName>\n          </uap:Protocol>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.protocol\">\n          <uap:Protocol Name=\"unicord-debug\">\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\n            <uap:DisplayName>Unicord</uap:DisplayName>\n          </uap:Protocol>\n        </uap:Extension>\n        <uap:Extension Category=\"windows.appService\" EntryPoint=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\">\n          <uap:AppService Name=\"com.wankerr.Unicord.Voice\" ServerName=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\" />\n        </uap:Extension>\n        <Extension Category=\"windows.backgroundTasks\" EntryPoint=\"Unicord.Universal.Voice.Background.VoiceBackgroundTask\">\n          <BackgroundTasks ServerName=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\">\n            <Task Type=\"systemEvent\" />\n          </BackgroundTasks>\n        </Extension>\n        <Extension Category=\"windows.backgroundTasks\" EntryPoint=\"Unicord.Universal.Background.NotificationBackgroundTask\">\n          <BackgroundTasks>\n            <Task Type=\"systemEvent\" />\n            <Task Type=\"pushNotification\"/>\n            <Task Type=\"general\"/>\n          </BackgroundTasks>\n        </Extension>\n        <uap:Extension Category=\"windows.fileTypeAssociation\">\n          <uap:FileTypeAssociation Name=\"uni-theme\">\n            <uap:DisplayName>Unicord Theme</uap:DisplayName>\n            <uap:SupportedFileTypes>\n              <uap:FileType ContentType=\"application/x-unicord-theme\">.uni-theme</uap:FileType>\n            </uap:SupportedFileTypes>\n          </uap:FileTypeAssociation>\n        </uap:Extension>\n        <desktop:Extension Category=\"windows.fullTrustProcess\" Executable=\"Unicord.Universal.Background/Unicord.Universal.Background.exe\">\n          <desktop:FullTrustProcess/>\n        </desktop:Extension>\n        <uap:Extension Category=\"windows.appService\">\n          <uap:AppService Name=\"com.wankerr.Unicord.Notifications\" />\n        </uap:Extension>\n        <uap5:Extension Category=\"windows.startupTask\"\n\t\t\t\t\t\t\t\t\t\t\t\tExecutable=\"Unicord.Universal.Background/Unicord.Universal.Background.exe\"\n\t\t\t\t\t\t\t\t\t\t\t\tEntryPoint=\"Windows.FullTrustApplication\">\n          <uap5:StartupTask\n            TaskId=\"UnicordBackgroundTask\"\n            Enabled=\"false\"\n            DisplayName=\"Unicord Background Task\" />\n        </uap5:Extension>\n        <uap:Extension Category=\"windows.protocol\">\n          <uap:Protocol Name=\"unicord\">\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\n            <uap:DisplayName>Unicord</uap:DisplayName>\n          </uap:Protocol>\n        </uap:Extension>\n      </Extensions>\n      <uap:ApplicationContentUriRules>\n        <uap:Rule Type=\"include\" Match=\"https://*.discord.com\" WindowsRuntimeAccess=\"none\"/>\n        <uap:Rule Type=\"include\" Match=\"https://discord.com\" WindowsRuntimeAccess=\"none\"/>\n        <uap:Rule Type=\"include\" Match=\"https://*.discordapp.com\" WindowsRuntimeAccess=\"none\"/>\n        <uap:Rule Type=\"include\" Match=\"https://discordapp.com\" WindowsRuntimeAccess=\"none\"/>\n      </uap:ApplicationContentUriRules>\n    </Application>\n  </Applications>\n  <Capabilities>\n    <Capability Name=\"internetClient\" />\n    <uap:Capability Name=\"videosLibrary\" />\n    <uap:Capability Name=\"picturesLibrary\" />\n    <uap:Capability Name=\"contacts\" />\n    <uap:Capability Name=\"voipCall\" />\n    <uap:Capability Name=\"phoneCall\" />\n    <rescap:Capability Name=\"runFullTrust\"/>\n    <rescap:Capability Name=\"confirmAppClose\"/>\n    <DeviceCapability Name=\"microphone\" />\n    <DeviceCapability Name=\"webcam\" />\n  </Capabilities>\n    <!-- <Extensions> -->\n    <!-- Enlighten COM on where to find Metadata Based Marshaling (MBM) data for the Game Bar private types \n       <Path> is a required element (by VS) and has to point to a binary in the package, but it's not used when the class id is 00000355-0000-0000-C000-000000000046 (MBM). Due to that we just put the Microsoft.Gaming.XboxGameBar.winmd here. -->\n    <!-- <Extension Category=\"windows.activatableClass.proxyStub\">\n      <ProxyStub ClassId=\"00000355-0000-0000-C000-000000000046\">\n        <Path>Microsoft.Gaming.XboxGameBar.winmd</Path>\n\n       include when using SDK version 5.1+\n        <Interface Name=\"Microsoft.Gaming.XboxGameBar.Private.IXboxGameBarWidgetAuthHost\" InterfaceId=\"DC263529-B12F-469E-BB35-B94069F5B15A\" />\n        <Interface Name=\"Microsoft.Gaming.XboxGameBar.Private.IXboxGameBarWidgetControlHost\" InterfaceId=\"C309CAC7-8435-4082-8F37-784523747047\" />\n        <Interface Name=\"Microsoft.Gaming.XboxGameBar.Private.IXboxGameBarNavigationKeyCombo\" InterfaceId=\"5EEA3DBF-09BB-42A5-B491-CF561E33C172\" />\n        <Interface Name=\"Microsoft.Gaming.XboxGameBar.Private.IXboxGameBarWidgetActivatedEventArgsPrivate\" InterfaceId=\"782535A7-9407-4572-BFCB-316B4086F102\" />\n        <Interface Name=\"Microsoft.Gaming.XboxGameBar.Private.IXboxGameBarWidgetHost\" InterfaceId=\"5D12BC93-212B-4B9F-9091-76B73BF56525\" />\n        <Interface Name=\"Microsoft.Gaming.XboxGameBar.Private.IXboxGameBarWidgetPrivate\" InterfaceId=\"22ABA97F-FB0F-4439-9BDD-2C67B2D5AA8F\" />\n\n        include when using SDK version 5.3+\n        <Interface Name=\"Microsoft.Gaming.XboxGameBar.Private.IXboxGameBarWidgetHost2\" InterfaceId=\"28717C8B-D8E8-47A8-AF47-A1D5263BAE9B\" />\n        <Interface Name=\"Microsoft.Gaming.XboxGameBar.Private.IXboxGameBarWidgetPrivate2\" InterfaceId=\"B2F7DB8C-7540-48DA-9B46-4E60CE0D9DEB\" />\n\n      </ProxyStub>\n    </Extension> -->\n  <!-- </Extensions> -->\n</Package>"
  },
  {
    "path": "Unicord.Universal.Package/Package.appxmanifest",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Package xmlns=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10\"\r\n         xmlns:uap=\"http://schemas.microsoft.com/appx/manifest/uap/windows10\"\r\n         xmlns:uap2=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/2\"\r\n         xmlns:uap3=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/3\"\r\n\t\t\t\t xmlns:uap4=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/4\"\r\n         xmlns:uap5=\"http://schemas.microsoft.com/appx/manifest/uap/windows10/5\"\r\n         xmlns:rescap=\"http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities\"\r\n         xmlns:desktop=\"http://schemas.microsoft.com/appx/manifest/desktop/windows10\"\r\n         xmlns:mp=\"http://schemas.microsoft.com/appx/2014/phone/manifest\"\r\n\t\t\t\t IgnorableNamespaces=\"uap mp uap2 uap3 uap4 uap5 rescap\">\r\n  <Identity Name=\"24101WamWooWamRD.Unicord\" Publisher=\"CN=0F22111D-EDF0-42F0-B58D-26C4C5C5054B\" Version=\"2.0.51.0\" />\r\n  <mp:PhoneIdentity PhoneProductId=\"5783aabf-3049-421f-ae1d-e88bd89018f2\" PhonePublisherId=\"00000000-0000-0000-0000-000000000000\" />\r\n  <Properties>\r\n    <DisplayName>ms-resource:AppDisplayName</DisplayName>\r\n    <PublisherDisplayName>Wan Kerr Co. Ltd.</PublisherDisplayName>\r\n    <Logo>Assets\\Store\\StoreLogo.png</Logo>\r\n  </Properties>\r\n  <Dependencies>\r\n    <TargetDeviceFamily Name=\"Windows.Universal\" MinVersion=\"10.0.15063.0\" MaxVersionTested=\"10.0.26100.0\" />\r\n    <TargetDeviceFamily Name=\"Windows.Mobile\" MinVersion=\"10.0.15063.0\" MaxVersionTested=\"10.0.15254.0\"/>\r\n  </Dependencies>\r\n  <Resources>\r\n    <Resource Language=\"x-generate\"/>\r\n  </Resources>\r\n  <Applications>\r\n    <Application Id=\"App\" Executable=\"$targetnametoken$.exe\" EntryPoint=\"Unicord.Universal.App\">\r\n      <uap:VisualElements DisplayName=\"ms-resource:AppDisplayName\" \r\n                          Square150x150Logo=\"Assets\\Store\\Square150x150Logo.png\" \r\n                          Square44x44Logo=\"Assets\\Store\\Square44x44Logo.png\" \r\n                          Description=\"ms-resource:AppDisplayDescription\" \r\n                          BackgroundColor=\"transparent\">\r\n        <uap:LockScreen Notification=\"badge\" BadgeLogo=\"Assets\\Store\\BadgeLogo.png\" />\r\n        <uap:DefaultTile Wide310x150Logo=\"Assets\\Store\\Wide310x150Logo.png\" \r\n                         Square310x310Logo=\"Assets\\Store\\LargeTile.png\" \r\n                         Square71x71Logo=\"Assets\\Store\\SmallTile.png\" \r\n                         ShortName=\"Unicord\">\r\n          <uap:ShowNameOnTiles>\r\n            <uap:ShowOn Tile=\"square150x150Logo\" />\r\n            <uap:ShowOn Tile=\"wide310x150Logo\" />\r\n            <uap:ShowOn Tile=\"square310x310Logo\" />\r\n          </uap:ShowNameOnTiles>\r\n        </uap:DefaultTile>\r\n        <uap:SplashScreen Image=\"Assets\\Store\\SplashScreen.png\" BackgroundColor=\"transparent\" uap5:Optional=\"true\" />\r\n        <uap:InitialRotationPreference>\r\n          <uap:Rotation Preference=\"portrait\" />\r\n          <uap:Rotation Preference=\"landscape\"/>\r\n          <uap:Rotation Preference=\"landscapeFlipped\"/>\r\n          <uap:Rotation Preference=\"portraitFlipped\"/>\r\n        </uap:InitialRotationPreference>\r\n      </uap:VisualElements>\r\n      <Extensions>\r\n        <uap:Extension Category=\"windows.voipCall\">\r\n        </uap:Extension>\r\n        <uap4:Extension Category=\"windows.contactPanel\">\r\n          <uap4:ContactPanel />\r\n        </uap4:Extension>\r\n        <uap:Extension Category=\"windows.shareTarget\">\r\n          <uap:ShareTarget Description=\"Share to Discord\">\r\n            <uap:SupportedFileTypes>\r\n              <uap:SupportsAnyFileType />\r\n            </uap:SupportedFileTypes>\r\n            <uap:DataFormat>StorageItem</uap:DataFormat>\r\n            <uap:DataFormat>Bitmap</uap:DataFormat>\r\n            <uap:DataFormat>Text</uap:DataFormat>\r\n            <uap:DataFormat>WebLink</uap:DataFormat>\r\n          </uap:ShareTarget>\r\n        </uap:Extension>\r\n        <uap:Extension Category=\"windows.protocol\">\r\n          <uap:Protocol Name=\"ms-contact-profile\">\r\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\r\n            <uap:DisplayName>Unicord</uap:DisplayName>\r\n          </uap:Protocol>\r\n        </uap:Extension>\r\n        <uap:Extension Category=\"windows.protocol\">\r\n          <uap:Protocol Name=\"ms-ipmessaging\">\r\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\r\n            <uap:DisplayName>Unicord</uap:DisplayName>\r\n          </uap:Protocol>\r\n        </uap:Extension>\r\n        <uap:Extension Category=\"windows.protocol\">\r\n          <uap:Protocol Name=\"unicord\">\r\n            <uap:Logo>Assets\\Store\\Square44x44Logo.png</uap:Logo>\r\n            <uap:DisplayName>Unicord</uap:DisplayName>\r\n          </uap:Protocol>\r\n        </uap:Extension>\r\n        <Extension Category=\"windows.backgroundTasks\" EntryPoint=\"Unicord.Universal.Background.Tasks.PeriodicNotificationsTask\">\r\n          <BackgroundTasks>\r\n            <Task Type=\"general\"/>\r\n            <Task Type=\"timer\"/>\r\n          </BackgroundTasks>\r\n        </Extension>\r\n        <Extension Category=\"windows.backgroundTasks\" EntryPoint=\"Unicord.Universal.Background.Tasks.RealtimeNotificationsTask\">\r\n          <BackgroundTasks>\r\n            <Task Type=\"general\"/>\r\n            <Task Type=\"timer\"/>\r\n          </BackgroundTasks>\r\n        </Extension>\r\n        <uap:Extension Category=\"windows.appService\" EntryPoint=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\">\r\n          <uap:AppService Name=\"com.wankerr.Unicord.Voice\" ServerName=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\" />\r\n        </uap:Extension>\r\n        <Extension Category=\"windows.backgroundTasks\" EntryPoint=\"Unicord.Universal.Voice.Background.VoiceBackgroundTask\">\r\n          <BackgroundTasks ServerName=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\">\r\n            <Task Type=\"systemEvent\" />\r\n          </BackgroundTasks>\r\n        </Extension>\r\n        <desktop:Extension Category=\"windows.fullTrustProcess\" Executable=\"Unicord.Universal.Background/Unicord.Universal.Background.exe\">\r\n          <desktop:FullTrustProcess />\r\n        </desktop:Extension>\r\n        <uap:Extension Category=\"windows.appService\">\r\n          <uap:AppService Name=\"com.wankerr.Unicord.Notifications\" />\r\n        </uap:Extension>\r\n        <uap5:Extension Category=\"windows.startupTask\"\r\n\t\t\t\t\t\tExecutable=\"Unicord.Universal.Background/Unicord.Universal.Background.exe\"\r\n\t\t\t\t\t\tEntryPoint=\"Windows.FullTrustApplication\">\r\n          <uap5:StartupTask\r\n            TaskId=\"UnicordBackgroundTask\"\r\n            Enabled=\"false\"\r\n            DisplayName=\"Unicord Notifications Task\" />\r\n        </uap5:Extension>\r\n      </Extensions>\r\n      <uap:ApplicationContentUriRules>\r\n        <uap:Rule Type=\"include\" Match=\"https://*.discord.com\" WindowsRuntimeAccess=\"none\"/>\r\n        <uap:Rule Type=\"include\" Match=\"https://discord.com\" WindowsRuntimeAccess=\"none\"/>\r\n        <uap:Rule Type=\"include\" Match=\"https://*.discordapp.com\" WindowsRuntimeAccess=\"none\"/>\r\n        <uap:Rule Type=\"include\" Match=\"https://discordapp.com\" WindowsRuntimeAccess=\"none\"/>\r\n      </uap:ApplicationContentUriRules>\r\n    </Application>\r\n  </Applications>\r\n  <Capabilities>\r\n    <Capability Name=\"internetClient\" />\r\n    <uap:Capability Name=\"videosLibrary\" />\r\n    <uap:Capability Name=\"picturesLibrary\" />\r\n    <uap:Capability Name=\"contacts\" />\r\n    <uap:Capability Name=\"voipCall\" />\r\n    <uap:Capability Name=\"phoneCall\" />\r\n    <rescap:Capability Name=\"runFullTrust\"/>\r\n    <rescap:Capability Name=\"extendedBackgroundTaskTime\"/>\r\n    <DeviceCapability Name=\"microphone\" />\r\n    <DeviceCapability Name=\"webcam\" />\r\n  </Capabilities>\r\n  <Extensions>\r\n    <Extension Category=\"windows.activatableClass.inProcessServer\">\r\n      <InProcessServer>\r\n        <Path>Unicord.Universal.Voice.dll</Path>\r\n        <ActivatableClass ActivatableClassId=\"Unicord.Universal.Voice.VoiceClientStats\" ThreadingModel=\"both\"/>\r\n        <ActivatableClass ActivatableClassId=\"Unicord.Universal.Voice.VoiceClientOptions\" ThreadingModel=\"both\"/>\r\n        <ActivatableClass ActivatableClassId=\"Unicord.Universal.Voice.VoiceClient\" ThreadingModel=\"both\"/>\r\n        <ActivatableClass ActivatableClassId=\"Unicord.Universal.Voice.Background.VoiceBackgroundTask\" ThreadingModel=\"both\"/>\r\n        <ActivatableClass ActivatableClassId=\"Unicord.Universal.Voice.Background.ServiceBackgroundTask\" ThreadingModel=\"both\"/>\r\n      </InProcessServer>\r\n    </Extension>\r\n  </Extensions>\r\n</Package>"
  },
  {
    "path": "Unicord.Universal.Package/Unicord.Universal.Package.wapproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project ToolsVersion=\"15.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup Condition=\"'$(VisualStudioVersion)' == '' or '$(VisualStudioVersion)' &lt; '15.0'\">\r\n    <VisualStudioVersion>15.0</VisualStudioVersion>\r\n  </PropertyGroup>\r\n  <ItemGroup Label=\"ProjectConfigurations\">\r\n    <ProjectConfiguration Include=\"Debug|x86\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x86</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x86\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x86</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|x64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|x64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>x64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|ARM\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>ARM</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|ARM\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>ARM</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|ARM64\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>ARM64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|ARM64\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>ARM64</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Debug|AnyCPU\">\r\n      <Configuration>Debug</Configuration>\r\n      <Platform>AnyCPU</Platform>\r\n    </ProjectConfiguration>\r\n    <ProjectConfiguration Include=\"Release|AnyCPU\">\r\n      <Configuration>Release</Configuration>\r\n      <Platform>AnyCPU</Platform>\r\n    </ProjectConfiguration>\r\n  </ItemGroup>\r\n  <PropertyGroup>\r\n    <WapProjPath Condition=\"'$(WapProjPath)'==''\">$(MSBuildExtensionsPath)\\Microsoft\\DesktopBridge\\</WapProjPath>\r\n  </PropertyGroup>\r\n  <Import Project=\"$(WapProjPath)\\Microsoft.DesktopBridge.props\" />\r\n  <PropertyGroup>\r\n    <ProjectGuid>8e0255b7-b38e-423e-91c7-5637a01c2e13</ProjectGuid>\r\n    <TargetPlatformVersion>10.0.22621.0</TargetPlatformVersion>\r\n    <TargetPlatformMinVersion>10.0.16299.0</TargetPlatformMinVersion>\r\n    <DefaultLanguage>en-US</DefaultLanguage>\r\n    <AppxPackageSigningEnabled>True</AppxPackageSigningEnabled>\r\n    <EntryPointProjectUniqueName>..\\Unicord.Universal\\Unicord.Universal.csproj</EntryPointProjectUniqueName>\r\n    <AppxOSMinVersionReplaceManifestVersion>false</AppxOSMinVersionReplaceManifestVersion>\r\n    <AppxOSMaxVersionTestedReplaceManifestVersion>false</AppxOSMaxVersionTestedReplaceManifestVersion>\r\n    <GenerateAppInstallerFile>False</GenerateAppInstallerFile>\r\n    <AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>\r\n    <AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>\r\n    <GenerateTestArtifacts>True</GenerateTestArtifacts>\r\n    <AppxBundlePlatforms>x64</AppxBundlePlatforms>\r\n    <HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>\r\n    <AppxBundle>Always</AppxBundle>\r\n    <AppInstallerUri>https://wamwoowam.co.uk/unicord/download</AppInstallerUri>\r\n    <RuntimeIdentifiers>win10-x64;win10-x86;win10-arm</RuntimeIdentifiers>\r\n    <!-- lol, lmao -->\r\n    <SkipMicrosoftUIXamlCheckTargetPlatformVersion>true</SkipMicrosoftUIXamlCheckTargetPlatformVersion>\r\n    <PackageCertificateThumbprint>3170C79384D8E3CC9B1BB941485392BC58100230</PackageCertificateThumbprint>\r\n    <PackageCertificateKeyFile>Unicord.Universal.Package_TemporaryKey.pfx</PackageCertificateKeyFile>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <AppxManifest Include=\"Package.appxmanifest\">\r\n      <SubType>Designer</SubType>\r\n    </AppxManifest>\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <ProjectReference Include=\"..\\Unicord.Universal.Background\\Unicord.Universal.Background.csproj\" />\r\n    <ProjectReference Include=\"..\\Unicord.Universal\\Unicord.Universal.csproj\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Package.StoreAssociation.xml\" />\r\n  </ItemGroup>\r\n  <ItemGroup>\r\n    <None Include=\"Unicord.Universal.Package_TemporaryKey.pfx\" />\r\n  </ItemGroup>\r\n  <Import Project=\"$(WapProjPath)\\Microsoft.DesktopBridge.targets\" />\r\n</Project>"
  },
  {
    "path": "Unicord.Universal.Shared/BadgeManager.cs",
    "content": "﻿using System;\r\nusing System.Globalization;\r\nusing DSharpPlus;\r\nusing Unicord.Universal.Extensions;\r\nusing Windows.Data.Xml.Dom;\r\nusing Windows.UI.Notifications;\r\n\r\nnamespace Unicord.Universal.Shared\r\n{\r\n    internal class BadgeManager\r\n    {\r\n        private BadgeUpdater _badgeUpdateManager;\r\n        private DiscordClient _discord;\r\n\r\n        public BadgeManager(DiscordClient client)\r\n        {\r\n            _discord = client;\r\n            _badgeUpdateManager = BadgeUpdateManager.CreateBadgeUpdaterForApplication(\"App\");\r\n        }\r\n\r\n        public void Update()\r\n        {\r\n            try\r\n            {\r\n                var mentions = 0;\r\n                var unread = false;\r\n                foreach (var (key, value) in _discord.ReadStates)\r\n                {\r\n                    if (_discord.TryGetCachedChannel(key, out var channel) && !channel.IsMuted() \r\n                        && (channel.Guild == null || !channel.Guild.IsMuted()))\r\n                    {\r\n                        unread |= channel.IsUnread();\r\n                        mentions += value.MentionCount;\r\n                    }\r\n                }\r\n\r\n                if (!unread)\r\n                {\r\n                    _badgeUpdateManager.Clear();\r\n                    return;\r\n                }\r\n\r\n                var badgeXml = BadgeUpdateManager.GetTemplateContent(\r\n                    mentions == 0 ? BadgeTemplateType.BadgeGlyph : BadgeTemplateType.BadgeNumber);\r\n                var badgeElement = badgeXml.SelectSingleNode(\"/badge\") as XmlElement;\r\n\r\n                if (mentions != 0)\r\n                {\r\n                    badgeElement.SetAttribute(\"value\", mentions.ToString(CultureInfo.InvariantCulture));\r\n                }\r\n                else\r\n                {\r\n                    badgeElement.SetAttribute(\"value\", \"available\");\r\n                }\r\n\r\n                _badgeUpdateManager.Update(new BadgeNotification(badgeXml));\r\n            }\r\n            catch (Exception)\r\n            {\r\n                // TODO: log\r\n            }\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal.Shared/Constants.cs",
    "content": "﻿using System;\r\n\r\nnamespace Unicord\r\n{\r\n    internal static partial class Constants\r\n    {\r\n        public const string MAIN_URL = \"https://wamwoowam.co.uk/unicord/\";\r\n\r\n        public const string TOKEN_IDENTIFIER = \"Unicord_Token_New\";\r\n        public const string APP_USER_MODEL_ID = \"com.wankerr.Unicord\";\r\n\r\n        public const string ENABLE_ANALYTICS = \"EnableAnalytics\";\r\n        public const string SYNC_CONTACTS = \"SyncContacts\";\r\n        public const string ENABLE_SPOILERS = \"EnableSpoilers\";\r\n        public const string AUTO_TRANSCODE_MEDIA = \"AutoTranscodeMedia_1\";\r\n        public const string WARN_UNSAFE_LINKS = \"WarnUnsafeLinks\";\r\n\r\n        public const string VIDEO_BITRATE = \"VideoBitrate\";\r\n        public const uint DEFAULT_VIDEO_BITRATE = 1_115_000u;\r\n\r\n        public const string VIDEO_WIDTH = \"VideoWidth\";\r\n        public const int DEFAULT_VIDEO_WIDTH = 854;\r\n\r\n        public const string VIDEO_HEIGHT = \"VideoHeight\";\r\n        public const int DEFAULT_VIDEO_HEIGHT = 480;\r\n\r\n        public const string AUDIO_BITRATE = \"AudioBitrate\";\r\n        public const uint DEFAULT_AUDIO_BITRATE = 192 * 1000;\r\n\r\n        public const string AUDIO_SAMPLERATE = \"AudioSampleRate\";\r\n        public const uint DEFAULT_AUDIO_SAMPLERATE = 48000u;\r\n\r\n        public const string VIDEO_PROCESSING = \"VideoProcessingAlgorithm_1\";\r\n\r\n        public const string SAVE_PHOTOS = \"SavePhotos\";\r\n        public const bool DEFAULT_SAVE_PHOTOS = true;\r\n\r\n        public const string VIDEO_PRESERVE_FRAMERATE = \"PreserveFrameRate\";\r\n        public const bool DEFAULT_VIDEO_PRESERVE_FRAMERATE = true;\r\n\r\n        public const string VERIFY_LOGIN = \"HelloForLogin\";\r\n        public const string VERIFY_NSFW = \"HelloForNSFW\";\r\n        public const string VERIFY_SETTINGS = \"HelloForSettings\";\r\n        public const string AUTHENTICATION_TIME = \"AuthenticationTime\";\r\n\r\n        public const string GIF_AUTOPLAY = \"AutoPlayGifs\";\r\n        public const string SAVE_CAPTURED_PHOTOS = \"SavedPhotos\";\r\n        public const string TIMESTAMP_STYLE = \"TimestampStyle_1\";\r\n\r\n        public const string BACKGROUND_NOTIFICATIONS_FULL_TRUST = \"BackgroundNotifications\";\r\n\r\n        [Obsolete(\"Use new theme system (SELECTED_THEME_NAMES) instead.\")]\r\n        public const string SELECTED_THEME_NAME = \"SelectedThemeName\";\r\n\r\n        public const string SELECTED_THEME_NAMES = \"SelectedThemeNames\";\r\n        public const string AVAILABLE_THEME_NAMES = \"AvailableThemeNames\";\r\n        public const string REQUESTED_COLOUR_SCHEME = \"RequestedTheme_1\";\r\n        public const string THEME_FOLDER_NAME = \"Themes\";\r\n        public const string THEME_METADATA_NAME = \"theme.json\";\r\n\r\n        public const string MESSAGE_STYLE_KEY = \"MessageStyleKey\";\r\n        public const string MESSAGE_STYLE_DEFAULT = \"DefaultMessageControlStyle\";\r\n\r\n        public const string TOAST_BACKGROUND_TASK_NAME = \"ToastBackgroundTask\";\r\n        public const string PERIODIC_BACKGROUND_TASK_NAME = \"PeriodicNotificationsTask\";\r\n        public const string REALTIME_BACKGROUND_TASK_NAME = \"RealtimeNotificationsTask\";\r\n\r\n        public const string SHOW_HUGE_EMOJI = \"ShowHugeEmoji\";\r\n        public const bool   SHOW_HUGE_EMOJI_DEFAULT = true;\r\n\r\n        public const string ADJUST_ROLE_COLOURS = \"AdjustRoleColours\";\r\n        public const bool   ADJUST_ROLE_COLOURS_DEFAULT = true;\r\n\r\n        public const string SHOW_STATUS_GLYPHS = \"ShowStatusGlyphs\";\r\n        public const bool   SHOW_STATUS_GLYPHS_DEFAULT = true;\r\n\r\n        public const string MINIMUM_CONTRAST = \"MinimumContrast\";\r\n        public const double MINIMUM_CONTRAST_DEFAULT = 3.5;\r\n\r\n        public const string ENABLE_WEBP = \"EnableWebp\"; \r\n        public const bool   ENABLE_WEBP_DEFAULT = false; // slow as balls\r\n\r\n        public const string ENABLE_NOTIFICATIONS = \"EnableNotifications\";\r\n        public const bool   ENABLE_NOTIFICATIONS_DEFAULT = true;\r\n\r\n        public const string ENABLE_DESKTOP_NOTIFICAITONS = \"EnableDesktopNotifications\";\r\n        public const bool   ENABLE_DESKTOP_NOTIFICAITONS_DEFAULT = true;\r\n\r\n        public const string ENABLE_BADGE_COUNT = \"EnableBadgeCount\";\r\n        public const bool   ENABLE_BADGE_COUNT_DEFAULT = true;\r\n\r\n        public const string ENABLE_BADGE_UNREAD = \"EnableBadgeUnread\";\r\n        public const bool   ENABLE_BADGE_UNREAD_DEFAULT = true;\r\n\r\n        public const string ENABLE_LIVE_TILES = \"EnableLiveTiles\";\r\n        public const bool   ENABLE_LIVE_TILES_DEFAULT = true;\r\n\r\n        public const string ENABLE_GUILD_BROWSING = \"EnableGuildBrowsing\";\r\n        public const bool   ENABLE_GUILD_BROWSING_DEFAULT = false;\r\n\r\n        // old resource keys for migration\r\n        public const string TOKEN_IDENTIFIER_OLD = \"Unicord_Token\";\r\n        public const string AUTO_TRANSCODE_MEDIA_OLD = \"AutoTranscodeMedia\";\r\n        public const string VIDEO_PROCESSING_OLD = \"VideoProcessingAlgorithm\";\r\n        public const string TIMESTAMP_STYLE_OLD = \"TimestampStyle\";\r\n        public const string REQUESTED_COLOUR_SCHEME_OLD = \"RequestedTheme\";\r\n    }\r\n\r\n    internal enum MediaTranscodeOptions\r\n    {\r\n        Always,\r\n        WhenNeeded,\r\n        Never\r\n    }\r\n\r\n    internal enum TimestampStyle\r\n    {\r\n        Relative,\r\n        Absolute,\r\n        Both\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal.Shared/Constants.pub.cs",
    "content": "﻿namespace Unicord\n{\n    internal static partial class Constants\n    {\n#if STORE\n        public const string APPCENTER_IDENTIFIER = \"b87a8458-e7a2-4a68-8e6c-3a2d11d08657\";\n#else\n        public const string APPCENTER_IDENTIFIER = \"8d4093a7-9b56-402f-95e1-f70d5bbb30f5\";\n#endif\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal.Shared/Extensions.cs",
    "content": "﻿using System.Collections.Generic;\r\n\r\nnamespace Unicord\r\n{\r\n    internal static class Extensions\r\n    {\r\n        public static void Deconstruct<T1, T2>(this KeyValuePair<T1, T2> tuple, out T1 key, out T2 value)\r\n        {\r\n            key = tuple.Key;\r\n            value = tuple.Value;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal.Shared/MutedExtensions.cs",
    "content": "﻿using System;\r\nusing System.Linq;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\n\r\nnamespace Unicord.Universal.Extensions\r\n{\r\n    internal static class MutedExtensions\r\n    {\r\n        public static bool IsMuted(this DiscordChannel channel)\r\n        {\r\n            if (!(channel.Discord is DiscordClient client))\r\n                return false;\r\n\r\n            if (!client.UserGuildSettings.TryGetValue(channel.GuildId ?? 0, out var settings))\r\n                return false;\r\n\r\n            var channelOverride = settings.ChannelOverrides?.FirstOrDefault(o => o?.ChannelId == channel.Id);\r\n            if (channelOverride == null)\r\n                return false;\r\n\r\n            if (channelOverride.MuteConfig != null)\r\n            {\r\n                var endTime = channelOverride.MuteConfig.EndTime;\r\n                if (endTime.HasValue && channelOverride.Muted)\r\n                    return endTime.Value > DateTimeOffset.Now;\r\n            }\r\n\r\n            return channelOverride.Muted;\r\n        }\r\n\r\n        public static bool IsMuted(this DiscordGuild guild)\r\n        {\r\n            if (!(guild.Discord is DiscordClient client))\r\n                return false;\r\n\r\n            if (!client.UserGuildSettings.TryGetValue(guild.Id, out var settings) || settings == null)\r\n                return false;\r\n\r\n            if (settings.MuteConfig != null)\r\n            {\r\n                var endTime = settings.MuteConfig.EndTime;\r\n                if (endTime.HasValue && settings.Muted)\r\n                    return endTime.Value > DateTimeOffset.Now;\r\n            }\r\n\r\n            return settings.Muted;\r\n        }\r\n\r\n        public static bool IsUnread(this DiscordChannel channel)\r\n        {\r\n            if (!(channel.Discord is DiscordClient discord))\r\n                return false;\r\n\r\n            var readState = channel.ReadState;\r\n\r\n            // this shit should never happen but apparently it does sometimes, don't question it\r\n            if (readState == null || readState.Id == 0)\r\n                return false;\r\n\r\n            if (discord == null)\r\n                return false;\r\n\r\n            if (channel.Type == ChannelType.Voice || channel.Type == ChannelType.Category)\r\n                return false;\r\n\r\n            if (channel.Type == ChannelType.Private || channel.Type == ChannelType.Group)\r\n            {\r\n                return readState.MentionCount > 0;\r\n            }\r\n\r\n            return (readState.MentionCount > 0 || (channel.LastMessageId != 0 && channel.LastMessageId > readState.LastMessageId));\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal.Shared/NotificationUtils.cs",
    "content": "﻿using System;\r\nusing System.Globalization;\r\nusing System.IO;\r\nusing System.Linq;\r\nusing System.Text.RegularExpressions;\r\nusing System.Web;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing Microsoft.Toolkit.Uwp.Notifications;\r\nusing MomentSharp;\r\nusing Unicord.Universal.Extensions;\r\nusing WamWooWam.Core;\r\nusing Windows.Data.Xml.Dom;\r\nusing Windows.UI.Notifications;\r\n\r\nnamespace Unicord.Universal.Shared\r\n{\r\n    internal class NotificationUtils\r\n    {\r\n        public static bool WillShowToast(BaseDiscordClient client, DiscordMessage message)\r\n        {\r\n            if (message.Author.IsCurrent)\r\n                return false;\r\n\r\n            if (client is DiscordClient discord && discord.UserSettings?.Status == \"dnd\")\r\n                return false;\r\n\r\n            if (message.Channel.IsMuted() || (message.Channel.Guild != null && message.Channel.Guild.IsMuted()))\r\n                return false;\r\n\r\n            bool willNotify = false;\r\n\r\n            if (message.MentionedUsers.Any(m => m?.Id == message.Discord.CurrentUser.Id))\r\n            {\r\n                willNotify = true;\r\n            }\r\n\r\n            if (message.Channel is DiscordDmChannel)\r\n            {\r\n                willNotify = true;\r\n            }\r\n\r\n            if (message.Channel.Guild != null)\r\n            {\r\n                var usr = message.Channel.Guild.CurrentMember;\r\n                if (message.MentionedRoleIds.Any(r => (usr.RoleIds.Contains(r))) == true)\r\n                {\r\n                    willNotify = true;\r\n                }\r\n            }\r\n\r\n            return willNotify;\r\n        }\r\n\r\n        private static readonly Regex UserRegex = new Regex(@\"<@!?(\\d+)>\", RegexOptions.ECMAScript | RegexOptions.Compiled);\r\n        private static readonly Regex RoleRegex = new Regex(@\"<@&(\\d+)>\", RegexOptions.ECMAScript | RegexOptions.Compiled);\r\n        private static readonly Regex ChannelRegex = new Regex(@\"<#(\\d+)>\", RegexOptions.ECMAScript | RegexOptions.Compiled);\r\n        private static readonly Regex EmojiRegex = new Regex(@\"<a?:([a-zA-Z0-9_]+):(\\d+)>\", RegexOptions.ECMAScript | RegexOptions.Compiled);\r\n        private static readonly Regex TimestampRegex = new Regex(@\"<t:(-?\\d{1,13})(:([DFRTdft]))?>\", RegexOptions.ECMAScript | RegexOptions.Compiled);\r\n        private static readonly Regex SpoilerRegex = new Regex(\"\\\\|\\\\|((?:.|\\\\r|\\\\n)*?)\\\\|\\\\|\", RegexOptions.ECMAScript | RegexOptions.Multiline | RegexOptions.Compiled);\r\n\r\n        public static string GetMessageTitle(DiscordMessage message) => message.Channel.Guild != null ?\r\n                             $\"{message.Author.DisplayName} in {message.Channel.Guild.Name}\" :\r\n                             $\"{message.Author.DisplayName}\";\r\n\r\n        public static string GetMessageContent(BaseDiscordClient client, DiscordMessage message)\r\n        {\r\n            string messageText = message.Content;\r\n\r\n            messageText = SpoilerRegex.Replace(messageText, (match) => new string('\\x2B1B', match.Value.Length - 4));\r\n\r\n            messageText = UserRegex.Replace(messageText, (match) =>\r\n            {\r\n                if (ulong.TryParse(match.Groups[1].Value, out var id))\r\n                {\r\n                    if (message.Channel.Guild?.Members.TryGetValue(id, out var member) == true)\r\n                        return $\"@{member.DisplayName}\";\r\n\r\n                    if (client is DiscordClient discord && discord.TryGetCachedUser(id, out var user))\r\n                        return $\"@{user.DisplayName}\";\r\n\r\n                    return \"@unknown-user\";\r\n                }\r\n\r\n                return match.Value;\r\n            });\r\n\r\n            messageText = ChannelRegex.Replace(messageText, (match) =>\r\n            {\r\n                if (ulong.TryParse(match.Groups[1].Value, out var id))\r\n                {\r\n                    if (message.Channel.Guild?.Channels.TryGetValue(id, out var channel) == true)\r\n                        return $\"#{channel.Name}\";\r\n\r\n                    if (client is DiscordClient discord && discord.TryGetCachedChannel(id, out channel))\r\n                        return $\"#{channel.Name}\";\r\n\r\n                    return \"#unknown-channel\";\r\n                }\r\n\r\n                return match.Value;\r\n            });\r\n\r\n            messageText = EmojiRegex.Replace(messageText, (match) =>\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(match.Groups[1].Value))\r\n                    return $\":{match.Groups[1].Value}:\";\r\n\r\n                return match.Value;\r\n            });\r\n\r\n            if (message.Channel.Guild != null)\r\n            {\r\n                messageText = RoleRegex.Replace(messageText, (match) =>\r\n                {\r\n                    if (ulong.TryParse(match.Groups[1].Value, out var id))\r\n                    {\r\n                        if (message.Channel.Guild.Roles.TryGetValue(id, out var role))\r\n                            return $\"@{role.Name}\";\r\n\r\n                        return \"@unknown-role\";\r\n                    }\r\n\r\n                    return match.Value;\r\n                });\r\n            }\r\n            if (messageText.Length > 128)\r\n                messageText = messageText.Substring(0, 125) + \"...\";\r\n\r\n            return messageText;\r\n        }\r\n\r\n        public static string GetChannelHeaderName(DiscordChannel channel)\r\n        {\r\n            if (channel is DiscordDmChannel dmChannel)\r\n            {\r\n                if (dmChannel.Type == ChannelType.Private)\r\n                {\r\n                    if (dmChannel.Recipients == null || dmChannel.Recipients.Count == 0)\r\n                        return \"Invalid DM channel\";\r\n\r\n                    return $\"@{dmChannel.Recipients[0].DisplayName}\";\r\n                }\r\n\r\n                if (dmChannel.Type == ChannelType.Group)\r\n                {\r\n                    return dmChannel.Name ?? Strings.NaturalJoin(dmChannel.Recipients.Select(r => r.DisplayName));\r\n                }\r\n            }\r\n\r\n            if (channel.Guild != null)\r\n                return $\"#{channel.Name} - {channel.Guild.Name}\";\r\n\r\n            return $\"#{channel.Name}\";\r\n        }\r\n\r\n        public static TileNotification CreateTileNotificationForMessage(BaseDiscordClient client, DiscordMessage message)\r\n        {\r\n            var tileContentBuilder = new TileContentBuilder()\r\n                .SetBranding(TileBranding.NameAndLogo)\r\n                .AddTile(TileSize.Large)\r\n                .AddTile(TileSize.Medium)\r\n                .AddTile(TileSize.Wide);\r\n\r\n            if (message.Channel is DiscordDmChannel dm)\r\n            {\r\n                if (!string.IsNullOrEmpty(dm.IconHash))\r\n                    tileContentBuilder.SetPeekImage(new Uri(dm.IconUrl));\r\n\r\n                tileContentBuilder.SetPeekImage(new Uri(message.Author.GetAvatarUrl(ImageFormat.Png)));\r\n\r\n                tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText() { Text = GetChannelHeaderName(message.Channel), HintStyle = AdaptiveTextStyle.Base })\r\n                    .AddAdaptiveTileVisualChild(new AdaptiveText() { Text = GetMessageContent(client, message), HintStyle = AdaptiveTextStyle.Caption, HintWrap = true })\r\n                    .SetDisplayName(new Moment(message.Timestamp.UtcDateTime).Calendar());\r\n            }\r\n            else if (message.Channel is not null)\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(message.Channel?.Guild.IconUrl))\r\n                    tileContentBuilder.SetPeekImage(new Uri(message.Channel.Guild.IconUrl + \"?size=512\"));\r\n\r\n                tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText() { Text = $\"#{message.Channel.Name}\", HintStyle = AdaptiveTextStyle.Base })\r\n                    .AddAdaptiveTileVisualChild(new AdaptiveText() { Text = message.Channel.Guild.Name, HintStyle = AdaptiveTextStyle.Body })\r\n                    .AddAdaptiveTileVisualChild(new AdaptiveText() { Text = GetMessageContent(client, message), HintStyle = AdaptiveTextStyle.Caption, HintWrap = true })\r\n                    .SetDisplayName(new Moment(message.Timestamp.UtcDateTime).Calendar());\r\n            }\r\n\r\n            var tileContent = tileContentBuilder.GetTileContent();\r\n            var doc = new XmlDocument();\r\n            doc.LoadXml(tileContent.GetContent());\r\n\r\n            return new TileNotification(doc);\r\n        }\r\n\r\n        public static TileNotification CreateTileNotificationForChannel(DiscordChannel channel)\r\n        {\r\n            var tileContentBuilder = new TileContentBuilder()\r\n                .SetBranding(TileBranding.NameAndLogo)\r\n                .AddTile(TileSize.Large)\r\n                .AddTile(TileSize.Medium)\r\n                .AddTile(TileSize.Wide);\r\n\r\n            if (channel is DiscordDmChannel dm)\r\n            {\r\n                if (!string.IsNullOrEmpty(dm.IconHash))\r\n                    tileContentBuilder.SetPeekImage(new Uri(dm.IconUrl));\r\n\r\n                if (dm.Type == ChannelType.Private && dm.Recipients.Count > 0)\r\n                    tileContentBuilder.SetPeekImage(new Uri(dm.Recipients[0].AvatarUrl));\r\n\r\n                tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText()\r\n                {\r\n                    Text = GetChannelHeaderName(channel),\r\n                    HintStyle = AdaptiveTextStyle.Base\r\n                });\r\n            }\r\n            else\r\n            {\r\n                if (!string.IsNullOrWhiteSpace(channel.Guild.IconUrl))\r\n                    tileContentBuilder.SetPeekImage(new Uri(channel.Guild.IconUrl + \"?size=512\"));\r\n\r\n                tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText() { Text = $\"#{channel.Name}\", HintStyle = AdaptiveTextStyle.Base })\r\n                    .AddAdaptiveTileVisualChild(new AdaptiveText() { Text = channel.Guild.Name, HintStyle = AdaptiveTextStyle.Body });\r\n            }\r\n\r\n            var tileContent = tileContentBuilder.GetTileContent();\r\n            var doc = new XmlDocument();\r\n            doc.LoadXml(tileContent.GetContent());\r\n\r\n            return new TileNotification(doc);\r\n        }\r\n\r\n        public static ToastNotification CreateToastNotificationForMessage(BaseDiscordClient client, DiscordMessage message, bool isSuppressed = false)\r\n        {\r\n            var title = GetMessageTitle(message);\r\n            var text = GetMessageContent(client, message);\r\n            var channelName = GetChannelHeaderName(message.Channel);\r\n\r\n            var avatarUrl = message.Author.GetAvatarUrl(ImageFormat.Png, 128);\r\n            var replyString = message.Channel is DiscordDmChannel ? $\"Reply to @{message.Author.DisplayName}...\" : $\"Message #{message.Channel.Name}...\";\r\n\r\n            var builder = new ToastContentBuilder()\r\n                .AddHeader(message.ChannelId.ToString(), channelName, $\"-channelId={message.ChannelId}\")\r\n                .AddAppLogoOverride(new Uri(avatarUrl), ToastGenericAppLogoCrop.Circle)\r\n                .AddText(title, AdaptiveTextStyle.Title)\r\n                .AddText(text, AdaptiveTextStyle.Caption)\r\n                .AddInputTextBox(\"tbReply\", replyString)\r\n                .AddButton(\"tbReply\", \"Reply\", ToastActivationType.Background, $\"-channelId={message.ChannelId}\")\r\n                .AddToastActivationInfo($\"-channelId={message.ChannelId} -messageId={message.Id}\", ToastActivationType.Foreground)\r\n                .AddAttributionText(\"from Discord\")\r\n                .AddCustomTimeStamp(message.Timestamp.DateTime)\r\n                .AddAudio(new Uri(\"ms-winsoundevent:Notification.IM\"));\r\n\r\n            if (GetToastThumbnail(message, out var width, out var height, out var proxyUrl) &&\r\n                !Path.GetFileName(proxyUrl).StartsWith(\"SPOILER_\", StringComparison.InvariantCultureIgnoreCase))\r\n            {\r\n                Drawing.ScaleProportions(ref width, ref height, 728, 360);\r\n\r\n                var uri = new UriBuilder(proxyUrl);\r\n                var query = HttpUtility.ParseQueryString(uri.Query);\r\n                query[\"format\"] = \"jpeg\";\r\n                query[\"width\"] = ((int)width).ToString(CultureInfo.InvariantCulture);\r\n                query[\"height\"] = ((int)height).ToString(CultureInfo.InvariantCulture);\r\n                uri.Query = query.ToString();\r\n\r\n                builder.AddHeroImage(uri.Uri);\r\n            }\r\n\r\n            var toastContent = builder.GetToastContent();\r\n\r\n            var doc = new XmlDocument();\r\n            doc.LoadXml(toastContent.GetContent());\r\n\r\n            return new ToastNotification(doc)\r\n            {\r\n                NotificationMirroring = NotificationMirroring.Allowed,\r\n                Tag = message.Id.ToString(),\r\n                Group = message.Channel.Id.ToString(CultureInfo.InvariantCulture),\r\n                SuppressPopup = isSuppressed\r\n            };\r\n        }\r\n\r\n        private static bool GetToastThumbnail(DiscordMessage message, out double width, out double height, out string proxyUrl)\r\n        {\r\n            width = 0;\r\n            height = 0;\r\n            proxyUrl = null;\r\n\r\n            var attach = message.Attachments.FirstOrDefault(a => a.Height != 0);\r\n            var embed = message.Embeds.FirstOrDefault(e => e.Thumbnail != null || e.Image != null || e.Video != null);\r\n            if (attach != null && attach.Width != null)\r\n            {\r\n                width = attach.Width.Value;\r\n                height = attach.Height.Value;\r\n                proxyUrl = attach.ProxyUrl;\r\n                return true;\r\n            }\r\n            else if (embed != null)\r\n            {\r\n                width = embed.Thumbnail?.Width ?? embed.Image?.Width ?? embed.Video.Width;\r\n                height = embed.Thumbnail?.Height ?? embed.Image?.Height ?? embed.Video.Height;\r\n                proxyUrl = (embed.Thumbnail?.ProxyUrl.ToUri() ?? embed.Image?.ProxyUrl.ToUri() ?? embed.Video.Url).ToString();\r\n                return true;\r\n            }\r\n\r\n            return false;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal.Shared/SecondaryTileManager.cs",
    "content": "﻿using System;\nusing System.Collections.Concurrent;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing Windows.UI.Notifications;\nusing Windows.UI.StartScreen;\n\nnamespace Unicord.Universal.Shared\n{\n    internal class SecondaryTileManager\n    {\n        private readonly DiscordClient _discord = null;\n        private readonly ConcurrentDictionary<ulong, SecondaryTile> _tileStorage;\n\n        public SecondaryTileManager(DiscordClient client)\n        {\n            _discord = client;\n            _tileStorage = new ConcurrentDictionary<ulong, SecondaryTile>();\n        }\n\n        public void AddAndUpdateTile(DiscordChannel channel, SecondaryTile tile)\n        {\n            _tileStorage[channel.Id] = tile;\n            ClearTileNotifications(channel, tile);\n        }\n\n        public async Task InitialiseAsync()\n        {\n            var tiles = await SecondaryTile.FindAllAsync(\"App\");\n            foreach (var tile in tiles)\n            {\n                var id = tile.TileId;\n                if (!id.Contains('_'))\n                    continue;\n                if (!ulong.TryParse(id.Substring(id.IndexOf('_')), out var ul))\n                    continue;\n                if (!_discord.TryGetCachedChannel(ul, out var channel))\n                    continue;\n\n                _tileStorage[ul] = tile;\n            }\n        }\n\n        public Task HandleMessageAsync(DiscordClient client, DiscordMessage message)\n        {\n            if (_tileStorage.TryGetValue(message.Channel.Id, out var tile))\n            {\n                var updater = TileUpdateManager.CreateTileUpdaterForSecondaryTile(tile.TileId);\n                var tileNotification = NotificationUtils.CreateTileNotificationForMessage(client, message);\n                updater.EnableNotificationQueue(true);\n                updater.Update(tileNotification);\n            }\n\n            return Task.CompletedTask;\n        }\n\n        public Task HandleAcknowledgeAsync(DiscordChannel channel)\n        {\n            if (_tileStorage.TryGetValue(channel.Id, out var tile))\n            {\n                ClearTileNotifications(channel, tile);\n            }\n\n            return Task.CompletedTask;\n        }\n\n        public static void ClearTileNotifications(DiscordChannel channel, SecondaryTile tile)\n        {\n            var updater = TileUpdateManager.CreateTileUpdaterForSecondaryTile(tile.TileId);\n            var tileNotification = NotificationUtils.CreateTileNotificationForChannel(channel);\n            updater.EnableNotificationQueue(false);\n            updater.Update(tileNotification);\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal.Shared/TileManager.cs",
    "content": "﻿using System;\r\nusing System.Collections.Generic;\r\nusing System.Linq;\r\nusing System.Threading;\r\nusing System.Threading.Tasks;\r\nusing DSharpPlus;\r\nusing DSharpPlus.Entities;\r\nusing Unicord.Universal.Extensions;\r\nusing Windows.UI.Notifications;\r\n\r\nnamespace Unicord.Universal.Shared\r\n{\r\n    internal class TileManager\r\n    {\r\n        private readonly DiscordClient _discord = null;\r\n        private readonly TileUpdater _tileUpdater = null;\r\n        private readonly List<DiscordMessage> _currentUnreads = null;\r\n        private readonly SemaphoreSlim _semaphore;\r\n\r\n        public TileManager(DiscordClient client)\r\n        {\r\n            _discord = client;\r\n            _tileUpdater = TileUpdateManager.CreateTileUpdaterForApplication(\"App\");\r\n            _currentUnreads = new List<DiscordMessage>();\r\n            _semaphore = new SemaphoreSlim(1, 1);\r\n        }\r\n\r\n        public async Task InitialiseAsync()\r\n        {\r\n            await _semaphore.WaitAsync();\r\n\r\n            try\r\n            {\r\n                await foreach (var msg in this.FetchUnreadMessages())\r\n                    _currentUnreads.Add(msg);\r\n\r\n                Update();\r\n            }\r\n            finally\r\n            {\r\n                _semaphore.Release();\r\n            }\r\n        }\r\n\r\n        public async Task HandleMessageAsync(DiscordMessage message)\r\n        {\r\n            await _semaphore.WaitAsync();\r\n\r\n            try\r\n            {\r\n                _currentUnreads.RemoveAll(m => m.Channel == message.Channel);\r\n                _currentUnreads.Insert(0, message);\r\n\r\n                Update();\r\n            }\r\n            finally\r\n            {\r\n                _semaphore.Release();\r\n            }\r\n        }\r\n\r\n        public async Task HandleAcknowledgeAsync(DiscordChannel channel)\r\n        {\r\n            await _semaphore.WaitAsync();\r\n\r\n            try\r\n            {\r\n                _currentUnreads.RemoveAll(m => m.Channel == channel);\r\n\r\n                Update();\r\n            }\r\n            finally\r\n            {\r\n                _semaphore.Release();\r\n            }\r\n        }\r\n\r\n        private void Update()\r\n        {\r\n            //_tileUpdater.EnableNotificationQueue(true);\r\n            _tileUpdater.Clear();\r\n\r\n            foreach (var message in _currentUnreads.OrderByDescending(d => d.CreationTimestamp).Take(5))\r\n            {\r\n                var tileContent = NotificationUtils.CreateTileNotificationForMessage(_discord, message);\r\n                _tileUpdater.Update(tileContent);\r\n            }\r\n        }\r\n\r\n        private async IAsyncEnumerable<DiscordMessage> FetchUnreadMessages()\r\n        {\r\n            var count = 0;\r\n            foreach (var (_, item) in _discord.PrivateChannels)\r\n            {\r\n                if (!item.IsUnread())\r\n                    continue;\r\n\r\n                count++;\r\n                if (count > 5)\r\n                    break;\r\n\r\n                var messages = await item.GetMessagesAroundAsync(item.ReadState.LastMessageId, 5);\r\n                foreach (var msg in messages)\r\n                    yield return msg;\r\n            }\r\n\r\n            var mentions = await _discord.GetMentionsAsync(5);\r\n            foreach (var mention in mentions)\r\n                yield return mention;\r\n        }\r\n    }\r\n}\r\n"
  },
  {
    "path": "Unicord.Universal.Shared/ToastManager.cs",
    "content": "﻿using System.Linq;\nusing DSharpPlus;\nusing DSharpPlus.Entities;\nusing Windows.UI.Notifications;\n\nnamespace Unicord.Universal.Shared\n{\n    internal class ToastManager\n    {\n        private ToastNotifier _toastNotifier = null;\n        private ToastNotificationHistory _toastHistory;\n\n        public ToastManager()\n        {\n#if WINDOWS_UWP\n            _toastNotifier = ToastNotificationManager.CreateToastNotifier();\n#else\n            _toastNotifier = ToastNotificationManager.CreateToastNotifier(\"App\");\n#endif\n            _toastHistory = ToastNotificationManager.History;\n        }\n\n        public void HandleMessage(DiscordClient client, DiscordMessage message, bool isSuppressed)\n        {\n            var notification = NotificationUtils.CreateToastNotificationForMessage(client, message, isSuppressed);\n            _toastNotifier.Show(notification);\n        }\n\n        public void HandleMessageUpdated(DiscordClient client, DiscordMessage message)\n        {\n            var existingToast = _toastHistory.GetHistory().FirstOrDefault(t => t.Tag == message.Id.ToString());\n            if (existingToast == null) return;\n\n            var notification = NotificationUtils.CreateToastNotificationForMessage(client, message, true);\n            _toastNotifier.Show(notification);\n        }\n\n        public void HandleAcknowledge(DiscordChannel channel)\n        {\n            if (channel == null)\n                return;\n\n            _toastHistory.RemoveGroup(channel.Id.ToString(), \"App\");\n        }\n    }\n}\n"
  },
  {
    "path": "Unicord.Universal.Shared/Unicord.Universal.Shared.projitems",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Project xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\r\n  <PropertyGroup>\r\n    <MSBuildAllProjects Condition=\"'$(MSBuildVersion)' == '' Or '$(MSBuildVersion)' &lt; '16.0'\">$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>\r\n    <HasSharedItems>true</HasSharedItems>\r\n    <SharedGUID>118f9d67-9235-4fc6-bf23-9abe0cd693da</SharedGUID>\r\n  </PropertyGroup>\r\n  <PropertyGroup Label=\"Configuration\">\r\n    <Import_RootNamespace>Unicord.Universal.Shared</Import_RootNamespace>\r\n  </PropertyGroup>\r\n  <ItemGroup>\r\n    <Compile Include=\"$(MSBuildThisFileDirectory)BadgeManager.cs\" />\r\n    <Compile Include=\"$(MSBuildThisFileDirectory)Constants.cs\" />\r\n    <Compile Include=\"$(MSBuildThisFileDirectory)Constants.pub.cs\" />\r\n    <Compile Include=\"$(MSBuildThisFileDirectory)Extensions.cs\" />\r\n    <Compile Include=\"$(MSBuildThisFileDirectory)MutedExtensions.cs\" />\r\n    <Compile Include=\"$(MSBuildThisFileDirectory)SecondaryTileManager.cs\" />\r\n    <Compile Include=\"$(MSBuildThisFileDirectory)TileManager.cs\" />\r\n    <Compile Include=\"$(MSBuildThisFileDirectory)ToastManager.cs\" />\r\n    <Compile Include=\"$(MSBuildThisFileDirectory)NotificationUtils.cs\" />\r\n  </ItemGroup>\r\n</Project>"
  },
  {
    "path": "Unicord.Universal.Shared/Unicord.Universal.Shared.shproj",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup Label=\"Globals\">\n    <ProjectGuid>118f9d67-9235-4fc6-bf23-9abe0cd693da</ProjectGuid>\n    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>\n  </PropertyGroup>\n  <Import Project=\"$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props\" Condition=\"Exists('$(MSBuildExtensionsPath)\\$(MSBuildToolsVersion)\\Microsoft.Common.props')\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.Default.props\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.Common.props\" />\n  <PropertyGroup />\n  <Import Project=\"Unicord.Universal.Shared.projitems\" Label=\"Shared\" />\n  <Import Project=\"$(MSBuildExtensionsPath32)\\Microsoft\\VisualStudio\\v$(VisualStudioVersion)\\CodeSharing\\Microsoft.CodeSharing.CSharp.targets\" />\n</Project>\n"
  },
  {
    "path": "Unicord.sln",
    "content": "﻿\r\nMicrosoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio Version 17\r\nVisualStudioVersion = 17.0.31717.71\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Unicord.Universal\", \"Unicord.Universal\\Unicord.Universal.csproj\", \"{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Libraries\", \"Libraries\", \"{CCA36DCA-2EB5-487F-9F06-9B45323A457B}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"DSharpPlus\", \"Libraries\\DSharpPlus\\DSharpPlus\\DSharpPlus.csproj\", \"{0F4B3AF7-9320-41AE-82D0-3737949499C7}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"MomentSharp\", \"Libraries\\MomentSharp\\MomentSharp\\MomentSharp.csproj\", \"{8A4A933C-C579-4C36-9133-7D6721F99AEC}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Unicode\", \"Libraries\\unicode.net\\unicode\\Unicode.csproj\", \"{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"WamWooWam.Core\", \"Libraries\\WamWooWam.Core\\WamWooWam.Core\\WamWooWam.Core.csproj\", \"{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"DSharpPlus.Rest\", \"Libraries\\DSharpPlus\\DSharpPlus.Rest\\DSharpPlus.Rest.csproj\", \"{C01B8589-13FE-4A6D-B159-6644977F58DE}\"\r\nEndProject\r\nProject(\"{D954291E-2A0B-460D-934E-DC6B0785DB48}\") = \"Unicord.Universal.Shared\", \"Unicord.Universal.Shared\\Unicord.Universal.Shared.shproj\", \"{118F9D67-9235-4FC6-BF23-9ABE0CD693DA}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Repository Items\", \"Repository Items\", \"{6163A08C-4E23-48B7-9ACF-C8E4A8429B33}\"\r\n\tProjectSection(SolutionItems) = preProject\r\n\t\t.gitignore = .gitignore\r\n\t\t.gitmodules = .gitmodules\r\n\t\tazure-pipelines.yml = azure-pipelines.yml\r\n\t\tnuget.config = nuget.config\r\n\t\tREADME.md = README.md\r\n\tEndProjectSection\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Unicord.Universal.Background\", \"Unicord.Universal.Background\\Unicord.Universal.Background.csproj\", \"{03B47FB9-96C6-414F-8D98-5BB6D08C6081}\"\r\nEndProject\r\nProject(\"{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}\") = \"Unicord.Universal.Package\", \"Unicord.Universal.Package\\Unicord.Universal.Package.wapproj\", \"{8E0255B7-B38E-423E-91C7-5637A01C2E13}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"DSharpPlus.Windows\", \"Libraries\\DSharpPlus\\DSharpPlus.Windows\\DSharpPlus.Windows.csproj\", \"{1B172F49-372A-4F15-8353-9BDABA6E2331}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"CommunityToolkit\", \"CommunityToolkit\", \"{3996E770-1EEA-4809-9229-9847A6E2BE20}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Discord\", \"Discord\", \"{B3B45B23-FC0D-4D4D-95D9-F25A6CC5CE45}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit\\Microsoft.Toolkit.csproj\", \"{58278E92-F06D-4585-A94A-ED3F98480E26}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.HighPerformance\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.HighPerformance\\Microsoft.Toolkit.HighPerformance.csproj\", \"{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Mvvm\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Mvvm\\Microsoft.Toolkit.Mvvm.csproj\", \"{BF8668A2-00B3-4A93-9051-F0972B105BB5}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Mvvm.SourceGenerators\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Mvvm.SourceGenerators\\Microsoft.Toolkit.Mvvm.SourceGenerators.csproj\", \"{65FE0171-8323-42EE-BCBC-E8C325F971A7}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Uwp\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp\\Microsoft.Toolkit.Uwp.csproj\", \"{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Uwp.UI.Controls\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls\\Microsoft.Toolkit.Uwp.UI.Controls.csproj\", \"{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Uwp.UI.Behaviors\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Behaviors\\Microsoft.Toolkit.Uwp.UI.Behaviors.csproj\", \"{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Diagnostics\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Diagnostics\\Microsoft.Toolkit.Diagnostics.csproj\", \"{76F89522-CA28-458D-801D-947AB033A758}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Uwp.UI.Controls.Media\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls.Media\\Microsoft.Toolkit.Uwp.UI.Controls.Media.csproj\", \"{43BD2A36-9E12-4788-80AE-2377E41E6D05}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Uwp.UI.Controls.Primitives\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls.Primitives\\Microsoft.Toolkit.Uwp.UI.Controls.Primitives.csproj\", \"{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Uwp.UI.Controls.Input\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls.Input\\Microsoft.Toolkit.Uwp.UI.Controls.Input.csproj\", \"{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Uwp.UI.Media\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Media\\Microsoft.Toolkit.Uwp.UI.Media.csproj\", \"{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Uwp.UI.Controls.Core\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls.Core\\Microsoft.Toolkit.Uwp.UI.Controls.Core.csproj\", \"{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Uwp.UI.Animations\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Animations\\Microsoft.Toolkit.Uwp.UI.Animations.csproj\", \"{70274A56-341B-490D-8CEB-5BF6E9B819AB}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Uwp.UI\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI\\Microsoft.Toolkit.Uwp.UI.csproj\", \"{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"Microsoft.Toolkit.Uwp.UI.Controls.Layout\", \"Libraries\\WindowsCommunityToolkit\\Microsoft.Toolkit.Uwp.UI.Controls.Layout\\Microsoft.Toolkit.Uwp.UI.Controls.Layout.csproj\", \"{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}\"\r\nEndProject\r\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"Unicord.Universal.Background.Tasks\", \"Unicord.Universal.Background.Tasks\\Unicord.Universal.Background.Tasks.csproj\", \"{69F44648-37CD-4B20-8814-2BAF85B4F624}\"\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|ARM = Debug|ARM\r\n\t\tDebug|ARM64 = Debug|ARM64\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|ARM = Release|ARM\r\n\t\tRelease|ARM64 = Release|ARM64\r\n\t\tRelease|x64 = Release|x64\r\n\t\tRelease|x86 = Release|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|ARM.ActiveCfg = Debug|ARM\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|ARM.Build.0 = Debug|ARM\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|ARM.Deploy.0 = Debug|ARM\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|ARM64.ActiveCfg = Debug|ARM64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|ARM64.Build.0 = Debug|ARM64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|ARM64.Deploy.0 = Debug|ARM64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|x64.Deploy.0 = Debug|x64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Debug|x86.Deploy.0 = Debug|x86\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|ARM.ActiveCfg = Release|ARM\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|ARM.Build.0 = Release|ARM\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|ARM.Deploy.0 = Release|ARM\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|ARM64.ActiveCfg = Release|ARM64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|ARM64.Build.0 = Release|ARM64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|ARM64.Deploy.0 = Release|ARM64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|x64.Build.0 = Release|x64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|x64.Deploy.0 = Release|x64\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|x86.Build.0 = Release|x86\r\n\t\t{67FAEA09-9D99-4ADC-A6C3-610702B7A3DA}.Release|x86.Deploy.0 = Release|x86\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Release|x64.Build.0 = Release|x64\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15}.Release|x86.Build.0 = Release|x86\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Debug|ARM.ActiveCfg = Debug|ARM\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Debug|ARM.Build.0 = Debug|ARM\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Debug|ARM64.ActiveCfg = Debug|ARM64\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Debug|ARM64.Build.0 = Debug|ARM64\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Release|ARM.ActiveCfg = Release|ARM\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Release|ARM.Build.0 = Release|ARM\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Release|ARM64.ActiveCfg = Release|ARM64\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Release|ARM64.Build.0 = Release|ARM64\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Release|x64.Build.0 = Release|x64\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{03B47FB9-96C6-414F-8D98-5BB6D08C6081}.Release|x86.Build.0 = Release|x86\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|ARM.ActiveCfg = Debug|ARM\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|ARM.Build.0 = Debug|ARM\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|ARM.Deploy.0 = Debug|ARM\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|ARM64.ActiveCfg = Debug|ARM64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|ARM64.Build.0 = Debug|ARM64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|ARM64.Deploy.0 = Debug|ARM64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|x64.Deploy.0 = Debug|x64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Debug|x86.Deploy.0 = Debug|x86\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|ARM.ActiveCfg = Release|ARM\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|ARM.Build.0 = Release|ARM\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|ARM.Deploy.0 = Release|ARM\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|ARM64.ActiveCfg = Release|ARM64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|ARM64.Build.0 = Release|ARM64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|ARM64.Deploy.0 = Release|ARM64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|x64.Build.0 = Release|x64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|x64.Deploy.0 = Release|x64\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|x86.Build.0 = Release|x86\r\n\t\t{8E0255B7-B38E-423E-91C7-5637A01C2E13}.Release|x86.Deploy.0 = Release|x86\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Debug|ARM.ActiveCfg = Debug|ARM\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Debug|ARM.Build.0 = Debug|ARM\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Debug|ARM64.ActiveCfg = Debug|ARM64\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Debug|ARM64.Build.0 = Debug|ARM64\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Release|ARM.ActiveCfg = Release|ARM\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Release|ARM.Build.0 = Release|ARM\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Release|ARM64.ActiveCfg = Release|ARM64\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Release|ARM64.Build.0 = Release|ARM64\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Release|x64.Build.0 = Release|x64\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331}.Release|x86.Build.0 = Release|x86\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Debug|ARM.ActiveCfg = Debug|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Debug|ARM.Build.0 = Debug|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Debug|ARM64.ActiveCfg = Debug|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Debug|ARM64.Build.0 = Debug|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Release|ARM.ActiveCfg = Release|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Release|ARM.Build.0 = Release|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Release|ARM64.ActiveCfg = Release|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Release|ARM64.Build.0 = Release|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Debug|ARM.ActiveCfg = Debug|ARM\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Debug|ARM.Build.0 = Debug|ARM\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Debug|ARM64.ActiveCfg = Debug|ARM64\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Debug|ARM64.Build.0 = Debug|ARM64\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Debug|x64.ActiveCfg = Debug|x64\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Debug|x64.Build.0 = Debug|x64\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Debug|x86.ActiveCfg = Debug|x86\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Debug|x86.Build.0 = Debug|x86\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Release|ARM.ActiveCfg = Release|ARM\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Release|ARM.Build.0 = Release|ARM\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Release|ARM64.ActiveCfg = Release|ARM64\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Release|ARM64.Build.0 = Release|ARM64\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Release|x64.ActiveCfg = Release|x64\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Release|x64.Build.0 = Release|x64\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Release|x86.ActiveCfg = Release|x86\r\n\t\t{69F44648-37CD-4B20-8814-2BAF85B4F624}.Release|x86.Build.0 = Release|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(NestedProjects) = preSolution\r\n\t\t{0F4B3AF7-9320-41AE-82D0-3737949499C7} = {B3B45B23-FC0D-4D4D-95D9-F25A6CC5CE45}\r\n\t\t{8A4A933C-C579-4C36-9133-7D6721F99AEC} = {CCA36DCA-2EB5-487F-9F06-9B45323A457B}\r\n\t\t{C5CA3873-BF6A-4711-ABED-F9D27D37FFB2} = {CCA36DCA-2EB5-487F-9F06-9B45323A457B}\r\n\t\t{6E8E3C2C-A7D2-4971-A97D-FA831E3ECF15} = {CCA36DCA-2EB5-487F-9F06-9B45323A457B}\r\n\t\t{C01B8589-13FE-4A6D-B159-6644977F58DE} = {B3B45B23-FC0D-4D4D-95D9-F25A6CC5CE45}\r\n\t\t{1B172F49-372A-4F15-8353-9BDABA6E2331} = {B3B45B23-FC0D-4D4D-95D9-F25A6CC5CE45}\r\n\t\t{3996E770-1EEA-4809-9229-9847A6E2BE20} = {CCA36DCA-2EB5-487F-9F06-9B45323A457B}\r\n\t\t{B3B45B23-FC0D-4D4D-95D9-F25A6CC5CE45} = {CCA36DCA-2EB5-487F-9F06-9B45323A457B}\r\n\t\t{58278E92-F06D-4585-A94A-ED3F98480E26} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{F4C0A3F5-4813-4086-9CF4-D62C92B70C24} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{BF8668A2-00B3-4A93-9051-F0972B105BB5} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{65FE0171-8323-42EE-BCBC-E8C325F971A7} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{805F80DF-75C6-4C2F-8FD9-B47F6D0DF5A3} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{099B60FD-DAD6-4648-9DE2-8DBF9DCD9557} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{D4FF799D-0DF2-495A-ADC9-3BBC4AEF8971} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{76F89522-CA28-458D-801D-947AB033A758} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{43BD2A36-9E12-4788-80AE-2377E41E6D05} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{84AB7DC5-95C9-4CF8-A370-D077E9E9EF1A} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{AF1BE4E9-E2E1-4729-B076-B3725D8E21EE} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{75F9EE44-3EFA-47BC-AEDD-351B9834A0AF} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{E9FAABFB-D726-42C1-83C1-CB46A29FEA81} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{70274A56-341B-490D-8CEB-5BF6E9B819AB} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{BCEF3A53-5965-49EC-9C7D-E700EBFB93B6} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\t\t{A26CBE8E-C713-4E2B-96DD-721E7EB7839F} = {3996E770-1EEA-4809-9229-9847A6E2BE20}\r\n\tEndGlobalSection\r\n\tGlobalSection(ExtensibilityGlobals) = postSolution\r\n\t\tSolutionGuid = {9C626B6A-B15B-4ECF-9695-05B4FE30973C}\r\n\tEndGlobalSection\r\n\tGlobalSection(SharedMSBuildProjectFiles) = preSolution\r\n\t\tUnicord.Universal.Shared\\Unicord.Universal.Shared.projitems*{03b47fb9-96c6-414f-8d98-5bb6d08c6081}*SharedItemsImports = 5\r\n\t\tUnicord.Universal.Shared\\Unicord.Universal.Shared.projitems*{118f9d67-9235-4fc6-bf23-9abe0cd693da}*SharedItemsImports = 13\r\n\t\tUnicord.Universal.Shared\\Unicord.Universal.Shared.projitems*{67faea09-9d99-4adc-a6c3-610702b7a3da}*SharedItemsImports = 4\r\n\t\tUnicord.Universal.Shared\\Unicord.Universal.Shared.projitems*{69f44648-37cd-4b20-8814-2baf85b4f624}*SharedItemsImports = 4\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "azure-pipelines.yml",
    "content": "# Universal Windows Platform\n# Build a Universal Windows Platform project using Visual Studio.\n# Add steps that test and distribute an app, save build artifacts, and more:\n# https://aka.ms/yaml\n\ntrigger:\n- master\n\npool:\n  vmImage: 'windows-latest'\n\nvariables:\n  solution: '**/Unicord.sln'\n  buildPlatform: 'x86|x64'\n  buildConfiguration: 'Release'\n  appxPackageDir: '$(build.artifactStagingDirectory)\\AppxPackages\\\\'\n\nsteps:\n- checkout: self\n  submodules: true\n\n- task: DownloadSecureFile@1\n  name: signingCert\n  displayName: 'Download CA certificate'\n  inputs:\n    secureFile: 'Unicord.Universal_TemporaryKey.pfx'\n\n- task: NuGetToolInstaller@1\n\n- task: NuGetCommand@2\n  inputs:\n    restoreSolution: '$(solution)'\n\n- task: VSBuild@1\n  inputs:\n    platform: 'x86'\n    solution: '$(solution)'\n    configuration: '$(buildConfiguration)'\n    msbuildArgs: '/p:AppxBundlePlatforms=\"$(buildPlatform)\"\n                  /p:AppxPackageDir=\"$(appxPackageDir)\" \n                  /p:AppxBundle=Always\n                  /p:UapAppxPackageBuildMode=SideloadOnly\n                  /p:AppxPackageSigningEnabled=true\n                  /p:PackageCertificateThumbprint=\"\" \n                  /p:PackageCertificateKeyFile=\"$(signingCert.secureFilePath)\"\n                  /p:UseSubFolderForOutputDirDuringMultiPlatformBuild=false'\n\n# - task: CopyFiles@2\n#   displayName: 'Copy Files to: $(build.artifactstagingdirectory)'\n#   inputs:\n#     SourceFolder: '$(system.defaultworkingdirectory)'\n#     Contents: '**\\bin\\$(BuildConfiguration)\\**'\n#     TargetFolder: '$(build.artifactstagingdirectory)'\n\n- task: PublishBuildArtifacts@1\n  displayName: 'Publish Artifact: drop'\n  inputs:\n    PathtoPublish: '$(build.artifactstagingdirectory)'"
  },
  {
    "path": "global.json",
    "content": "{\n  \"msbuild-sdks\": {\n    \"MSBuild.Sdk.Extras\": \"3.0.22\"\n  }\n}"
  },
  {
    "path": "nuget.config",
    "content": "<configuration>\n  <packageSources>\n    <clear />\n    <add key=\"nuget.org\" value=\"https://api.nuget.org/v3/index.json\" protocolVersion=\"3\" />    \n    <add key=\"Unicord Local\" value=\"./Libraries/LocalPackages\" />\n  </packageSources>\n  <disabledPackageSources>\n    <clear />\n  </disabledPackageSources>\n</configuration>"
  }
]