diff --git a/docs/en/mkdocs.yml b/docs/en/mkdocs.yml index e9a639d0b..2eedb2960 100644 --- a/docs/en/mkdocs.yml +++ b/docs/en/mkdocs.yml @@ -6,7 +6,7 @@ theme: name: material custom_dir: ../en/overrides palette: - - media: "(prefers-color-scheme)" + - media: (prefers-color-scheme) toggle: icon: material/lightbulb-auto name: Switch to light mode @@ -27,7 +27,6 @@ theme: features: - content.code.annotate - content.code.copy - # - content.code.select - content.footnote.tooltips - content.tabs.link - content.tooltips @@ -35,7 +34,6 @@ theme: - navigation.indexes - navigation.instant - navigation.instant.prefetch - # - navigation.instant.preview - navigation.instant.progress - navigation.path - navigation.tabs @@ -46,7 +44,6 @@ theme: - search.share - search.suggest - toc.follow - icon: repo: fontawesome/brands/github-alt logo: img/icon-white.svg @@ -55,11 +52,7 @@ theme: repo_name: fastapi/fastapi repo_url: https://github.com/fastapi/fastapi plugins: - # Material for MkDocs - search: - # Configured in mkdocs.insiders.yml - # social: - # Other plugins + search: null macros: include_yaml: - external_links: ../en/data/external_links.yml @@ -103,7 +96,6 @@ plugins: signature_crossrefs: true show_symbol_type_heading: true show_symbol_type_toc: true - nav: - FastAPI: index.md - features.md @@ -258,33 +250,27 @@ nav: - benchmarks.md - management.md - release-notes.md - markdown_extensions: - # Python Markdown - abbr: - attr_list: - footnotes: - md_in_html: - tables: + abbr: null + attr_list: null + footnotes: null + md_in_html: null + tables: null toc: permalink: true - - # Python Markdown Extensions - pymdownx.betterem: - pymdownx.caret: + pymdownx.betterem: null + pymdownx.caret: null pymdownx.highlight: line_spans: __span - pymdownx.inlinehilite: - pymdownx.keys: - pymdownx.mark: + pymdownx.inlinehilite: null + pymdownx.keys: null + pymdownx.mark: null pymdownx.superfences: custom_fences: - name: mermaid class: mermaid - format: !!python/name:pymdownx.superfences.fence_code_format - pymdownx.tilde: - - # pymdownx blocks + format: !!python/name:pymdownx.superfences.fence_code_format '' + pymdownx.tilde: null pymdownx.blocks.admonition: types: - note @@ -295,17 +281,13 @@ markdown_extensions: - tip - hint - warning - # Custom types - info - check - pymdownx.blocks.details: + pymdownx.blocks.details: null pymdownx.blocks.tab: - alternate_style: True - - # Other extensions - mdx_include: - markdown_include_variants: - + alternate_style: true + mdx_include: null + markdown_include_variants: null extra: analytics: provider: google @@ -313,16 +295,14 @@ extra: feedback: title: Was this page helpful? ratings: - - icon: material/emoticon-happy-outline - name: This page was helpful - data: 1 - note: >- - Thanks for your feedback! - - icon: material/emoticon-sad-outline - name: This page could be improved - data: 0 - note: >- - Thanks for your feedback! + - icon: material/emoticon-happy-outline + name: This page was helpful + data: 1 + note: Thanks for your feedback! + - icon: material/emoticon-sad-outline + name: This page could be improved + data: 0 + note: Thanks for your feedback! social: - icon: fontawesome/brands/github-alt link: https://github.com/fastapi/fastapi @@ -338,7 +318,6 @@ extra: link: https://medium.com/@tiangolo - icon: fontawesome/solid/globe link: https://tiangolo.com - alternate: - link: / name: en - English @@ -366,6 +345,8 @@ extra: name: ja - 日本語 - link: /ko/ name: ko - 한국어 + - link: /ml/ + name: ml - മലയാളം - link: /nl/ name: nl - Nederlands - link: /pl/ @@ -390,14 +371,11 @@ extra: name: zh-hant - 繁體中文 - link: /em/ name: 😉 - extra_css: - css/termynal.css - css/custom.css - extra_javascript: - js/termynal.js - js/custom.js - hooks: - ../../scripts/mkdocs_hooks.py diff --git a/docs/ml/docs/index.md b/docs/ml/docs/index.md new file mode 100644 index 000000000..9a4b4d95d --- /dev/null +++ b/docs/ml/docs/index.md @@ -0,0 +1,496 @@ +# ഫാസ്റ്റ് API + + + +
++ ഫാസ്റ്റ് API ഫ്രെയിംവർക്ക്, ഉയർന്ന പ്രകടനം, പഠിക്കാൻ എളുപ്പം, നിർമ്മാണത്തിന് തയ്യാറാണ് +
+ + +--- + +**ഡോക്യുമെൻ്റേഷൻ**: https://fastapi.tiangolo.com + +**സോഴ്സ് കോഡ്**: https://github.com/fastapi/fastapi + +--- + + +ഫാസ്റ്റ് API ഒരു ആധുനികവും വേഗതയേറിയതുമായ (ഉയർന്ന പ്രകടനക്ഷമതയുള്ള) വെബ് ഫ്രെയിംവർക്ക് ആണ്, ഇത് സ്റ്റാൻഡേർഡ് പൈത്തൺ ടൈപ്പ് ഹിന്റ്സ് അടിസ്ഥാനമാക്കി പൈത്തണിൽ APIകൾ നിർമ്മിക്കാൻ വികസിപ്പിച്ചെടുത്തിരിക്കുന്നു. + +പ്രധാന സവിശേഷതകൾ ഇവയാണ്: + +* **വേഗതയുള്ള**: വളരെ ഉയർന്ന പ്രകടനം, **NodeJS**, **Go** എന്നിവയ്ക്ക് തുല്യമായി (സ്റ്റാർലെറ്റിനും പൈഡൻ്റിക്കിനും നന്ദി). [ ലഭ്യമായ ഏറ്റവും വേഗമേറിയ പൈത്തൺ ഫ്രെയിംവർക്കുകളിൽ ഒന്നു ](#പർഫോർമൻസ്). +* **വേഗത്തിൽ കോഡ് ചെയ്യാം**: സവിശേഷതകൾ വികസിപ്പിക്കുന്നതിനുള്ള വേഗത ഏകദേശം 200% മുതൽ 300% വരെ വർദ്ധിപ്പിക്കുന്നു. * +* **കുറവ് ബഗുകൾ**: മാനുഷിക (ഡെവലപ്പർ) പ്രേരിത പിശകുകളുടെ ഏകദേശം 40% കുറയ്ക്കുന്നു. * +* **അവബോധജന്യമായ**: മികച്ച എഡിറ്റർ പിന്തുണ. പൂർത്തീകരണം എല്ലായിടത്തും. ചുരുങ്ങിയ സമയത്തിൽ ഡീബഗ്ഗിംഗ്. +* **എളുപ്പം**: എളുപ്പത്തിൽ ഉപയോഗിക്കാനും പഠിക്കാനും രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത്. കുറഞ്ഞ സമയം കൊണ്ട് ഡോക്യുമെന്റേഷൻ വായിക്കാം. +* **ലഘു**: കോഡ് ഡ്യൂപ്ലിക്കേഷൻ കുറയ്ക്കുക. ഓരോ പാരാമീറ്റർ പ്രഖ്യാപനത്തിൽ നിന്നും ഒന്നിലധികം സവിശേഷതകൾ. കുറച്ച് ബഗുകൾ. +* **കരുത്തുള്ള**: ഓട്ടോമാറ്റിക് ഇൻ്ററാക്ടീവ് ഡോക്യുമെൻ്റേഷൻ ഉപയോഗിച്ച് നിർമ്മാണത്തിന് തയ്യാറായ കോഡ് ലഭിക്കും. +* **മാനദണ്ഡങ്ങൾ അടിസ്ഥാനമാക്കിയുള്ളത്**: API-കൾക്കുള്ള ഓപ്പൺ സ്റ്റാൻഡേർഡുകളെ അടിസ്ഥാനമാക്കി (പൂർണമായും പൊരുത്തപ്പെടുന്നു): ഓപ്പൺ API (മുമ്പ് സ്വാഗർ എന്നറിയപ്പെട്ടിരുന്നു) and JSON സ്കീമ. + +* പ്രൊഡക്ഷൻ ആപ്ലിക്കേഷനുകൾ വികസിപ്പിക്കുന്ന ഒരു ഇൻറേണൽ ഡെവലപ്മെൻറ് ടീമിലെ ടെസ്റ്റുകളെ അടിസ്ഥാനമാക്കിയുള്ള മൂല്യനിർണ്ണയം. " + +## Sponsors + + + +{% if sponsors %} +{% for sponsor in sponsors.gold -%} +async def
...fastapi dev main.py
കമാൻഡിനെക്കുറിച്ച്...ഇ-മെയിൽ-വാലിഡേറ്റർ
- ഇ-മെയിൽ വാലിഡേഷനായി.
+
+സ്റ്റാർലെറ്റ് ഉപയോഗിച്ചത്:
+
+* httpx
- `TestClient` ഉപയോഗിക്കണമെങ്കിൽ ആവശ്യമാണ്.
+* jinja2
- ഡിഫോൾട്ട് ടെംപ്ലേറ്റ് കോൺഫിഗറേഷൻ ഉപയോഗിക്കണമെങ്കിൽ ആവശ്യമാണ്.
+* python-multipart
- `request.form()` ഉപയോഗിച്ച് "പാഴ്സിംഗ്" എന്ന ഫോമിനെ പിന്തുണയ്ക്കണമെങ്കിൽ ആവശ്യമാണ്.
+
+ഫാസ്റ്റ് API / സ്റ്റാർലെറ്റ് ഉപയോഗിക്കുന്നത്:
+
+* uvicorn
- നിങ്ങളുടെ ആപ്ലിക്കേഷൻ ലോഡ് ചെയ്ത് സെർവ് ചെയ്യുന്ന സെർവറിനുള്ളത്. ഇതിൽ `uvicorn[standard]` ഉൾപ്പെടുന്നു, ഉയർന്ന പ്രകടനമുള്ള സെർവിംഗിന് ആവശ്യമായ ചില ആശ്രിതത്വങ്ങൾ (ഉദാ. `uvloop`) ഇതിൽ ഉൾപ്പെടുന്നു.
+* `fastapi-cli` - `fastapi` കമാൻഡ് നൽകാൻ.
+
+### `സ്റ്റാൻഡേർഡ്` ആശ്രിതത്വങ്ങൾ ഇല്ലാതെ
+
+`സ്റ്റാൻഡേർഡ്` ഓപ്ഷണൽ ആശ്രിതത്വങ്ങൾ ഉൾപ്പെടുത്താൻ നിങ്ങൾ ആഗ്രഹിക്കുന്നില്ലെങ്കിൽ, `pip install "fastapi[standard]"` എന്നതിന് പകരം `pip install fastapi` ഉപയോഗിച്ച് ഇൻസ്റ്റാൾ ചെയ്യാം.
+
+### അധിക ഓപ്ഷണൽ ആശ്രിതത്വങ്ങൾ
+
+നിങ്ങൾ ഇൻസ്റ്റാൾ ചെയ്യാൻ ആഗ്രഹിക്കുന്ന ചില അധിക ആശ്രിതത്വങ്ങൾ.
+
+അധിക ഓപ്ഷണൽ പൈഡാന്റിക് ആശ്രിതത്വങ്ങൾ:
+
+* pydantic-settings
- ക്രമീകരണ മാനേജ്മെന്റിനായി.
+* pydantic-extra-types
- പൈഡന്റിക്കിനൊപ്പം ഉപയോഗിക്കേണ്ട എക്സ്ട്രാ തരങ്ങൾക്കായി.
+
+അധിക ഓപ്ഷണൽ ഫാസ്റ്റ് API ആശ്രിതത്വങ്ങൾ:
+
+* orjson
- `ORJSONResponse` ഉപയോഗിക്കണമെങ്കിൽ ആവശ്യമാണ്.
+* ujson
- `UJSONResponse` ഉപയോഗിക്കണമെങ്കിൽ ആവശ്യമാണ്.
+
+## ലൈസൻസ്
+
+ഈ പ്രോജക്റ്റ് MIT ലൈസൻസിന്റെ നിബന്ധനകൾക്ക് കീഴിലാണ് ലൈസൻസ് ചെയ്തിരിക്കുന്നത്.
diff --git a/docs/ml/mkdocs.yml b/docs/ml/mkdocs.yml
new file mode 100644
index 000000000..de18856f4
--- /dev/null
+++ b/docs/ml/mkdocs.yml
@@ -0,0 +1 @@
+INHERIT: ../en/mkdocs.yml
diff --git a/fastapi1/Scripts/Activate.ps1 b/fastapi1/Scripts/Activate.ps1
new file mode 100644
index 000000000..add57bcaa
--- /dev/null
+++ b/fastapi1/Scripts/Activate.ps1
@@ -0,0 +1,420 @@
+<#
+.Synopsis
+Activate a Python virtual environment for the current PowerShell session.
+
+.Description
+Pushes the python executable for a virtual environment to the front of the
+$Env:PATH environment variable and sets the prompt to signify that you are
+in a Python virtual environment. Makes use of the command line switches as
+well as the `pyvenv.cfg` file values present in the virtual environment.
+
+.Parameter VenvDir
+Path to the directory that contains the virtual environment to activate. The
+default value for this is the parent of the directory that the Activate.ps1
+script is located within.
+
+.Parameter Prompt
+The prompt prefix to display when this virtual environment is activated. By
+default, this prompt is the name of the virtual environment folder (VenvDir)
+surrounded by parentheses and followed by a single space (ie. '(.venv) ').
+
+.Example
+Activate.ps1
+Activates the Python virtual environment that contains the Activate.ps1 script.
+
+.Example
+Activate.ps1 -Verbose
+Activates the Python virtual environment that contains the Activate.ps1 script,
+and shows extra information about the activation as it executes.
+
+.Example
+Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv
+Activates the Python virtual environment located in the specified location.
+
+.Example
+Activate.ps1 -Prompt "MyPython"
+Activates the Python virtual environment that contains the Activate.ps1 script,
+and prefixes the current prompt with the specified string (surrounded in
+parentheses) while the virtual environment is active.
+
+.Notes
+On Windows, it may be required to enable this Activate.ps1 script by setting the
+execution policy for the user. You can do this by issuing the following PowerShell
+command:
+
+PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
+
+For more information on Execution Policies:
+https://go.microsoft.com/fwlink/?LinkID=135170
+
+#>
+Param(
+ [Parameter(Mandatory = $false)]
+ [String]
+ $VenvDir,
+ [Parameter(Mandatory = $false)]
+ [String]
+ $Prompt
+)
+
+<# Function declarations --------------------------------------------------- #>
+
+<#
+.Synopsis
+Remove all shell session elements added by the Activate script, including the
+addition of the virtual environment's Python executable from the beginning of
+the PATH variable.
+
+.Parameter NonDestructive
+If present, do not remove this function from the global namespace for the
+session.
+
+#>
+function global:deactivate ([switch]$NonDestructive) {
+ # Revert to original values
+
+ # The prior prompt:
+ if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) {
+ Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt
+ Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT
+ }
+
+ # The prior PYTHONHOME:
+ if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) {
+ Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME
+ Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME
+ }
+
+ # The prior PATH:
+ if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) {
+ Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH
+ Remove-Item -Path Env:_OLD_VIRTUAL_PATH
+ }
+
+ # Just remove the VIRTUAL_ENV altogether:
+ if (Test-Path -Path Env:VIRTUAL_ENV) {
+ Remove-Item -Path env:VIRTUAL_ENV
+ }
+
+ # Just remove VIRTUAL_ENV_PROMPT altogether.
+ if (Test-Path -Path Env:VIRTUAL_ENV_PROMPT) {
+ Remove-Item -Path env:VIRTUAL_ENV_PROMPT
+ }
+
+ # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether:
+ if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) {
+ Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force
+ }
+
+ # Leave deactivate function in the global namespace if requested:
+ if (-not $NonDestructive) {
+ Remove-Item -Path function:deactivate
+ }
+}
+
+<#
+.Description
+Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the
+given folder, and returns them in a map.
+
+For each line in the pyvenv.cfg file, if that line can be parsed into exactly
+two strings separated by `=` (with any amount of whitespace surrounding the =)
+then it is considered a `key = value` line. The left hand string is the key,
+the right hand is the value.
+
+If the value starts with a `'` or a `"` then the first and last character is
+stripped from the value before being captured.
+
+.Parameter ConfigDir
+Path to the directory that contains the `pyvenv.cfg` file.
+#>
+function Get-PyVenvConfig(
+ [String]
+ $ConfigDir
+) {
+ Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg"
+
+ # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue).
+ $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue
+
+ # An empty map will be returned if no config file is found.
+ $pyvenvConfig = @{ }
+
+ if ($pyvenvConfigPath) {
+
+ Write-Verbose "File exists, parse `key = value` lines"
+ $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath
+
+ $pyvenvConfigContent | ForEach-Object {
+ $keyval = $PSItem -split "\s*=\s*", 2
+ if ($keyval[0] -and $keyval[1]) {
+ $val = $keyval[1]
+
+ # Remove extraneous quotations around a string value.
+ if ("'""".Contains($val.Substring(0, 1))) {
+ $val = $val.Substring(1, $val.Length - 2)
+ }
+
+ $pyvenvConfig[$keyval[0]] = $val
+ Write-Verbose "Adding Key: '$($keyval[0])'='$val'"
+ }
+ }
+ }
+ return $pyvenvConfig
+}
+
+
+<# Begin Activate script --------------------------------------------------- #>
+
+# Determine the containing directory of this script
+$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition
+$VenvExecDir = Get-Item -Path $VenvExecPath
+
+Write-Verbose "Activation script is located in path: '$VenvExecPath'"
+Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)"
+Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)"
+
+# Set values required in priority: CmdLine, ConfigFile, Default
+# First, get the location of the virtual environment, it might not be
+# VenvExecDir if specified on the command line.
+if ($VenvDir) {
+ Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values"
+}
+else {
+ Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir."
+ $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/")
+ Write-Verbose "VenvDir=$VenvDir"
+}
+
+# Next, read the `pyvenv.cfg` file to determine any required value such
+# as `prompt`.
+$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir
+
+# Next, set the prompt from the command line, or the config file, or
+# just use the name of the virtual environment folder.
+if ($Prompt) {
+ Write-Verbose "Prompt specified as argument, using '$Prompt'"
+}
+else {
+ Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value"
+ if ($pyvenvCfg -and $pyvenvCfg['prompt']) {
+ Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'"
+ $Prompt = $pyvenvCfg['prompt'];
+ }
+ else {
+ Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virtual environment)"
+ Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'"
+ $Prompt = Split-Path -Path $venvDir -Leaf
+ }
+}
+
+Write-Verbose "Prompt = '$Prompt'"
+Write-Verbose "VenvDir='$VenvDir'"
+
+# Deactivate any currently active virtual environment, but leave the
+# deactivate function in place.
+deactivate -nondestructive
+
+# Now set the environment variable VIRTUAL_ENV, used by many tools to determine
+# that there is an activated venv.
+$env:VIRTUAL_ENV = $VenvDir
+
+if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
+
+ Write-Verbose "Setting prompt to '$Prompt'"
+
+ # Set the prompt to include the env name
+ # Make sure _OLD_VIRTUAL_PROMPT is global
+ function global:_OLD_VIRTUAL_PROMPT { "" }
+ Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT
+ New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt
+
+ function global:prompt {
+ Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
+ _OLD_VIRTUAL_PROMPT
+ }
+ $env:VIRTUAL_ENV_PROMPT = $Prompt
+}
+
+# Clear PYTHONHOME
+if (Test-Path -Path Env:PYTHONHOME) {
+ Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME
+ Remove-Item -Path Env:PYTHONHOME
+}
+
+# Add the venv to the PATH
+Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH
+$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH"
+
+# SIG # Begin signature block
+# MIIf2wYJKoZIhvcNAQcCoIIfzDCCH8gCAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBnL745ElCYk8vk
+# dBtMuQhLeWJ3ZGfzKW4DHCYzAn+QB6CCDi8wggawMIIEmKADAgECAhAIrUCyYNKc
+# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
+# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV
+# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z
+# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
+# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
+# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0
+# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr
+# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF
+# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F
+# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh
+# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ
+# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay
+# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI
+# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp
+# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro
+# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB
+# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+
+# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P
+# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk
+# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC
+# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v
+# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j
+# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED
+# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql
+# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF
+# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h
+# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw
+# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld
+# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw
+# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP
+# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE
+# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn
+# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji
+# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq
+# yK+p/pQd52MbOoZWeE4wggd3MIIFX6ADAgECAhAHHxQbizANJfMU6yMM0NHdMA0G
+# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
+# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
+# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjIwMTE3MDAwMDAwWhcNMjUwMTE1
+# MjM1OTU5WjB8MQswCQYDVQQGEwJVUzEPMA0GA1UECBMGT3JlZ29uMRIwEAYDVQQH
+# EwlCZWF2ZXJ0b24xIzAhBgNVBAoTGlB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9u
+# MSMwIQYDVQQDExpQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjCCAiIwDQYJKoZI
+# hvcNAQEBBQADggIPADCCAgoCggIBAKgc0BTT+iKbtK6f2mr9pNMUTcAJxKdsuOiS
+# YgDFfwhjQy89koM7uP+QV/gwx8MzEt3c9tLJvDccVWQ8H7mVsk/K+X+IufBLCgUi
+# 0GGAZUegEAeRlSXxxhYScr818ma8EvGIZdiSOhqjYc4KnfgfIS4RLtZSrDFG2tN1
+# 6yS8skFa3IHyvWdbD9PvZ4iYNAS4pjYDRjT/9uzPZ4Pan+53xZIcDgjiTwOh8VGu
+# ppxcia6a7xCyKoOAGjvCyQsj5223v1/Ig7Dp9mGI+nh1E3IwmyTIIuVHyK6Lqu35
+# 2diDY+iCMpk9ZanmSjmB+GMVs+H/gOiofjjtf6oz0ki3rb7sQ8fTnonIL9dyGTJ0
+# ZFYKeb6BLA66d2GALwxZhLe5WH4Np9HcyXHACkppsE6ynYjTOd7+jN1PRJahN1oE
+# RzTzEiV6nCO1M3U1HbPTGyq52IMFSBM2/07WTJSbOeXjvYR7aUxK9/ZkJiacl2iZ
+# I7IWe7JKhHohqKuceQNyOzxTakLcRkzynvIrk33R9YVqtB4L6wtFxhUjvDnQg16x
+# ot2KVPdfyPAWd81wtZADmrUtsZ9qG79x1hBdyOl4vUtVPECuyhCxaw+faVjumapP
+# Unwo8ygflJJ74J+BYxf6UuD7m8yzsfXWkdv52DjL74TxzuFTLHPyARWCSCAbzn3Z
+# Ily+qIqDAgMBAAGjggIGMIICAjAfBgNVHSMEGDAWgBRoN+Drtjv4XxGG+/5hewiI
+# ZfROQjAdBgNVHQ4EFgQUt/1Teh2XDuUj2WW3siYWJgkZHA8wDgYDVR0PAQH/BAQD
+# AgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMDMIG1BgNVHR8Ega0wgaowU6BRoE+GTWh0
+# dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNENvZGVTaWdu
+# aW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3JsMFOgUaBPhk1odHRwOi8vY3JsNC5k
+# aWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZT
+# SEEzODQyMDIxQ0ExLmNybDA+BgNVHSAENzA1MDMGBmeBDAEEATApMCcGCCsGAQUF
+# BwIBFhtodHRwOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwgZQGCCsGAQUFBwEBBIGH
+# MIGEMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wXAYIKwYB
+# BQUHMAKGUGh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0
+# ZWRHNENvZGVTaWduaW5nUlNBNDA5NlNIQTM4NDIwMjFDQTEuY3J0MAwGA1UdEwEB
+# /wQCMAAwDQYJKoZIhvcNAQELBQADggIBABxv4AeV/5ltkELHSC63fXAFYS5tadcW
+# TiNc2rskrNLrfH1Ns0vgSZFoQxYBFKI159E8oQQ1SKbTEubZ/B9kmHPhprHya08+
+# VVzxC88pOEvz68nA82oEM09584aILqYmj8Pj7h/kmZNzuEL7WiwFa/U1hX+XiWfL
+# IJQsAHBla0i7QRF2de8/VSF0XXFa2kBQ6aiTsiLyKPNbaNtbcucaUdn6vVUS5izW
+# OXM95BSkFSKdE45Oq3FForNJXjBvSCpwcP36WklaHL+aHu1upIhCTUkzTHMh8b86
+# WmjRUqbrnvdyR2ydI5l1OqcMBjkpPpIV6wcc+KY/RH2xvVuuoHjlUjwq2bHiNoX+
+# W1scCpnA8YTs2d50jDHUgwUo+ciwpffH0Riq132NFmrH3r67VaN3TuBxjI8SIZM5
+# 8WEDkbeoriDk3hxU8ZWV7b8AW6oyVBGfM06UgkfMb58h+tJPrFx8VI/WLq1dTqMf
+# ZOm5cuclMnUHs2uqrRNtnV8UfidPBL4ZHkTcClQbCoz0UbLhkiDvIS00Dn+BBcxw
+# /TKqVL4Oaz3bkMSsM46LciTeucHY9ExRVt3zy7i149sd+F4QozPqn7FrSVHXmem3
+# r7bjyHTxOgqxRCVa18Vtx7P/8bYSBeS+WHCKcliFCecspusCDSlnRUjZwyPdP0VH
+# xaZg2unjHY3rMYIRAjCCEP4CAQEwfTBpMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
+# RGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29k
+# ZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExAhAHHxQbizANJfMU6yMM
+# 0NHdMA0GCWCGSAFlAwQCAQUAoIHWMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE
+# MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCBn
+# AZ6P7YvTwq0fbF62o7E75R0LxsW5OtyYiFESQckLhjBqBgorBgEEAYI3AgEMMVww
+# WqBYgFYAQgB1AGkAbAB0ADoAIABSAGUAbABlAGEAcwBlAF8AYgB1AGkAbABkAGYA
+# aQB4AF8AdgAzAC4AMQAwAC4ANABfADIAMAAyADIAMAAzADIAMwAuADAAMjANBgkq
+# hkiG9w0BAQEFAASCAgAcEvETg2Xhn12WXdKe3tBaVv7GlhnKE3KIyIYicO7HekaL
+# xA56c/hiIuIkAGRuhbm++NMB/L7RYueQI8+ze8q4BoHLvH5lxR92twKr1RhKRbo3
+# rSj5zGPna6P7s677Nfw3WJ01RlOKF3ygJe+GRj3RpUR8aL2DM4pzydcVM2ihWzFy
+# CqsKCj3s/ELGiA3RQ0KVbZ9VO+r2/AsZdndYKCjxYL4PMiCver6+eeqhxkS0r7v0
+# Dv6/NJOPaC61Gcwi5lIfZRMOcMKPC18O6VmXbsDmh044BLfz3oE3oQsrq1AkUj4a
+# eguQAOZAy44a6um8/YoHOZ73ZJkxfnGWVRZlmHJbvx/KFK/MnXtDI1lW2OerCx4N
+# k1tRq9aHimmomsJvo4N10dCGMkDIWUPGJKTBvtvW3K+QWYzukvqADuQuuJPs67yF
+# oiKncZ7+51Qruo7qWxJeLJl7q2vzf8dPOwc/7SXiOhCjQqwxYvSB/xkSQ8xkl2Ve
+# 8lQlVjSCQG109Q8TvA2GKUXc3wnEC+hmSCz0lGRQ1jwHEk4wY73fxRocK4cmXqib
+# szuaj4C/IIue9npABx5K0eAwJ/JjiYc2CtrDJ1cPJz3Ho0UBpHdhND4s25oB9F5r
+# IihejiQumFRTIABC+gn8289gCoNK7MADZdigwW76/Jg/M1KWbpvBJuEJsoQim6GC
+# DX0wgg15BgorBgEEAYI3AwMBMYINaTCCDWUGCSqGSIb3DQEHAqCCDVYwgg1SAgED
+# MQ8wDQYJYIZIAWUDBAIBBQAwdwYLKoZIhvcNAQkQAQSgaARmMGQCAQEGCWCGSAGG
+# /WwHATAxMA0GCWCGSAFlAwQCAQUABCC0XTDkLGotxVA3SNZCglpIf43K7cFUZzmD
+# j6rKB6I4xgIQWaJlxfK8fWWZr5xb+dKEGhgPMjAyMjAzMjMyMzE5MjhaoIIKNzCC
+# BP4wggPmoAMCAQICEA1CSuC+Ooj/YEAhzhQA8N0wDQYJKoZIhvcNAQELBQAwcjEL
+# MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
+# LmRpZ2ljZXJ0LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElE
+# IFRpbWVzdGFtcGluZyBDQTAeFw0yMTAxMDEwMDAwMDBaFw0zMTAxMDYwMDAwMDBa
+# MEgxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjEgMB4GA1UE
+# AxMXRGlnaUNlcnQgVGltZXN0YW1wIDIwMjEwggEiMA0GCSqGSIb3DQEBAQUAA4IB
+# DwAwggEKAoIBAQDC5mGEZ8WK9Q0IpEXKY2tR1zoRQr0KdXVNlLQMULUmEP4dyG+R
+# awyW5xpcSO9E5b+bYc0VkWJauP9nC5xj/TZqgfop+N0rcIXeAhjzeG28ffnHbQk9
+# vmp2h+mKvfiEXR52yeTGdnY6U9HR01o2j8aj4S8bOrdh1nPsTm0zinxdRS1LsVDm
+# QTo3VobckyON91Al6GTm3dOPL1e1hyDrDo4s1SPa9E14RuMDgzEpSlwMMYpKjIjF
+# 9zBa+RSvFV9sQ0kJ/SYjU/aNY+gaq1uxHTDCm2mCtNv8VlS8H6GHq756WwogL0sJ
+# yZWnjbL61mOLTqVyHO6fegFz+BnW/g1JhL0BAgMBAAGjggG4MIIBtDAOBgNVHQ8B
+# Af8EBAMCB4AwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDBB
+# BgNVHSAEOjA4MDYGCWCGSAGG/WwHATApMCcGCCsGAQUFBwIBFhtodHRwOi8vd3d3
+# LmRpZ2ljZXJ0LmNvbS9DUFMwHwYDVR0jBBgwFoAU9LbhIB3+Ka7S5GGlsqIlssgX
+# NW4wHQYDVR0OBBYEFDZEho6kurBmvrwoLR1ENt3janq8MHEGA1UdHwRqMGgwMqAw
+# oC6GLGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtdHMuY3Js
+# MDKgMKAuhixodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVkLXRz
+# LmNybDCBhQYIKwYBBQUHAQEEeTB3MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5k
+# aWdpY2VydC5jb20wTwYIKwYBBQUHMAKGQ2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0
+# LmNvbS9EaWdpQ2VydFNIQTJBc3N1cmVkSURUaW1lc3RhbXBpbmdDQS5jcnQwDQYJ
+# KoZIhvcNAQELBQADggEBAEgc3LXpmiO85xrnIA6OZ0b9QnJRdAojR6OrktIlxHBZ
+# vhSg5SeBpU0UFRkHefDRBMOG2Tu9/kQCZk3taaQP9rhwz2Lo9VFKeHk2eie38+dS
+# n5On7UOee+e03UEiifuHokYDTvz0/rdkd2NfI1Jpg4L6GlPtkMyNoRdzDfTzZTlw
+# S/Oc1np72gy8PTLQG8v1Yfx1CAB2vIEO+MDhXM/EEXLnG2RJ2CKadRVC9S0yOIHa
+# 9GCiurRS+1zgYSQlT7LfySmoc0NR2r1j1h9bm/cuG08THfdKDXF+l7f0P4TrweOj
+# SaH6zqe/Vs+6WXZhiV9+p7SOZ3j5NpjhyyjaW4emii8wggUxMIIEGaADAgECAhAK
+# oSXW1jIbfkHkBdo2l8IVMA0GCSqGSIb3DQEBCwUAMGUxCzAJBgNVBAYTAlVTMRUw
+# EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x
+# JDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0xNjAxMDcx
+# MjAwMDBaFw0zMTAxMDcxMjAwMDBaMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxE
+# aWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMT
+# KERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBpbmcgQ0EwggEiMA0G
+# CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC90DLuS82Pf92puoKZxTlUKFe2I0rE
+# DgdFM1EQfdD5fU1ofue2oPSNs4jkl79jIZCYvxO8V9PD4X4I1moUADj3Lh477sym
+# 9jJZ/l9lP+Cb6+NGRwYaVX4LJ37AovWg4N4iPw7/fpX786O6Ij4YrBHk8JkDbTuF
+# fAnT7l3ImgtU46gJcWvgzyIQD3XPcXJOCq3fQDpct1HhoXkUxk0kIzBdvOw8YGqs
+# LwfM/fDqR9mIUF79Zm5WYScpiYRR5oLnRlD9lCosp+R1PrqYD4R/nzEU1q3V8mTL
+# ex4F0IQZchfxFwbvPc3WTe8GQv2iUypPhR3EHTyvz9qsEPXdrKzpVv+TAgMBAAGj
+# ggHOMIIByjAdBgNVHQ4EFgQU9LbhIB3+Ka7S5GGlsqIlssgXNW4wHwYDVR0jBBgw
+# FoAUReuir/SSy4IxLVGLp6chnfNtyA8wEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNV
+# HQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwgweQYIKwYBBQUHAQEEbTBr
+# MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUH
+# MAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJ
+# RFJvb3RDQS5jcnQwgYEGA1UdHwR6MHgwOqA4oDaGNGh0dHA6Ly9jcmw0LmRpZ2lj
+# ZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmwwOqA4oDaGNGh0dHA6
+# Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcmww
+# UAYDVR0gBEkwRzA4BgpghkgBhv1sAAIEMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8v
+# d3d3LmRpZ2ljZXJ0LmNvbS9DUFMwCwYJYIZIAYb9bAcBMA0GCSqGSIb3DQEBCwUA
+# A4IBAQBxlRLpUYdWac3v3dp8qmN6s3jPBjdAhO9LhL/KzwMC/cWnww4gQiyvd/Mr
+# HwwhWiq3BTQdaq6Z+CeiZr8JqmDfdqQ6kw/4stHYfBli6F6CJR7Euhx7LCHi1lss
+# FDVDBGiy23UC4HLHmNY8ZOUfSBAYX4k4YU1iRiSHY4yRUiyvKYnleB/WCxSlgNcS
+# R3CzddWThZN+tpJn+1Nhiaj1a5bA9FhpDXzIAbG5KHW3mWOFIoxhynmUfln8jA/j
+# b7UBJrZspe6HUSHkWGCbugwtK22ixH67xCUrRwIIfEmuE7bhfEJCKMYYVs9BNLZm
+# XbZ0e/VWMyIvIjayS6JKldj1po5SMYIChjCCAoICAQEwgYYwcjELMAkGA1UEBhMC
+# VVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0
+# LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBBc3N1cmVkIElEIFRpbWVzdGFt
+# cGluZyBDQQIQDUJK4L46iP9gQCHOFADw3TANBglghkgBZQMEAgEFAKCB0TAaBgkq
+# hkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIyMDMyMzIz
+# MTkyOFowKwYLKoZIhvcNAQkQAgwxHDAaMBgwFgQU4deCqOGRvu9ryhaRtaq0lKYk
+# m/MwLwYJKoZIhvcNAQkEMSIEIHNTJ07DMb66i/CvfgCQwd6w8vfBx22bam2qmc9M
+# uGZaMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEILMQkAa8CtmDB5FXKeBEA0Fcg+Mp
+# K2FPJpZMjTVx7PWpMA0GCSqGSIb3DQEBAQUABIIBAHon6BMHxuQFoPSgk2hY0LY8
+# iYSY/wzH+juGLxHQ8DQP7CHbPiIvftqXgEK9VgVLxjk+e+O2+/6zdUzhg1q0N+1W
+# RR0AvTl3Kv6ISCmG8HrcnC33q2OgPKLYhPZy0WBv0bZGfZzVnFMGmWjmBUmovqKG
+# mSvf+8yV58oAwASWRNXJE1Ut4bR8qjCLZ31Uh+L/YQRVrYCvmUS09rrufBAAjzbC
+# 1Uir2Pea4OE5jneMOvHAg29Nsh2GzUjPeKqHw4Dkv1ED0+3jbxOd5iGBi8ZXn9Us
+# mhxC+BxAf/7oN9038H/22cT9ec1QUce7UapZaDZlGO1uhFNzHR/RTpn62Ol4iWM=
+# SIG # End signature block
diff --git a/fastapi1/Scripts/activate b/fastapi1/Scripts/activate
new file mode 100644
index 000000000..bba91712d
--- /dev/null
+++ b/fastapi1/Scripts/activate
@@ -0,0 +1,69 @@
+# This file must be used with "source bin/activate" *from bash*
+# you cannot run it directly
+
+deactivate () {
+ # reset old environment variables
+ if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then
+ PATH="${_OLD_VIRTUAL_PATH:-}"
+ export PATH
+ unset _OLD_VIRTUAL_PATH
+ fi
+ if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then
+ PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}"
+ export PYTHONHOME
+ unset _OLD_VIRTUAL_PYTHONHOME
+ fi
+
+ # This should detect bash and zsh, which have a hash command that must
+ # be called to get it to forget past commands. Without forgetting
+ # past commands the $PATH changes we made may not be respected
+ if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
+ hash -r 2> /dev/null
+ fi
+
+ if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
+ PS1="${_OLD_VIRTUAL_PS1:-}"
+ export PS1
+ unset _OLD_VIRTUAL_PS1
+ fi
+
+ unset VIRTUAL_ENV
+ unset VIRTUAL_ENV_PROMPT
+ if [ ! "${1:-}" = "nondestructive" ] ; then
+ # Self destruct!
+ unset -f deactivate
+ fi
+}
+
+# unset irrelevant variables
+deactivate nondestructive
+
+VIRTUAL_ENV="F:\open-source\fastapi\fastapi1"
+export VIRTUAL_ENV
+
+_OLD_VIRTUAL_PATH="$PATH"
+PATH="$VIRTUAL_ENV/Scripts:$PATH"
+export PATH
+
+# unset PYTHONHOME if set
+# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
+# could use `if (set -u; : $PYTHONHOME) ;` in bash
+if [ -n "${PYTHONHOME:-}" ] ; then
+ _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}"
+ unset PYTHONHOME
+fi
+
+if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
+ _OLD_VIRTUAL_PS1="${PS1:-}"
+ PS1="(fastapi1) ${PS1:-}"
+ export PS1
+ VIRTUAL_ENV_PROMPT="(fastapi1) "
+ export VIRTUAL_ENV_PROMPT
+fi
+
+# This should detect bash and zsh, which have a hash command that must
+# be called to get it to forget past commands. Without forgetting
+# past commands the $PATH changes we made may not be respected
+if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
+ hash -r 2> /dev/null
+fi
diff --git a/fastapi1/Scripts/activate.bat b/fastapi1/Scripts/activate.bat
new file mode 100644
index 000000000..cf69cd440
--- /dev/null
+++ b/fastapi1/Scripts/activate.bat
@@ -0,0 +1,34 @@
+@echo off
+
+rem This file is UTF-8 encoded, so we need to update the current code page while executing it
+for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do (
+ set _OLD_CODEPAGE=%%a
+)
+if defined _OLD_CODEPAGE (
+ "%SystemRoot%\System32\chcp.com" 65001 > nul
+)
+
+set VIRTUAL_ENV=F:\open-source\fastapi\fastapi1
+
+if not defined PROMPT set PROMPT=$P$G
+
+if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT%
+if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%
+
+set _OLD_VIRTUAL_PROMPT=%PROMPT%
+set PROMPT=(fastapi1) %PROMPT%
+
+if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%
+set PYTHONHOME=
+
+if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH%
+if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH%
+
+set PATH=%VIRTUAL_ENV%\Scripts;%PATH%
+set VIRTUAL_ENV_PROMPT=(fastapi1)
+
+:END
+if defined _OLD_CODEPAGE (
+ "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul
+ set _OLD_CODEPAGE=
+)
diff --git a/fastapi1/Scripts/black.exe b/fastapi1/Scripts/black.exe
new file mode 100644
index 000000000..e636e662f
Binary files /dev/null and b/fastapi1/Scripts/black.exe differ
diff --git a/fastapi1/Scripts/blackd.exe b/fastapi1/Scripts/blackd.exe
new file mode 100644
index 000000000..03ced193d
Binary files /dev/null and b/fastapi1/Scripts/blackd.exe differ
diff --git a/fastapi1/Scripts/cairosvg.exe b/fastapi1/Scripts/cairosvg.exe
new file mode 100644
index 000000000..afa427174
Binary files /dev/null and b/fastapi1/Scripts/cairosvg.exe differ
diff --git a/fastapi1/Scripts/coverage-3.10.exe b/fastapi1/Scripts/coverage-3.10.exe
new file mode 100644
index 000000000..251d11222
Binary files /dev/null and b/fastapi1/Scripts/coverage-3.10.exe differ
diff --git a/fastapi1/Scripts/coverage.exe b/fastapi1/Scripts/coverage.exe
new file mode 100644
index 000000000..251d11222
Binary files /dev/null and b/fastapi1/Scripts/coverage.exe differ
diff --git a/fastapi1/Scripts/coverage3.exe b/fastapi1/Scripts/coverage3.exe
new file mode 100644
index 000000000..251d11222
Binary files /dev/null and b/fastapi1/Scripts/coverage3.exe differ
diff --git a/fastapi1/Scripts/deactivate.bat b/fastapi1/Scripts/deactivate.bat
new file mode 100644
index 000000000..62a39a758
--- /dev/null
+++ b/fastapi1/Scripts/deactivate.bat
@@ -0,0 +1,22 @@
+@echo off
+
+if defined _OLD_VIRTUAL_PROMPT (
+ set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
+)
+set _OLD_VIRTUAL_PROMPT=
+
+if defined _OLD_VIRTUAL_PYTHONHOME (
+ set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%"
+ set _OLD_VIRTUAL_PYTHONHOME=
+)
+
+if defined _OLD_VIRTUAL_PATH (
+ set "PATH=%_OLD_VIRTUAL_PATH%"
+)
+
+set _OLD_VIRTUAL_PATH=
+
+set VIRTUAL_ENV=
+set VIRTUAL_ENV_PROMPT=
+
+:END
diff --git a/fastapi1/Scripts/dmypy.exe b/fastapi1/Scripts/dmypy.exe
new file mode 100644
index 000000000..c3d427f6e
Binary files /dev/null and b/fastapi1/Scripts/dmypy.exe differ
diff --git a/fastapi1/Scripts/dotenv.exe b/fastapi1/Scripts/dotenv.exe
new file mode 100644
index 000000000..9c9fc2857
Binary files /dev/null and b/fastapi1/Scripts/dotenv.exe differ
diff --git a/fastapi1/Scripts/email_validator.exe b/fastapi1/Scripts/email_validator.exe
new file mode 100644
index 000000000..f98b71e16
Binary files /dev/null and b/fastapi1/Scripts/email_validator.exe differ
diff --git a/fastapi1/Scripts/fastapi.exe b/fastapi1/Scripts/fastapi.exe
new file mode 100644
index 000000000..e1acfe9d6
Binary files /dev/null and b/fastapi1/Scripts/fastapi.exe differ
diff --git a/fastapi1/Scripts/flask.exe b/fastapi1/Scripts/flask.exe
new file mode 100644
index 000000000..aba707882
Binary files /dev/null and b/fastapi1/Scripts/flask.exe differ
diff --git a/fastapi1/Scripts/ghp-import.exe b/fastapi1/Scripts/ghp-import.exe
new file mode 100644
index 000000000..e93d02822
Binary files /dev/null and b/fastapi1/Scripts/ghp-import.exe differ
diff --git a/fastapi1/Scripts/griffe.exe b/fastapi1/Scripts/griffe.exe
new file mode 100644
index 000000000..b50f60e5b
Binary files /dev/null and b/fastapi1/Scripts/griffe.exe differ
diff --git a/fastapi1/Scripts/hjson.exe b/fastapi1/Scripts/hjson.exe
new file mode 100644
index 000000000..8ba553eee
Binary files /dev/null and b/fastapi1/Scripts/hjson.exe differ
diff --git a/fastapi1/Scripts/httpx.exe b/fastapi1/Scripts/httpx.exe
new file mode 100644
index 000000000..45e315377
Binary files /dev/null and b/fastapi1/Scripts/httpx.exe differ
diff --git a/fastapi1/Scripts/identify-cli.exe b/fastapi1/Scripts/identify-cli.exe
new file mode 100644
index 000000000..05b45f1e5
Binary files /dev/null and b/fastapi1/Scripts/identify-cli.exe differ
diff --git a/fastapi1/Scripts/markdown-it.exe b/fastapi1/Scripts/markdown-it.exe
new file mode 100644
index 000000000..051fd2a96
Binary files /dev/null and b/fastapi1/Scripts/markdown-it.exe differ
diff --git a/fastapi1/Scripts/markdown_py.exe b/fastapi1/Scripts/markdown_py.exe
new file mode 100644
index 000000000..681a45d6b
Binary files /dev/null and b/fastapi1/Scripts/markdown_py.exe differ
diff --git a/fastapi1/Scripts/mkdocs-get-deps.exe b/fastapi1/Scripts/mkdocs-get-deps.exe
new file mode 100644
index 000000000..f62255eff
Binary files /dev/null and b/fastapi1/Scripts/mkdocs-get-deps.exe differ
diff --git a/fastapi1/Scripts/mkdocs.exe b/fastapi1/Scripts/mkdocs.exe
new file mode 100644
index 000000000..19e741af3
Binary files /dev/null and b/fastapi1/Scripts/mkdocs.exe differ
diff --git a/fastapi1/Scripts/mypy.exe b/fastapi1/Scripts/mypy.exe
new file mode 100644
index 000000000..21904c601
Binary files /dev/null and b/fastapi1/Scripts/mypy.exe differ
diff --git a/fastapi1/Scripts/mypyc.exe b/fastapi1/Scripts/mypyc.exe
new file mode 100644
index 000000000..b9f64658c
Binary files /dev/null and b/fastapi1/Scripts/mypyc.exe differ
diff --git a/fastapi1/Scripts/nodeenv.exe b/fastapi1/Scripts/nodeenv.exe
new file mode 100644
index 000000000..a4364bc43
Binary files /dev/null and b/fastapi1/Scripts/nodeenv.exe differ
diff --git a/fastapi1/Scripts/normalizer.exe b/fastapi1/Scripts/normalizer.exe
new file mode 100644
index 000000000..f1fe641ac
Binary files /dev/null and b/fastapi1/Scripts/normalizer.exe differ
diff --git a/fastapi1/Scripts/pip.exe b/fastapi1/Scripts/pip.exe
new file mode 100644
index 000000000..064866eaa
Binary files /dev/null and b/fastapi1/Scripts/pip.exe differ
diff --git a/fastapi1/Scripts/pip3.10.exe b/fastapi1/Scripts/pip3.10.exe
new file mode 100644
index 000000000..064866eaa
Binary files /dev/null and b/fastapi1/Scripts/pip3.10.exe differ
diff --git a/fastapi1/Scripts/pip3.exe b/fastapi1/Scripts/pip3.exe
new file mode 100644
index 000000000..064866eaa
Binary files /dev/null and b/fastapi1/Scripts/pip3.exe differ
diff --git a/fastapi1/Scripts/playwright.exe b/fastapi1/Scripts/playwright.exe
new file mode 100644
index 000000000..6712491f3
Binary files /dev/null and b/fastapi1/Scripts/playwright.exe differ
diff --git a/fastapi1/Scripts/pre-commit.exe b/fastapi1/Scripts/pre-commit.exe
new file mode 100644
index 000000000..e1f3d5196
Binary files /dev/null and b/fastapi1/Scripts/pre-commit.exe differ
diff --git a/fastapi1/Scripts/py.test.exe b/fastapi1/Scripts/py.test.exe
new file mode 100644
index 000000000..c1c2c13a9
Binary files /dev/null and b/fastapi1/Scripts/py.test.exe differ
diff --git a/fastapi1/Scripts/pybabel.exe b/fastapi1/Scripts/pybabel.exe
new file mode 100644
index 000000000..cfc403f24
Binary files /dev/null and b/fastapi1/Scripts/pybabel.exe differ
diff --git a/fastapi1/Scripts/pygmentize.exe b/fastapi1/Scripts/pygmentize.exe
new file mode 100644
index 000000000..58513417c
Binary files /dev/null and b/fastapi1/Scripts/pygmentize.exe differ
diff --git a/fastapi1/Scripts/pytest.exe b/fastapi1/Scripts/pytest.exe
new file mode 100644
index 000000000..c1c2c13a9
Binary files /dev/null and b/fastapi1/Scripts/pytest.exe differ
diff --git a/fastapi1/Scripts/python.exe b/fastapi1/Scripts/python.exe
new file mode 100644
index 000000000..79b1512a0
Binary files /dev/null and b/fastapi1/Scripts/python.exe differ
diff --git a/fastapi1/Scripts/pythonw.exe b/fastapi1/Scripts/pythonw.exe
new file mode 100644
index 000000000..4fcaeb30b
Binary files /dev/null and b/fastapi1/Scripts/pythonw.exe differ
diff --git a/fastapi1/Scripts/ruff.exe b/fastapi1/Scripts/ruff.exe
new file mode 100644
index 000000000..8c52c61e8
Binary files /dev/null and b/fastapi1/Scripts/ruff.exe differ
diff --git a/fastapi1/Scripts/stubgen.exe b/fastapi1/Scripts/stubgen.exe
new file mode 100644
index 000000000..30b5e24ea
Binary files /dev/null and b/fastapi1/Scripts/stubgen.exe differ
diff --git a/fastapi1/Scripts/stubtest.exe b/fastapi1/Scripts/stubtest.exe
new file mode 100644
index 000000000..e0c39fc25
Binary files /dev/null and b/fastapi1/Scripts/stubtest.exe differ
diff --git a/fastapi1/Scripts/typer.exe b/fastapi1/Scripts/typer.exe
new file mode 100644
index 000000000..02d60a0e4
Binary files /dev/null and b/fastapi1/Scripts/typer.exe differ
diff --git a/fastapi1/Scripts/uvicorn.exe b/fastapi1/Scripts/uvicorn.exe
new file mode 100644
index 000000000..c1a962d60
Binary files /dev/null and b/fastapi1/Scripts/uvicorn.exe differ
diff --git a/fastapi1/Scripts/virtualenv.exe b/fastapi1/Scripts/virtualenv.exe
new file mode 100644
index 000000000..d7a52a47a
Binary files /dev/null and b/fastapi1/Scripts/virtualenv.exe differ
diff --git a/fastapi1/Scripts/watchfiles.exe b/fastapi1/Scripts/watchfiles.exe
new file mode 100644
index 000000000..10f5a154c
Binary files /dev/null and b/fastapi1/Scripts/watchfiles.exe differ
diff --git a/fastapi1/Scripts/watchmedo.exe b/fastapi1/Scripts/watchmedo.exe
new file mode 100644
index 000000000..1a8d1ce3f
Binary files /dev/null and b/fastapi1/Scripts/watchmedo.exe differ
diff --git a/fastapi1/Scripts/websockets.exe b/fastapi1/Scripts/websockets.exe
new file mode 100644
index 000000000..15c36d67d
Binary files /dev/null and b/fastapi1/Scripts/websockets.exe differ
diff --git a/fastapi1/pyvenv.cfg b/fastapi1/pyvenv.cfg
new file mode 100644
index 000000000..2267d3ead
--- /dev/null
+++ b/fastapi1/pyvenv.cfg
@@ -0,0 +1,3 @@
+home = C:\Users\user\AppData\Local\Programs\Python\Python310
+include-system-site-packages = false
+version = 3.10.4